Skip to main content

Overview

This page is the detailed reference for the financial tools your AI assistant can call through the AI2Fin MCP server. For a high-level catalog grouped by category, see the Tools Overview. To get connected, start with the Quickstart. Every tool listed here is registered in the server’s tool registry (src/mcp/tools/index.ts → allTools). If a name does not appear on this page, an assistant cannot call it.

How the consolidated tools work

The MCP surface is deliberately small: related operations fold into a single tool with a mode parameter rather than shipping one tool per operation. Three parameter names carry that dispatch, and which one a tool uses tells you what kind of tool it is: Parameters are shared across the whole tool, so most are optional and only meaningful for particular views or actions. Each tool below notes which is which. Tools that take an action require it; tools that take a view default to their most common one.

Execution & safety

  • Every tool requires authentication and is scoped to your account only.
  • Read operations return data instantly. Write operations return a confirmation step first on clients other than Meta Muse (which asks the user itself before each write), so nothing changes until the call is repeated with the confirmToken.
  • Every response follows the same envelope: { success: true, data: { ... } } on success, { success: false, error: "..." } on failure.
  • Some tools are plan-gated. query_lens / manage_lens need Elite+ or Auto+, as do the category-set and audit-history views; the tax-filing, asset and place write-off tools need the tax_filing feature. A gated call fails with tool_failed and data.requiredPlans plus an upgradeUrl rather than throwing — the plan-to-tool table is on Account, plans and feature access.
Bank-connected data. Transaction-reading tools return everything in your 2Fin ledger: manual entries, CSV imports, API-created records and transactions synced from bank accounts you have connected. Account numbers, card numbers and similar identifiers are stripped before a result leaves the server.

Transactions (4 tools)

query_transactions

Retrieve transactions by filter, or search them by meaning.
  • view — filter (default) or intelligence
  • Parameters (filter view): { startDate?, endDate?, merchant?, q?, isTaxDeductible?, categoryId?, minAmount?, maxAmount?, amountEquals?, placeIds[]?, limit?, page?, pageSize? } — pageSize defaults to 50; filter rows carry place ({ id, name, part, inherited } or null)
  • Parameters (intelligence view): { keywords[], transactionTypes[], categories[], startDate?, endDate?, includeTotals?, includeAnalytics? }
  • Returns: { success, data: { transactions, count, totalCount, pagination: { page, pageSize, totalPages, hasNextPage, hasPreviousPage }, filters } }
  • Usage: Use filter for anything expressible as a field match. Use intelligence for fuzzy intent — “travel-related”, “marketing spend” — where the category may not be set. transactionTypes accepts expense, income, transfer.

analyze_spending

Five spending analyses behind one tool.
  • view — analytics (default), by_category, top_merchants, compare_periods, outlook
  • Common parameters: { startDate?, endDate?, period?, limit? } — period accepts the presets this_month, last_month, this_year, last_year, this_quarter, last_quarter, this_fy, last_fy, ytd, all_time.
  • Parameters (analytics view): { transactionTypes[]?, categories[]?, isTaxDeductible?, hasReceipt?, gstIncluded?, minBusinessUse?, maxBusinessUse?, minAmount?, maxAmount?, merchantContains?, descriptionContains?, search? }
  • Parameters (compare_periods view): { period1Start, period1End, period2Start, period2End, groupBy? } — groupBy is category (default), merchant, or total
  • Parameters (outlook view): { includeActual?, includeProjected?, includeOverdue? }
  • Returns (outlook view):
  • Usage: outlook answers “what will I owe in the next 60 days?” by blending settled expenses with upcoming bill occurrences, without double-counting transactions already linked to a bill.

get_tax_summary

  • Parameters: { startDate?, endDate?, period?, includeConfidenceAnalysis?, includeGSTBreakdown?, compareWithPreviousPeriod? }
  • Returns: { success, data: { totalCount, totalAmount, byCategory, dateRange } } plus confidence and GST/VAT blocks when requested.
  • Usage: “What’s my tax-deductible percentage?”, “How much can I claim this FY?” Pass period: "last_fy" instead of computing date bounds yourself.

