# WebinarIgnition MCP Server

**Your webinar numbers in the chat — and the agent that builds the next webinar.**

Who registered, who showed up, what did it earn? Ask in plain language. Your agent reads registrants, leads, attendance and revenue from your own WordPress and WooCommerce site — read-only where it matters. Then it builds the next webinar: invitation and reminder emails, signup page, evergreen room, WooCommerce checkout inside the room.

**Why a webinar at all:** ninety minutes of attention instead of ten seconds in an email. That is how visitors become leads, subscribers become customers, and people learn to trust you before they buy.

Free, no sign-in. Nothing changes on your site without your OK.

**Auf Deutsch:** Deine Webinar-Zahlen im Chat — Anmeldungen, Leads, Teilnehmer, Umsatz — direkt aus WordPress und WooCommerce. Und danach baut der Agent das nächste Webinar: Einladung, Erinnerungen, Anmeldeseite, Raum. 90 Minuten Aufmerksamkeit statt 10 Sekunden in einer E-Mail.

Keywords: webinar numbers · registrants · leads · subscribers · attendance · revenue · webinar CRM · WordPress · WooCommerce · online course · course creator · email marketing · coaching · lead generation · webinar · webinar automation · evergreen webinar · webinar funnel · Gutenberg · trust

Build and run WordPress webinars from a chat. One MCP server that puts WebinarIgnition
inside any AI assistant — Claude, ChatGPT, Cursor and any MCP-capable client.

- **Endpoint:** `https://mcp.webinarignition.com/?src=registry`
- **Transport:** Streamable HTTP, MCP protocol 2025-06-18 (JSON-RPC 2.0)
- **Auth:** two doors. `https://mcp.webinarignition.com` (ChatGPT) needs no sign-in and no API key. `https://mcp4claude.webinarignition.com` (Claude) asks for a sign-in with the host's own WordPress before any tool that acts on a site runs; texts, questions and the setup plan work before that.
- **Website:** https://webinarignition.com

## Tools

mcp.so and other directories read this section. Listed below is what the connector
exposes, and beneath it what the connected WordPress site offers.

### Connector tools (every client)

One tool per operation, so a directory scanner and a chat client see the same thing: what the
connector can actually do. Each entry is a single action with its own safety annotation.

| Tool | What it does | Kind |
|---|---|---|
| `wi_start_webinar` | Start a webinar: creates a session, returns the first question with tappable options. Writes nothing to a site. | write |
| `wi_continue_webinar` | Continue the conversation by one turn and return the next choices. | write |
| `wi_write_webinar_invitation_emails` | Write the title, invitation email, reminders and registration copy for a ready session. | write |
| `wi_get_session_facts` | Read what a session has collected so far. | read |
| `wi_list_site_abilities` | List the abilities of the connected WordPress site. | read |
| `wi_get_connector_status` | Read the connector's technical state. | read |
| `wi_get_setup_plan` | Return the step-by-step setup plan for the host's site. | read |
| `wi_answer_product_question` | Answer a WebinarIgnition question (price, limits, integrations) from verified knowledge. | read |
| `wi_check_wordpress` | Check whether a WordPress address runs WebinarIgnition and in which state. | read |
| `wi_connect_wordpress_woocommerce_site` | Create the connect link the host approves in their own browser. | write |
| `wi_disconnect_wordpress` | Drop the stored connection between the chat and the host's site. | destructive |
| `wi_create_webinar_registration_page` | Build the webinar on the connected site, return registration and room links. | write |
| `wi_create_handoff_link` | Create a link that carries the collected data into the dashboard. | write |
| `wi_delete_webinar` | Delete the webinar of this session. Irreversible. | destructive |

### Reading the numbers (2026-10-20)

Each of these four is an entry point on its own: without a connected site it answers with example
numbers (`sample: true`), the use cases and **one** question, and remembers what the host wanted
(`intent`) so the connect step can return to it. All four are read-only.

