/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
95
Stdio tools
94
Read-only
46
Write/destructive
49

OAuth scopes filter the tool list per token

A token granted only mcp:read sees the 46 read tools below; out-of-scope tools never appear in tools/listand can't be invoked. The 49 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). 4 tools are HTTP-only because they requirean encrypted-name (DEK) the stdio transport doesn't hold.

Read

39 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 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

    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_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 — 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

31 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.

  • 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.

  • 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_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.

  • record_tradeWriteHTTP + stdioscope: mcp:write

    Record a stock/ETF/crypto buy or sell in a brokerage account.

  • record_transactionWriteHTTP + stdioscope: mcp:write

    Record a transaction.

  • record_transferWriteHTTP + stdioscope: mcp:write

    Record a transfer between two of the user's accounts.

  • reorder_rulesWriteHTTP + stdioscope: mcp:write

    Reorder rules by assigning new priorities.

  • replace_splitsWriteHTTP + stdioscope: mcp:write

    Atomically replace all splits on a transaction.

  • 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 — Claude retrying a flaky import won't double-book the rows.