create_transaction

  • Parameters: { description, amount, date?, merchant?, categoryId?, type? } — description and amount are required. date defaults to now; type (debit or credit) is inferred from the sign of amount when omitted.
  • Returns: { success, data: { transaction }, rulesApplied, message }
  • Usage: Your custom rules run against the new transaction, and rulesApplied reports which ones matched.

Transaction operations (2 tools)

modify_transactions

  • action (required) — update, categorize, apply_analysis, set_splits, tag, untag
  • Parameters (update): { transactionIds[], updates: { categoryId?, isTaxDeductible?, businessUsePercentage?, notes?, placeId?, placeUse?, expenseType?, businessPurpose?, attendees[]? } } — placeUse is shared, rental, business or private
  • Parameters (categorize): { categoryId, transactionIds[]?, filterByMerchant?, filterStartDate?, filterEndDate? }
  • Parameters (apply_analysis): { transactionId, categoryId?, categoryName?, isTaxDeductible?, businessUsePercentage?, gstIncluded?, gstAmount? }
  • Parameters (set_splits): { transactionId, lines[] } — each line carries its own category, place and tax flags; amounts must add up to the transaction’s amount, and [] clears the split
  • Parameters (tag / untag): { categoryId, transactionIds[]? | startDate? + endDate?, expensesOnly? } — adds or removes an extra category (a trip, client or project from a project/client lens) while keeping each transaction’s main category
  • Returns: { success, data: { updatedCount, ... , message } }
  • Usage: categorize can work by merchant instead of by ID — “categorize everything from Officeworks as Office Expenses” needs no lookup pass first. apply_analysis saves the values you accepted from analyze_transactions; GST is calculated and filled in for you. tag by date range answers “everything on my card in Sydney Mon–Fri is the Acme trip”. Nothing here deletes.

analyze_transactions

  • action (required) — categorize, tax, bulk_tax, smart_categorize, find_duplicates
  • Parameters (categorize): { transactionId, merchant?, description?, amount? }
  • Parameters (tax): { transactionId }
  • Parameters (bulk_tax): { transactionIds[]?, filterByCategory?, filterStartDate?, filterEndDate?, limit? }
  • Parameters (find_duplicates): { startDate, endDate, toleranceHours?, amountTolerance? } — defaults are 72 hours and 0.01
  • Returns (categorize):
  • Returns (tax):
  • Usage: These actions suggest; they don’t save. Feed what the user accepts back through modify_transactions with action: "apply_analysis". The tax result includes a GST/VAT breakdown based on your region and preferences.
The smart_categorize action is registered but not yet served over MCP — it returns a not-available response. Use action: "categorize" for per-transaction suggestions in the meantime.

Bills (4 tools)

query_bills

  • view — patterns (default), upcoming, overdue, occurrences, summary, financial, transactions
  • Parameters (patterns): { active? } → { success, data: { bills, count } }
  • Parameters (upcoming): { days?, includeOverdue? } — defaults 30 days, overdue excluded → { success, data: { occurrences, count, daysAhead } }
  • Parameters (occurrences): { isPaid?, startDate?, endDate?, merchantName?, billPatternId?, limit? } → { success, data: { occurrences, count, totalAmount, filters } }
  • Parameters (summary): none → { success, data: { totalBills, monthlyTotal, byFrequency, bills } }
  • Parameters (financial): { billPatternId? | merchantName?, period, startDate?, endDate?, includeProjections? } — period is one of financial_year, year_to_date, calendar_year, all_time, custom
  • Parameters (transactions): { billPatternId } — payment history for one bill
  • Usage: The financial view identifies the pattern by either billPatternId or merchantName, so “how much have I paid Telstra this FY?” resolves in one call.

