/mcp-guide / tools

Finlynq MCP tool catalog

Every tool the Finlynq MCP server exposes: what it does, whether it reads or writes, which OAuth scope it needs, and which transports (HTTP, stdio) carry it. Source-of-truth is the registration code in mcp-server/register-tools-pg.ts; this page regenerates from that file at build time, so the count below is always live with what the server actually serves.

HTTP tools
109
Stdio tools
93
Read-only
47
Write/destructive
62

OAuth scopes filter the tool list per token

A token granted only mcp:read sees the 47 read tools below; out-of-scope tools never appear in tools/listand can't be invoked. The 62 write/destructive tools require mcp:write. API-key and session-cookie auth methods default to both scopes granted (no behavior change for non-OAuth clients). 19 tools are HTTP-only because they requirean encrypted-name (DEK) the stdio transport doesn't hold.

Read

40 tools

Pure queries: balances, net worth, budgets, transactions, portfolios, goals, loans, FX rates, spending trends, recurring bills, weekly recaps. Read-only. Allowed under both mcp:read and mcp:write OAuth scopes.

  • convert_amountReadHTTP + stdioscope: mcp:read

    Convert an amount from one currency to another using triangulated FX rates.

  • detect_subscriptionsReadHTTP + stdioscope: mcp:read

    Scan recent transactions (via the decrypted tx cache) and return candidate subscriptions — payees with 3+ regular-cadence occurrences and stable amounts.

  • finlynq_helpReadHTTP + stdioscope: mcp:read

    Discover available Finlynq tools, schema, and usage examples.

  • get_account_balancesReadHTTP + stdioscope: mcp:read

    Get current balances for all accounts.

  • get_budget_summaryReadHTTP + stdioscope: mcp:read

    Get budget vs actual spending for a specific month.

  • get_cash_flow_forecastReadHTTP + stdioscope: mcp:read

    Project cash flow for the next 30, 60, or 90 days based on recurring transactions.

  • get_categoriesReadHTTP + stdioscope: mcp:read

    List all available transaction categories

  • get_debt_payoff_planReadHTTP + stdioscope: mcp:read

    Compare debt payoff strategies (avalanche vs snowball) across all user loans with an optional extra monthly payment.

  • get_dividend_incomeReadHTTP onlyscope: mcp:read

    Dividend income from the transactions table, classified by the user's Dividends category (issue #84).

  • get_financial_health_scoreReadHTTP + stdioscope: mcp:read

    Calculate a financial health score 0-100 with breakdown by 6 weighted components (Savings Rate 0.25 / Debt-to-Income 0.20 / Emergency Fund 0.15 / Net Worth Trend 0.15 / Budget Adherence 0.15 / Age of Money 0.10).

  • get_fx_rateReadHTTP + stdioscope: mcp:read

    Get the FX rate to convert 1 unit of `from` into `to` on `date`.

  • get_goalsReadHTTP + stdioscope: mcp:read

    Get all financial goals with progress.

  • get_income_statementReadHTTP + stdioscope: mcp:read

    Generate income statement for a period.

  • get_investment_insightsReadHTTP + stdioscope: mcp:read

    Portfolio-level investment analytics. `mode: 'patterns'` (default) returns contribution frequency, largest positions, diversification score. `mode: 'rebalancing'` suggests BUY/SELL amounts vs `targets`. `mode: 'benchmark'` compares book-value growth vs a reference index.

  • get_loan_amortizationReadHTTP + stdioscope: mcp:read

    Full amortization schedule for a loan.

  • get_loansReadHTTP + stdioscope: mcp:readDeprecated

    Get all loans with amortization summary.

  • get_net_worthReadHTTP + stdioscope: mcp:read

    Net worth across all accounts.

  • get_portfolio_analysisReadHTTP + stdioscope: mcp:read

    Portfolio holdings with all investment metrics: quantity, cost basis, avg cost, unrealized/realized gain, dividends, total return, % of portfolio.

  • get_portfolio_performanceReadHTTP + stdioscope: mcp:read

    Portfolio performance with avg-cost method: realized P&L, dividends, total return, days held per holding.

  • get_portfolio_performance_v2ReadHTTP onlyscope: mcp:read

    (Distinct capability, not a newer version of get_portfolio_performance: that tool is per-holding average-cost realized P&L; this one is the portfolio time-series return series.) Time-series performance for the portfolio: daily market_value + cost_basis series, period TWRR (Modified Dietz chained daily), annualized TWRR, and MWRR / XIRR.

  • get_realized_gainsReadHTTP onlyscope: mcp:read

    Lot-level realized gains for the user, sourced from the FIFO lot engine.

  • get_reconcile_suggestionsReadHTTP onlyscope: mcp:read

    Reconcile snapshot for one account's bank ledger vs. its transactions (the /import page's three-layer match engine).

  • get_recurring_transactionsReadHTTP + stdioscope: mcp:read

    Get detected recurring transactions (subscriptions, bills, salary).

  • get_spending_anomaliesReadHTTP + stdioscope: mcp:read

    Find spending categories with >30% deviation from their 3-month average.

  • get_spotlight_itemsReadHTTP + stdioscope: mcp:read

    Get current attention items — overspent budgets, upcoming bills, uncategorized transactions

  • get_staged_importReadHTTP + stdioscope: mcp:read

    Fetch full detail for one staged import — top-level metadata + every row with decrypted display fields.

  • get_subscription_summaryReadHTTP + stdioscope: mcp:read

    Get all tracked subscriptions with total monthly cost and upcoming renewals.

  • get_weekly_recapReadHTTP + stdioscope: mcp:read

    Get a weekly financial recap: spending summary, income, net cash flow, notable transactions.

  • list_fx_overridesReadHTTP + stdioscope: mcp:read

    List the user's manual FX rate overrides.

  • list_loansReadHTTP + stdioscope: mcp:read

    List all loans with balance, rate, payment, payoff date, and linked account

  • list_pending_uploadsReadHTTP + stdioscope: mcp:read

    List MCP uploads that are still pending or previewed (not yet executed, cancelled, or expired).

  • list_rulesReadHTTP + stdioscope: mcp:read

    List all auto-categorization rules.

  • list_splitsReadHTTP + stdioscope: mcp:read

    List all splits for a transaction.

  • list_staged_importsReadHTTP + stdioscope: mcp:read

    List the user's staged imports (pending statements awaiting review).

  • list_staged_transactionsReadHTTP + stdioscope: mcp:read

    Flat list of staged transaction rows across one or many imports.

  • list_subscriptionsReadHTTP + stdioscope: mcp:read

    List all subscriptions with full detail (status, next billing, category, account, notes).

  • search_transactionsReadHTTP + stdioscope: mcp:read

    Flexible transaction search with partial payee match, amount range, date range, category, and tags.

  • suggest_transaction_detailsReadHTTP + stdioscope: mcp:read

    Suggest category + tags for a transaction based on rule matches and historical frequency.

  • test_ruleReadHTTP + stdioscope: mcp:read

    Dry-run a rule pattern against the user's existing transactions.

