Available tools
The Paisa MCP server exposes 39 tools across 19 groups. Any MCP-compatible AI assistant can call them based on your conversation.
Transactions
Section titled “Transactions”| Tool | Title | Class | Description |
|---|---|---|---|
get_transactions | Search Transactions | read-only | Search transactions: compact rows (limit 25, max 100), more/cursor paging, page-1 spent/income totals over the whole filter. Counterparty: personName or personId. search matches merchant names only, not descriptions. full: true = raw joined rows (much larger). |
get_uncategorized_groups | Group Uncategorized Transactions | read-only | Token-cheap categorizing: groups uncategorized transactions by merchant-like pattern and returns {pattern,t:‘dr' |
categorize_groups | Categorize Transaction Groups | write | Categorize whole groups from get_uncategorized_groups: every matching uncategorized transaction, plus a learning rule for future imports. Unknown categorySlug fails before any write; dryRun previews. |
backfill_persons | Backfill Persons from Transactions | write (idempotent) | Create persons from UPI/IMPS counterparties in unlinked transactions (deduped by name) and link those transactions to them. Idempotent. dryRun previews. |
update_transaction | Update Transaction | write (idempotent) | Update a transaction’s category, merchant, owner, notes, or flags. |
bulk_link_entity | Bulk Link Transactions | write (idempotent) | Link transactions to a merchant or person in bulk (exactly one of merchantId/personId per link), optionally setting categoryId. |
manage_duplicates | Manage Duplicate Transactions | write | Duplicates and money conflicts. flag: transactionId (excluded from totals). list. resolve: ids + resolution (ignore |
get_reconciliation_context | Get Reconciliation Context | read-only | Existing transactions of one account in a date range, for reconciling a statement before import (overlaps, duplicates). |
bulk_categorize_transactions | Bulk Categorize Transactions | write (idempotent) | Set the category of many transactions at once (no merchant/person link). |
delete_transactions | Delete Transactions | destructive | Hard-delete transactions. PERMANENT — confirm first. Exactly one of id, ids, filters (deletes every match). Matching everything needs confirmDeleteAll. |
rescan_transactions | Rescan Transactions | write (idempotent) | Apply saved learning rules (merchant aliases, category rules) to uncategorized transactions, like the web app’s auto-categorize. |
get_settlement_candidates | Find Settlement Candidates | read-only | Bank debits that look like bill payments of a credit card. After importing a CC statement, mark them as transfers to avoid double-counting. |
get_transaction | Get Transaction | read-only | One transaction by id (date, amount, type, description, links, flags). |
Statement import
Section titled “Statement import”| Tool | Title | Class | Description |
|---|---|---|---|
preview_import | Preview Statement Import | read-only | Preview a local statement; writes nothing. pdf (HDFC savings/cards, Amex, SBI savings): filePath, account (create it first with upsert_entity) — returns already-in-Paisa / conflict / new counts; then import_statement with the same args. csv: filePath — returns headers, sample rows, detected mapping. cas (CDSL CAS): filePath, password. |
import_statement | Import Statement | write | Import transactions, then auto-categorize. pdf: filePath, account — only rows preview_import reported new. csv: filePath, mapping (from preview_import); duplicates skipped; date overlap → 409 unless force; not in private mode. rows: accountId, source, granularity, transactions (reconciled). json_file: same but filePath of a JSON array of those rows — for large statements. cas: filePath, password — adds untracked holdings. |
Jev auto-categorize
Section titled “Jev auto-categorize”| Tool | Title | Class | Description |
|---|---|---|---|
auto_categorize_jev | Auto-Categorize with Jev | write | Auto-categorize uncategorized groups with Jev (TypeSafe’s classifier, no LLM tokens). Opt-in: needs JEV_API_KEY; refused in private mode (sends transaction text to a third party) unless JEV_ALLOW_PRIVATE_MODE=1, then only the sanitized merchant pattern is sent. Groups at/above minConfidence get categorized + a rule; the rest return in review for categorize_groups. dryRun previews. |
Entities (lists, upserts, deletes)
Section titled “Entities (lists, upserts, deletes)”| Tool | Title | Class | Description |
|---|---|---|---|
list_entities | List Entities | read-only | List data. Optional filters — persons: id; merchants: rawId (UPI ID or name); budgets: month, year. Required — learning: slice; goal_contributions: id (goal UUID); investment_transactions: id (holding UUID). alerts = unread; recurring = auto-detected subscriptions/rent/salary. |
upsert_entity | Create or Update Entity | write | Create (omit id) or update (pass id) an entity. Required on create — merchant: rawId. person: name. category: name, slug, type. bank_account: name, bankName, type, last4, owner. insurance: name, type, provider, premiumAmount, premiumFrequency, startDate, owner. invite: email (create only; returns the invite URL). |
delete_entity | Delete Entity | destructive | Delete by id. PERMANENT — confirm with the user first. merchant: id or ids (bulk); transactions are unlinked, not deleted. person: 409 while transactions reference it. category: custom only. debt: prefer manage_debt action=settle. invite: pending only. |
Merchants
Section titled “Merchants”| Tool | Title | Class | Description |
|---|---|---|---|
merge_merchants | Merge Merchants | destructive | Merge duplicate merchants into primaryId: their transactions are re-pointed to it and the duplicates deleted. PERMANENT — confirm with the user first. |
Analytics
Section titled “Analytics”| Tool | Title | Class | Description |
|---|---|---|---|
get_analytics | Get Analytics | read-only | Analytics over the last months (default 6). spending_trends: per-month totals by category type, category breakdown, budget vs actual (for one month, read its row). category_analytics: one category over time (slug required). merchant_analytics: one merchant’s history and total (id required). |
Goals & EMIs
Section titled “Goals & EMIs”| Tool | Title | Class | Description |
|---|---|---|---|
upsert_savings | Create or Update Savings Vehicle | write | Create (omit id) or update (pass id) a savings goal, EMI or sinking fund. Amounts: ₹ decimal strings; dates YYYY-MM-DD. Required on create — goal: goalType, name, targetAmount. emi: name, totalAmount, emiAmount, startDate, endDate, totalMonths, owner. sinking_fund: name, targetAmount, targetDate, monthlyContribution. status — goal: active |
contribute_to_goal | Contribute to Goal | write | Add a contribution to a savings goal. |
Budgets
Section titled “Budgets”| Tool | Title | Class | Description |
|---|---|---|---|
set_budget | Set Budget | write (idempotent) | Create or update a category’s budget. period: week, month (default), year. |
Dashboard
Section titled “Dashboard”| Tool | Title | Class | Description |
|---|---|---|---|
get_dashboard | Get Dashboard | read-only | Dashboard: this month’s income/needs/wants/investments, spending trends (last months, default 6), recent transactions, latest net worth. |
Recurring & subscriptions
Section titled “Recurring & subscriptions”| Tool | Title | Class | Description |
|---|---|---|---|
sync_recurring | Sync Recurring Merchants | write (idempotent) | Flag recurring merchants (isRecurring) detected from transaction history. Run after importing statements. |
Alerts
Section titled “Alerts”| Tool | Title | Class | Description |
|---|---|---|---|
check_alerts | Check Alerts | write | Generate and return alerts: budget overruns, unusual spending, EMIs ending, insurance renewals. Call at the start of a finance conversation. |
manage_alerts | Manage Alerts and Rules | write (idempotent) | Alerts and alert rules. dismiss: id. read: id, or all:true. list_rules. set_rule: type (e.g. budget_threshold) + enabled and/or threshold. list_custom / set_custom: own rules (scope, targetId, period, amount, owner; id edits). Delete: delete_entity custom_alert_rule. |
| Tool | Title | Class | Description |
|---|---|---|---|
manage_debt | Add or Settle Debt | write | Record or settle a debt (owed or owing). add: name, amount, type required (dueDate, notes optional). settle: id required; sets balance to settledAmount (default 0). |
Reports
Section titled “Reports”| Tool | Title | Class | Description |
|---|---|---|---|
generate_monthly_report | Generate Monthly Report | write (idempotent) | Generate and save a monthly report: income, expenses, savings rate, top categories, insights. Re-running overwrites. |
get_report | Get Report | read-only | Read a report. monthly: income, expenses, savings rate, net worth for the last months (default 6). net_worth: current + up to 12 months (cash, investments, emergency fund, liabilities). upcoming: EMIs, SIPs, renewals, card bills due in the next days (1-365, default 60). heatmap: daily spend for a year (default this year). |
Export
Section titled “Export”| Tool | Title | Class | Description |
|---|---|---|---|
export_transactions | Export Transactions | read-only | Export transactions (full rows) when the user asks for an export or dump. |
Household learning
Section titled “Household learning”| Tool | Title | Class | Description |
|---|---|---|---|
set_learning_rule | Set Learning Rule | write (idempotent) | Save a categorizer rule: this merchant (type=merchant, merchantId) or person (type=person, personId) always gets categoryId. |
Net worth
Section titled “Net worth”| Tool | Title | Class | Description |
|---|---|---|---|
update_net_worth | Update Net Worth | write (idempotent) | Save a month’s net worth snapshot (upsert). mode=manual (default): the given ₹ decimal strings, omitted = 0. mode=auto: computed from investments, FDs and accounts in Paisa; value fields ignored. |
Investments
Section titled “Investments”| Tool | Title | Class | Description |
|---|---|---|---|
upsert_investment | Create or Update Investment | write | Create (omit id) or update (pass id) an investment. Amounts: ₹ decimal strings; dates YYYY-MM-DD. Required on create — sip: name, amount (monthly), startDate, sipDay, owner; pause/stop via status. fixed_deposit: bankName, amount, interestRate, startDate, maturityDate, owner. holding (manual position; same name+platform updates it): name, holdingType, owner, investedAmount, currentValue. |
sync_zerodha | Sync Zerodha | write (idempotent, external) | Zerodha link. token_health: is the access token still valid (expired → re-login in the web app). sync: pull latest stocks, MFs and SIPs. |
Settings
Section titled “Settings”| Tool | Title | Class | Description |
|---|---|---|---|
get_settings | Get Settings | read-only | profile: name, email, owner. household: currency, locale, owner labels, members. encryption: mode, PIN. |
update_settings | Update Settings | write (idempotent) | profile: name. household: name, currency, locale, ownerLabels. preferences: prefs (layout, theme, density, homeCards, startTab, list style, sorts). |
Encryption & privacy
Section titled “Encryption & privacy”| Tool | Title | Class | Description |
|---|---|---|---|
set_encryption_mode | Set Encryption Mode | destructive | Switch encryption mode. ‘private’ works only if the user already set up a PIN in the web app (this tool cannot create keys). ‘standard’ is refused while client-encrypted data exists, so it normally fails from MCP. Confirm with the user first. |
Renamed / removed tool names
Section titled “Renamed / removed tool names”The 78 -> 39 tool consolidation (0.2.0) renamed the tools below; the old names still worked as hidden
tools/list aliases through 0.2.x. 0.3.0 removed them — calling an old name now returns the SDK’s
unknown-tool error. list_waitlist and send_test_push (admin-only) were removed from MCP entirely
(no replacement).
| Old tool (removed in 0.3.0) | New tool | Arguments |
|---|---|---|
import_statement_pdf | preview_import / import_statement | from: “pdf” |
import_csv_parse | preview_import | from: “csv” |
import_csv_confirm | import_statement | from: “csv” |
import_statement_batch | import_statement | from: “rows” |
import_statement_file | import_statement | from: “json_file” |
list_categories | list_entities | entity: “categories” |
list_merchants | list_entities | entity: “merchants” |
list_bank_accounts | list_entities | entity: “bank_accounts” |
list_persons | list_entities | entity: “persons” |
list_budgets | list_entities | entity: “budgets” |
list_debts | list_entities | entity: “debts” |
list_invites | list_entities | entity: “invites” |
list_alerts | list_entities | entity: “alerts” |
list_recurring | list_entities | entity: “recurring” |
list_push_subscriptions | list_entities | entity: “push_subscriptions” |
list_saved_reports | list_entities | entity: “saved_reports” |
list_learning | list_entities | entity: “learning”, slice: |
list_savings | list_entities | entity: |
list_investments | list_entities | entity: |
upsert_merchant | upsert_entity | entity: “merchant” |
upsert_person | upsert_entity | entity: “person” |
upsert_category | upsert_entity | entity: “category” |
upsert_bank_account | upsert_entity | entity: “bank_account” |
upsert_insurance | upsert_entity | entity: “insurance” |
create_invite | upsert_entity | entity: “invite” |
delete_category | delete_entity | entity: “category” |
delete_merchant | delete_entity | entity: “merchant” |
delete_person | delete_entity | entity: “person” |
delete_debt | delete_entity | entity: “debt” |
revoke_invite | delete_entity | entity: “invite” |
delete_savings | delete_entity | entity: |
delete_investment | delete_entity | entity: |
dismiss_alert | manage_alerts | action: “dismiss” |
mark_alert_read | manage_alerts | action: “read” |
list_alert_rules | manage_alerts | action: “list_rules” |
set_alert_rule | manage_alerts | action: “set_rule” |
add_debt | manage_debt | action: “add” |
settle_debt | manage_debt | action: “settle” |
get_reports | get_report | report: “monthly” |
get_net_worth | get_report | report: “net_worth” |
get_upcoming | get_report | report: “upcoming” |
get_spending_heatmap | get_report | report: “heatmap” |
get_profile | get_settings | section: “profile” |
get_household | get_settings | section: “household” |
get_encryption_status | get_settings | section: “encryption” |
update_profile | update_settings | section: “profile” |
update_household | update_settings | section: “household” |