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)
Create your UPX account
Sign up on the UPX portal and subscribe to a plan.
Connect your bank(s)
Bank authorization happens inside your bank's own secure widget, UPX never sees or stores your bank login.
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
Settings → Connectors → Add custom connector → paste the URL → Connect, then complete the sign-in/authorize window.
https://mcp.upx.com/mcp
ChatGPT
Settings → Connectors → enable MCP mode → Create/Add → paste the URL → Authentication: OAuth → confirm.
https://mcp.upx.com/
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
| Scope | Grants access to | Step-up MFA |
|---|---|---|
| finance:read:accounts | Connections & health, accounts, balances | — |
| finance:read:transactions | Transactions and spending summaries | — |
| finance:read:credit | Credit-card bills/statements and liabilities | — |
| finance:read:investments | Investment holdings and investment transactions | Yes |
| finance:read:identity | Account-owner identity attributes | Yes |
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.
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.”
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?”
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?”
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?”
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?”
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?”
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?”
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?”
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?”
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 separatedirection. - •
formatted, render this; don't recompute it. - •
nullmeans unknown.amount: 0is a real zero. Never sum across currencies.
Standard response envelope
| Field | Description |
|---|---|
| status | Success, Partial, or Failed |
| as_of | When the underlying data was fetched (freshness) |
| freshness_state | live, cache, stale, or provider_unavailable |
| service_notice | Our-side status of this result |
| usage | On billable tools: remaining quota |
| next_steps | Suggested actions |
| diagnostics | Per-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.
// Catalog
Machine-readable catalog
The runtime publishes its own catalog. Treat these as the canonical source of truth, reconcile this page against them when tools change.
Tool manifest
Names, scopes, parameters, and response schema refs for all tools.
GET https://mcp.upx.com/external/v1/tools.json
OpenAPI
OpenAPI document for the public surface.
GET https://mcp.upx.com/external/v1/openapi.json
Interactive reference
Interactive API documentation to explore tools and test parameters.
https://mcp.upx.com/external/v1/docs
OAuth discovery
Authorization server and supported scopes, auto-read by your MCP host during authentication.
GET https://mcp.upx.com/.well-known/oauth-protected-resource
Good to know
null ≠ zero
null means unknown, never a fabricated 0. Detail availability varies by institution and region.
No FX conversion
Never sum across currencies. Aggregate per currency and use currency_code fields to separate them.
Page-scoped summaries
page_summary covers only the current page, page through and sum for a window total, or use finance_transactions_summary for one account.
Regional differences
Regional differences exist (e.g. credit-card statement history vs current cycle). Described by region, not by data source.
// 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.
Host-specific quickstart
Configure Claude, ChatGPT, Cursor, or any MCP-compatible host using the same secure endpoint.
Prompts and patterns
Use ready examples for account discovery, spend analysis, bills, investments, and next-step suggestions.
Machine catalog
Validate tool names, scopes, parameters, and schemas directly from the manifest and OpenAPI published by the runtime.
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.