| Tool | What it does | Kind |
|---|---|---|
| `wi_list_webinar_leads_registrants` | Read the registrants (leads) of a webinar, with what each lead spent and which products they bought when the site provides it. Needs a licence with the registrant export (`export_leads`); otherwise the site answers `license_required` with the upgrade link and no personal data. | read |
| `wi_get_webinar_attendance_stats` | Registrations, live attendance, stay-through and replay, with the show-up rate. Rates only above 20 people per step. | read |
| `wi_get_webinar_funnel_conversion_stats` | The whole funnel with step-to-step rates, a ranking across the host's webinars and one sentence saying which step to fix first. | read |
| `wi_get_webinar_revenue_woocommerce` | What a webinar earned per currency (paid, open, refunded) and which offer tier sold how often and for how much. Money comes from the host's own shop (WooCommerce or another connected shop). | read |

**Try asking.** These are the questions the four tools answer:

- "Show me my webinar leads."
- "How many participants showed up, and who watched the replay?"
- "What did my webinar earn, and which offer tier sold?"

Without a connected site the answer comes back with example numbers (`sample: true`), so the host
sees the shape before connecting anything.

On the Claude door the same call behaves differently once someone is signed in: with a valid sign-in
and no open connection it answers **HTTP 200** with `status: "connect_required"`, the reason and a
fresh connect link. No data and no example numbers come back, because the host is signed in and
wants their own numbers, not a demo. See the Claude door section below.

### The Claude door: sign-in, eight extra tools, what is stored

`https://mcp4claude.webinarignition.com` is the endpoint submitted to the Claude connectors directory.
It offers the same tools as the ChatGPT door plus eight, and it asks for a sign-in (OAuth 2.1, PKCE,
dynamic client registration) before a tool touches a site.

| Tool | What it does | Kind |
|---|---|---|
| `wi_list_webinars` | List the webinars of the connected site: id, title, type (live or evergreen), status, real start, page address. | read |
| `wi_get_webinar` | Read one webinar by id: title, type, status, host, start, page address, email state. | read |
| `wi_change_webinar_text` | Replace one existing wording without rebuilding: a page block, text inside the page code, the campaign copy (landing, sales copy, headlines, mail subjects and bodies) or the page title. Refuses with `ambiguous` rather than guessing. | write |
| `wi_change_webinar_title` | Change the webinar name, the one in the dashboard and in the list. It also moves the linked page title and the places in the copy where the title stands; the texts are not rewritten. | write |
| `wi_change_webinar_schedule` | Move a webinar to another date, time, timezone or length, or change the recurring air-times of an evergreen one. The reminders that belong to the time move with it; the texts are not rewritten. | write |
| `wi_change_webinar_room` | Set the room phase a participant sees: countdown, live, replay or closed. `confirm` must be true. | write |
| `wi_change_webinar_visibility` | Publish a webinar or take it offline again. `confirm` must be true. | destructive |
| `wi_forget_session` | Delete the stored session, its collected facts and the note that a site was connected. | destructive |

What is stored, in plain words:

- Per session the turns and the collected facts, deleted 24 hours after the last turn.
- A hashed note that a site was connected, kept 180 days, with no address in clear text and no token.
- The approved connection, so a restart or deploy does not end it. In that file the connection id,
  the owner's hashed site key and two timestamps stand in clear text; the site address and both
  tokens are encrypted with AES-256-GCM under a key that stays on the server and is never logged.
  Access tokens live one hour, refresh tokens 30 days and rotate on every use. Each new sign-in
  replaces the previous connection of that app, and `wi_disconnect_wordpress` deletes it at once.
- Usage counters record tool name, status and duration, never message content.

### Several WordPress sites in one chat

One sign-in can carry more than one site. Connect the first site as usual; for a second one call
`wi_connect_wordpress_woocommerce_site` with the new address in the same chat, and the new
connection is attached to the same person instead of replacing the first. `wi_get_connector_status`
then lists every site under `sites` (`site`, `app`, `id`, `expires_in_seconds`).

Every tool that takes `session_id` also takes `site`, the address exactly as `sites` spells it. With
one site it can be left out. With two or more and no `site`, the connector answers
`status: site_needed` with the list and reads nothing: it never picks one of them on its own, because
a write would then land on the wrong site. A `site` that this sign-in does not own is answered with
`status: site_unknown` and the own sites only, never with data of another site. `wi_disconnect_wordpress`
with `site` ends exactly that one site; `all: true` ends every site of that host.