manage_bill_pattern

  • action (required) — create, update, delete, set_splits
  • Parameters (create): { merchantName, amount, firstDueDate, frequency, description?, categoryId?, isTaxDeductible?, businessUsePercentage?, autoPayEnabled?, notes?, patternType? } — frequency is WEEKLY, FORTNIGHTLY, MONTHLY, QUARTERLY, or YEARLY; patternType: "recurring_income" makes it money in (rent received, salary) rather than a bill
  • Parameters (update): { billPatternId, ...any create field, isActive? }
  • Parameters (delete): { billPatternId }
  • Parameters (set_splits): { billPatternId, lines[] } — a percent-line template applied to every future payment that has no lines of its own; percents must sum to 100 (2–50 lines), [] clears it
  • Usage: Pausing a bill is an update with isActive: false — there’s no separate toggle tool. delete permanently removes the pattern and its scheduled payments; its bank transactions are kept, unlinked.

manage_bill_payment

  • action (required) — pay, create, update, delete, batch_update, bulk_pay, attach_receipt
  • Parameters (pay): { occurrenceId, paidDate?, actualAmount?, transactionId?, createTransaction?, notes? }
  • Parameters (create): { billPatternId, dueDate, amount, isPaid? }
  • Parameters (update): { occurrenceId, amount?, dueDate?, status? } — status is pending or paid
  • Parameters (batch_update): { updates[] } — each entry is an object of { id, amount?, status?, dueDate? }
  • Parameters (bulk_pay): { occurrenceIds[], createTransactions? }
  • Parameters (attach_receipt): { occurrenceId, receiptUrl, receiptFileName?, notes? }
  • Usage: On pay, pass transactionId to link an existing transaction as the payment. Leave it out and a transaction is created for you unless you set createTransaction: false.
  • action (required) — link, unlink, auto_link, suggest_patterns
  • Parameters (link): { transactionId, occurrenceId? | billPatternId?, autoDetect? }
  • Parameters (unlink): { occurrenceId }
  • Parameters (auto_link): { limit?, dryRun? } — defaults to 100 transactions, changes applied
  • Parameters (suggest_patterns): { minOccurrences?, lookbackDays? } — defaults 3 occurrences over 365 days
  • Usage: Run auto_link with dryRun: true to preview matches before committing them. suggest_patterns reads your transaction history and proposes recurring bills you haven’t set up yet.

Categories (3 tools)

query_categories

  • view — categories (default), sets, active_set, all
  • Parameters: { categorySetId?, isActive?, type?, includeInactive?, includeCategories? } — type is expense or income
  • Usage: all returns categories and sets together as { categories, categorySets }, which saves a round trip when an assistant is building a picker.

manage_category

  • action (required) — create, update, delete, move_to_set
  • Parameters: { categoryId?, name?, color?, emoji?, icon?, description?, type?, categorySetId?, isActive?, targetSetId? }
  • Usage: Archiving is action: "update" with isActive: false. move_to_set and assigning categorySetId on create require Elite+.

manage_category_set

  • action (required) — create, update, delete, set_active, duplicate
  • Parameters: { setId?, name?, description?, color?, icon?, isActive?, migrateToSetId?, newName? }
  • Usage: Elite+ only. On delete, categories move to migrateToSetId if given, otherwise to the default set — they aren’t deleted with the set.

Tax filing (6 tools)

query_tax_filing

  • view — jurisdictions (default), statements, statement, audit, auto_populate
  • Parameters: { jurisdictionId?, statementId?, periodStart?, periodEnd? }
  • Usage: BAS/VAT/GST retrieval. auto_populate computes draft figures for a period from your transactions; audit returns the change trail for a statement.

