MCP server for waitlists
Run a pre-launch waitlist without opening a dashboard. The agent can report how signups are going, send the next batch of invites, pause intake, and produce the HTML to embed the form while it is editing your landing page.
Things to ask
- How is the waitlist doing? Who are the top referrers?
- Give me the embed snippet for the waitlist and put it in the hero section.
- Invite the next 50 people on the waitlist.
- Pause signups and change the headline to "We're full for now".
- Export the waitlist as CSV.
One call, start to finish
You type: “Invite the next 50 people on the waitlist.” The agent calls invite_from_waitlist with:
{
"count": 50
} Returned to the agent: The number of people invited and a sample of their addresses. Each one is sent an invite email and marked invited; people who were already invited are skipped.
Tools and arguments
add_to_waitlist
Add an email to a waitlist
| required | string | Subscriber's email address. | |
| referrer_code | optional | string | Optional 8-character referral code from another signup. Invalid codes are ignored. |
| metadata | optional | object | Optional key-value metadata, e.g. { source: 'producthunt' }. ≤1KB serialized. |
import_waitlist
Import an existing list into the waitlist
| rows | required | array | People to import, at most 1000 per call. |
| consent_confirmed | required | literal | true only after the developer confirmed these people consented. |
get_waitlist_stats
Read-onlyGet waitlist stats and top referrers (admin view)
No arguments.
get_waitlist_leaderboard
Read-onlyIndie and BuilderGet the public-safe waitlist leaderboard
| limit | optional | number, 0–50 | How many entries to return. 1–50. Default 10. |
invite_from_waitlist
Confirms firstIndie and BuilderInvite people from the waitlist
| count | optional | number, 0–500 | Next-in-queue count. Cap 500. Cannot be combined with specific_email. |
| specific_email | optional | string | Specific email to invite. Cannot be combined with count. |
export_waitlist
Read-onlyIndie and BuilderExport waitlist to CSV or JSON
| format | optional | "csv" | "json" | Output format. Default csv. |
| include_flagged | optional | boolean | Include anti-abuse-flagged rows. Default false. |
get_waitlist_settings
Read-onlyGet current waitlist pause state and custom copy
No arguments.
update_waitlist_settings
Pause/resume waitlist or set custom landing-page copy
| accepting_signups | optional | boolean | true to allow new signups, false to freeze intake. Hides the public form when false. |
| header_text | optional | string, max 120 | Custom headline (up to 120 chars). null clears and reverts to the default. |
| body_text | optional | string, max 500 | Custom supporting paragraph (up to 500 chars). null clears and reverts to the default. |
| welcome_url | optional | string, max 2,048 | Absolute http(s) URL invited signups are sent to (invite email CTA + hosted welcome page). null clears. |
get_waitlist_embed_snippet
Read-onlyGet HTML snippet to embed the waitlist on the developer's site
| slug | required | string, max 64 | The project slug, e.g. 'demo' or 'my-product'. |
| height | optional | number, 200–2,000 | Initial iframe height in px before auto-resize. Default 480. |
| title | optional | string, max 120 | Accessible name for the iframe. Default 'Join the waitlist'. |
Behaviour worth knowing
- invite_from_waitlist sends real email. The server marks it destructive and its description tells the agent to confirm the count with you before calling.
- get_waitlist_stats returns full email addresses of the top ten referrers; get_waitlist_leaderboard returns the top fifty with masked addresses.
- export_waitlist returns a signed download URL that is valid for 15 minutes and covers up to 10,000 rows. Flagged and unsubscribed rows are left out unless asked for.
- add_to_waitlist on an address that is already signed up returns the existing signup with already_registered set, not an error. Disposable email domains are refused.
- get_waitlist_embed_snippet builds the iframe HTML locally and makes no API call.
Questions
- Does the embed snippet work for browser signups straight away?
- The iframe does, because it loads the hosted page. If you post to the API from your own form instead, the origin has to be registered first; the agent can do that with register_allowed_origin.
- Which waitlist tools need a paid plan?
- Invites, export and the leaderboard need Indie or higher. Adding signups, stats, settings and the embed snippet work on Free, up to 100 signups.
- Can the agent delete a signup?
- No. There is no delete tool. Hard deletion for GDPR requests goes through the tokenised link each person receives, which calls DELETE /v1/waitlist/signups/by-token/{token}.