Reading the registrants of ALL webinars is one call: `wi_list_webinar_leads_registrants` with
`all_webinars: true`. It reads the webinar list page by page, asks six sites' worth of requests at a
time, keeps the order of the list and returns `took_ms`, `complete` and, when something is missing,
`why`. Measured on 27.10.2026 with 270 webinars at 640 ms per site call: 28.9 s (one call per webinar
in a row would be 172.8 s). A site that answers 429 or 5xx halves the parallel requests, and the
answer says so.

`complete: false` is not an error: it means the numbers and the rows do not add up, and `why` says
where. Two cases come from the site itself, not from the connector: `webinarignition_list_leads`
counts every row of a campaign but lists only rows without `email_bounced`, so "72 registrations,
0 individually retrievable" is exactly that shape; and it has no `offset`, so beyond 200 rows per
webinar only the counter knows there are more.

Documentation: https://mcp4claude.webinarignition.com/docs

### Renamed on 2026-10-20 (for search and clarity)

| Old name | New name |
|---|---|
| `wi_build_webinar` | `wi_create_webinar_registration_page` |
| `wi_write_webinar_texts` | `wi_write_webinar_invitation_emails` |
| `wi_connect_wordpress` | `wi_connect_wordpress_woocommerce_site` |

Clients fetch `tools/list` at the start of every session, so the old names simply disappear; only a
hand-written runbook needs the mapping above.

### Legacy surface (escape hatch only)

`WI_MCP_LEGACY_SURFACE_CLIENTS` (comma list of exact client names) brings back one guided
entry point instead of fourteen — the same kernel, one permission question. It exists for a
client that breaks on many tools; every public client gets the surface above.

| Tool | What it does | Kind |
|---|---|---|
| `wi_webinar` | Plan, write and set up a webinar from a chat: topic, title, invitation emails, reminders, registration page, live room, evergreen funnel. Also answers product questions. Selects the step with `was`. | write |
| `wi_webinar_delete` | Delete or replace something on the connected WordPress site. Irreversible. | destructive |

`wi_webinar` is a single entry point with guided steps (`was`): `start` (entry),
`thema` (topic), `weiter` (continue), `texte` (write the texts), `seite` (build the page),
`verbinden` (connect a WordPress site), `faehigkeiten` (what the site can do),
`ausfuehren` (run a site ability), `fragen` (product questions), `alles`, `ready`.

### Site tools (offered by the connected WordPress site)

Once a WordPress site is connected, the connector exposes **71 tools** across 11 areas.
They are read live from the site, so the list always matches the installed version.

| Area | Count | Examples |
|---|---|---|
| webinar | 15 | `wi_list_webinars`, `wi_get_webinar`, `wi_create_webinar`, `wi_funnel_stats`, `wi_run_preflight` |
| config | 14 | `wi_configure_webinar`, `wi_woo_offer_in_room`, `wi_configure_100ms`, `wi_configure_daily`, `wi_write_invite_texts` |
| control | 10 | `wi_master_switch`, `wi_room_switch`, `wi_list_questions`, `wi_answer_question`, `wi_get_prompter` |
| gutenberg | 6 | `wi_reg_page_blocks`, `wi_reg_page_edit`, `wi_media_search`, `wi_repair_registration_pages` |
| mail | 6 | `wi_get_emails`, `wi_check_mail`, `wi_send_test_email`, `wi_resend_renotifications` |
| webhook | 6 | `wi_list_webhooks`, `wi_upsert_webhook`, `wi_send_test_webhook`, `wi_read_webhook_history` |
| leads | 5 | `wi_list_leads`, `wi_export_leads`, `wi_import_leads_csv` |
| colors | 3 | `wi_get_colors`, `wi_update_colors`, `wi_sample_brand_colors` |
| autoresponder | 2 | `wi_set_autoresponder`, `wi_test_autoresponder` |
| settings | 2 | `wi_list_settings`, `wi_list_step_types` |
| report | 2 | `wi_list_report_types`, `wi_get_reports` |

### What the tools do to your site

Every site tool is labelled, so an assistant — and you — can tell them apart before
anything runs:

- **28 read-only** — lists, checks and reports. Nothing is touched.
  (`wi_list_webinars`, `wi_get_webinar`, `wi_funnel_stats`, `wi_check_mail`, `wi_run_preflight`, …)
- **35 change something** — creating, editing, publishing, sending. Each one is confirmed first.
  (`wi_create_webinar`, `wi_configure_webinar`, `wi_set_autoresponder`, `wi_master_switch`, `wi_woo_offer_in_room`, …)