manage_tax_filing

  • action (required) — create_jurisdiction, update_jurisdiction, delete_jurisdiction, create_statement, update_statement, delete_statement, submit_statement, mark_lodged, start_amendment, mark_exported
  • Jurisdiction fields: { jurisdictionId?, countryCode?, stateProvince?, businessName?, taxIdentifier?, taxIdentifierType?, filingFrequency?, accountingBasis?, isSimplifiedBAS?, isPrimary?, isActive?, customFormSchema? } — filingFrequency is monthly, quarterly, or annual; accountingBasis is accrual or cash
  • Statement fields: { statementId?, periodStart?, periodEnd?, periodLabel?, formVersion?, autoPopulatedValues?, finalValues?, calculatedTotals?, manualOverrides?, customFieldValues?, status?, notes? } — status is draft, review, or final
  • Submit/lodge/export fields: { submittedRef?, lodgedAt?, format? }
  • Usage: submit_statement and mark_lodged record that you lodged a final statement yourself (with the accepted declaration and the date) and store the authority’s reference; start_amendment opens an amendment of a lodged statement. Nothing is sent to any tax authority. This is a sensitive write — Muse asks the user before every call and is not offered it over MCP.

get_tax_filing_guidance

  • Parameters: { countryCode?, frequency?, fiscalYear?, includeSchema?, includeOfficialCountries?, question? } — countryCode defaults to AU
  • Usage: Returns the filing authority, portal links, valid frequencies, exact period start/end dates, and export formats for a country. Pass question to get back only the form fields relevant to what was asked.

query_tax_estimators

  • view — overview (default), student_loan, superannuation
  • Parameters: { countryCode?, taxYear?, repaymentIncome?, ordinaryEarnings?, salarySacrifice?, personalDeductible?, otherTaxableIncome? } — taxYear takes a label like "2025-26"; both default to the user’s profile country and the year active today
  • Usage: student_loan estimates compulsory study/training-loan repayments (AU HELP/HECS) from repaymentIncome. superannuation estimates mandatory retirement contributions from ordinaryEarnings. Figures come from officially published rates and are indicative general information, not personal tax or financial advice.

lookup_tax_reference

  • Parameters: { question, countryCode?, verify? } — question is the user’s tax question in plain words; countryCode defaults to the profile country (curated references for AU, GB, US, NZ, CA and IN, the authority on record elsewhere); verify live-checks each URL (default true)
  • Returns: the tax authority, matching official pages with a verification status and last-verified date, a fallback search URL on the authority’s site, and the disclaimer to show
  • Usage: The one tool that reads the open web (openWorldHint: true) — use it when the user asks about a tax rule and wants a citable source. Read-only, every plan, 20 calls a minute. General information only, not personal advice.

get_tax_estimate

  • Parameters: none
  • Returns: the current-year income tax estimate as the app shows it — income by type, deductions, tax, tax already withheld, refund or amount owing, notes on what is not counted — plus invoicesOwed (money still owed to the user, never counted in the estimate) with an optional what-if if it were paid by year end
  • Usage: The estimate is on every plan; the write-offs inside it need the tax_filing feature (Elite+, Auto+). It is built from your transactions, including connected bank accounts.

Receipts (2 tools)

process_receipt

  • mode — smart (default), analyze_only, commit, upload_file, suggest_splits
  • Parameters (receipt modes): { assetUrl, mimeType, size, sha256? }
  • Parameters (suggest_splits): { transactionId } — proposes a split from the transaction’s matched receipt line items; read-only, apply it with modify_transactions set_splits
  • Parameters (smart): { autoLinkToBill?, autoCreateBill? } — both default true
  • Parameters (commit): { extracted?, action } — action describes the outcome: link to an existing transaction, or create one
  • Parameters (upload_file): { fileUrl? | fileData?, fileName, columnMapping?, autoLinkToBills?, autoCategorize?, sheetIndex?, bankName? }
  • Returns (analyze_only): { success, data: { extracted, candidates, asset } }
  • Usage: smart is the recommended path — it extracts the merchant, totals and GST, matches the receipt against your bills, and creates the transaction in one call. Use analyze_only then commit when you want the user to confirm the extracted fields in between. upload_file is the CSV/Excel import path, not a receipt path. Needs the receipt_capture feature (Pro, Elite+); 10 calls a minute.

