Documentation

// Protocol

What is MCP?

The Model Context Protocol (MCP) is an open standard that lets AI applications connect to external tools and data in a uniform way. Think of it as a standard port for AI: instead of every assistant building a bespoke integration, an assistant that "speaks MCP" can plug into any MCP server.

Host

The AI application you use (e.g. Claude, ChatGPT, Cursor). It runs the model and decides when to call a tool.

Client

The connector inside the host that maintains a session with one MCP server. Handles transport and authentication.

Server: UPX Secure Financial MCP

A service that exposes tools, named functions with typed inputs and outputs, that an AI host can call to read your financial data.

To learn more about the protocol, see modelcontextprotocol.io.

// Overview

UPX Secure Financial MCP

UPX Secure Financial MCP gives your AI assistant secure, read-only access to your financial data so it can answer questions like "what's my balance?", "how much did I spend last month?", "when is my card bill due?", or "how is my portfolio doing?".

Read-only

The tools only read data. Nothing can move money or change your accounts. No write, transfer, or payment operations.

Your data, from your institutions

Data originates from the banks and financial institutions you connect. We currently support institutions in Brazil and the United States.

Not a system of record

The runtime does not durably store your financial data. Every response is freshness-stamped so the assistant knows how current the data is.

One normalized shape

Accounts, transactions, and amounts are returned in a single normalized shape regardless of region. Money is always a structured object; null means unknown, never a fabricated 0.

// Use cases

What you can build

Use UPX Secure Financial MCP as the consented financial data layer for agents, copilots, and automations that need to query real accounts safely.

Financial copilots

Answer questions about balances, spend, card bills, debts, investments, and cash flow using real banking data.

Close and audit workflows

Build agents for month-end close, duplicate charge detection, forgotten subscriptions, and spend anomaly reviews.

International products

Build for users with accounts in Brazil and the US while keeping one response, auth, and freshness model.

Developer positioning: infrastructure for financial agents built on real, consented, regulated, read-only banking data.

// Security model

Auditable by design.

UPX Secure Financial MCP is designed so developers can inspect the access surface, not just trust a marketing promise.

No write endpoints

The AI receives no tools for transfers, payments, profile changes, or money movement. Their absence is visible in the tool manifest.

Consent and least-privilege scopes

OAuth governs each access path through read scopes. Investments and identity can require step-up MFA before exposing more sensitive data.

Freshness on every response

Every result includes as_of, freshness_state, and service notices so the agent knows when to trust, warn, or retry.

Built by a cybersecurity company

UPX brings more than 20 years of experience protecting critical environments. Financial MCP is built with that discipline: limited, traceable, and revocable access.

Multi-jurisdiction compliance

Designed for financial products serving users in Brazil and the United States, with LGPD and GLBA alignment and coverage across financial institutions in those markets.

// Getting started

Setup in under 5 minutes

Two steps: a one-time account setup in the UPX portal, then pointing your AI host at the endpoint.

1. One-time setup (UPX portal)

1

Create your UPX account

Sign up on the UPX portal and subscribe to a plan.

2

Connect your bank(s)

Bank authorization happens inside your bank's own secure widget, UPX never sees or stores your bank login.

3

Create an access credential

Complete the OAuth flow from the client (recommended) or issue a Personal Access Token (PAT) in the portal.

2. Endpoint

Point your MCP host at the single UPX MCP endpoint:

https://mcp.upx.com

Path note: Some hosts expect the base URL https://mcp.upx.com/ (e.g. ChatGPT). Others expect the /mcp path, https://mcp.upx.com/mcp (e.g. Claude, Cursor). You always use the same host, there are no per-product subdomains.

Connecting popular hosts

Claude logo

Claude

Settings → Connectors → Add custom connector → paste the URL → Connect, then complete the sign-in/authorize window.

https://mcp.upx.com/mcp

ChatGPT logo

ChatGPT

Settings → Connectors → enable MCP mode → Create/Add → paste the URL → Authentication: OAuth → confirm.

https://mcp.upx.com/

Cursor / other hosts logo

Cursor / other hosts

Add a remote MCP server pointing at the endpoint with your bearer token.

