Create a new WordPress.com site on the user's account. This facade is the only entry point for site creation. Operations: site.instructions returns the runbook (field schema, conversational rules, confirmation policy including the subdomain derivation rule, the handoff to site.provision, the next actions available after creation, and a preflight_required block when the user has not enabled site creation); subdomain.check reports whether the slug derived from a title is valid and available, with the would_be_url the user would receive; site.provision creates the site from a spec in which only title is required, description (a one-sentence tagline) is optional, and locale defaults from the account. The subdomain is derived from the title and is not an input. site.provision creates a real site and requires the user's explicit confirmation of the title and subdomain preview before it runs.
CORE RULES (apply without calling site.instructions):
- The subdomain is DERIVED from `title` automatically. NEVER ask the user for a URL slug, subdomain, or custom site address - it is not an input field. Show a subdomain preview derived from the title for confirmation only.
- Ask ONE direct question for the title. Do NOT ask about site type, audience, tone, topic, or goals - those are NOT required to create a site.
- After the site is created, share the URL and STOP. Do NOT auto-chain into theme picking or homepage authoring; offer them only if the user asks.
WORKFLOW:
1. action="execute", operation="site.instructions" (no params) - returns the runbook: field schema, conversational rules, confirmation policy (including the deterministic subdomain-derivation rule), the handoff to site.provision, and a list of next actions available after creation. When the user has not enabled the create-site capability, the runbook also surfaces a `preflight_required` block - walk the user to the link in that block BEFORE asking any interview question. Call site.instructions ONCE, up front.
2. Ask the user a single direct question for the title (or detect test-site intent - see the runbook rules - and skip to step 3 with "Test site" as the title).
3. Derive the subdomain slug from `title` locally per the `subdomain_derivation_rule` in the runbook (lowercase, strip diacritics, remove every non-alphanumeric character). Then call action="execute", operation="subdomain.check", params: { slugs: [ <derived slug> ] }. Read the first entry in `results`; it reports whether the slug is valid + available, plus the `would_be_url` the user will actually receive (which may carry a numeric suffix when the base slug is taken). Show the user the actual `results[0].would_be_url` verbatim before asking for title confirmation. If `results[0].is_valid` is false (empty slug, blacklisted, invalid characters), ask the user for a different title and re-derive - do NOT proceed to site.provision.
4. (Optional) Ask once whether the user wants a short tagline; accept "skip" / "not now" cleanly.
5. Summarize the collected fields - especially the title and the `would_be_url` from subdomain.check - and ask for explicit confirmation.
6. action="execute", operation="site.provision", params: { spec: { title: <confirmed title>, [description: <tagline if provided>] }, user_confirmed: true }. `title` is the only required field on `spec`; `description` is the only common optional field. `user_confirmed` MUST be the boolean `true` (or one of the strings `"true"` / `"yes"` / `"on"` / `"1"`) after the user has approved the title and subdomain preview.
7. On success, share the returned site_url and stop. On `invalid_spec` errors, the error message lists each offending field on its own line (for example `- spec.title: missing field`); fix only the listed fields and retry site.provision. On `empty_subdomain_after_derivation` errors, the title strips to an empty subdomain (subdomain.check should have caught this earlier) - ask the user for a different title and retry.
SPEC SHAPE: only `title` is required. `description` (one-sentence tagline) is optional. `locale` is auto-defaulted from the user's account locale.
SAFETY: site.provision creates a real site on the user's account. Only call it after the user has explicitly confirmed the title and subdomain preview.
wpcom-mcp-create-site