get_receipt_upload_url

  • Parameters: { mimeType, size, fileName?, sha256? } — mimeType is one of image/jpeg, image/png, image/heic, image/webp, application/pdf; size is the exact byte count, up to 10 MB
  • Returns:
  • Usage: The /mcp request body is capped at 256 KB, so a phone photo or PDF can’t travel inline. Call this first, PUT the raw bytes to uploadUrl with exactly the returned headers, then call process_receipt with the returned assetUrl (the next block is that call, ready to send). The URL lasts 10 minutes and no record changes until process_receipt runs. Same plan gate and rate limit as process_receipt.

Travel (2 tools)

query_travel

  • view — trips (default), profile, vehicles, deduction_summary, trip_transactions
  • Parameters (trips): { from?, to?, vehicleId?, tripType?, limit? } — tripType is BUSINESS or EMPLOYEE, limit defaults to 200
  • Parameters (deduction_summary): { year } → { success, data: { countryCode, period: { from, to }, totalKm, byVehicle } }
  • Parameters (trip_transactions): { tripId, dateToleranceDays? }
  • Returns (profile): { success, data: { countryCode, currency, defaultMethod } }

manage_trip

  • action (required) — create, update, bulk_link_transactions
  • Parameters (create): { tripDate, purpose, distanceKm, tripType?, vehicleId?, startOdometer?, endOdometer?, startLocation?, endLocation?, categoryId?, isReturnJourney?, notes? } — give distanceKm (odometer readings are optional); vehicleId defaults to the user’s only vehicle; categoryId groups the trip under a trip/client/project category
  • Parameters (update): { id, ...any create field }
  • Parameters (bulk_link_transactions): { tripId?, transactionIds[]?, autoMatch?, dateToleranceDays? }
  • Usage: “Drove 45 km from home to the Acme office for a client meeting” is one create call with distanceKm: 45, startLocation, endLocation and purpose. bulk_link_transactions matches expenses to trips by date and returns the proposed pairings — the links are suggestions and are not persisted. Retry-safe: a repeated identical create returns the existing trip with alreadyExisted: true.

Rules (2 tools)

query_rules

  • Parameters: { isActive?, name?, limit?, testConditions?, sampleLimit? }
  • Usage: Without testConditions this lists your rules. With testConditions it switches to a dry run, evaluating those conditions against recent transactions instead of listing anything:
    Returns { success, data: { tested, matchedCount, sampleIds } } — sample size defaults to 200.

manage_rule

  • action (required) — create, update, delete
  • Parameters: { id?, name?, description?, isActive?, priority?, conditionLogic?, targetEntityType?, conditions?, actions? } — conditionLogic is AND or OR; targetEntityType is transaction, bill_pattern, bill_occurrence, or all; lower priority runs first
  • Usage: Enabling and disabling is action: "update" with isActive — there’s no separate enable tool. Dry-run a rule with query_rules before saving it.

User profile (2 tools)

get_user_info

  • view — all (default), profile, subscription, feature_access, quota
  • Parameters: { feature?, quotaFeature?, amount? } — quotaFeature is one of ai_transactions, bank_imports, exports, custom_rules
  • Returns (profile):
  • Usage: all returns { profile, subscription } together. Use feature_access with feature to check one gated capability, and quota to read usage limits — omit quotaFeature for overall usage.

set_user_preferences

  • Parameters (any subset): { countryCode?, businessType?, industry?, profession?, aiContextInput?, hasStudyLoan? }
  • Returns: { success, data: { userId, updated: [] } } — updated lists the field names that changed
  • Usage: countryCode is an ISO code; businessType is INDIVIDUAL, SOLE_TRADER, COMPANY, and so on. Set hasStudyLoan: true to include compulsory study/training-loan repayments in the tax forecast, or null to clear it back to unknown.

Entities (1 tool)

