# Onboard your agent to AfterLaunch

AfterLaunch shows how AI search answers name your user's product and ranks the growth moves that change it. These instructions are for you, the AI: your user pasted a prompt that pointed here.

MCP server: https://afterlaunch.io/api/mcp

## 1. Check the account first

Ask your user whether they have an AfterLaunch account with a scanned product. If they have no account at all and you can run commands, you can start one for them: follow the "No account yet" steps just below. Otherwise stop and tell them to run the free scan at https://afterlaunch.io first: connecting needs a scanned product.

### No account yet

Only if you can run commands, and only if your user has no AfterLaunch account at all. You start the account, your user approves it by email, and nothing is created and nothing runs until they do.

1. Ask your user for their website address and their email. Then POST https://afterlaunch.io/api/v1/onboard/start with JSON { "url": "<their website, starting https://>", "email": "<their email>", "agent_label": "<your name>" }. It needs no authentication, and agent_label is optional. Both calls return their fields under data, and an error as error.code and error.message. Keep the device_code, poll_interval_seconds and expires_at from the response.
2. Tell your user to open the approval email from AfterLaunch and approve it. One email, one click. Only then does AfterLaunch create their account and API key and start the free scan of their site.
3. Poll POST https://afterlaunch.io/api/v1/onboard/poll with JSON { "device_code": "<the device_code>" } every poll_interval_seconds. Until they approve, status is pending. Once they do, status is ready and api_key carries their key, shown exactly once: no later poll returns it. Give it to your user and tell them to put it in themselves where your client's section below says. Never ask them to paste it into the chat, and never write it into a file they might commit. If it is lost, they create a new one at https://afterlaunch.io/app/connect#keys. Keep polling until expires_at from the start response: the key must be collected before then.
4. Then connect: follow your own client's section below. Your user already has the key, so they skip creating one in section 3.

If the start call returns an error, tell your user what its message says: most name what to do instead, including when the email already has an account. If the poll stops finding the request, it expired or the setup did not finish. Only a ready poll proves the account was made: an approval page that said approved does not, because the account is created after that page shows. Ask your user to sign in at https://afterlaunch.io. If they can, they create a key at https://afterlaunch.io/app/connect#keys; if they cannot, start again from step 1.

## 2. Which AI are you?

Find your own client below and follow that section only. If you can run commands, add the server to yourself. If you are a chat app (Claude on the web, Claude mobile, Claude Code on the web and ChatGPT), you cannot, so tell your user how.

### Claude Code

Run this command:

```sh
claude mcp add afterlaunch --transport http https://afterlaunch.io/api/mcp --header "Authorization: Bearer $AFTERLAUNCH_API_KEY"
```

Export AFTERLAUNCH_API_KEY in your shell first: the command reads the key from there, so it is never written into the command itself. Claude Code runs tool search by default, so once connected it can find the growth tools on its own.

Verified: yes, checked on 2026-08-14.

### Codex

Run this command:

```sh
codex mcp add afterlaunch --url https://afterlaunch.io/api/mcp --bearer-token-env-var AFTERLAUNCH_API_KEY
```

Codex reads the key from AFTERLAUNCH_API_KEY in your environment and sends it as a bearer header. The token itself never lands on disk.

Verified: yes, checked on 2026-08-19.

### Cursor

Add this block to .cursor/mcp.json, which is per project. Use ~/.cursor/mcp.json to apply it to every project.

```json
{
  "mcpServers": {
    "afterlaunch": {
      "url": "https://afterlaunch.io/api/mcp",
      "headers": {
        "Authorization": "Bearer ${env:AFTERLAUNCH_API_KEY}"
      }
    }
  }
}
```

Cursor expands the environment placeholder from your shell, so the key stays out of the committed file. Set AFTERLAUNCH_API_KEY before you open the project.

Or give your user the one-click install page, which opens Cursor's own confirmation screen with the AfterLaunch server filled in: https://cursor.com/en/install-mcp?name=afterlaunch&config=eyJ1cmwiOiJodHRwczovL2FmdGVybGF1bmNoLmlvL2FwaS9tY3AiLCJoZWFkZXJzIjp7IkF1dGhvcml6YXRpb24iOiJCZWFyZXIgJHtlbnY6QUZURVJMQVVOQ0hfQVBJX0tFWX0ifX0=

Verified: yes, checked on 2026-08-15.

### Windsurf

Add this block to ~/.codeium/windsurf/mcp_config.json, which is global. Windsurf documents no per-project MCP config, so the entry follows you into every workspace.