Analyze

2 tools

Read-only deep-dives that walk individual holdings through their cost-basis history. Surface per-position attribution rather than aggregate views.

  • analyze_holdingAnalyzeHTTP + stdioscope: mcp:read

    Deep-dive on a single holding: avg cost, realized gain, dividends, days held, full transaction history.

  • trace_holding_quantityAnalyzeHTTP + stdioscope: mcp:read

    Per-transaction quantity contributions for a single holding, with running sum.

Preview

3 tools

Dry-run pair for every destructive bulk op. Returns a sample of the affected rows plus a signed confirmation token scoped to the exact payload. Read-only, so nothing is written.

  • preview_bulk_categorizePreviewHTTP + stdioscope: mcp:read

    Preview a bulk-categorize (shortcut for preview_bulk_update with only category_id set).

  • preview_bulk_updatePreviewHTTP + stdioscope: mcp:read

    Preview a bulk update over transactions matching `filter`.

  • preview_importPreviewHTTP + stdioscope: mcp:read

    Preview an uploaded CSV/OFX/QFX file.

Execute

3 tools

Commits a previously-previewed bulk operation. Refuses to run unless the caller passes the matching signed token from preview, so the AI can't skip the confirmation step or mutate the payload between steps.

  • execute_bulk_categorizeExecuteHTTP + stdioscope: mcp:write

    Commit a bulk-categorize.

  • execute_bulk_updateExecuteHTTP + stdioscope: mcp:write

    Commit a bulk update.

  • execute_importExecuteHTTP + stdioscope: mcp:write

    Commit an upload as transactions.

Write

44 tools

