> ## Documentation Index
> Fetch the complete documentation index at: https://docs.doola.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Tools reference

> The 6 MCP tools and the 15 formation actions driven by advance_company_onboarding.

The server exposes **6 tools**. The whole formation flow runs through one orchestration tool, `advance_company_onboarding`; the other five handle status, multi-company management, and inspection.

<Info>
  **Conventions.** Identity comes from the OAuth bearer — no tool takes a `customerId` argument. Tool descriptions are agent-facing: they double as the agent's playbook. The flow is server-driven — every `advance_company_onboarding` response carries `nextAction` (follow verbatim) and `nextActionInput` (the literal `{action, params}` to pass back), so the host doesn't plan the multi-step flow itself.
</Info>

## advance\_company\_onboarding

Drives the entire Wyoming-LLC formation flow. Pick an `action` and pass the matching `params` object. The server enforces step order via precondition gates and steers you with `nextAction` + `nextActionInput` on every response.

**Parameters**

| Parameter | Type   | Required | Description                                                                                                         |
| --------- | ------ | -------- | ------------------------------------------------------------------------------------------------------------------- |
| `action`  | string | Yes      | One of the actions below.                                                                                           |
| `params`  | object | Yes      | Action-specific parameters. Pass `{}` when the action takes none. Must be a native JSON object — never stringified. |

### Pre-payment actions (in order)

| Action                     | `params`                                                                                                                                                                            |
| -------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `set_country_of_residence` | `{ countryCode }` — ISO 3166-1 Alpha-3 (e.g. `USA`, `GBR`, `IND`)                                                                                                                   |
| `set_company_name`         | `{ name }` — desired name without the `LLC` suffix. One-time initial capture; re-calling overwrites it and wipes alternates.                                                        |
| `set_company_state`        | `{}` — Wyoming is enforced.                                                                                                                                                         |
| `select_package`           | `{}` — Starter is enforced and ToS accepted. Returns live `pricing` (`dueAtCheckout`, `recurringAnnually`, `summary`, `breakdown`) — quote those verbatim, never a hardcoded price. |
| `create_checkout_session`  | `{}` — returns `checkoutUrl` (paste verbatim) and `checkoutSessionId` (keep it for verify).                                                                                         |
| `verify_payment`           | `{ checkoutSessionId }` — call after the user says they paid. Returns `paymentStatus` (`Complete` when done).                                                                       |

### Post-payment actions

| Action                        | `params`                                                                                                                                                 |
| ----------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `search_industry`             | `{}` — read-only. Returns the verbatim `industries` list to fuzzy-match against.                                                                         |
| `set_industry_description`    | `{ industry, description, sellingPlatform? }` — `industry` must be a verbatim entry from `search_industry`.                                              |
| `add_alternate_company_names` | `{ name1, name2?, name3? }` — `name1` is the existing primary (don't re-ask). Each gets the `LLC` suffix.                                                |
| `set_registered_address`      | `{ useRegisteredAgent, line1?, city?, state?, postalCode? }` — address fields only when `useRegisteredAgent=false` (must be Wyoming).                    |
| `set_mailing_address`         | `{ sameAsRegistered, line1?, city?, state?, postalCode? }` — address fields only when `sameAsRegistered=false` (must be US).                             |
| `add_members`                 | `{ members: [{ legalFirstName, legalLastName, isNaturalPerson, phone, line1, city, state, postalCode, country }] }` — native JSON array.                 |
| `set_responsible_party`       | `{ legalFirstName, legalLastName, email, phone, line1, line2?, city, state, postalCode }` — SS-4 + Form 8821 go to this email; confirm it with the user. |
| `set_ownership`               | `{ members: [{ ...full add_members payload, ownershipPercent }] }` — full-record replace; percentages must total exactly 100%.                           |
| `submit_for_review`           | `{ userConfirmed: true }` — only after a complete summary table and an explicit "submit".                                                                |

<Warning>
  `submit_for_review` is **irreversible**. It files with the Wyoming Secretary of State and emails IRS Form SS-4 + Form 8821 to the responsible party for signing. Always present a complete summary table and require an explicit "submit" before calling. Editing after submission may incur extra costs or delays.
</Warning>

### Response fields

Every `advance_company_onboarding` response shares these steering fields (other tools return their own shapes):

| Field             | Meaning                                                                   |
| ----------------- | ------------------------------------------------------------------------- |
| `nextStep`        | Next action name; `null` when the flow is complete.                       |
| `nextAction`      | Imperative for the agent — follow verbatim.                               |
| `nextActionInput` | Literal `{action, params}` payload to pass back next.                     |
| `nextQuestion`    | Question to ask the user verbatim before the next call.                   |
| `error`           | `true` if the action failed.                                              |
| `code`            | Structured error code when `error=true` (see below).                      |
| `missing`         | When `code=PRECONDITIONS_NOT_MET`, the unmet prerequisites in flow order. |
| `message`         | Human-readable status or instruction.                                     |

Error `code` values: `INVALID_INPUT`, `UNKNOWN_ACTION`, `PRECONDITIONS_NOT_MET`, `READINESS_CHECK_FAILED`, `FILING_FAILED`. See [Errors](/mcp/errors).

## Helper tools

<AccordionGroup>
  <Accordion title="get_company_onboarding_status" icon="location-dot">
    The canonical "where am I?" entry point — call it **once per session**, right after the OAuth handshake. No arguments. Returns the customer profile, inferred completed steps, and a `suggestedNextStep` + `nextActionInput` that drive the next `advance_company_onboarding` call.

    Don't call it before every step — each `advance_company_onboarding` response already carries `nextAction` + `nextActionInput`. Re-call it only when the user returns mid-flow and asks "where are we?", after an unexpected error, or after `switch_active_company`. If the customer has no active company yet, it steers you to `set_country_of_residence`.
  </Accordion>

  <Accordion title="list_companies" icon="list">
    Returns every company the authenticated customer owns. Use when the user asks "which companies do I have?", wants to switch context, or before starting a new formation.

    **Returns:** `companies[]` (`companyId`, `name`, `state`, `entityType`, `dashboardStatus`, `submitted`, `isActive`) and `activeCompanyId`. The entry with `isActive: true` is the one the formation tools currently operate on.
  </Accordion>

  <Accordion title="start_new_company" icon="plus">
    Begin a brand-new Wyoming LLC formation alongside existing companies — call when the customer explicitly asks to form a second (or further) company. Creates an empty in-progress company, links it to the customer, and pins it as active. The previously active company is untouched and stays in `list_companies`.

    **Returns:** `companyId` (new active company) and `suggestedNextStep` (`set_country_of_residence`).
  </Accordion>

  <Accordion title="switch_active_company" icon="right-left">
    Point the formation tools at a different company the customer already owns. Returns the same shape as `get_company_onboarding_status` for the newly-active company.

    **Parameter:** `companyId` (string, required) — must be one of the IDs returned by `list_companies`; unknown IDs are rejected.
  </Accordion>

  <Accordion title="get_company_info" icon="building">
    Returns the active company's full profile — name, state, entity type, EIN, industry, dashboard status, formation filing date, members, responsible party, addresses, name options, and provisioned services. Use for "tell me about my company", "what's my EIN?", "who are the members?" — distinct from `get_company_onboarding_status`, which returns derived next-step routing rather than raw data.

    **Parameters:** none. To inspect a different company, call `switch_active_company` first.
  </Accordion>
</AccordionGroup>
