Interacts with Pane, a hosted MCP server for personal finance data. Provides tools to query bank accounts, transactions, balances, spending summaries, recurring payments, investments, liabilities, and crypto holdings linked via Plaid. Also supports read/write annotations for saving notes on transactions, merchants, accounts, and user profiles. Use when the user asks about their finances, bank accounts, spending, budgets, net worth, subscriptions, bills, income, investments, loans, or crypto — or when Pane MCP tools are available in the environment.
Pane is a hosted MCP server that gives you access to a user's linked financial accounts via Plaid. You can read accounts, transactions, balances, spending summaries, recurring payments, investments, liabilities, and crypto holdings. You can also write and manage annotations — persistent notes attached to transactions, merchants, accounts, or the user's profile.
Pane exposes 11 tools and 3 resources. Start by reading the pane://profile resource to understand the user's financial overview, then use tools to drill into specifics.
Typical first interaction:
pane://profile for account summary, net worth, top spending categoriesget_accounts to see all linked accounts with balances| Tool | Purpose | Key parameters |
|---|---|---|
get_accounts | List linked accounts with balances | type (checking, savings, credit, investment, loan, crypto, all) |
get_transactions | Search and filter transactions | account_id, start_date, end_date, category, search, min_amount, max_amount, limit, offset |
get_balances | Current balances with net worth summary | type |
get_spending_summary | Spending grouped by category, merchant, week, or month | period or start_date+end_date, group_by, account_id |
get_recurring | Subscriptions, bills, and income streams | type (subscriptions, bills, income, all) |
get_investments | Investment holdings and portfolio value | account_id |
get_liabilities | Credit, student loan, and mortgage details | type (credit, student, mortgage, all) |
get_crypto | Crypto holdings across exchange accounts and on-chain wallets | wallet_id, blockchain (ethereum, solana, all) |
| Tool | Purpose | Key parameters |
|---|---|---|
write_annotation | Save a note on a transaction, merchant, account, or profile | scope, target_id, content |
list_annotations | List saved annotations with optional filtering | scope, target_id, limit, offset |
delete_annotation | Delete an annotation by ID | annotation_id |
For complete parameter schemas and return types, see references/tools.md.
| Resource | URI | Description |
|---|---|---|
| Profile | pane://profile | Text summary: account counts, net worth, monthly income, top spending categories, profile annotations |
| Accounts | pane://accounts | JSON list of accounts with names, types, institutions |
| Insights | pane://insights | JSON with net worth breakdown, unusual spending, low balance warnings, upcoming bills |
For response formats, see references/resources.md.
Each linked account has a privacy scope that controls what data is visible. Respect these — the server enforces them automatically, but understanding them helps you set expectations:
| Scope | Accounts | Balances | Transactions | Merchant names |
|---|---|---|---|---|
full | Visible | Visible | Visible | Visible |
balances_and_redacted | Visible | Visible | Visible | Shown as "Redacted" |
balances_only | Visible | Visible | Hidden | Hidden |
hidden | Hidden | Hidden | Hidden | Hidden |
If get_transactions returns an empty array for an account that exists in get_accounts, it's likely privacy-scoped to balances_only or hidden. Don't tell the user their data is missing — it's intentionally restricted.
X-RateLimit-Remaining, X-RateLimit-ResetBe efficient with tool calls. Batch related questions rather than making many small requests.
Annotations are persistent notes that you (the model) can write to enrich the user's financial data. They appear alongside relevant data in future tool calls.
| Scope | target_id | Use case |
|---|---|---|
transaction | Transaction UUID | Flag a specific transaction (e.g., "reimbursable expense") |
merchant | Merchant name (case-insensitive) | Categorize a merchant (e.g., "this is a business expense vendor") |
account | Account UUID | Note about an account (e.g., "primary checking for salary deposits") |
profile | Omit or null | General user context (e.g., "freelancer with variable income, budgets $3k/month for living expenses") |
Profile annotations appear in the pane://profile resource, so future conversations start with this context automatically.
1. get_balances (type: "all")
→ Returns balances + summary with total_cash, total_credit_debt,
total_investments, total_loans, net_worth
1. get_spending_summary (period: "this_month", group_by: "category")
→ Groups with name, total, count, percentage
2. For merchant-level detail:
get_spending_summary (period: "this_month", group_by: "merchant")
1. get_recurring (type: "subscriptions")
→ Returns subscriptions with merchant, frequency, averageAmount
→ total_monthly_subscriptions gives the monthly total
1. get_transactions (search: "Starbucks", start_date: "2025-01-01")
→ Free-text search across merchant names and descriptions
2. get_transactions (category: "FOOD_AND_DRINK", min_amount: 50)
→ Category + amount filtering
Use the period parameter in get_spending_summary instead of manual date math:
| Period | Meaning |
|---|---|
last_7d | Past 7 days |
last_30d | Past 30 days |
this_week | Monday through today |
last_week | Previous full week (Mon–Sun) |
this_month | 1st of month through today |
last_month | Previous full calendar month |
this_year | Jan 1 through today |
1. write_annotation (scope: "profile", content: "Monthly budget target: $4,000. Saving for house down payment.")
2. write_annotation (scope: "merchant", target_id: "WeWork", content: "Business expense — coworking space")
3. write_annotation (scope: "account", target_id: "<account-uuid>", content: "Joint account with partner")
For advanced workflow patterns, see references/workflows.md.
YYYY-MM-DD format, UTC-basedget_transactions defaults to 50 results (max 500). Use offset for paginationget_balances triggers a live refresh from Plaid before returning dataFOOD_AND_DRINK, TRANSPORTATION, ENTERTAINMENT, RENT_AND_UTILITIES — use the exact string when filtering{ isError: true } with a message. Common: rate limits (wait and retry), subscription inactive (402), crypto not enabled