Tools
The connector exposes 14 tools: 7 that read and 7 that write. An app only sees the tools its permissions allow: finance:read for the read tools, finance:write for the write tools.
Conventions
- Amounts are positive decimal strings in major units, with at most 2 decimals, such as
"12.50", up to10000000.00. They always come with acurrency(an ISO 4217 code such asUSDorINR) and adirection:expenseorincome. Returned amounts always have 2 decimals, in every currency. - Dates are
YYYY-MM-DD, on the UTC calendar. Date ranges include both ends and cover at most 12 months; a longer range is refused, not truncated. - Ids come from the list tools. Category ids are text, such as
foodorfood.coffee; pass one fromlist_categories. Unknown ids are refused, never guessed. - Currencies are never mixed. Totals are per currency, and a transaction's currency must match its account's.
- Unknown arguments are refused, so a typo in a field name fails instead of being silently ignored.
- Errors come back as a tool result with
isError: trueand a readable message the agent can act on. - Every write can be undone by the user, from Settings → Connected apps. Writes count towards the limit of 100 per app per UTC day.
Read tools finance:read
list_transactions
Lists transactions, newest first, at most 200 per call. Defaults to the last 30 days. Pass next_cursor from a previous result to get the next page with the same filters.
| Parameter | Type | Notes |
|---|---|---|
from | date | Defaults to 30 days before to. |
to | date | Defaults to tomorrow (UTC). |
category_id | string | Includes child categories. |
account_id | string | |
search | string | Matches merchant, note or tags. Up to 100 characters. |
limit | integer | 1–200, default 50. |
cursor | string | The next_cursor from the previous page. |
Returns from, to, transactions and next_cursor, which is missing on the last page.
get_transaction
Gets one transaction by id.
| Parameter | Type | Notes |
|---|---|---|
id | string | Required. |
get_spending_summary
Summarises spending and income for a date range: totals per currency, and expense totals per category and currency. Defaults to this month so far. Pending transactions are left out.
| Parameter | Type | Notes |
|---|---|---|
from | date | Defaults to the 1st of this month. |
to | date | Defaults to tomorrow (UTC). |
Returns totals (one per currency, with spent and received) and categories (category_id, category_name, total, transaction_count), largest first, up to 200 rows.
list_categories
Lists the categories the user can assign: Outlai's defaults plus the user's own. Each has id, name, parent_id and custom. No parameters.
list_accounts
Lists accounts with their currency. Each has id, name, type, currency and archived. Account numbers and bank identifiers are never returned. No parameters.
list_budgets
Lists budgets: an optional overall budget (empty category_id) and per-category budgets. Each has id, category_id, limit and period. No parameters.
list_recurring_rules
Lists recurring payment rules (subscriptions and bills), both active and paused. No parameters.
Write tools finance:write
create_transaction
Records one transaction. idempotency_key makes retries safe: send the same key again and the original transaction comes back, with replayed: true and nothing created or changed.
| Parameter | Type | Notes |
|---|---|---|
idempotency_key | string | Required. 8–128 characters from A-Z a-z 0-9 . _ : -. |
amount | decimal string | Required. Positive. |
direction | expense | income | Required. |
currency | string | Required. Must match the account's currency. |
date | date | Required. At most 1 day in the future. |
merchant | string | Required. Up to 200 characters. |
category_id | string | Required. From list_categories. |
account_id | string | Defaults to the user's manual account. |
note | string | Up to 1000 characters. |
Returns transaction and replayed.
update_transaction
Changes fields of one transaction. Only the fields you pass change, and you must pass at least one. The previous values are kept so the user can undo the change.
| Parameter | Type | Notes |
|---|---|---|
id | string | Required. |
amount, currency, date, merchant, category_id, account_id | Same rules as create_transaction. | |
direction | expense | income | Passed on its own, it flips the direction and keeps the amount. |
note | string or null | "" clears it. |
set_budget
Sets the monthly budget for one category, or the overall budget when category_id is left out. Replaces that category's existing budget if there is one.
| Parameter | Type | Notes |
|---|---|---|
amount | decimal string | Required. |
currency | string | Required. |
category_id | string | Leave out for the overall budget. |
Returns budget and created, which is false when an existing budget was replaced.
delete_budget
Deletes one budget by id (required, from list_budgets). The user can undo it.
create_recurring_rule
Creates a recurring payment rule (a subscription or bill) that matches the user's transactions by merchant. A rule never records transactions by itself. Rules created here are always expenses. idempotency_key works as in create_transaction.
| Parameter | Type | Notes |
|---|---|---|
idempotency_key | string | Required. |
name | string | Required. Up to 100 characters. |
merchant_pattern | string | Required. Up to 100 characters. |
amount | decimal string | Required. |
currency | string | Required. |
cadence | daily | weekly | monthly | yearly | Required. |
anchor_date | date | Required. Between 1970 and 2100. |
category_id | string | |
end_date | date | Not before anchor_date. |
note | string |
update_recurring_rule
Changes fields of one recurring rule, or pauses it (active: false) and resumes it (active: true). Takes id (required) plus any of the create_recurring_rule fields except idempotency_key. end_date and note accept "" to clear them.
delete_recurring_rule
Deletes one recurring rule by id (required, from list_recurring_rules). Transactions it matched are kept, just no longer linked to it. Returns deleted_id and unlinked_transactions. The user can undo it.
Returned objects
Transaction
{
"id": "…",
"date": "2026-10-30",
"amount": "12.50",
"currency": "USD",
"direction": "expense",
"merchant": "Chipotle",
"description": "…",
"note": "…",
"tags": ["lunch"],
"category_id": "food",
"account_id": "…",
"pending": false,
"recurring_rule_id": "…"
}
recurring_rule_id appears only when the transaction is linked to a rule. Text fields come back at most 200 characters long, with hidden control characters removed. Tags are capped at 20, each up to 50 characters.
Not supported
- Deleting transactions, and bulk operations.
- Outlai's own AI features: Otto chat, smart add, receipt scanning, voice, AI categorisation and statement import.
- Turning on automatic transaction logging for a recurring rule.
- MCP resources, prompts, sampling and elicitation: the server offers tools only.