MCP tools reference
Every tool the SaaSFlow MCP server exposes, what it returns, and when an LLM should use it.
The MCP server registers two kinds of tools: a small set of hand-written tools for the most common operations, and one auto-generated tool per OpenAPI operation and per data slice.
Read tools are always registered; write tools only when writes are
enabled. Every tool accepts an optional companyId; on the stdio server it falls
back to SAASFLOW_COMPANY_ID. On the hosted server it must be specified per call.
Hand-written tools
| Tool | Purpose |
|---|---|
list_companies | List companies the caller has access to. |
get_company | Get one company's details. |
list_company_users | List team members and their roles. |
list_transactions | Browse / filter / paginate transactions (limit 1–500, offset, accountId). For aggregations use a data_* tool. |
get_transaction | Get a single transaction by id. |
list_customers | List customers. For revenue analytics use data_customerMrr / data_cohorts. |
search | Free-text search across customers, vendors, accounts, transactions. |
run_data_batch | Run multiple data slices in one round trip. |
Auto-generated read tools
One tool per OpenAPI GET operation. Names follow <resource>_<verb>:
companies_list companies_get
accounts_list accounts_get accounts_balances
accounts_daily_balance
customers_list customers_get customers_external_ids
vendors_list vendors_get vendors_external_ids
vendors_apply_default_categorization_preview
transactions_list transactions_get transactions_transfer_chain
subscriptions_list subscriptions_get subscription_events_list
products_list products_get products_external_ids
plan_items_list plan_items_get
categories_list categories_get
files_list files_get files_download
planned_transactions_list planned_transactions_get
planned_transaction_occurrences_list
integrations_list integrations_get
account_groups_list account_groups_get
notifications_list
background_tasks_list background_tasks_get
comments_list comments_get
users_list
counterparties_search
agent_definitions_list agent_runs_list agent_runs_get(The data and search resources are skipped here because the hand-written tools
above cover them. companies_list / companies_get overlap with the hand-written
list_companies / get_company — both work.)
Write tools
Registered only when writes are enabled:
| Mode | Writes are enabled when |
|---|---|
| Stdio | SAASFLOW_MCP_WRITES=1 is set in the server's environment. |
| Remote | The caller authenticated with an API key, or with an OAuth token carrying the saasflow:write scope. |
Every write runs through the same permission checks as the REST API — the API key's permission set or the granting user's permissions bound what a tool can touch.
One tool per mutating OpenAPI operation, same naming scheme:
companies_update
account_groups_create account_groups_update account_groups_reorder
accounts_create accounts_update accounts_set_archive
accounts_set_unarchive accounts_set_change_group accounts_set_switch_to_manual
accounts_remove_history
agent_runs_create
categories_create categories_update categories_merge
categories_reorder categories_batch_delete
categorization_suggestions_apply
comments_create comments_update comments_set_like
comments_set_unlike
customers_create customers_update customers_merge
customers_set_external_ids customers_batch_delete
files_upload files_update files_batch_delete
notifications_create notifications_set_read notifications_set_unread
notifications_read_all notifications_batch_delete
plan_items_create plan_items_update
planned_transactions_create planned_transactions_update
products_create products_update products_set_external_ids
subscription_events_create subscription_events_update
subscriptions_create subscriptions_update
transactions_create transactions_update transactions_batch_edit
transactions_import transactions_search transactions_categorization_status
transactions_link_transfer transactions_unlink_transfer
transactions_create_counter_transaction
transactions_uncategorize transactions_batch_delete
users_set_role
vendors_create vendors_update vendors_merge
vendors_set_external_ids vendors_apply_default_categorization
vendors_batch_deletePlus one destructive tool per resource delete endpoint:
accounts_delete account_groups_delete categories_delete
comments_delete customers_delete files_delete
integrations_delete plan_items_delete planned_transactions_delete
products_delete subscription_events_delete subscriptions_delete
transactions_delete users_delete vendors_deleteData-slice tools
One data_* tool per slice. The tool's input schema mirrors the slice's params, so an
LLM can fill them correctly without guessing.
data_mrrData data_mrrAtDate
data_mrrByProduct data_mrrChangeEvents
data_customerMrr data_customerChanges
data_customerMonthlyData data_monthlyData
data_cohorts data_retentionCohortDetail
data_cashFlowTimeSeries data_cashFlowByCategory
data_forecastCashFlowTimeSeries
data_balanceTimeSeries data_accountBalanceByAccount
data_accountBalanceKpis data_balanceByCashType
data_profitLossData data_revenueExpenses
data_revenueExpensesBar data_revenueExpensesByCategory
data_topExpenseVendors data_periodDetails
data_analyticsFor details on what each slice returns, see Data slices.
Behavioural hints
Every tool sets the three MCP annotations hosted clients use for confirmation prompts:
| Tools | Annotations |
|---|---|
| Read tools | readOnlyHint: true, destructiveHint: false |
| Write tools (create / update / batch) | readOnlyHint: false, destructiveHint: false |
| Delete tools | readOnlyHint: false, destructiveHint: true |
openWorldHint is false everywhere. Classification follows the HTTP method, so
the *_batch_delete tools (POST endpoints) count as non-destructive — clients that
only confirm destructive calls won't prompt before them.