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

# Sign up from an AI agent

> Let an AI assistant create a LaunchMyStore store for someone inside the chat, with the person consenting at every step

# Sign up from an AI agent

An AI assistant that reaches the store server at `https://api.launchmystore.io/mcp`
without credentials gets a `401` and an OAuth login. That is right for an
existing merchant, but a person who does not have a store yet has nothing to
log in with. The **onboarding server** closes that gap: a small, public MCP
endpoint the assistant can use to create the store in the conversation, then
hand itself the token for the full server.

```
https://api.launchmystore.io/mcp/onboarding
```

No authentication. Streamable HTTP (JSON-RPC 2.0 over `POST`). Four tools.

> [!NOTE]
>
> The person stays in control. Every step needs something only they have: the
> email address they choose, the 6-digit code from their inbox, the store name
> and country. No password is ever typed into the chat. The assistant is told to
> show the terms and privacy policy and get an explicit yes before the account is
> created.

## The conversation

1. **Person:** "Set up an online store for my candle business."
2. **Assistant** calls `get_started`, explains LaunchMyStore, the free trial,
   and asks for the store name, country and email, linking the terms.
3. **Person** gives them and says yes.
4. **Assistant** calls `start_signup` with the email. A 6-digit code is emailed.
5. **Person** reads the code back from their inbox.
6. **Assistant** calls `complete_signup` with the code, store name and country.
   The result contains the store URL and an MCP token.
7. **Assistant** saves the token as `Authorization: Bearer <token>` for
   `https://api.launchmystore.io/mcp` and carries on there: adding products,
   choosing a theme, setting up shipping.

## Tools

### `get_started`

No arguments. Returns what LaunchMyStore is, the pricing summary, what signup
needs, the terms and privacy links, and what an existing merchant should do
instead (connect to the store server with OAuth or a token). Read-only.

### `start_signup`

| Argument | Required | Notes |
| - | - | - |
| `email` | yes | Address the store is registered to. Lower-cased and trimmed. |
| `referral_code` | no | Partner code, if the person has one. |

Creates the account with a free trial and emails the verification code. If the
email already has a verified store nothing is created and the result says
`already_registered` with the store server's address. Sends an email every time
it is called; the assistant is told to call it once.

### `complete_signup`

| Argument | Required | Notes |
| - | - | - |
| `email` | yes | Same as `start_signup`. |
| `code` | yes | The 6 digits from the email. Spaces are ignored. |
| `store_name` | yes | 2 to 80 characters. Becomes the store title and the `*.launchmystore.io` subdomain. |
| `country` | yes | ISO 3166 alpha-2 (`US`, `IN`) or the English name. Sets currency and tax defaults. |
| `owner_name` | no | Store profile. |
| `phone` | no | Business phone, international format. |

Verifies the code, names the store through the same endpoint the admin wizard
uses, then mints the account's long-lived MCP token. Response:

```json theme={null}
{
  "status": "store_created",
  "store": {
    "name": "Maple Candle Co",
    "country": "United States",
    "storefront_url": "https://maplecandleco482913.launchmystore.io",
    "admin_url": "https://app.launchmystore.io",
    "plan": "Trial"
  },
  "mcp": {
    "endpoint": "https://api.launchmystore.io/mcp",
    "token": "…",
    "authorization_header": "Bearer …",
    "expires_at": "2027-09-21T09:12:44.000Z"
  },
  "dashboard_login": "To open the admin in a browser, go to https://app.launchmystore.io, click \"Forgot password\", and set a password for …",
  "next_steps": ["…"]
}
```

The token is the same one shown in **Settings → AI Connector**. Revoking it
there disconnects the assistant.

### `resend_signup_code`

| Argument | Required |
| - | - |
| `email` | yes |

Emails a fresh code. Earlier codes stop working.

## Limits

| Ceiling | Per hour |
| - | - |
| Onboarding writes from one IP address | 20 |
| Code emails to one address | 4 |
| Code attempts for one address | 8 |

Past a ceiling the tool returns an error with `retry_after_seconds` and points
the person to finish signup in a browser at launchmystore.io.

## Why a separate endpoint

The store server must keep answering `401` with OAuth discovery to anonymous
clients. That `401` is what makes OAuth-capable hosts (Claude on the web, Meta
Muse's directory connector) start the login flow. If the store server accepted
anonymous calls those hosts would connect with no account and only ever see
onboarding tools. Keeping onboarding at its own address keeps both behaviours
correct.

## Related

* [MCP Server overview](https://docs.launchmystore.io/mcp/overview.md)
* [Claude.ai custom connector (OAuth)](https://docs.launchmystore.io/mcp/claude-ai-connector.md)
* [Tools reference](https://docs.launchmystore.io/mcp/tools.md)


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.