MCP Server
EarlyPass exposes a hosted Model Context Protocol server so AI assistants like Claude and Cursor can manage your waitlist campaigns without you writing a line of code.
Endpoint
https://api.earlypass.app/mcp The server uses MCP Streamable HTTP transport. No binary to install — it's hosted alongside the rest of the EarlyPass API.
Authentication
Two methods are supported:
Option A — OAuth 2.1 (recommended for interactive clients)
MCP clients that support dynamic client registration (RFC 7591) — including Claude Desktop and MCP Inspector — will discover and complete the OAuth flow automatically using:
GET /.well-known/oauth-authorization-server ← discovery
POST /oauth/register ← dynamic client registration
GET /oauth/authorize ← user login (magic link)
POST /oauth/token ← token exchange Just point your MCP client at https://api.earlypass.app/mcp and it handles the rest.
Option B — Account API key (non-interactive / CI)
Generate an account API key in the dashboard under Settings → API Keys. Keys have the prefix ep_acc_.
Pass it as a Bearer token in the MCP client config:
Authorization: Bearer ep_acc_your_key_here Claude Desktop setup
Add this block to your Claude Desktop config file:
- macOS:
~/Library/Application Support/Claude/claude_desktop_config.json - Windows:
%APPDATA%\Claude\claude_desktop_config.json
{
"mcpServers": {
"earlypass": {
"type": "http",
"url": "https://api.earlypass.app/mcp",
"headers": {
"Authorization": "Bearer ep_acc_your_key_here"
}
}
}
} Restart Claude Desktop after saving. You should see EarlyPass tools appear in the tool picker.
Cursor setup
Add to .cursor/mcp.json in your project (or ~/.cursor/mcp.json for global):
{
"mcpServers": {
"earlypass": {
"type": "http",
"url": "https://api.earlypass.app/mcp",
"headers": {
"Authorization": "Bearer ep_acc_your_key_here"
}
}
}
} Available tools
| Tool | Description |
|---|---|
list_campaigns | List all campaigns for the authenticated account |
create_campaign | Create a new waitlist campaign |
get_campaign | Get campaign details by ID |
update_campaign | Update campaign name, settings, or status |
get_campaign_stats | Signup counts, referral totals, and daily breakdown |
list_signups | Paginated signup list with optional status filter |
export_signups | Full export as JSON or CSV (up to 10,000 rows) |
invite_signups | Invite the top N verified signups, sends emails |
get_invite_token | Check invite token status (active or redeemed) |
redeem_invite_token | Mark an invite token as redeemed (idempotent) |
manage_webhook | Create, list, or delete webhook endpoints |
get_leaderboard | Top referrers ranked by referral count |
get_widget_embed | Get the <script> embed snippet for a campaign |
Example prompts
Once connected, you can talk to your waitlist naturally:
- "Create a waitlist campaign called 'Acme App Beta'"
- "How many signups does my campaign have? What's the viral coefficient?"
- "Give me the widget embed snippet for my campaign."
- "Invite the top 50 referrers on the earlypass campaign."
- "Export all signups as CSV and show me the top 10."
- "Add a webhook to my campaign that calls https://my-app.com/hooks on signup events."
Self-hosted MCP
If you self-host EarlyPass, your MCP server is at https://your-domain.com/mcp. Authentication works the same way — account API keys and OAuth both work out of the box.