> **Building with AI coding agents?** Install the authstack plugin with one command. This equips your agent with accurate Scalekit implementation patterns.
>
> **Recommended** (the `-y` flags skip prompts, so the command runs without an interactive terminal):
> ```bash
> npx -y @scalekit-inc/cli setup -y
> ```
>
> Global:
> ```bash
> npm install -g @scalekit-inc/cli
> scalekit setup -y
> ```
>
> Supports Claude Code, Cursor, GitHub Copilot, Codex + skills for other Agent Skills-compatible agents in `~/.agents/skills`.
> Skills: integrate-agentkit, implement-saaskit, add-mcp-oauth, implement-sso, implement-scim.
> [Full setup guide](https://docs.scalekit.com/dev-kit/build-with-ai/)

---

# Connect AI agents to the Era Context MCP server

The Era Context MCP connector routes your AI agent's tool calls to Era Context's own MCP server through Scalekit. Each user signs in to Era Context once, and Scalekit stores and refreshes their tokens, so your agent never handles credentials. It comes with 51 tools.

**Authentication:** OAuth 2.1/DCR
**Categories:** Accounting & Finance, AI, Productivity
**Tools:** 51: 26 read, 19 write, 6 destructive
**Users sign in with:** OAuth
**OAuth app:** Scalekit's or your own
**Built by:** Vendor MCP
**Try it:** [Playground in the Scalekit dashboard](https://app.scalekit.com/ws/signup?sk_intent=playground&provider=ERACONTEXTMCP)

## Setup

1. ### Install the SDK

   **Node.js**

   ```bash
   npm install @scalekit-sdk/node dotenv
   ```

   **Python**

   ```bash
   pip install scalekit-sdk-python python-dotenv
   ```

2. ### Set your credentials

   Add your Scalekit credentials to your `.env` file. Find values in **[app.scalekit.com](https://app.scalekit.com)** > **Developers** > **API Credentials**.

   ```sh title=".env"
   SCALEKIT_ENVIRONMENT_URL=<your-environment-url>
   SCALEKIT_CLIENT_ID=<your-client-id>
   SCALEKIT_CLIENT_SECRET=<your-client-secret>
   ```

3. ### Create the Era Context MCP connection

   In **AgentKit > Connections**, create an Era Context MCP connection. The name you give it is the `connection_name` your code passes. See [Configure connections](/agentkit/connections/).

   Scalekit credentials are available for Era Context MCP server, so you don't need to register an OAuth app.

4. ### Authorize a user and make your first call

   **Node.js** (`quickstart.mts`)

   ```typescript
   import { ScalekitClient } from '@scalekit-sdk/node'
   import 'dotenv/config'
   import { createInterface } from 'node:readline/promises'

   const scalekit = new ScalekitClient(
     process.env.SCALEKIT_ENVIRONMENT_URL,
     process.env.SCALEKIT_CLIENT_ID,
     process.env.SCALEKIT_CLIENT_SECRET,
   )
   const actions = scalekit.actions

   const connector = 'eracontextmcp'
   const identifier = 'user_123'

   // Generate an authorization link for the user
   const { link } = await actions.getAuthorizationLink({ connectionName: connector, identifier })
   console.log('Authorize Era Context MCP:', link)
   const rl = createInterface({ input: process.stdin, output: process.stdout })
   await rl.question('Press Enter after authorizing...')
   rl.close()

   // Make your first call
   const result = await actions.executeTool({
     connector,
     identifier,
     toolName: 'eracontextmcp_accounts__list_financial_accounts',
     toolInput: {},
   })
   console.log(result)
   ```

   ```bash
   npx tsx quickstart.mts
   ```

   **Python** (`quickstart.py`)

   ```python
   import os
   from scalekit import ScalekitClient
   from dotenv import load_dotenv
   load_dotenv()

   scalekit_client = ScalekitClient(
       env_url=os.getenv("SCALEKIT_ENVIRONMENT_URL"),
       client_id=os.getenv("SCALEKIT_CLIENT_ID"),
       client_secret=os.getenv("SCALEKIT_CLIENT_SECRET"),
   )
   actions = scalekit_client.actions

   connection_name = "eracontextmcp"
   identifier = "user_123"

   # Generate an authorization link for the user
   link_response = actions.get_authorization_link(
       connection_name=connection_name,
       identifier=identifier,
   )
   print("Authorize Era Context MCP:", link_response.link)
   input("Press Enter after authorizing...")

   # Make your first call
   result = actions.execute_tool(
       tool_input={},
       tool_name="eracontextmcp_accounts__list_financial_accounts",
       connection_name=connection_name,
       identifier=identifier,
   )
   print(result)
   ```

   ```bash
   python quickstart.py
   ```

   Each user signs in once. See [Authorize a user](/agentkit/tools/authorize/) for the full flow and statuses.

## Tools

Pass the exact name to `execute_tool`, with an input like each tool's example. To ask for a tool that's missing, use the [request form](https://scalekitsupport.portal.usepylon.com/forms/request-a-connector-tool).

**Node.js**

```typescript
const result = await actions.executeTool({
  toolName: 'eracontextmcp_accounts__check_account_balance',
  toolInput: {
    account_group_key: '<account_group_key>',
  },
  connector: 'eracontextmcp',
  identifier: 'user_123',
})
```

**Python**

```python
result = actions.execute_tool(
    tool_name="eracontextmcp_accounts__check_account_balance",
    tool_input={
        "account_group_key": "<account_group_key>",
    },
    connection_name="eracontextmcp",
    identifier="user_123",
)
```

`result.data` is the app's response as JSON, and `result.execution_id` (`executionId` in Node.js) is the ID of the call.

### `eracontextmcp_accounts__check_account_balance`

Accounts Check Account Balance · Read-only

Get the current and available balance for a specific account, including credit limit if applicable. Requires an account_group_key from List Financial Accounts.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `account_group_key` (`string`, required): The account group projection key. Obtain from accounts__list_financial_accounts (the account_group_key field).

Example input: `{"account_group_key":"<account_group_key>"}`

### `eracontextmcp_accounts__list_financial_accounts`

Accounts List Financial Accounts · Read-only

List all linked accounts (bank, credit card, investment, manual) with balances and the account_group_key values used by other tools.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `include_hidden` (`boolean`, optional): Set to true to also show accounts the user has chosen to hide. Default: false (only visible accounts). Default: `false`.

Example input: `{}`

### `eracontextmcp_billing__get_current_plan`

Billing Get Current Plan · Read-only

Get the user's active plan tier, billing period, feature entitlements, and usage against plan limits.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `currency` (`string`, optional): Which currency to show the amounts in, as an ISO 4217 code (e.g. 'eur', 'gbp'). Optional: omit it and the amounts are shown in the currency this platform can tell the user settles in — the one their live subscriptions are billed in, or, for a user holding no live subscription, the one their past subscriptions settled in — and in the default currency only where it can tell neither, or tells more than one. That is the same currency the response reports as settled_currency, so a null settled_currency means the amounts are in the default currency. A code outside the supported set is rejected rather than substituted, and the rejection names the codes that are supported.

Example input: `{}`

### `eracontextmcp_billing__list_payments`

Billing List Payments · Read-only

List the user's past invoices — what they were charged, when, for which service period, and whether each was paid. Use for 'what have I been charged?', 'when was I last billed?', or 'show me my receipts'. Amounts are in minor currency units (cents for USD). Pagination is forward-only and cursor-based, not page-numbered: pass the previous response's next_cursor back as cursor to get the next page, and stop when next_cursor is null (has_more is false). This tool returns no invoice PDF or hosted invoice link, by design.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `cursor` (`string`, optional): Opaque pagination cursor from the previous page's next_cursor. Omit for the first page. Echo it back exactly as received — it is not an offset and cannot be constructed or incremented.
- `limit` (`integer`, optional): Maximum invoices to return on this page. Values outside the supported range are clamped server-side, so an out-of-range value degrades to the nearest supported page size rather than failing.

Example input: `{}`

### `eracontextmcp_billing__list_plans`

Billing List Plans · Read-only

List all available subscription plans with pricing, billing periods, and plan identifiers needed for the upgrade tool.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `currency` (`string`, optional): Which currency to show the plan amounts in, as an ISO 4217 code (e.g. 'eur', 'gbp'). Optional: omit it and the amounts are shown in the currency this platform can tell the user settles in — the one their live subscriptions are billed in, or, for a user holding no live subscription, the one their past subscriptions settled in — and in the default currency only where it can tell neither, or tells more than one. That is the same currency the response reports as settled_currency, so a null settled_currency means the amounts are in the default currency. A code outside the supported set is rejected rather than substituted, and the rejection names the codes that are supported.
- `product_key` (`string`, optional): Which product to explore plan options for (e.g., 'hub', 'quant'). Defaults to 'hub' if omitted.

Example input: `{}`

### `eracontextmcp_billing__list_subscriptions`

Billing List Subscriptions · Read-only

List what the user is actually being charged for right now, read live from Stripe, broken down by individual line item. Use for 'what am I paying for?', 'when does my subscription renew?', 'how much is my add-on?', or 'am I being charged twice?'. Each subscription carries one or more items, and price, billing period and renewal date are per ITEM, not per subscription. A user may also hold more than one subscription. Call billing__list_payments for past invoices rather than inferring them from this response.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs: none.

Example input: `{}`

### `eracontextmcp_connections__list_connections`

Connections List Connections · Read-only

List every one of the user's bank connections with an honest, provider-agnostic status for each: whether it is healthy, syncing with no data yet, needs reconnecting, is terminally denied, is currently disconnected, or one of several other narrower states. This is the discover hop of the connection recovery loop — call this first to get each connection's connection_id, then act on a specific connection with connections__trigger_connection_resync, connections__connect_bank_account, or connections__disconnect_institution.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs: none.

Example input: `{}`

### `eracontextmcp_help__get_help`

Help Get Help · Read-only

Get help content for a specific topic: getting_started, connecting_accounts, what_can_i_ask, privacy_and_security, or troubleshooting. Topic is required.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `topic` (`string`, required): The help topic to retrieve. Use 'getting_started' for first-time users, 'connecting_accounts' for account linking guidance, 'what_can_i_ask' for example prompts, 'privacy_and_security' for data handling details, or 'troubleshooting' for common issues. One of: `getting_started`, `connecting_accounts`, `what_can_i_ask`, `privacy_and_security`, `troubleshooting`.

Example input: `{"topic":"getting_started"}`

### `eracontextmcp_insights__analyze_spending`

Insights Analyze Spending · Read-only

Break down spending into ranked groups by category, merchant, account, or time period — each with amount, percentage, and transaction count. Supports drill-down: call with group_by=category first, then again with a specific category and group_by=merchant.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `account_group_key` (`string`, optional): Filter to a specific account. Pass the account group projection key from accounts__list_financial_accounts (the account_group_key field).
- `category_key` (`string`, optional): Optional fcat_* category KEY (not a display name) to drill into one category. To get keys, call with group_by='category' and include_subcategories=true; each parent category returns its stable category_key. Pass one back here with group_by='merchant' to see the merchants that drove it. Keys are also listed by transactions__list_spending_categories (the key field). Omit to include all categories.
- `group_by` (`string`, optional): How to group the spending: 'category' (e.g., Groceries, Transportation), 'merchant' (e.g., Amazon, Starbucks), 'account' (by bank account), 'week' or 'month' (spending over time). One of: `category`, `merchant`, `account`, `week`, `month`. Default: `category`.
- `include_subcategories` (`boolean`, optional): When true and group_by is 'category', groups results by parent category with subcategory breakdown. Default: `false`.
- `period` (`string`, optional): Time range for the breakdown. Use 'custom' with period_start/period_end for a specific date range. One of: `this_week`, `this_month`, `last_month`, `last_7_days`, `last_30_days`, `last_90_days`, `this_year`, `last_year`, `custom`, `all_time`. Default: `this_month`.
- `period_end` (`string`, optional): Custom end date (YYYY-MM-DD). Used when period is 'custom'.
- `period_start` (`string`, optional): Custom start date (YYYY-MM-DD). Used when period is 'custom'.
- `top_n` (`integer`, optional): How many groups to return, ranked by spending amount (highest first). Default: 10. Default: `10`.

Example input: `{}`

### `eracontextmcp_insights__compare_spending_periods`

Insights Compare Spending Periods · Read-only

Compare spending between two time periods side-by-side, returning the dollar and percentage change per group.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `account_group_key` (`string`, optional): Filter to a specific account. Pass the account group projection key from accounts__list_financial_accounts (the account_group_key field).
- `category_key` (`string`, optional): Optional fcat_* category KEY (not a display name) to compare only that category's spending between the two periods. Obtain the key from transactions__list_spending_categories (the key field) or reuse a category_key returned by insights__analyze_spending. Omit to compare across all categories.
- `group_by` (`string`, optional): How to break down the comparison: 'total' shows one overall comparison, 'category' compares each spending category, 'merchant' compares each merchant. One of: `total`, `category`, `merchant`. Default: `total`.
- `period_a` (`string`, optional): The first time period to compare (shown as the 'current' or 'newer' period in the results). One of: `this_week`, `this_month`, `last_month`, `last_7_days`, `last_30_days`, `last_90_days`, `this_year`, `last_year`. Default: `this_month`.
- `period_b` (`string`, optional): The second time period to compare against (shown as the 'baseline' or 'older' period). One of: `this_week`, `this_month`, `last_month`, `last_7_days`, `last_30_days`, `last_90_days`, `this_year`, `last_year`. Default: `last_month`.

Example input: `{}`

### `eracontextmcp_insights__forecast_spending`

Insights Forecast Spending · Read-only

Project end-of-period spending based on current pace and historical patterns.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `account_group_key` (`string`, optional): Limit the projection to a specific account. Pass the account group projection key from accounts__list_financial_accounts (the account_group_key field). Omit to project across all accounts.
- `period` (`string`, optional): The time period to project spending for. 'this_month' is most common. One of: `this_month`, `last_month`, `last_30_days`, `this_year`. Default: `this_month`.

Example input: `{}`

### `eracontextmcp_insights__get_cash_flow`

Insights Get Cash Flow · Read-only

Get multi-period income vs. spending totals broken down by week or month, showing net cash flow per period.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `account_group_key` (`string`, optional): Filter to a specific account. Pass the account group projection key from accounts__list_financial_accounts (the account_group_key field). Omit to see cash flow across all accounts.
- `granularity` (`string`, optional): Whether to show cash flow by 'week' or 'month'. One of: `week`, `month`. Default: `month`.
- `num_periods` (`integer`, optional): How many periods to include (e.g., 6 months, 12 weeks). Default: 6, max: 12. Default: `6`.

Example input: `{}`

### `eracontextmcp_insights__get_daily_category_spending`

Insights Get Daily Category Spending · Read-only

Get a per-day, per-category spending breakdown for a calendar month. Returns one row per day-and-category combination with the spending amount, transaction count, and the user's category display name, plus month totals. Use for spending-calendar drill-downs and questions like 'which categories did I spend on each day this month?' or 'break down my daily spending by category'. For per-day totals of spending, income, and bills use insights__get_daily_financial_summary; for ranked category totals over a period use insights__analyze_spending. For the current month, totals apply a same-day rolling cutoff: rows dated after today are still returned but excluded from total_amount and transaction_count. Results include only posted/settled transactions; pending (authorization-hold) transactions are excluded.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `month` (`integer`, optional): Month number (1-12). Defaults to the current month.
- `year` (`integer`, optional): Year of the month to query. Defaults to the current year.

Example input: `{}`

### `eracontextmcp_insights__get_daily_financial_summary`

Insights Get Daily Financial Summary · Read-only

Get a day-by-day breakdown of spending and income totals for a specific month, optionally filtered to one category.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `category_key` (`string`, optional): Optional fcat_* category key to filter daily totals by a specific category. Omit to get unfiltered totals.
- `month` (`integer`, optional): Month number (1-12). Defaults to the current month.
- `year` (`integer`, optional): Year of the month to query. Defaults to the current year.

Example input: `{}`

### `eracontextmcp_knowledge__get_financial_context_and_overview`

Knowledge Get Financial Context And Overview · Read-only

Get the user's complete financial context — facts, goals, account summary, net worth, monthly spending, top categories, and pending personalization questions. Call this first for comprehensive context.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `category` (`string`, optional): Filter assertions to a specific category (e.g., 'financial', 'preferences', 'goals'). Omit to return all categories.
- `pack_slug` (`string`, optional): The question pack slug for completion progress data. Defaults to 'financial-profile-v1' if omitted.
- `status` (`string`, optional): Filter assertions by lifecycle status: 'active' (current facts), 'superseded' (replaced by newer facts), 'retracted' (withdrawn), or 'draft' (not finalized). Omit to return only active assertions. One of: `active`, `superseded`, `retracted`, `draft`.
- `tags` (`array`, optional): Filter assertions to those matching specific tags (e.g., ['tax-relevant']). Omit to return all assertions regardless of tags.

Example input: `{}`

### `eracontextmcp_knowledge__get_pending_questions`

Knowledge Get Pending Questions · Read-only

Get unanswered personalization questions with display text, answer type, and criticality. High-criticality questions unlock additional features.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `max_count` (`integer`, optional): Maximum number of questions to return. Defaults to 5 if omitted. Default: `5`.
- `pack_slug` (`string`, optional): The question pack slug to retrieve questions from. Defaults to 'financial-profile-v1' if omitted.

Example input: `{}`

### `eracontextmcp_knowledge__recall_history`

Knowledge Recall History · Read-only

Get the full change history for a specific financial fact, including all past values and timestamps.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `slug` (`string`, required): The slug of the fact to retrieve history for. Get assertion slugs from knowledge__get_financial_context_and_overview.
- `instance_id` (`string`, optional): Instance identifier for repeatable assertions. Only needed when multiple instances exist for the same slug.

Example input: `{"slug":"<slug>"}`

### `eracontextmcp_knowledge__show_question_ui`

Knowledge Show Question Ui · Read-only

Render an interactive prompt for a specific pending question, including answer constraints and suggested presentation format.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `question_slug` (`string`, required): The slug of the question to present as a visual form. Get available slugs from knowledge__get_pending_questions.
- `pack_slug` (`string`, optional): The question pack slug containing this question. Defaults to 'financial-profile-v1' if omitted.

Example input: `{"question_slug":"<question_slug>"}`

### `eracontextmcp_nurture__get_my_status`

Nurture Get My Status · Read-only

Get the caller's own nurture (lifecycle email) campaign enrollment status — which campaigns they are currently enrolled in, their progress through each, and whether they have unsubscribed. Use for questions like 'what emails am I signed up for?' or 'am I subscribed to X?'. Call nurture__set_subscription to change the subscription state for a specific campaign.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs: none.

Example input: `{}`

### `eracontextmcp_referral__get_dashboard_sso`

Referral Get Dashboard Sso · Read-only

Get a single-sign-on URL for the user's referral dashboard without a separate login.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs: none.

Example input: `{}`

### `eracontextmcp_referral__get_referral_link`

Referral Get Referral Link · Read-only

Get the user's unique shareable referral link for inviting others.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs: none.

Example input: `{}`

### `eracontextmcp_referral__get_referral_stats`

Referral Get Referral Stats · Read-only

Get referral performance stats: invites sent, conversions, and earnings.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs: none.

Example input: `{}`

### `eracontextmcp_transactions__list_recurring_charges`

Transactions List Recurring Charges · Read-only

List detected recurring charges (subscriptions, bills, income) with merchant, amount, and frequency.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `active_only` (`boolean`, optional): When true (default), only shows recurring items that have appeared within the last 60 days. Set to false to also include items that may have stopped. Default: `true`.
- `type` (`string`, optional): Filter by type: 'subscription' (Netflix, Spotify, etc.), 'bill' (rent, utilities, etc.), 'income' (salary, freelance, etc.), or 'all' for everything. One of: `all`, `subscription`, `bill`, `income`. Default: `all`.

Example input: `{}`

### `eracontextmcp_transactions__list_spending_categories`

Transactions List Spending Categories · Read-only

Get the full category tree with fcat_* keys, icons, and spending types. Call this to discover valid category keys for other tools.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs: none.

Example input: `{}`

### `eracontextmcp_transactions__list_transactions`

Transactions List Transactions · Read-only

Paginated chronological list of transactions with optional filters for date, account, category, tags, and review status. For keyword searches, use search_transactions instead.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `account_group_key` (`string`, optional): Filter to transactions from a specific account. Pass the account group projection key from accounts__list_financial_accounts (the account_group_key field).
- `category_key` (`string`, optional): Filter to transactions with this fcat_* category projection key. Get category keys from transactions__list_spending_categories. When combined with include_children=true, includes transactions from all subcategories.
- `from_date` (`string`, optional): Start date for transaction range (YYYY-MM-DD). Defaults to all available transaction history.
- `include_children` (`boolean`, optional): When true and category_key is set, includes transactions from the parent category and all its subcategories. Use this for parent category transaction counts. Default: `false`.
- `page` (`integer`, optional): Page number (1-based). Default: `1`.
- `page_size` (`integer`, optional): Number of transactions per page (max 100). Default: `50`.
- `review_status` (`string`, optional): Filter to transactions by their review status. System rules like anomaly detection and bounced payment detection automatically flag transactions as 'needs_review'. One of: `needs_review`, `reviewed`, `flagged`.
- `rule_ids` (`array`, optional): Rule projection keys (e.g. ["frul_abc"]). Only transactions matched by at least one of these rules are returned. Maximum 50 items; requests with more than 50 items are rejected with an error. Get rule keys from transactions__manage_automation_rules with 'list' action.
- `tag_keys` (`array`, optional): Tag projection keys (e.g. ["ftag_abc"]). Only transactions with at least one of these tags are returned. Maximum 50 items; requests with more than 50 items are rejected with an error. Get tag keys from transactions__manage_transaction_tags with 'list_tags' action.
- `to_date` (`string`, optional): End date for transaction range (YYYY-MM-DD). Defaults to today.

Example input: `{}`

### `eracontextmcp_transactions__search_transactions`

Transactions Search Transactions · Read-only

Search and filter transactions by merchant name, description, amount range, category, date range, and direction (debit/credit). Returns matching transactions with total count and sum — no arithmetic needed. Use for targeted questions like 'how much did I spend at Starbucks?', 'what was that $50 charge?', or 'show me all refunds this month'. Supports free-text search so exact merchant names are not required. Use category_key with include_children=true to search across all subcategories of a parent category. For browsing recent activity chronologically, prefer transactions__list_transactions instead. Session context from knowledge__get_financial_context_and_overview enriches these results with the user's profile, goals, and preferences.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `account_group_key` (`string`, optional): Filter to transactions from a specific account. Pass the account group projection key from accounts__list_financial_accounts (the account_group_key field).
- `category_key` (`string`, optional): Filter to transactions with this fcat_* category projection key. Get category keys from transactions__list_spending_categories. When combined with include_children=true, includes transactions from all subcategories.
- `direction` (`string`, optional): Filter by money direction: 'debit' for money going out (purchases, payments), 'credit' for money coming in (income, refunds), or 'all' for both. One of: `all`, `debit`, `credit`. Default: `all`.
- `include_children` (`boolean`, optional): When true and category_key is set, includes transactions from the parent category and all its subcategories. Use this for parent category transaction counts. Default: `false`.
- `limit` (`integer`, optional): Maximum number of transactions to return (1-50). The response also includes total_results count and sum even if the limit clips the list. Default: `25`.
- `max_amount` (`number`, optional): Maximum transaction amount.
- `min_amount` (`number`, optional): Minimum transaction amount. Use negative values for charges/debits (e.g., -100 finds charges of $100 or more).
- `period` (`string`, optional): Time range to search within. Use 'custom' with period_start/period_end for a specific date range. One of: `this_week`, `this_month`, `last_month`, `last_7_days`, `last_30_days`, `last_90_days`, `this_year`, `last_year`, `custom`, `all_time`. Default: `all_time`.
- `period_end` (`string`, optional): Custom end date (YYYY-MM-DD). Used when period is 'custom'.
- `period_start` (`string`, optional): Custom start date (YYYY-MM-DD). Used when period is 'custom'.
- `query` (`string`, optional): Free-text search across merchant name and description. Exact merchant names are not required — partial matches work (e.g., 'star' matches 'Starbucks').
- `review_status` (`string`, optional): Filter to transactions by their review status. System rules like anomaly detection and bounced payment detection automatically flag transactions as 'needs_review'. One of: `needs_review`, `reviewed`, `flagged`.
- `rule_ids` (`array`, optional): Rule projection keys (e.g. ["frul_abc"]). Only transactions matched by at least one of these rules are returned. Maximum 50 items; requests with more than 50 items are rejected with an error. Get rule keys from transactions__manage_automation_rules with 'list' action.
- `sort_by` (`string`, optional): How to order the results: by 'date' (newest first), 'amount', or 'merchant' name. One of: `date`, `amount`, `merchant`. Default: `date`.
- `tag_keys` (`array`, optional): Tag projection keys (e.g. ["ftag_abc"]). Only transactions with at least one of these tags are returned. Maximum 50 items; requests with more than 50 items are rejected with an error. Get tag keys from transactions__manage_transaction_tags with 'list_tags' action.

Example input: `{}`

### `eracontextmcp_accounts__set_account_visibility`

Accounts Set Account Visibility · Write

Show or hide an account in the dashboard without disconnecting it — the account continues to sync.

Read only: no. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `account_group_key` (`string`, required): The account group projection key. Obtain from accounts__list_financial_accounts (the account_group_key field).
- `visible` (`boolean`, required): Set to true to show the account (Owner scope) or false to hide it (UserExcluded scope).

Example input: `{"account_group_key":"<account_group_key>","visible":true}`

### `eracontextmcp_accounts__toggle_balance_backfill`

Accounts Toggle Balance Backfill · Write

Enable balance history derivation from transaction data, or disable it to revert to snapshot-only balances.

Read only: no. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `account_group_key` (`string`, required): The account group projection key identifying the target account group. Obtain from accounts__list_financial_accounts (the account_id field). Must be a manual account.
- `enable` (`boolean`, required): Set to true to enable balance derivation from transaction history. Set to false to disable and revert to snapshot-only balance behavior.

Example input: `{"account_group_key":"<account_group_key>","enable":true}`

### `eracontextmcp_billing__uncancel_subscription`

Billing Uncancel Subscription · Write

Reverse a pending subscription cancellation before it takes effect, optionally with a winback discount.

Read only: no. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `apply_coupon` (`boolean`, optional): Whether to apply the 50% off winback coupon during the uncancel. Defaults to true. Set to false if the user does not want the discount.

Example input: `{}`

### `eracontextmcp_billing__upgrade`

Billing Upgrade · Write

Upgrade to a higher tier or different billing period. Use billing__list_plans first to get valid plan identifiers.

Read only: no. Destructive: no. Idempotent (safe to retry): no.

Inputs:

- `billing_period` (`string`, required): How often to bill: 'monthly', 'quarterly', or 'yearly'. One of: `monthly`, `quarterly`, `yearly`.
- `target_plan` (`string`, required): Which plan to subscribe to (e.g., 'organize', 'automate', 'optimize'). Use billing__list_plans to see available plans.
- `client_reference_id` (`string`, optional): Optional client reference ID for referral attribution. Passed through to Stripe unchanged.
- `coupon_id` (`string`, optional): Optional Stripe coupon ID from Rewardful for referral discounts. Ignored when a promotion code is also provided.
- `currency` (`string`, optional): Which currency to bill the subscription in, as an ISO 4217 code (e.g. 'eur', 'gbp'). Optional: omit it and the subscription is billed in whatever currency this account already settles in. Naming a different currency is refused rather than applied whenever this platform can tell which single currency is in force — from the subscription a tier change would alter, or from the account's own settlement history; where it can tell from neither, or the history holds more than one currency, the purchase proceeds. A code outside the supported set is rejected rather than substituted; the rejection names the codes that are supported.
- `product_key` (`string`, optional): Which product to upgrade (e.g., 'hub', 'quant'). Defaults to 'hub' if omitted.
- `promotion_code` (`string`, optional): Optional promotion code to apply a discount at checkout (e.g., 'SAVE50'). Omit to let the user enter one manually.

Example input: `{"billing_period":"monthly","target_plan":"organize"}`

### `eracontextmcp_connections__connect_bank_account`

Connections Connect Bank Account · Write

Start a bank account connection flow via Plaid or a direct integration and return a redirect URL for the user to complete.

Read only: no. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `assistant_name` (`string`, optional): Your name or the name of the AI assistant being used (e.g. 'Claude', 'ChatGPT'). This helps personalize the connection experience for the user.
- `connection_id` (`string`, optional): Optional existing connection ID for reconnection flows. Provide this to reconnect a stale or broken connection instead of creating a new one. Get connection IDs from the accounts listing.
- `provider` (`string`, optional): Optional banking provider identifier for this connection. Omit to use the platform's default provider unless you have a specific provider requirement. Default: `mx`.

Example input: `{}`

### `eracontextmcp_connections__set_proactive_sync_mode`

Connections Set Proactive Sync Mode · Write

Record whether Era may proactively ask a bank connection's provider for fresh data on its own schedule. Set mode='disabled' when the user wants Era to stop reaching out to that bank between their own requests; set mode='enabled' to allow it again. This does NOT stop the connection: webhook updates, reconciliation and reads of data the provider already holds continue either way, and an on-demand refresh the user asks for is always honoured. Use connections__list_connections to obtain the connection_id.

Read only: no. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `connection_id` (`string`, required): The connection projection key identifying the bank connection. Obtain from connections__list_connections (the connection_id field on each connection entry).
- `mode` (`string`, required): 'disabled' to stop Era proactively contacting this bank on its own schedule; 'enabled' to allow it. Repeating the instruction the connection already carries is a no-op — it records nothing and adds nothing to the user's history. One of: `enabled`, `disabled`.

Example input: `{"connection_id":"<connection_id>","mode":"enabled"}`

### `eracontextmcp_connections__trigger_connection_resync`

Connections Trigger Connection Resync · Write

Trigger an on-demand data resync for a bank connection. This fetches the latest transaction and balance data from supported banks — most major institutions support on-demand refresh, though it may take a few minutes for data to arrive. Possible outcomes include: resync queued successfully; the bank requires the user to re-authenticate first; the user's plan does not include on-demand resync; data was already refreshed recently; or the connection was not found. Use connections__list_connections to obtain the connection_id.

Read only: no. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `connection_id` (`string`, required): The connection projection key identifying the bank connection to resync. Obtain from connections__list_connections (the connection_id field on each connection entry).

Example input: `{"connection_id":"<connection_id>"}`

### `eracontextmcp_knowledge__confirm_or_reject_inference`

Knowledge Confirm Or Reject Inference · Write

Accept or dispute an AI-inferred financial fact. When rejecting, optionally provide the user's correct value.

Read only: no. Destructive: no. Idempotent (safe to retry): no.

Inputs:

- `action` (`string`, required): The action to take: 'confirm' to accept the inferred value, or 'reject' to dispute it. One of: `confirm`, `reject`.
- `slug` (`string`, required): The slug of the inferred assertion to confirm or reject. Get assertion slugs from knowledge__get_financial_context_and_overview.
- `corrected_value` (`string`, optional): The user's corrected value when rejecting an inference (e.g., the system inferred '$5,000/mo' but the user's actual income is '$8,500/mo'). Only used when action is 'reject'.
- `instance_id` (`string`, optional): Instance identifier for repeatable assertions. Only needed when multiple instances exist for the same slug.

Example input: `{"action":"confirm","slug":"<slug>"}`

### `eracontextmcp_knowledge__defer_question`

Knowledge Defer Question · Write

Skip a question permanently or snooze it to resurface after a specified number of days.

Read only: no. Destructive: no. Idempotent (safe to retry): no.

Inputs:

- `action` (`string`, required): The action to take: 'skip' to decline the question, or 'snooze' to defer it for a number of days. One of: `skip`, `snooze`.
- `question_slug` (`string`, required): The slug of the question to skip or snooze. Get available slugs from knowledge__get_pending_questions.
- `pack_slug` (`string`, optional): The question pack slug containing this question. Defaults to 'financial-profile-v1' if omitted.
- `snooze_days` (`integer`, optional): Number of days to snooze the question (required when action is 'snooze'). The question will be re-surfaced after this many days.

Example input: `{"action":"skip","question_slug":"<question_slug>"}`

### `eracontextmcp_knowledge__remember`

Knowledge Remember · Write

Store a financial fact, preference, or goal. Populate exactly one typed value field matching the answer_type (text, number, money, date, or boolean).

Read only: no. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `answer_type` (`string`, required): The structural type. For prompted questions, use the answer_type from knowledge__get_pending_questions. One of: `text`, `text-multiline`, `number`, `money`, `money-periodic`, `money-relative`, `date`, `single-select`, `multi-select`, `boolean`, `scale`, `country`, `region`.
- `slug` (`string`, required): The machine-readable identifier. For prompted questions, use the slug from knowledge__get_pending_questions.
- `boolean_value` (`boolean`, optional): Boolean value for boolean answer type.
- `category` (`string`, optional): The logical grouping category. Auto-derived for prompted questions; required for ambient facts. One of: `identity`, `income-and-employment`, `household`, `assets-and-debts`, `goals`, `preferences`, `behavioral`. Default: `preferences`.
- `confidence` (`string`, optional): How certain the system is about this fact: 'definitive' (user explicitly stated), 'confirmed' (inferred and user confirmed), 'inferred' (agent derived, not yet confirmed), or 'observed' (computed from data). Defaults to 'definitive' if omitted. One of: `definitive`, `confirmed`, `inferred`, `observed`. Default: `definitive`.
- `date_value` (`string`, optional): Date value for date answer type (YYYY-MM-DD).
- `instance_id` (`string`, optional): Instance identifier for repeatable facts that can have multiple values (e.g., 'checking-1', 'savings-2' for account-related facts). Omit for single-value facts.
- `modality` (`string`, optional): The nature of the assertion: 'definite' (a stated fact), 'aspirational' (a goal or intention), or 'conditional' (contingent on something). Defaults to 'definite' if omitted. One of: `definite`, `aspirational`, `conditional`. Default: `definite`.
- `money_periodic_value` (`object`, optional): Periodic money value for money-periodic answer type (amount + currency + frequency).
- `money_relative_value` (`object`, optional): Relative money value for money-relative answer type (amount + currency + direction).
- `money_value` (`object`, optional): Money value for money answer type.
- `numeric_value` (`number`, optional): Numeric value for number and scale answer types.
- `pack_slug` (`string`, optional): Question pack slug for flow tracking. Defaults to 'financial-profile-v1'.
- `source` (`string`, optional): How this fact was captured: 'prompted' (user answered a question), 'conversational' (discovered during chat), 'inferred' (derived by agent), 'observed' (computed from data), or 'imported' (external source). Defaults to 'conversational' if omitted. One of: `prompted`, `conversational`, `inferred`, `observed`, `imported`. Default: `conversational`.
- `tags` (`array`, optional): Optional tags for additional categorization (e.g., ['tax-relevant', 'high-priority']).
- `text_value` (`string`, optional): String value for text, text-multiline, single-select, multi-select (comma-separated), country (ISO alpha-2), and region answer types.
- `use_connected_accounts` (`string`, optional): When the user wants the answer sourced from their connected financial accounts rather than a typed value, set this to "connected-accounts". Mutually exclusive with all typed value fields (text_value, numeric_value, boolean_value, date_value, money_value, money_periodic_value, money_relative_value). Use for balance and debt questions where the answer is available from the user's linked accounts. One of: `connected-accounts`.
- `valid_time` (`string`, optional): When this fact became true in the user's life (YYYY-MM-DD). Omit if the fact has no specific start date.
- `valid_until` (`string`, optional): When this fact should be considered stale and re-asked (YYYY-MM-DD). Omit if the fact does not expire.

Example input: `{"answer_type":"text","slug":"<slug>"}`

### `eracontextmcp_nurture__set_subscription`

Nurture Set Subscription · Write

Subscribe the caller to, or unsubscribe them from, a nurture (lifecycle email) campaign. Takes effect immediately — no confirmation step, and always reversible by calling this tool again with the opposite value. Unsubscribing from a campaign the caller was never enrolled in is a safe no-op. Call nurture__get_my_status first to see the caller's current campaigns and subscription state.

Read only: no. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `campaign_id` (`string`, required): The campaign identifier. Obtain from nurture__get_my_status's response.
- `subscribed` (`boolean`, required): Set to true to subscribe (resubscribe if previously unsubscribed) or false to unsubscribe.

Example input: `{"campaign_id":"<campaign_id>","subscribed":true}`

### `eracontextmcp_referral__join_referral_program`

Referral Join Referral Program · Write

Enroll the user in the referral program and create their affiliate profile.

Read only: no. Destructive: no. Idempotent (safe to retry): yes.

Inputs: none.

Example input: `{}`

### `eracontextmcp_referral__switch_referral_campaign`

Referral Switch Referral Campaign · Write

Switch the user's active referral campaign to a different slug.

Read only: no. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `slug` (`string`, required): The campaign slug to switch to. Valid values: 'invite' or 'creator'.

Example input: `{"slug":"<slug>"}`

### `eracontextmcp_transactions__import_csv_transactions`

Transactions Import Csv Transactions · Write

Import transactions from a CSV export of Monarch, Copilot, YNAB, Mint, or Wells Fargo. Use preview_only=true to validate before committing.

Read only: no. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `account_group_key` (`string`, required): The account group projection key of the manual account to import into. Obtain from accounts__list_financial_accounts (the account_id field). Must be a manual account.
- `csv_content` (`string`, required): The complete CSV text content (including header row). Pass the raw CSV as a string — do NOT base64-encode, MCP is text-native.
- `format` (`string`, optional): Optional format hint to bypass auto-detection. Supported values: "monarch", "copilot", "ynab", "mint", "wellsfargo", "chase", "bankofamerica", "amex", "schwab". If omitted, format is auto-detected from the CSV header row. One of: `monarch`, `copilot`, `ynab`, `mint`, `wellsfargo`, `chase`, `bankofamerica`, `amex`, `schwab`.
- `preview_only` (`boolean`, optional): When true, parse and validate the CSV but do not write transactions. Returns per-row validation verdicts (valid/invalid + reason). Default: false.

Example input: `{"account_group_key":"<account_group_key>","csv_content":"<csv_content>"}`

### `eracontextmcp_transactions__manage_automation_rules`

Transactions Manage Automation Rules · Write

Create, list, update, delete, or enable rules that auto-categorize or tag matching transactions. Supports per-transaction and pattern-detection (transfer/recurring) rules.

Read only: no. Destructive: no. Idempotent (safe to retry): no.

Inputs:

- `action` (`string`, required): What to do. Create adds a new rule, list shows existing rules, update changes a rule's conditions or actions, delete removes a rule permanently, enable/disable turns a rule on or off without deleting it, preview tests filters against recent transactions without saving anything. One of: `create`, `list`, `update`, `delete`, `enable`, `disable`, `preview`.
- `actions` (`array`, optional): What to do with matching transactions (required for create and update). You can combine multiple actions. For category, merchant rename, description, review status, hide, and transfer actions, only the highest-priority rule's action applies. Tag actions (add/remove) always apply from all matching rules.
- `application_scope` (`string`, optional): Determines which transactions this rule applies to. Prospective applies only to new transactions going forward. Retroactive applies only when explicitly re-running against existing transactions. Both (default) does both. One of: `prospective`, `retroactive`, `both`.
- `applies_from` (`string`, optional): Only apply this rule to transactions dated on or after this date (YYYY-MM-DD). Omit to apply to transactions of any date.
- `applies_to` (`string`, optional): Only apply this rule to transactions dated on or before this date (YYYY-MM-DD). Omit to apply to transactions of any date.
- `apply_retroactively` (`boolean`, optional): Whether to immediately apply the rule to the user's existing transactions. Default: true — all matching transactions are updated right away. When updating an existing rule, the old matches are undone first and the new definition is applied fresh. Set to false only if the user explicitly asks for the rule to apply to future transactions only.
- `description` (`string`, optional): An optional note explaining what this rule does or why it was created.
- `filters` (`array`, optional): Conditions that determine which transactions this rule matches (required for create and update). When multiple filters are provided at the top level, ALL must match (AND logic). Use 'or' type filters to match ANY of several conditions.
- `include_inactive` (`boolean`, optional): When listing rules, set to true to also include disabled rules. Default: false (only active rules are shown).
- `pattern_spec` (`object`, optional): The pattern detection specification. Required for pattern-scope rules. Supports four types: pair_match (transfer detection between accounts), frequency_threshold (counting occurrences in a window), recurring_group (periodic merchant charge detection), and statistical_anomaly (z-score anomaly detection).
- `priority` (`integer`, optional): Rules with higher priority numbers are evaluated first. When two rules could both set a category (or merchant name, etc.) on the same transaction, the higher-priority rule wins. Default: 0.
- `revert_retroactively` (`boolean`, optional): When deleting or disabling a rule, whether to undo the changes it previously made to transactions (e.g., remove the category it assigned, remove tags it added). Default: false — previous changes are left in place. Set to true for a clean undo so the user's transactions return to their state before the rule existed.
- `rule_key` (`string`, optional): The unique key of an existing rule. Required for update, delete, enable, and disable. Get this from the 'list' action response.
- `rule_name` (`string`, optional): A short, descriptive name for the rule (e.g., 'Categorize Uber as Transportation'). Required for create and update.
- `rule_scope` (`string`, optional): The rule scope: 'transaction' (default) evaluates filters against each individual transaction. 'pattern' evaluates a pattern specification against a time-windowed batch of transactions. One of: `transaction`, `pattern`.
- `trigger_mode` (`string`, optional): When to trigger pattern evaluation. Defaults to 'on_batch_complete' for pattern rules, 'on_each_transaction' for transaction rules. One of: `on_each_transaction`, `on_batch_complete`, `on_schedule`, `on_demand`.
- `user_overrides` (`object`, optional): Optional overrides for library rule parameters. Must match the rule's pattern_spec type (e.g. pair_match overrides for a pair_match rule). Library rules cannot be created or deleted, but their behavior can be customized using this field on update.
- `version` (`integer`, optional): The current version number of the rule, used to prevent conflicting edits. REQUIRED for update, delete, enable, and disable. Get this value from the 'list' action response. If someone else changed the rule since you last read it, the operation will fail with a conflict error — re-read the rule and retry.
- `window_days` (`integer`, optional): How many days to look back when searching for matching patterns. Required for pattern-scope rules. Must be between 1 and 365.
- `window_exclude_trigger_account` (`boolean`, optional): When true, transactions from the same account as the trigger are excluded from the window query. Useful for transfer detection to avoid self-matching.
- `window_lookahead_days` (`integer`, optional): How many days to look ahead when searching for matching patterns. Default: 0 (no lookahead).

Example input: `{"action":"create"}`

### `eracontextmcp_transactions__manage_categories`

Transactions Manage Categories · Write

Create, update, hide, delete, merge, or reorder spending categories. New categories require a parent_category_key and URL-safe slug.

Read only: no. Destructive: no. Idempotent (safe to retry): no.

Inputs:

- `action` (`string`, required): What to do. Create adds a new custom category, update changes display properties, hide/unhide controls visibility, delete removes a user-created category, merge_categories combines multiple into one. One of: `create`, `update`, `hide`, `unhide`, `delete`, `merge_categories`, `reorder`, `reset`.
- `apply_retroactively` (`boolean`, optional): When true, retroactively re-evaluates transactions (up to 12 months) after mapping rules are created. Defaults to true.
- `assignment_eligibility` (`string`, optional): Controls whether the AI agent can auto-assign transactions to this category. Optional. One of: `agent_eligible`, `manual_only`.
- `category_key` (`string`, optional): The category key to operate on. Required for update, hide, unhide, delete. For merge_categories this is the target category key.
- `description` (`string`, optional): A description of what this category covers. Optional.
- `display_order` (`integer`, optional): Display order within sibling group. Optional.
- `icon_name` (`string`, optional): A single UTF emoji character used as the category icon in the UI (e.g. "🏠", "💰"). Optional.
- `merge_source_keys` (`array`, optional): Category keys to merge into the target. Required for merge_categories. These categories will be hidden.
- `name` (`string`, optional): The display name for the category. Required for create, optional for update (null = unchanged).
- `parent_category_key` (`string`, optional): The parent category key (fcat_*) under which to create the new category. Required for create.
- `reorder_entries` (`array`, optional): List of {category_key, display_order} pairs. Required for reorder.
- `slug` (`string`, optional): A unique URL-safe slug for the new category (lowercase alphanumeric and hyphens, 2-50 chars). Required for create.
- `source_system_keys` (`array`, optional): System category keys (fcat_*) whose transactions should be routed to this new category. Used with create and merge_categories. Each source gets a mapping rule.
- `spending_type` (`string`, optional): Spending classification for budgeting and analytics. Optional. One of: `necessary`, `discretionary`, `income`, `savings`, `transfer`, `other`.

Example input: `{"action":"create"}`

### `eracontextmcp_transactions__manage_transaction_tags`

Transactions Manage Transaction Tags · Write

Create, list, update, delete, assign, or remove user-defined tags on transactions. version is required for update and delete.

Read only: no. Destructive: no. Idempotent (safe to retry): no.

Inputs:

- `action` (`string`, required): What to do: 'create_tag' makes a new tag, 'list_tags' shows all tags, 'get_tag' gets details for one tag, 'update_tag' changes a tag's name or appearance, 'delete_tag' removes a tag, 'assign_tags' attaches a tag to specific transactions, 'remove_tags' detaches a tag from specific transactions. One of: `create_tag`, `list_tags`, `get_tag`, `update_tag`, `delete_tag`, `assign_tags`, `remove_tags`.
- `color` (`string`, optional): A hex color code for the tag's visual appearance (e.g., '#FF5733'). Optional.
- `display_name` (`string`, optional): The name shown to the user (e.g., 'Business Trip'). Optional when creating (defaults to the tag name). Required when updating. Maximum 50 characters.
- `icon` (`string`, optional): An icon name for the tag's visual appearance. Optional.
- `include_deleted` (`boolean`, optional): When listing tags, set to true to also include previously deleted tags. Default: false.
- `name` (`string`, optional): The tag name (required for create_tag). Spaces are replaced with hyphens and text is lowercased to create a stable identifier (e.g., 'Business Trip' becomes 'business-trip'). Maximum 50 characters.
- `tag_key` (`string`, optional): The tag's unique identifier (required for get_tag, update_tag, delete_tag, assign_tags, remove_tags). Get this from create_tag or list_tags responses.
- `tag_type` (`string`, optional): Whether this tag was created by the user ('user', default) or by an automation rule ('auto'). One of: `user`, `auto`.
- `transaction_ids` (`array`, optional): The transaction group IDs (utgr_*) to tag or untag. REQUIRED for assign_tags and remove_tags. Get these from transactions__list_transactions or transactions__search_transactions responses. Up to 100 per call.
- `type_filter` (`string`, optional): When listing tags, only show tags of this type. Optional. One of: `user`, `system`, `auto`.
- `version` (`integer`, optional): The current version number of the tag, used to prevent conflicting edits. REQUIRED for update_tag and delete_tag. Get this from list_tags or get_tag responses.

Example input: `{"action":"create_tag"}`

### `eracontextmcp_transactions__manage_transfer_links`

Transactions Manage Transfer Links · Write

List, confirm, or reject system-detected transfer pairs between transactions (e.g. a credit card payment matched to a bank debit).

Read only: no. Destructive: no. Idempotent (safe to retry): no.

Inputs:

- `action` (`string`, required): What to do: 'list' shows detected transfer links between accounts, 'confirm' marks a detected transfer as confirmed by the user (upgrades confidence), 'reject' removes a false positive transfer link and prevents re-detection. One of: `list`, `confirm`, `reject`.
- `transaction_id` (`string`, optional): When listing, only show transfer links involving this specific transaction. Optional.
- `transfer_link_id` (`string`, optional): The unique identifier of the transfer link to confirm or reject. Get this from the 'list' action response. Required for confirm and reject.

Example input: `{"action":"list"}`

### `eracontextmcp_transactions__update_transactions`

Transactions Update Transactions · Write

Bulk-update up to 100 transactions: set category, description, merchant name, or review status. Use clear_* fields to revert overrides to automatic values.

Read only: no. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `transaction_ids` (`array`, required): IDs of the transactions to update (up to 100 at once). Get these from transactions__list_transactions or transactions__search_transactions.
- `category_key` (`string`, optional): The category to assign to these transactions. Call transactions__list_spending_categories first to get valid category keys.
- `clear_category` (`boolean`, optional): Remove the user's manual category choice, reverting to the automatically detected category. Default: `false`.
- `clear_description` (`boolean`, optional): Remove the user's custom description, reverting to the original description from the bank. Default: `false`.
- `clear_merchant_name` (`boolean`, optional): Remove the user's custom merchant name, reverting to the original name from the bank. Default: `false`.
- `clear_review_status` (`boolean`, optional): Clear the review status. Use this instead of review_status when removing a status. Default: `false`.
- `description` (`string`, optional): Set a custom note or description for these transactions.
- `merchant_name` (`string`, optional): Set a custom merchant name for these transactions (e.g., rename 'AMZN*1234' to 'Amazon').
- `review_status` (`string`, optional): Review status to assign: needs_review, reviewed, or flagged. One of: `needs_review`, `reviewed`, `flagged`.

Example input: `{"transaction_ids":[]}`

### `eracontextmcp_accounts__manage_account`

Accounts Manage Account · Destructive

Create, update, delete, or set the balance of a manually tracked account. Use action to specify the operation; amount must be a positive integer with a separate direction field.

Read only: no. Destructive: yes. Idempotent (safe to retry): no.

Inputs:

- `action` (`string`, required): What to do: 'create' adds a new manual account, 'update' changes account properties (account_name applies to any account type; other fields are manual-only), 'delete' soft-deletes a manual account and its transactions, 'set_balance' records a balance snapshot on a manual account. One of: `create`, `update`, `delete`, `set_balance`.
- `account_group_key` (`string`, optional): The account group projection key identifying the account. Required for update, delete, and set_balance. Obtain from accounts__list_financial_accounts (the account_id field).
- `account_name` (`string`, optional): The user-supplied display name (e.g., "Home Mortgage", "Savings Jar"). Required for create. On update, applies to any account type — manual or connected — and writes a user-layer override that surfaces as the effective name; the institution-supplied name is preserved underneath. Mutually exclusive with 'clear_account_name'.
- `account_number_mask` (`string`, optional): Partial account number (last 4 digits). Do NOT supply the full account number. On update: manual accounts only.
- `account_type` (`string`, optional): The account type classification. Required for create (manual). On update: manual accounts only — supplying this for a connected account is rejected. One of: `unknown`, `checking`, `savings`, `money_market`, `cd`, `credit_card`, `line_of_credit`, `brokerage`, `ira_traditional`, `ira_roth`, `retirement401k`, `hsa`, `mortgage`, `auto_loan`, `student_loan`, `personal_loan`, `crypto`, `real_estate`, `manual_asset`, `manual_liability`.
- `amount_minor_units` (`integer`, optional): The balance amount in integer minor units (e.g., 150050 for $1,500.50, or 1000 for 1000 JPY). Required for set_balance. Positive = asset; negative = liability.
- `as_of_date` (`string`, optional): As-of date for the balance record in ISO 8601 format (e.g., "2026-04-15"). Defaults to today if not specified. Optional, set_balance only.
- `balance_currency` (`string`, optional): ISO 4217 currency for the balance (required for set_balance). One of: `usd`, `eur`, `gbp`, `jpy`, `cad`, `aud`, `chf`, `cny`, `hkd`, `nzd`, `sek`, `krw`, `sgd`, `nok`, `mxn`, `inr`, `brl`, `zar`, `uah`, `pln`, `dkk`, `czk`, `huf`, `ron`, `bgn`, `bhd`, `qar`, `aed`, `try`, `thb`, `myr`, `php`, `btc`, `eth`, `usdt`, `usdc`, `bnb`, `xrp`, `ada`, `sol`, `unknown`, `multi`.
- `clear_account_name` (`boolean`, optional): On update: set to true to remove a previously applied user account-name override, reverting the display name to the institution-supplied value (or empty when no provider name exists). Mutually exclusive with 'account_name'. Account-type-agnostic.
- `currency` (`string`, optional): ISO 4217 currency for the account (required for create). One of: `usd`, `eur`, `gbp`, `jpy`, `cad`, `aud`, `chf`, `cny`, `hkd`, `nzd`, `sek`, `krw`, `sgd`, `nok`, `mxn`, `inr`, `brl`, `zar`, `uah`, `pln`, `dkk`, `czk`, `huf`, `ron`, `bgn`, `bhd`, `qar`, `aed`, `try`, `thb`, `myr`, `php`, `btc`, `eth`, `usdt`, `usdc`, `bnb`, `xrp`, `ada`, `sol`, `unknown`, `multi`.
- `initial_balance_minor_units` (`integer`, optional): Starting balance in integer minor units (e.g., 150050 for $1,500.50, or 1000 for 1000 JPY). Positive = asset; negative = liability. Optional, create only.
- `institution_name` (`string`, optional): Institution name for display and fingerprint matching (e.g., "Chase", "Fidelity"). On update: manual accounts only.

Example input: `{"action":"create"}`

### `eracontextmcp_billing__cancel_subscription`

Billing Cancel Subscription · Destructive

Two-step cancellation: first call returns a confirmation key; second call with that key executes the cancellation.

Read only: no. Destructive: yes. Idempotent (safe to retry): no.

Inputs:

- `reason` (`string`, required): Why the user wants to cancel. Summarize their stated reason concisely.
- `accept_offer` (`boolean`, optional): Set to true to accept the retention discount offer. Set to false or omit to decline and receive the billing page URL for manual cancellation. Only used on the second call alongside confirmation_key.
- `confirmation_key` (`string`, optional): The confirmation key from the first call. Omit on first call to receive a key; pass it on the second call to execute the cancellation.

Example input: `{"reason":"<reason>"}`

### `eracontextmcp_connections__disconnect_institution`

Connections Disconnect Institution · Destructive

Permanently remove a linked institution connection and unlink all associated accounts. Get the connection_id from accounts__list_financial_accounts.

Read only: no. Destructive: yes. Idempotent (safe to retry): no.

Inputs:

- `connection_id` (`string`, required): The connection ID of the institution to disconnect. Obtain from accounts__list_financial_accounts (the connection_id field on account entries).

Example input: `{"connection_id":"<connection_id>"}`

### `eracontextmcp_knowledge__forget`

Knowledge Forget · Destructive

Delete a stored financial fact from the user's profile. Use when the user wants to clear an incorrect or outdated answer.

Read only: no. Destructive: yes. Idempotent (safe to retry): no.

Inputs:

- `slug` (`string`, required): The slug of the fact to retract. Get assertion slugs from knowledge__get_financial_context_and_overview.
- `instance_id` (`string`, optional): Instance identifier for repeatable assertions. Only needed when multiple instances exist for the same slug.
- `pack_slug` (`string`, optional): The question pack slug for flow progress recalculation when retracting an answer to a prompted question. Defaults to 'financial-profile-v1' if omitted.

Example input: `{"slug":"<slug>"}`

### `eracontextmcp_knowledge__reset_pack_questions`

Knowledge Reset Pack Questions · Destructive

Warning: this cannot be undone — only call when you have high confidence the user wants to reset and re-surface all previously skipped or snoozed questions. This operation reverts all Skipped and Snoozed question states back to Pending so they will be re-surfaced by the flow engine. It does not delete any stored facts or assertions — only the skip/snooze state is reset. Call knowledge__get_pending_questions after a successful reset to obtain the newly re-surfaced questions.

Read only: no. Destructive: yes. Idempotent (safe to retry): yes.

Inputs:

- `pack_slug` (`string`, optional): The question pack slug to reset. Defaults to 'financial-profile-v1' if omitted.

Example input: `{}`

### `eracontextmcp_transactions__manage_manual_transaction`

Transactions Manage Manual Transaction · Destructive

Create, update, or delete transactions on a manual account. Amount must be a positive integer; use direction=outflow or inflow. Currency is required for create.

Read only: no. Destructive: yes. Idempotent (safe to retry): no.

Inputs:

- `account_group_key` (`string`, required): The account group projection key shared by all operations. Obtain from accounts__list_financial_accounts (the account_id field). Must be a manual account.
- `operations` (`array`, required): Array of transaction operations to execute sequentially. Each has its own action and fields.
- `preview_only` (`boolean`, optional): When true, parse and validate all operations but do not write anything. Returns per-operation validation verdicts (valid/invalid + reason). Default: false.

Example input: `{"account_group_key":"<account_group_key>","operations":[]}`

## Related

Other Accounting & Finance connectors ([all 20](/agentkit/connectors/?category=accounting-finance)):

- [QuickBooks](/agentkit/connectors/quickbooks/): Scalekit connector, OAuth, 117 tools
- [Xero](/agentkit/connectors/xero/): Scalekit connector, OAuth, 94 tools
- [Stripe](/agentkit/connectors/stripe/): Scalekit connector, Access token, 178 tools


---

## More Scalekit documentation

| Resource | What it contains | When to use it |
|----------|-----------------|----------------|
| [/llms.txt](/llms.txt) | Structured index with routing hints per product area | Start here — find which documentation set covers your topic before loading full content |
| [/llms-full.txt](/llms-full.txt) | Complete documentation for all Scalekit products in one file | Use when you need exhaustive context across multiple products or when the topic spans several areas |
| [sitemap-0.xml](https://docs.scalekit.com/sitemap-0.xml) | Full URL list of every documentation page | Use to discover specific page URLs you can fetch for targeted, page-level answers |
