MCP App Store
by KeenEthics

Overview

Synci connects your real bank, brokerage, and crypto-exchange accounts to AI assistants, read-only. Ask about balances, transactions, holdings, and spending across all your accounts in one place: "What did I spend on groceries last month?" "Which subscriptions am I paying for, and what do they cost per year?" "How is my portfolio allocated across stocks, ETFs, and crypto?" "Compare my checking account balance today with the start of the month." "Are any of my bank connections failing?" Synci aggregates accounts across thousands of institutions: - Banks in Europe and the UK via GoCardless Bank Account Data - Banks in New Zealand via Akahu - Investment brokerages and crypto exchanges via SnapTrade All connected accounts are visible through one MCP server, in their native currencies.

Tools

get_account_balance

ChatGPT
Get balance snapshots for one account (e.g. INTERIM_AVAILABLE, EXPECTED, CLOSING_BOOKED). as_of is when balances last synced — they can lag transactions, so caveat stale figures. For a credit account a negative CLOSING_BOOKED is the amount owed (not overdrawn). Investment/crypto accounts usually have no balance snapshots: read total_balance for the broker-reported portfolio value and cash_balance for uninvested cash, and call list_holdings for the positions behind them.

list_accounts

ChatGPT
List the user's connected financial accounts (bank, investment, crypto). Each is a lean summary: name, institution, category, currency, a balance block, account health, and earliest_available_date. IMPORTANT: balances can lag transactions — check balance.as_of (the last time balances synced) and caveat stale figures. IMPORTANT: earliest_available_date is the start of the account's synced history — a query for a period before it returns nothing because the data was never synced, NOT because there was no activity, so never report a total for a window that starts before it without caveating the coverage. Investment/crypto accounts have an empty balance block: read total_balance for the broker-reported portfolio value and cash_balance for uninvested cash, and call list_holdings for the positions behind them. verbose:true returns the full record. Sensitive identifiers are omitted.

list_connections

ChatGPT
List the authenticated user's bank/provider connections and their health status (HEALTHY, FAILING, DEAD), including the institution and consent expiry.

list_holdings

ChatGPT
List the investment and crypto positions held in the user's brokerage and crypto-exchange accounts: symbol, asset class, quantity, latest price, market value and currency. Bank accounts have no holdings. Optionally restrict to one account.

list_transactions

ChatGPT
List the user's financial transactions in a date window, newest first, across all account types (bank, deposit, line of credit, investment). Each row is lean by default: id, date, amount (negative = money out), currency, booked, payee, description (omitted when it duplicates payee), an account {id, name, institution} ref, and — when available — mcc, category, and bank_details (raw provider metadata: transaction/purpose codes, currency-exchange info, and the MCC category text that banks put in additional_information — useful for categorising spend when enrichment is off). Pass "verbose": true for the full, raw transaction record. Investment rows also carry: type (raw activity, e.g. BUY / SELL / DIVIDEND / CRYPTO_SEND), is_cash_flow, units, and price_per_unit (the effective per-unit price in this row's currency, = |amount| / units). IMPORTANT for "what did I spend": rows with is_cash_flow=false are asset transfers or income-in-kind (crypto send/receive, staking, stock splits) — NOT money spent; exclude them from spending totals. Use amount, units and price_per_unit for trade figures; ignore any price written into the description string (it is the provider's own and can be in a different currency). Dates: "date" is Synci's per-account authoritative date by default (what the user sees; "spending in June" means this). Override with date_field "booking" or "value" to filter/sort/show a specific date instead. Both booked and pending transactions are returned by default; filter with status ("all" | "booked" | "pending", default "all"). Pending amounts can still change. Coverage: meta.earliest_available_date is the date the queried accounts are synced from. If it is later than your "from", the window is only PARTIALLY covered — data before it was never synced (not absent), so any total would silently under-report. Caveat the coverage, or narrow "from" to it. Pagination: results are bounded by the date window and "limit" (default 50, max 100). Check meta.has_more: if true, request the next page by passing meta.next_cursor as "cursor" (keyset paging, no gaps or overlap). A page may hold fewer rows than "limit" (the user can exclude transactions from outbound channels), so never read a short page as the end of the data; only has_more=false is. Sensitive identifiers (IBAN, account numbers, etc.) are always omitted.

Example Prompts

Click any prompt to copy it.

Similar Apps