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

# Connect Launchpoint to your AI assistant

> Set up the hosted Launchpoint MCP server in Cursor, Claude Code, Codex, or another MCP client.

> [!NOTE]
>
> **Documentation index:** fetch [https://docs.launchpointhq.com/llms.txt](https://docs.launchpointhq.com/llms.txt) to discover every Launchpoint API page before exploring further.

Launchpoint MCP gives AI assistants access to your programs, posts, analytics, creators, creator applications, onboarding, media review, payouts, pay terms, contracts, and creator conversations. When you ask it to, it can also message creators, decide onboarding proofs and media, and exclude posts from earnings.

Use this hosted Streamable HTTP endpoint:

```text theme={null}
https://dashboard.launchpointhq.com/api/v1/mcp
```

It uses the same API keys, workspace access, creator privacy rules, review rules, money guards, and rate limit as the REST API. Each tool does what its REST route does. MCP cannot create invite links, change creator collections, or link Discord channels.

> [!WARNING]
>
> An MCP key can message creators, approve or reject their onboarding proofs and media, and exclude posts from earnings for programs your workspace can manage. Treat it like a person on your team with those permissions. Review the creator, the decision, and any message text before asking an assistant to act.

## Create an MCP key

Open [Dashboard → Settings → Developer](https://dashboard.launchpointhq.com/campaigns?settings=api), pick your coding tool, then click **Create key & show setup**. The dashboard generates the exact config with a separate key for that connection.

> [!WARNING]
>
> Launchpoint shows a new key only once. Keep it out of source control, browser code, mobile apps, prompts, and logs. Delete the key from the Developer page if it is exposed.

## Install

Set these values in the examples below:

```bash theme={null}
export LAUNCHPOINT_API_KEY="lp_pk_..."
```

**Cursor**

Add this to `~/.cursor/mcp.json` for all projects, or `.cursor/mcp.json` for one project:

```json theme={null}
{
  "mcpServers": {
    "launchpoint": {
      "url": "https://dashboard.launchpointhq.com/api/v1/mcp",
      "headers": {
        "Authorization": "Bearer lp_pk_..."
      }
    }
  }
}
```

Restart Cursor. The Launchpoint tools will appear in **Settings → Tools & MCP**.

**Claude Code**

Run:

```bash theme={null}
claude mcp add --transport http --scope user launchpoint \
  https://dashboard.launchpointhq.com/api/v1/mcp \
  --header "Authorization: Bearer $LAUNCHPOINT_API_KEY"
```

Check the connection:

```bash theme={null}
claude mcp get launchpoint
```

**Codex**

Keep the key in `LAUNCHPOINT_API_KEY`, then run:

```bash theme={null}
codex mcp add launchpoint \
  --url https://dashboard.launchpointhq.com/api/v1/mcp \
  --bearer-token-env-var LAUNCHPOINT_API_KEY
```

Check the connection:

```bash theme={null}
codex mcp get launchpoint
```

**Other clients**

Most remote MCP clients accept this standard config:

```json theme={null}
{
  "mcpServers": {
    "launchpoint": {
      "url": "https://dashboard.launchpointhq.com/api/v1/mcp",
      "headers": {
        "Authorization": "Bearer lp_pk_..."
      }
    }
  }
}
```

If your client uses a form instead of JSON, choose **Streamable HTTP**, paste the MCP URL, and add `Authorization: Bearer lp_pk_...` as a request header.

## Available tools

Tool inputs use snake\_case names for the REST parameters, such as `program_id` for `programId`. Ids are the same as in the REST API.

### Read

| Tool | What it does |
| - | - |
| `list_programs` | Visible programs, with status and name filters |
| `search_creatives` | Creative library search across titles, hooks, transcripts, and storyboards |
| `list_posts` | Posts with metrics, `payment`, creator, and program. Newest first by `uploadedAt`, with stable pages |
| `get_post` | One post with metrics, `payment`, contract, and bonus details |
| `get_posts` | Up to 1,000 posts by id, one answer each. Removed posts return their exclusion record; ids the key cannot see return `payment.state: unknown` |
| `list_post_payments` | One post's money events, oldest first: earned, billed, charged, refunded, credited, and excluded |
| `preview_post_exclusion` | Runs the exclusion checks for one post and changes nothing: whether it can be excluded, the refusal code, the cross-posts, and the pending pay it would remove |
| `get_post_metrics_history` | One post's daily metrics, oldest first, with the change from the day before |
| `get_post_insights` | One post's Instagram performance and Reel watch metrics, plus the account's audience |
| `get_post_analysis` | One post's storyboard scenes and organic and paid retention |
| `get_analytics_overview` | Totals, platform breakdowns, top posts, and top creators |
| `get_comment_dm_analytics` | Comment-to-DM funnel (opt-ins, first DMs sent, link clicks, unique clickers) by program, creator account, post, or day |
| `list_creators` | Visible creators with each program's join date (`joinedAt`), social profiles, enhancement opt-ins, and niches |
| `get_creator_audience` | The audience of each account a creator uses on your programs |
| `list_creator_feed` | A creator's public posts, newest first: stored feed reads plus campaign posts, with counts, the platform's paid-partnership label, and the campaign program |
| `list_applications` | Creator applications to Canvas programs, with pending, approved, or rejected status |
| `list_onboarding_creators` | A program's Onboarding queue, as the dashboard shows it |
| `get_creator_onboarding` | Everything one creator still needs before posting, with the ids of waiting proofs |
| `list_onboarding_proofs` | Onboarding proofs on a program; pending review by default |
| `list_media` | Media creators sent for review before posting; pending review by default |
| `get_media` | One media item with its newest revision and status |
| `list_payouts` | Workspace payout ledger entries |
| `list_pending_payouts` | Money owed to creators that is not paid yet |
| `get_payout_stats` | Available money, money owed, deposits, and money paid out |
| `get_program_spend` | Creator spend per program, the same definition as the dashboard campaign pages |
| `list_pay_structures` | Creator pay terms, CPM or CPC limits, and Canvas payscales |
| `list_contracts` | Visible creator contracts |
| `list_creator_conversations` | Creator conversations for one visible program |
| `list_conversation_messages` | A newest-first page of messages without changing read receipts |

### Write

Each write is a real action. Repeating a decision that a proof or media item already has is safe and returns it as it stands.

| Tool | What it does |
| - | - |
| `send_creator_message` | Sends and stores a workspace message, then notifies the creator |
| `send_onboarding_feedback` | Sends a creator onboarding feedback in the app, by push, and in Discord. Returns `409 proofs_waiting` while a proof waits |
| `approve_onboarding_proof` | Marks the requirement met, or the account warmed up |
| `reject_onboarding_proof` | Rejects a proof with a message; the creator can send a new one |
| `approve_media` | Approves media for posting. Brand keys only |
| `reject_media` | Rejects media with a message; the creator can send a new revision. Brand keys only |
| `exclude_post` | Excludes a Canvas post, and every post with the same `crossPostGroupId`, from earnings. Without `message` the creator is not told. Run `preview_post_exclusion` first to see what would change |

A refused write returns the REST status and `code`, for example `409 proof_already_reviewed`, `409 media_newer_revision`, or `409 already_paid` and `409 has_paid_ads` from `exclude_post`. `exclude_post` never takes money back.

Pass `revision_id` from `list_media` or `get_media` to `approve_media` and `reject_media`. The decision then fails with `media_newer_revision` if the creator sent a newer revision after you looked.

`payment.state` is `paid` (the money reached the creator's Launchpoint balance, not withdrawn), `pending`, `excluded`, `credit_missing` (brand money was spent but the creator credit is missing; contact Launchpoint), `clawed_back`, `paid_off_platform`, or `unknown`. Amounts are whole cents.

Every list tool uses bounded pages. Ask the assistant to keep paging when you need the full matching set. Read every page before you exclude posts: excluded posts leave `list_posts`, so later pages move. `get_posts` still returns an excluded post with its exclusion record.

To find a creator by social handle, use `search` on `list_creators` for approved creators or on `list_applications` for applicants. Most tools that filter by `creator_id` also accept `creator_handle`, the creator's exact handle with or without a leading `@`.

`send_creator_message` needs a program id, the opaque creator id returned by `list_creators`, and a message. Pass a stable `client_message_id` UUID when retrying so the creator never receives the same message twice.

## Try it

After setup, ask your assistant:

```text theme={null}
List my active Launchpoint programs, then show the top posts by views.
```

To read messages without sending anything:

```text theme={null}
List my active programs, then show unread creator messages for the first one. Do not send a reply.
```

To send, name the creator and exact text:

```text theme={null}
Send Alex this exact message in the Summer Launch program: "Thanks — we received your draft and will review it today."
```

To review onboarding proofs:

```text theme={null}
List pending onboarding proofs in the Summer Launch program and show me each one. Do not approve or reject anything until I say so.
```

To check what happened to the pay for a list of posts:

```text theme={null}
Look up these post ids with get_posts and group them by payment.state. For each credit_missing or clawed_back post, list its payment events. Do not exclude anything.
```

To find posts published before a creator joined:

```text theme={null}
In the Summer Launch program, list every creator's joinedAt and every post's uploadedAt, then show the posts published before their creator joined. Do not exclude anything yet.
```

To look up a creator by handle:

```text theme={null}
Find the creator @alexcreates and show their application status and posts.
```

For an agency key, say that you want agency scope:

```text theme={null}
Using agency scope, compare post performance across my linked brands this month.
```

Agency scope is available only to parent agency keys. Other keys receive a `403`.

## Authentication and limits

MCP sends the API key as a bearer token:

```http theme={null}
Authorization: Bearer lp_pk_...
```

Each MCP request uses one normal v1 rate-limit slot. The default is 100 requests per minute per key; approved partner accounts receive 400. A revoked key stops working at once.

## Troubleshooting

> **The client says unauthorized or returns 401**
>
> Check that the key starts with `lp_pk_`, is still listed in Dashboard → Settings → Developer, and is sent as `Authorization: Bearer <key>`.

> **The server returns 403**
>
> API access is not enabled for this workspace, or the key requested agency scope without agency access. Email [Launchpoint support](mailto:hi@launchpointhq.com) if the Developer section is missing.

> **The tools do not appear**
>
> Restart the MCP client after changing its config. In Claude Code or Codex, run the matching `mcp get launchpoint` command above and confirm the URL.

> **Codex works in one terminal but not the next**
>
> `codex` reads the bearer token from `LAUNCHPOINT_API_KEY`. Save that variable in your shell or secret manager before starting Codex again.

> **The server returns 429**
>
> The key reached its per-minute limit. Wait for the reset time before retrying, or use fewer pages per request.


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