- **8 delete or reset** — irreversible.
  (`wi_delete_campaign`, `wi_delete_lead`, `wi_delete_all_leads`, `wi_reset_funnel`, `wi_delete_logs`, `wi_delete_webhook`, `wi_delete_all_questions`, `wi_import_hc_campaign`)

**Nothing changes on your site without your OK.** A tool in the `control` scope requires
explicit confirmation; the host may grant it once when connecting, otherwise it is asked
on every call. Every write is snapshotted and audited.

## Architecture

```
AI client (Claude / ChatGPT / Cursor / …)
    │
    └── WebinarIgnition MCP Server   https://mcp.webinarignition.com
            │
            ├── writes and reads webinars (connector, no site needed)
            │
            └── connected WordPress site → the real webinar, on your own hosting
```

Two doors exist by design, and both are optional:

1. **Connector only** — plan the webinar, write the title, invitation emails and reminders,
   produce the registration copy. Works with no WordPress at all.
2. **Connected site** — connect a WordPress site that runs WebinarIgnition, and the assistant
   builds the real thing: registration page, live room, evergreen schedule, WooCommerce
   offer in the room.

## Connecting

There are three addresses, one per way a client can sign in. The tools are the same on all
three; only the sign-in differs.

| Your client | Address | What you do |
|---|---|---|
| Claude (web or desktop app) | `https://mcp4claude.webinarignition.com/` | Add it, the connect card appears, approve on your own site. |
| ChatGPT | install the app from the directory | Nothing to paste. |
| Everything else: Cursor, VS Code, Claude Code, an own script | `https://mcpapp.webinarignition.com/` | Add it, click **Sign in** when your client asks, approve on your own site. |

`mcpapp` is the door for every other app: it speaks the normal MCP authorization (discovery,
dynamic client registration, PKCE) and answers a site tool without a sign-in with `401` and a
`resource_metadata` pointer, which is what makes a client show its sign-in card instead of
silently returning example numbers. A local client comes back to itself (loopback redirect); a
cloud client comes back through `/connect/callback` on the same address.

### Clients that cannot sign in at all

A client without OAuth support (a plain HTTP client, n8n, an own script) carries a key instead.
Ask for it in a chat that is already connected: `wi_create_app_key` returns one key, once, with
the ready header line.

```
Authorization: Bearer wi_app_…
```

The key belongs to one site connection, lives 90 days, and is revoked with
`wi_disconnect_wordpress` or `wi_revoke_app_key`. In OpenChamber / OpenCode the settings entry
looks like this:

```json
{
  "type": "remote",
  "url": "https://mcpapp.webinarignition.com/",
  "headers": { "Authorization": "Bearer wi_app_…" },
  "oauth": false
}
```

Then open a new chat and write: *"Build me a webinar for freelancers."*

The WordPress side is connected from inside the plugin (**WebinarIgnition → AI connection**),
which returns a link the host opens in the browser to approve. No inbound access to the
WordPress site is required — it polls the connector, so it also works behind a firewall
or on shared hosting.

## Sources

Directories list their own endpoint URL with an attribution parameter:

| Source | URL |
|---|---|
| MCP Registry | `https://mcp.webinarignition.com/?src=registry` |
| Smithery | `https://mcp.webinarignition.com/?src=smithery` |
| mcp.so | `https://mcp.webinarignition.com/?src=mcpso` |
| Glama | `https://mcp.webinarignition.com/?src=glama` |
| mcpbeat | `https://mcp.webinarignition.com/?src=mcpbeat` |
| ChatGPT app | `https://mcp.webinarignition.com/?src=chatgpt` |
| Claude connector | `https://mcp4claude.webinarignition.com/?src=claude` |

## Health

- `GET /health` — service status
- `GET /.well-known/mcp/server-card.json` — published capability card
- `GET /openapi.json` — HTTP schema

## Links

- Documentation (Claude door): https://mcp4claude.webinarignition.com/docs
- Plugin on WordPress.org: https://wordpress.org/plugins/webinar-ignition/
- Product site: https://webinarignition.com
- AI Webinar Writer (no install): https://webinarignition.com/ai-webinar-writer/
- Agent & API guide: https://webinarignition.com/llms.txt