https://mcp.upx.com/mcp

Your first prompts

  • > List my bank connections and tell me which ones need attention.
  • > What are my account balances?
  • > How much did I spend last month, broken down by category?
  • > When is my next credit-card bill due?

// Security

Authentication & scopes

Access is governed by OAuth read scopes. A token only grants the scopes you consented to, and a tool runs only if your token carries the scope it requires.

OAuth 2.0 (recommended)

Your AI host runs a standard OAuth flow; you sign in and consent to scopes. The host receives a short-lived access token (refreshed automatically). Discover the authorization server via:

GET https://mcp.upx.com/.well-known/oauth-protected-resource

Personal Access Token (PAT)

Create a long-lived token in the portal, scoped to the permissions you choose, and paste it into your AI client's connector configuration.

Authorization: Bearer <token>

Available scopes

ScopeGrants access toStep-up MFA
finance:read:accountsConnections & health, accounts, balances
finance:read:transactionsTransactions and spending summaries
finance:read:creditCredit-card bills/statements and liabilities
finance:read:investmentsInvestment holdings and investment transactionsYes
finance:read:identityAccount-owner identity attributesYes

Recommended default set for a general finance assistant (covers balances, spending, and card bills without triggering step-up MFA):

finance:read:accounts finance:read:transactions finance:read:credit

// Reference

Tools (10)

Start with finance_connections_list to discover connection_ids, then pass a connection_id to the other tools to scope a read to a single institution. Omit to fan out across all of your connections.

read-onlybillable = consumes plan quotaMFA = step-up authenticationpaginated
finance_connections_listread-onlyfree

Lists the customer's connected institutions and their health. A connection is one bank authorization (one login/consent) and may expose several accounts.

Scope: finance:read:accounts

“Which of my banks need attention?” · “List my connected accounts.”

finance_accounts_listread-onlybillable

Lists accounts and balances, for net-worth, balance, and account-inventory questions. Supports real-time balance with live_balance: true.

Scope: finance:read:accounts

“What's my balance?” · “What's my net worth?”

finance_transactions_listread-onlybillablepaginated

Lists posted/pending transactions, for spend, cashflow, and category analysis. Cursor-based pagination, configurable date window.

Scope: finance:read:transactions

“How much did I spend last month?” · “Which charges are still pending?”

finance_transactions_summaryread-onlybillable

Aggregates one account over a date window into a verified, non-paginated summary, use this instead of paging hundreds of rows yourself. Max 1 year per call.

Scope: finance:read:transactions

“How much did this account move last year?” · “Who do I pay the most?”

finance_card-bills_listread-onlybillable

Lists credit-card statement summaries, for billing, statement-total, and due-date questions. Regional coverage: full statement history in Brazil; current cycle only in the US.

Scope: finance:read:credit

“When is my card bill due?” · “What's my statement total?”

finance_liabilities_listread-onlybillable

Lists liabilities, loans, mortgages, student loans, and credit cards, for debt, balance-owed, and loan-term questions. balance = current amount owed.

Scope: finance:read:credit

“How much do I owe?” · “When is my next payment?”

finance_investments_listread-onlybillableMFA

Lists investment holdings and snapshots, for portfolio, position, and asset-allocation questions. Use holding_id as the unique row key.

Scope: finance:read:investments (step-up MFA)

“How is my portfolio doing?” · “What's my asset allocation?”

finance_investment-transactions_listread-onlybillableMFApaginated

Lists investment activity (buys, sells, contributions), for trade-history and contribution questions.

Scope: finance:read:investments (step-up MFA)

“What did I buy or sell?” · “How much did I invest this year?”

finance_identity_readread-onlybillableMFA

Reads provider-supplied account-owner identity attributes, for KYC and account-owner questions. Detailed fields available under the full scope.

Scope: finance:read:identity (step-up MFA)

“Whose account is this?” · “What's the account holder's contact info?”

finance_suggestions_listread-onlyfree

Lists proactive, ranked next-step suggestions for the customer, e.g. connect a first bank, reconnect an expired connection, or try a useful question. Derived from the customer's current state, not bank data.

Scope: finance:read:accounts

