MCP server
Waitloop's MCP server is the primary way agents use the product.
- Endpoint:
https://waitloop.dev/api/mcp(self-hosted:<your-host>/api/mcp) - Transport: streamable HTTP, stateless — plain JSON responses, no SSE required
- Auth:
Authorization: Bearer wl_YOUR_KEY(create keys at/dashboard/keys)
Connect
# Claude Code
claude mcp add --transport http waitloop https://waitloop.dev/api/mcp \
--header "Authorization: Bearer wl_YOUR_KEY"
Any MCP client that speaks streamable HTTP works the same way.
Tools
| Tool | What it does |
|---|---|
create_waitlist |
Create a waitlist + live hosted page. Args: name (required), slug, theme (headline, description, buttonText, successMessage, logoUrl, accentColor, background), referralsEnabled, webhookUrl. Returns the public pageUrl. |
list_waitlists |
All waitlists with signup counts and page URLs. |
update_waitlist |
Patch name/slug/theme/referrals/webhook. Theme fields merge, not replace. |
delete_waitlist |
Permanently delete a waitlist and its signups. |
get_stats |
Total signups, last 24h, last 7d, referred count, top referrers. |
list_signups |
Signups ordered by position. limit (≤1000), offset. |
export_signups |
Full CSV export (email, position, referral code, referral count, created_at). |
add_signup |
Add a signup directly (imports, manual adds). Dedupes by email. |
Waitlists can be referenced by UUID or slug in every tool that takes an id.
Example session
User: launch a waitlist for the beta of my screenshot API
Agent calls
create_waitlistwith{"name": "Screenshot API beta", "theme": {"headline": "Screenshots, one GET request away", "accentColor": "#ff6b3d"}}Result:
{"waitlist": {"slug": "screenshot-api-beta", "pageUrl": "https://waitloop.dev/w/screenshot-api-beta", ...}}
The page is live the moment the call returns.