```json
{
  "mcpServers": {
    "afterlaunch": {
      "serverUrl": "https://afterlaunch.io/api/mcp",
      "headers": {
        "Authorization": "Bearer ${env:AFTERLAUNCH_API_KEY}"
      }
    }
  }
}
```

Windsurf expands the environment placeholder, so set AFTERLAUNCH_API_KEY before you launch the editor. Use the Refresh control in the Cascade MCP panel after editing the file.

Verified: yes, checked on 2026-08-15.

### VS Code

Add this block to .vscode/mcp.json, which is per workspace. A profile-level mcp.json applies it everywhere. Since version 1.102 MCP servers no longer live in settings.json, so an older snippet that nests them there is silently ignored.

```json
{
  "servers": {
    "afterlaunch": {
      "type": "http",
      "url": "https://afterlaunch.io/api/mcp",
      "headers": {
        "Authorization": "Bearer ${input:afterlaunch_key}"
      }
    }
  },
  "inputs": [
    {
      "type": "promptString",
      "id": "afterlaunch_key",
      "description": "AfterLaunch API key",
      "password": true
    }
  ]
}
```

VS Code prompts for the key the first time the server starts and keeps it in the editor secret storage, so it never lands in the committed file.

Or give your user the one-click install page, which opens VS Code's own confirmation screen with the AfterLaunch server filled in: https://insiders.vscode.dev/redirect/mcp/install?name=afterlaunch&config=%7B%22type%22%3A%22http%22%2C%22url%22%3A%22https%3A%2F%2Fafterlaunch.io%2Fapi%2Fmcp%22%7D

Verified: yes, checked on 2026-08-26.

### Gemini CLI

Add this block to ~/.gemini/settings.json

```json
{
  "mcpServers": {
    "afterlaunch": {
      "httpUrl": "https://afterlaunch.io/api/mcp",
      "headers": {
        "Authorization": "Bearer YOUR_AFTERLAUNCH_API_KEY"
      }
    }
  }
}
```

Restart the CLI after editing the file, then run /mcp inside it to confirm the AfterLaunch tools loaded.

Verified: no. One documentation check on 28 August 2026 matched this block, but nobody here has driven Gemini CLI against the AfterLaunch server, so treat it as the shape rather than the proof. Two of the four shapes that were re-checked on 15 August had moved underneath us.

### Cline

Add this block to Cline MCP settings, opened from the Cline panel: MCP Servers, then Configure, then Configure MCP Servers. Cline's documentation gives two different paths for that file, so let Cline open it rather than hunting for it.

```json
{
  "mcpServers": {
    "afterlaunch": {
      "type": "streamableHttp",
      "url": "https://afterlaunch.io/api/mcp",
      "headers": {
        "Authorization": "Bearer YOUR_AFTERLAUNCH_API_KEY"
      }
    }
  }
}
```

The type line is the one that matters. Cline treats a missing type as the older SSE transport, which this server does not serve, so leaving it out fails the handshake with no explanation.

Verified: yes, checked on 2026-08-28.

### Claude on the web

You cannot add yourself. Tell your user, in short steps, how to add the connector and sign in:

1. Open Customize, then Connectors, and add a custom connector. Open Claude's connectors: https://claude.ai/customize/connectors
2. Paste the address as the server URL and press Add. The address: https://afterlaunch.io/api/mcp
3. Open AfterLaunch under Connectors and press Connect.
4. Approve AfterLaunch.

Connector URL: https://afterlaunch.io/api/mcp

Free Claude plans allow one custom connector.

On a Team or Enterprise plan, an owner adds it once in organisation settings.

Chat apps sign in, so there is no key to create.

If your user has no AfterLaunch account with a scanned product yet, tell them to run the free scan at https://afterlaunch.io first: connecting needs a scanned product.

Verified: yes, checked on 2026-08-25.

### Claude mobile

You cannot add yourself. Tell your user, in short steps, how to add the connector and sign in:

1. Add the connector once on claude.ai, at Customize then Connectors, with the same server URL: https://afterlaunch.io/api/mcp
2. Sign in and approve the AfterLaunch consent screen there, on the web.
3. Open the Claude app on iOS or Android and say afterlaunch to see your standup.

Connector URL: https://afterlaunch.io/api/mcp

Chat apps sign in, so there is no key to create.

If your user has no AfterLaunch account with a scanned product yet, tell them to run the free scan at https://afterlaunch.io first: connecting needs a scanned product.

Verified: yes, checked on 2026-08-28.

### Claude Code on the web

You cannot add yourself. Tell your user, in short steps, how to add the connector and sign in:

1. Add AfterLaunch as a connector on your Claude account first, at Customize then Connectors, with the server URL: https://afterlaunch.io/api/mcp
2. Sign in and approve the AfterLaunch consent screen there. On a Team or Enterprise plan only an admin can add it.
3. Start a session on the web and say afterlaunch to see your standup. The connector is handed to the session by the host, so the tools are already there.