“What should I do next?” · “Is anything pending on my account?”

// Conventions

Response conventions

All tools share a consistent response envelope and a few common types, documented once here.

The Money object

Every monetary value is an object, never a bare number:

{
  "amount":        2901.99,
  "currency_code": "BRL",
  "formatted":     "R$ 2,901.99"
}
  • amount, positive magnitude. Direction carried by a separate direction.
  • formatted, render this; don't recompute it.
  • null means unknown. amount: 0 is a real zero. Never sum across currencies.

Standard response envelope

FieldDescription
statusSuccess, Partial, or Failed
as_ofWhen the underlying data was fetched (freshness)
freshness_statelive, cache, stale, or provider_unavailable
service_noticeOur-side status of this result
usageOn billable tools: remaining quota
next_stepsSuggested actions
diagnosticsPer-connection issues on multi-connection reads

Pagination

Paginated tools include a pagination object:

{
  "has_more":       true,
  "next_cursor":    "eyJ…",
  "page_size":      50,
  "returned_count": 50
}

Follow next_cursor until has_more: false. page_size defaults to 50, max 500. Replay a cursor with identical filters, changing scope mid-sequence is rejected.

Billable tools & usage

On a successful billable call the response includes:

{
  "remaining":  42,
  "limit":      50,
  "period_end": "2026-06-01T00:00:00Z"
}

finance_connections_list and finance_suggestions_list are free and carry no usage charge.

// Cache & data

Freshness & caching

Because the runtime doesn't durably store your data, every response tells you how fresh it is via as_of and freshness_state.

live

Fetched live from your institution in this request. Trust fully.

cache

Served from a recent cache (≤ 1 hour old). Reliable.

stale

Cache older than the freshness window, or the institution was unreachable. Use with caution; may be outdated.

provider_unavailable

No data, the institution is unavailable and no cache exists. Retry later.

Data is cached for at most 1 hour and refreshed in the background. cache_age_seconds tells you how old a cached value is; next_refresh_hint_seconds hints when fresher data is expected.

// Error handling

Errors & limits

When a call can't be served, the tool returns a structured error envelope designed so an assistant can explain the problem and offer a concrete next step.

Error envelope shape

{
  "code":              "entitlement.denied.quota_exceeded",
  "message":           "You have reached your plan's usage limit.",
  "category":          "ENTITLEMENT_DENIED",
  "request_id":        "req_01HV…",
  "retry_after":       3600,
  "support_reference": "REQ-01HV-7Q3M-2X8N",
  "next_steps": [
    { "action": "wait_quota_reset", "period_end": "2026-06-01T00:00:00Z" },
    { "action": "upgrade_plan", "url": "https://…" }
  ]
}

Error categories

UNAUTHENTICATED

Missing/expired/invalid credential. Re-authenticate.

SCOPE_REJECTED

Token lacks the required scope. Re-consent with the required scope.

ENTITLEMENT_DENIED

Plan/quota/subscription limit. See next_steps.

RATE_LIMIT

Too many requests. Back off and retry after retry_after.

INVALID_PARAMETERS

Parameters failed validation. Fix the request.

PROVIDER_DEGRADED

Upstream data source degraded; cached/partial data served.

PROVIDER_UNAVAILABLE

Upstream data source unavailable. Retry after retry_after.

READ_ONLY

A write was attempted, not supported by design.

INTERNAL

Unexpected runtime fault. Retry; if it persists, contact support with support_reference.

// Developer resources

Start with the inspectable surface.

This page combines human documentation with machine-readable resources so product, security, and engineering teams can review the integration.

1

Host-specific quickstart

Configure Claude, ChatGPT, Cursor, or any MCP-compatible host using the same secure endpoint.

2

Prompts and patterns

Use ready examples for account discovery, spend analysis, bills, investments, and next-step suggestions.

3

Machine catalog

Validate tool names, scopes, parameters, and schemas directly from the manifest and OpenAPI published by the runtime.

Coming soon

Public API for financial agents

Soon, developers will be able to build custom financial agents on top of UPX Secure Financial MCP infrastructure. The long-term vision includes community templates and a simple layer for connecting AI to consented financial data.