get_entity_details

  • view — relationships (default), receipts, history, field_history, all
  • Parameters: { transactionId?, entityType?, entityId?, fieldName? } — entityType is transaction, expense, bill, or billPattern
  • Usage: relationships returns the bills, trips, receipts and rules attached to a transaction; all adds the receipt files. The history and field_history views return the change audit trail and require Elite+.

Smart suggestions (2 tools)

get_suggestions

  • type (required) — budgets, rules, tax_deductions
  • Parameters (budgets): { lookbackMonths?, categories[]? } — defaults to 6 months
  • Parameters (rules): { lookbackDays?, minOccurrences? } — defaults 90 days and 3 occurrences
  • Parameters (tax_deductions): { period?, minAmount? } — period defaults to this_year, minAmount to 10
  • Usage: Suggestions only; nothing is created. budgets proposes realistic amounts from your spending, rules spots categorization patterns worth automating, and tax_deductions surfaces claims you may have missed.

create_expense

  • Parameters: { description, amount, date, merchant?, categoryId?, isTaxDeductible?, businessUsePercentage? } — description, amount and date are required, and amount is positive
  • Usage: Manual expense entry. Your custom rules run against it automatically. Use create_transaction instead when you’re recording a bank-style debit or credit.

Lenses (2 tools)

A lens is a category set promoted to a switchable organising axis — Tax, Project, Department, Client, or Custom. Both tools require Elite+ or Auto+.

query_lens

  • Parameters: none
  • Returns: { success, data: { hasAccess, tier, count, lenses: [{ id, name, lensType, isPrimary, isActive, categoryCount }], accessNote } }
  • Usage: Answers “what lenses do I have?” and tells the assistant whether the plan includes the feature at all, so it can explain rather than fail.

manage_lens

  • action (required) — set_primary, update
  • Parameters: { lensId, lensType?, isActive? } — lensId is required and comes from query_lens; lensType is tax, project, department, client, or custom
  • Usage: set_primary chooses the lens the app opens with. Creating and deleting lenses is done on the Categories page, not through MCP. Without the plan, calls return success: false with error: "feature_locked".

Budgets (2 tools)

query_budget

  • Parameters: { detail?, goals?, startDate?, endDate? }
  • Usage: Answers “am I on budget?” or “how much do I have left?” Set detail: true for a full per-category breakdown — budgeted vs. actual, % used, RAG status — alongside income and savings context and what is still to come this cycle (committed bills and expectedIncome). Set goals: true for savings goals (“how much a week to save $5,000 by June?”): each goal’s target, saved, remaining, deadline, percent and perWeekNeeded / perMonthNeeded. Figures are per currency. Returns setup guidance if there’s no budget yet.

manage_budget

  • action (required) — create_budget, set_limit, update_limit, delete_limit, set_income_target, create_goal, update_goal, contribute_goal, withdraw_goal
  • Parameters (create_budget): { name, currency?, periodType?, startDay? } — name is 1–100 characters and unique; currency defaults to AUD, period to monthly, start day to 1
  • Parameters (set_limit): { budgetId?, categoryId? | categorySetId?, limitAmount, frequency? } — exactly one of categoryId or categorySetId; budgetId defaults to the active budget
  • Parameters (update_limit / delete_limit): { itemId, limitAmount?, frequency? }
  • Parameters (set_income_target): { budgetId?, monthlyIncomeTarget } — 0 or omitted clears the target
  • Parameters (create_goal): { name, targetAmount, deadline?, budgetId? } — deadline is an ISO date; name is 1–100 characters
  • Parameters (update_goal): { goalId, name?, targetAmount?, deadline?, isActive? } — deadline: null clears it
  • Parameters (contribute_goal / withdraw_goal): { goalId, amount, note? } — amount is positive; a withdrawal cannot exceed the goal’s balance
  • Usage: Reading status and goal pace is query_budget; this tool only writes, and always confirms the change with you first. Goals cannot be deleted here — deactivate with update_goal and isActive: false. Retry-safe: create_goal with an existing name returns that goal (alreadyExisted: true), and an identical contribute_goal within 10 minutes does not move the money twice.