Connector URL: https://afterlaunch.io/api/mcp

Chat apps sign in, so there is no key to create.

If your user has no AfterLaunch account with a scanned product yet, tell them to run the free scan at https://afterlaunch.io first: connecting needs a scanned product.

Verified: yes, checked on 2026-08-28.

### ChatGPT

You cannot add yourself. Tell your user, in short steps, how to add the connector and sign in:

1. Open Settings, then Security and login, and turn on Developer mode. Open ChatGPT: https://chatgpt.com/
2. In ChatGPT Plugins, press the plus button to create a developer-mode app. Open Plugins: https://chatgpt.com/plugins
3. Paste the address as the app's endpoint. The address: https://afterlaunch.io/api/mcp
4. Choose OAuth for authentication and create the app.
5. Sign in to AfterLaunch and approve.

Connector URL: https://afterlaunch.io/api/mcp

Chat apps sign in, so there is no key to create.

If your user has no AfterLaunch account with a scanned product yet, tell them to run the free scan at https://afterlaunch.io first: connecting needs a scanned product.

Verified: yes, checked on 2026-08-25.

## 3. The key

A client that runs commands needs an AfterLaunch API key, and your client's section above says where it goes. Ask your user to create one at https://afterlaunch.io/app/connect#keys, unless they already have it from the poll in "No account yet", and put it in themselves where your client's section says. Never ask them to paste a key into the chat. Gemini CLI and Cline take the key written into their config file, in place of YOUR_AFTERLAUNCH_API_KEY. Wherever the key ends up written into a file, keep that file out of the repository: use a user-level config, or make sure the file is never committed.

## 4. First calls

Once connected, call whoami to confirm which product the key drives, then call get_standup and show your user its screen exactly as it comes back, in a code block, menu and footer included.

## 5. Stop and ask

Then stop and ask your user what to do. Do not take on, publish or spend anything unless they say so.

When setup is finished, tell them:

> AfterLaunch is connected. Say afterlaunch to see your standup.

## After that

### Drive the living onboarding

Present the moves one at a time, not as a wall of text. Give the user a short controls legend they drive by keyboard or plain words (keyboard-forward, no voice assumed):

- "more": pull the newly ready moves. The Board is ranked by impact, not by time, so call list_feed again with since set to the newest first_seen_at you have already read (not the last move shown).
- A bare number picks from the numbered menu on the screen you just relayed, and never means a fixed action. On the standup or the board a number opens that move with get_move. On a move screen the menu is: 1 accept, 2 skip. Plain words work too ("revise it", "ship it", "skip it", "why").
- "open" means all the way to next-to-final, not just display. get_move returns the brief AND an agent_instructions field addressed to you: follow it in the same reply. For a written piece, produce the complete deliverable in the founder's voice; for anything else, lay out the exact steps, the destinations and the ready-to-paste text. Save your work back with update_draft, show the founder the result, then stop and ask. You are doing the work on their credits, which is the point.
- "board": show the ranked backlog (list_feed). The other footer words open the other screens: visibility, reach, site, timeline, scoreboard, rivals, plus "why" for the receipt behind a claim.
- Every result carries app_url, the page in the app that shows the same record, and the screen prints it above the menu. Relay it as a link: the screen is a sixty-column compression and that address is the full view.
- For a setup move (connect a source, change a setting, set up a channel): hand over the link and let the founder do it themselves. There is nothing to draft and nothing to publish. Once they confirm it is done, ship_move records it; skip_move or archive_move drops it.
- For a change to the founder's own site (a page, an article, a schema or llms.txt change): ship_move counts it as shipped only with its live URL. Without one it is recorded as prepared, not shipped, so pass the URL once it is live.

Ship is always a confirmed human decision, and it is a SECOND act: opening a move takes it to next-to-final and stops. Never ship a move without the user saying so, and never read a bare number as a ship unless the screen you just relayed gave that number to ship.

If you started the account through the "No account yet" steps, the scan may still be running when you connect.

Pick the surfacing mode that matches what you can do while the deep scan finishes:

- Live: if you can run a poll loop (sleep, then re-call), poll list_feed with since every poll_after_seconds while snapshot_status is "building", and surface each new batch as it lands.
- Ping when ready: if you cannot loop, tell the user to say "more" for the next batch, or that you will continue when they next message you.
- Email backstop: the founder approved by email and stays on email updates from AfterLaunch, so if everyone steps away the moves keep landing on the Board. Call list_feed again, or open the app, whenever they return.