Mutations: record / update transactions, transfers, trades; create or edit accounts, categories, rules, subscriptions, loans, goals, splits, holdings, snapshots, FX overrides. Requires mcp:write OAuth scope.

  • accept_reconcile_suggestionWriteHTTP onlyscope: mcp:write

    Link an existing transaction to a bank-ledger row (accept a reconcile suggestion). linkType 'primary' also sets transactions.bank_transaction_id when it's currently NULL; 'extra' just adds the join row.

  • add_accountWriteHTTP + stdioscope: mcp:write

    Create a new financial account (bank, investment, credit card, etc.)

  • add_goalWriteHTTP + stdioscope: mcp:write

    Create a new financial goal. `account_ids` (issue #130) accepts 0..N account ids — the goal's progress sums across all linked accounts.

  • add_loanWriteHTTP + stdioscope: mcp:write

    Create a new loan or lease.

  • add_portfolio_holdingWriteHTTP + stdioscope: mcp:write

    Create a portfolio holding (a single position like 'VEQT.TO' inside a brokerage account).

  • add_snapshotWriteHTTP + stdioscope: mcp:write

    Record a net-worth snapshot for tracking wealth over time

  • add_splitWriteHTTP + stdioscope: mcp:write

    Add a single split to an existing transaction

  • add_subscriptionWriteHTTP + stdioscope: mcp:write

    Create a new subscription.

  • apply_rules_to_bank_rowsWriteHTTP onlyscope: mcp:write

    Auto-pilot bulk: fire active rules over a batch of bank-ledger rows and (on confirm) auto-materialize matched rows into transactions.

  • apply_rules_to_staged_importWriteHTTP onlyscope: mcp:write

    Re-apply active transaction rules to a PENDING staged import in place (renames payees, flips tx_type to transfer, sets category/account, etc.) so the review surface reflects rule effects before approval.

  • apply_rules_to_uncategorizedWriteHTTP + stdioscope: mcp:write

    Run all active categorization rules against uncategorized transactions.

  • approve_staged_rowsWriteHTTP + stdioscope: mcp:write

    Materialize staged rows into the live transactions table.

  • bulk_add_subscriptionsWriteHTTP + stdioscope: mcp:write

    Commit a set of detected subscriptions.

  • bulk_record_transactionsWriteHTTP + stdioscope: mcp:write

    Record multiple transactions at once.

  • create_categoryWriteHTTP + stdioscope: mcp:write

    Create a new transaction category

  • create_ruleWriteHTTP + stdioscope: mcp:write

    Create an auto-categorization rule for future imports.

  • materialize_bank_rowWriteHTTP onlyscope: mcp:write

    Create a real transaction from a bank-only ledger row.

  • portfolio_buyWriteHTTP onlyscope: mcp:write

    Bookkeeping only: records a BUY entry in the user's own Finlynq tracking ledger.

  • portfolio_depositWriteHTTP onlyscope: mcp:write

    Bookkeeping only: records a deposit entry between two of the user's own tracked accounts; no real bank or brokerage transfer occurs.

  • portfolio_fx_conversionWriteHTTP onlyscope: mcp:write

    Bookkeeping only: records a currency-conversion entry between two of the user's own tracked cash sleeves; no real FX trade occurs.

  • portfolio_income_expenseWriteHTTP onlyscope: mcp:write

    Bookkeeping only: records an income/expense entry in the user's own Finlynq ledger; no real money moves.

  • portfolio_sellWriteHTTP onlyscope: mcp:write

    Bookkeeping only: records a SELL entry in the user's own Finlynq tracking ledger.

  • portfolio_swapWriteHTTP onlyscope: mcp:write

    Bookkeeping only: records a swap entry in the user's own Finlynq ledger; no real trade occurs.

  • portfolio_transferWriteHTTP onlyscope: mcp:write

    Bookkeeping only: records an in-kind move between two of the user's own tracked accounts; no real shares or money move.

  • portfolio_withdrawalWriteHTTP onlyscope: mcp:write

    Bookkeeping only: records a withdrawal entry between two of the user's own tracked accounts; no real bank or brokerage transfer occurs.

  • record_transactionWriteHTTP + stdioscope: mcp:write

    Bookkeeping only: writes an entry to the user's own Finlynq ledger (Finlynq never connects to a bank or moves real money).

  • record_transferWriteHTTP + stdioscope: mcp:write

    Bookkeeping only: records a transfer entry between two of the user's own tracked accounts in Finlynq; it never initiates a real bank or wire transfer or moves any actual money.

  • reorder_rulesWriteHTTP + stdioscope: mcp:write

    Reorder rules by assigning new priorities.

  • replace_splitsWriteHTTP + stdioscope: mcp:write

    Atomically replace all splits on a transaction.

  • set_account_modeWriteHTTP onlyscope: mcp:write

    Set an account's import pipeline mode: 'auto' (rules fire at upload), 'approve' (review each), or 'manual' (rules fire at materialize).

  • set_budgetWriteHTTP + stdioscope: mcp:write

    Set or update a budget for a category in a specific month

  • set_fx_overrideWriteHTTP + stdioscope: mcp:write

    Pin a manual FX rate.

  • update_accountWriteHTTP + stdioscope: mcp:write

    Update name, group, currency, note, or alias of an account.

  • update_goalWriteHTTP + stdioscope: mcp:write

    Update a financial goal's target, deadline, status, or linked accounts. `account_ids` (issue #130) replaces the existing account-link set atomically — pass `[]` to unlink all, or omit to leave links unchanged.

  • update_loanWriteHTTP + stdioscope: mcp:write

    Update any field of an existing loan by id

  • update_portfolio_holdingWriteHTTP + stdioscope: mcp:write

    Update a portfolio holding's name, symbol, currency, isCrypto, or note.

  • update_ruleWriteHTTP + stdioscope: mcp:write

    Update an existing transaction rule.

  • update_splitWriteHTTP + stdioscope: mcp:write

    Update fields of an existing split

  • update_staged_transactionWriteHTTP + stdioscope: mcp:write

    Edit a single staged transaction row in place.

  • update_subscriptionWriteHTTP + stdioscope: mcp:write

    Update any field of an existing subscription

  • update_transactionWriteHTTP + stdioscope: mcp:write

    Update fields of an existing transaction by ID.

  • update_transferWriteHTTP + stdioscope: mcp:write

    Update both legs of an existing transfer pair atomically.

Destructive

17 tools

Delete a row, reject a staged import, or cancel an in-flight import. Marked with the MCP destructiveHint so clients can surface a confirmation prompt. Requires mcp:write OAuth scope.

  • cancel_importDestructiveHTTP + stdioscope: mcp:write

    Cancel a pending MCP upload — marks the row as cancelled and deletes the file from disk.

  • delete_accountDestructiveHTTP + stdioscope: mcp:write

    Delete an account (only if it has no transactions).

  • delete_budgetDestructiveHTTP + stdioscope: mcp:write

    Delete a budget entry for a category/month

  • delete_categoryDestructiveHTTP + stdioscope: mcp:write

    Delete a category.

  • delete_fx_overrideDestructiveHTTP + stdioscope: mcp:write

    Delete a manual FX rate override by id

  • delete_goalDestructiveHTTP + stdioscope: mcp:write

    Delete a financial goal by name

  • delete_loanDestructiveHTTP + stdioscope: mcp:write

    Delete a loan by id

  • delete_portfolio_holdingDestructiveHTTP + stdioscope: mcp:write

    Delete a portfolio holding.

  • delete_ruleDestructiveHTTP + stdioscope: mcp:write

    Delete a transaction rule by id

  • delete_splitDestructiveHTTP + stdioscope: mcp:write

    Delete a split by id

  • delete_subscriptionDestructiveHTTP + stdioscope: mcp:write

    Permanently delete a subscription by id

  • delete_transactionDestructiveHTTP + stdioscope: mcp:write

    Permanently delete a transaction by ID

  • delete_transferDestructiveHTTP + stdioscope: mcp:write

    Permanently delete BOTH legs of a transfer pair in a single statement.

  • execute_bulk_deleteDestructiveHTTP + stdioscope: mcp:write

    Commit a bulk delete.

  • preview_bulk_deleteDestructiveHTTP + stdioscope: mcp:read

    Preview a bulk delete.

  • preview_delete_categoryDestructiveHTTP onlyscope: mcp:read

    Preview deletion of a category.

  • reject_staged_importDestructiveHTTP + stdioscope: mcp:write

    Reject (hard-delete) a staged import.

How destructive operations stay safe

Every bulk write follows a preview → confirm → execute pattern. The preview tool returns a sample of affected rows plus a signed confirmation token scoped to the exact payload. The execute tool refuses to run unless the caller passes that exact token, so the AI can't skip the preview step or silently mutate the operation between calls. The same pattern protects bulk categorize, bulk update, bulk delete, category deletion (with FK refusal), and the staged-import approve flow.

Per-write idempotency keys carry through bulk_record_transactions and approve_staged_rows with a 72-hour replay window, so Claude retrying a flaky import won't double-book the rows.