Want budget recommendations rather than a budget? Use get_suggestions with type: "budgets".

Income & insights (2 tools)

query_income

  • Parameters: none
  • Returns: { success, data: { monthlyTotal, source, streams } } when recurring income streams are detected, otherwise { success, data: { monthlyTotal, source: "transactions", breakdown, note } }
  • Usage: “What’s my income?”, “How much do I earn a month?” When no salary or regular-deposit stream has been detected, the figure is estimated from the last three months of income transactions and source says so — surface that caveat rather than quoting the number flat.

query_insights

  • view — cashflow (default) or budget
  • Parameters: { startDate?, endDate? } — cashflow only; defaults to the last 90 days
  • Returns (cashflow): { success, data: { period, income, expenses, net, savingsRatePct, topExpenseCategories } }
  • Returns (budget): { success, data: { hasBudget, onTrack, overallUtilization, overBudgetCategories } }
  • Usage: “How am I doing?”, “Where’s my money going?”, “What’s my savings rate?” Transfers are excluded from cashflow so internal moves between your own accounts don’t read as income or spending.

Vehicles (1 tool)

manage_vehicle

  • action (required) — create, update, delete
  • Parameters (create): { registration, description, ownership?, vehicleType? } — both registration and description are required; ownership is OWNED (default), LEASED, or HIRE_PURCHASE; vehicleType is CAR (default), MOTORCYCLE, VAN, or TRUCK
  • Parameters (update): { id, registration?, description?, ownership?, vehicleType?, isActive? }
  • Parameters (delete): { id }
  • Usage: Write-only — reading your vehicles is query_travel with view: "vehicles". Deletion is confirmed with you first.

Assets (2 tools)

The depreciating-asset register. Both tools need Elite+ and the tax_filing feature (Elite+, Auto+).

query_assets

  • view — register (default), asset, unregistered, depreciation_schedule, tpar, profit_loss, explainer
  • Parameters: { assetId?, includeInactive?, includeDisposed?, limit?, financialYear?, fyStart?, fyEnd?, countryCode?, basis? } — basis is gst_inclusive or gst_exclusive; report views take financialYear or an explicit fyStart/fyEnd
  • Usage: unregistered lists capital purchases in the bank feed that aren’t on the register yet; depreciation_schedule gives the decline in value per asset for one income year; tpar is Australia only; explainer says what depreciation means in the user’s country, which methods apply and the write-off threshold.

manage_asset

  • action (required) — create, update, dispose, delete, register_from_transaction, dismiss_unregistered, undismiss
  • Parameters: { assetId?, transactionId?, bankTransactionId?, name?, description?, categoryKey?, acquisitionDate?, cost?, secondElementCost?, method?, effectiveLifeYears?, taxableUsePercent?, openingAdjustableValue?, disposalDate?, terminationValue?, notes?, isActive?, placeId?, placeUse? } — create needs name, acquisitionDate, cost and method; dispose needs disposalDate and terminationValue
  • Usage: register_from_transaction seeds an asset from a bank purchase (name, date, cost and property come from the transaction; you supply method and effectiveLifeYears). A sensitive write — it changes the depreciation the user claims, so Muse asks before every call and is never offered dispose, delete, dismiss_unregistered or undismiss.

Places (2 tools)

A place is a property — home, rental, vehicle, business premises — and a second axis beside the category: a repair at a rental is still “Repairs”.

query_places

  • view — list (default), summary, write_offs
  • Parameters: { placeId? | name?, from?, to?, financialYear?, includeArchived? } — pick a property by id or name; period is from/to (YYYY-MM-DD) or financialYear, none means everything on record
  • Usage: list returns every property with its kind, ownership, rented and business shares, and cash spent or received. summary is one property’s cash picture — totals, the split between rented, business and private parts, net rental cash, spend by category, its bills and assets, and for a home the treatment of its answers. write_offs (Elite+, tax_filing) adds depreciation and capital works and where they’re reported.

manage_place

  • action (required) — create, update, archive, restore, assign_transactions, assign_bill, clear
  • Parameters: { placeId? | placeName?, name?, kind?, reference?, notes?, ownershipPercent?, rentalPercent?, businessPercent?, acquiredOn?, isNewBuild?, transactionIds[]?, billPatternId?, placeUse? } — kind is home, rental, vehicle, business or other; rented + business shares ≤ 100, the rest is private; placeUse is shared, rental, business or private
  • Usage: Free on every plan. assign_bill puts a recurring bill at a property, so every payment it matched — past and future — is there too; clear takes transactions or a bill off their property. Deleting a property is only possible in the app.

Expected income and upcoming money (3 tools)

2Fin does not create or send invoices. These tools track what you are owed and what is coming up, so an assistant can draft an invoice in your own invoicing tool and answer “what do I owe before payday?”

query_expected_income

  • view — open (default), by_payer, work_done
  • Parameters: { payer?, status?, startDate?, endDate? } — status is open (default: expected, partly paid and overdue), expected, partly_paid, overdue, paid, written_off or all; by_payer and work_done default to the last 90 days
  • Usage: open lists money still owed with client, invoice number, amount, due date, received and outstanding. by_payer is income received per client over a period. work_done is the work activities and hours recorded at your places plus business trips from the logbook — “what should I invoice for last month?”

record_expected_income

  • Parameters: { payerName, amount, dueDate, reference?, gstAmount?, currency?, categoryId?, placeId?, frequency?, kind?, notes? } — payerName, amount (GST included, positive) and dueDate (YYYY-MM-DD) are required; reference is the invoice number from your tool; kind is invoice (default), rent, pay, other_income, refund, repayment or sale
  • Usage: “I invoiced Acme $2,400 due 15 Oct” — records what is owed and matches the payment when it arrives. refund, repayment and sale are filed as money coming back, never as earnings. Sends nothing to anyone.

get_upcoming_money

  • Parameters: { days?, direction?, placeId?, includeEstimates? } — days defaults to 14; direction is in, out, move (your own money moving — transfers, investments) or all; includeEstimates (default true) adds estimated pay days from your employers
  • Returns: { success, data: { window: { from, to, days }, reportingCurrency, totals, rows: [{ direction, certainty, status, stillToCome, ... }], truncated, note } } — certainty is scheduled or estimated; status is upcoming, due_today, overdue, partly_received and so on; totals are per currency
  • Usage: Bills due, expected income, later dates of recurring income and estimated pay days in one feed — “what’s coming up this fortnight?”, “when is rent due?”. Expected money is not received money.

Renamed and consolidated tools

If you have prompts or scripts referencing older tool names, these are where they went. The names in the left column are no longer registered and cannot be called.

Tool Count Summary

Counted from the tool registry itself (src/mcp/tools/index.ts → allTools), not maintained by hand:
Why 44 and not a bigger number. The MCP surface was deliberately consolidated: rather than one tool per operation, related operations fold into a single tool with a mode parameter (query_transactions, manage_bill_pattern, and so on). Fewer, broader tools fit inside an assistant’s tool-selection budget and are easier for a model to pick between correctly. Of the 44, 23 only read, 19 write your own records and 2 are sensitive writes (manage_asset, manage_tax_filing). The same catalogue is published as JSON at https://api.ai2fin.com/.well-known/mcp-server/tools.json. An in-app assistant sees 45 — these 44 plus a request_more_tools escape hatch added at the orchestrator layer.

request_more_tools

The one tool on this page that isn’t in allTools. The chat orchestrator adds it to every request so the model is never stuck: if none of the tools it was given can serve the request, it calls this with a short reason and the orchestrator widens the tool set and retries.
  • Parameters: { reason } — a brief description of the capability needed
  • Usage: You never call this yourself. It exists so that trimming the tool list for a given turn can’t silently cost you a capability.