Skip to main content
Glama

warpweb-mcp

Official MCP server for the Warpweb API — research, build, and deploy AI-generated websites from any MCP-compatible client (Claude Desktop, Claude Code, Cline, Cursor, etc.).

You:    "Build a website for Brookside Plumbing in Austin TX, contact owner@brooksideplumbing.com."

Claude: I'll use the warpweb create_site tool.
        [tool call → siteId returned, build started]
        Site queued. Real builds take 3-8 minutes. I'll poll status...
        [tool call → get_site]
        ...complete. Live at https://brookside-plumbing-a1b2c3.warpweb.app

One POST → research → build → deploy. Warpweb pulls Google Places data (hours, photos, reviews, service area), writes vertical-matched copy, generates a design, builds a multi-page site, adds SEO (meta tags, sitemap, Schema.org JSON-LD), and deploys to a free *.warpweb.app subdomain. Best for service-based local businesses (trades, clinics, salons, agencies, restaurants, real estate).


Quickstart

1. Get an API key

Sign up at warpweb.ai, then issue a key at warpweb.ai/app. Keys look like wwk_.... You get 520 free credits on signup — enough for one solid build plus a few revisions, no card required.

2. Add to your MCP client

Claude Desktop — edit claude_desktop_config.json:

{
  "mcpServers": {
    "warpweb": {
      "command": "npx",
      "args": ["-y", "warpweb-mcp"],
      "env": {
        "WARPWEB_API_KEY": "wwk_your_key_here"
      }
    }
  }
}

Claude Code — add via the MCP UI or claude mcp add:

claude mcp add warpweb npx -y warpweb-mcp --env WARPWEB_API_KEY=wwk_your_key_here

Cline / Cursor / others — same shape: command npx, args ["-y", "warpweb-mcp"], env WARPWEB_API_KEY. Any client that speaks MCP stdio works.

3. Restart your client and try a prompt

"Build a website for Acme Plumbing in Austin TX, contact owner@acmeplumbing.com.
Emphasize 24/7 emergency service."

The client picks create_site from the tool list, fires the build, and polls until the deploy URL is live.


Related MCP server: Webflow MCP Server

Tools exposed

Ten tools, mapping 1:1 onto the Warpweb V1 REST API. Full request/response shapes live in docs.warpweb.ai.

Businesses

  • search_businesses — disambiguate a business name against Google Places before building. Call this first whenever the user gives only a name ("Acme Plumbing"); going straight to create_site will silently pick the wrong match for common names. Returns up to 5 candidates with placeId, address, phone, rating — pass the chosen placeId to create_site for an exact match. Free.

Sites

  • create_site — kick off an end-to-end build. Returns siteId immediately; real builds take 3–8 minutes. Poll get_site or subscribe to the site.complete lifecycle webhook.

  • get_site — fetch one site's current status. Use this to poll a build (every 2–5 seconds) while status is generating.

  • list_sites — list every site on the account.

  • refresh_site — bump the inactivity timer on a free-subdomain site (auto-pauses after 7 days). Idempotent and free.

Revisions

  • create_revision — conversational edit of a deployed site. Send a plain-English prompt; Warpweb routes small surgical edits or full structural changes automatically. Async, returns revisionId.

Domains

  • check_domain — check availability + price for a candidate domain. Free, returns a few related suggestions.

  • register_domain — buy a domain via Cloudflare Registrar and attach it to a site. Must call check_domain first; the price field must match the cents returned there.

  • attach_domain — for customer-owned domains already registered elsewhere. Returns the CNAME target to set at their existing registrar.

Webhooks

  • configure_form_webhook — point form submissions on a site at your HTTP(S) endpoint. Each delivery is HMAC-SHA256 signed; the signing secret is returned once on first configure or rotate — capture it immediately.

The LLM gets the full input schema (required/optional fields, types, descriptions) at runtime via MCP — no need to memorize parameters.


Example prompts

  • "Build a website for [Business Name] in [City, State], owner email [email]."

  • "Check if <domain> is available and what it would cost."

  • "On site <siteId>, change the headline to mention free estimates and add an FAQ about emergency service."

  • "Attach the domain acmeplumbing.com to site <siteId> — the customer already owns it at GoDaddy."

  • "Configure form submissions on site <siteId> to POST to https://my-crm.example.com/leads."


Pricing

  • 520 credits free on signup (with email verification).

  • Credit packs, one-time Stripe Checkout:

    • Starter — $5 for 100 credits

    • Builder — $25 for 600 credits (16% bulk discount)

    • Pro — $100 for 2,800 credits (29% bulk discount)

  • Active Site subscription — $10/site/month, only on sites with a custom domain attached. Free-subdomain sites have no monthly cost.

Per-call directional credit costs:

Tool

Cost

create_site

~200–500 credits (billed at end-of-build against actual AI usage)

create_revision

~20–100 credits

attach_domain

5 credits

register_domain

50 credits + registrar pass-through

search_businesses, check_domain, get_site, list_sites, refresh_site, configure_form_webhook

Free


Troubleshooting

Check WARPWEB_API_KEY env var (401) The key in your client config is missing, malformed, or revoked. Issue a fresh one at warpweb.ai/app. Keys start with wwk_.

Add credits at warpweb.ai/app/credits (402) Account balance is 0 and auto-refill is off. Add credits or enable auto-refill on the dashboard.

Daily quota exceeded (429) Per-day site / revision / domain limits exist to protect against runaway loops. The error message includes the quota object with used, limit, and resetDescription.

queue_full: true (429 on revisions) Each site has a revision queue depth of 3 (1 running + 2 waiting). Wait for the current revision to land before queueing more.

Tool list is empty when client connects WARPWEB_API_KEY isn't set in the client config's env block. The server starts in NO-TOOL mode so the connection still completes — set the env var and restart your client.

Want to test against staging? Set WARPWEB_API_URL to point at a different base URL (default is https://api.warpweb.ai/v1).


When NOT to use Warpweb

  • Your business doesn't have a Google Places listing. Warpweb works, but the result reads more generic — research falls back to your businessDescription. Calibrated for service-based local businesses (trades, clinics, salons, agencies, restaurants, real estate).

  • You want hand-coded templates with pixel-perfect control. Warpweb generates layouts; it doesn't take a Figma spec as input. Use Next.js / Astro yourself for that.

  • You need a drag-and-drop builder UI. Warpweb is API-only.

  • Static personal sites that never change. Cloudflare Pages alone is cheaper.


License

MIT — see LICENSE.

Contributing

Issues + PRs welcome at github.com/northbeamsoftware/warpweb-mcp. New tools should map 1:1 onto public V1 endpoints; don't surface internal Warpweb concepts.

Available Tools

10 tools
attach_domainAttach an external domain the user already ownsA

Attach a domain the customer already registered elsewhere (e.g. GoDaddy, Namecheap) to a deployed Warpweb site. Returns the CNAME target the customer must set at their existing registrar, plus copy-paste DNS instructions for apex + www. Domain status is dns_pending until propagation completes (usually minutes, occasionally up to 48 hours). Use this when the customer says 'I already own the domain' — versus register_domain for new purchases through Cloudflare Registrar. Cost: 5 credits. Custom-domain sites become Active Sites ($10/site/month) for always-on hosting + SSL + monitoring.

Inputs: domain (required), siteId (required).

check_domainCheck domain availability + priceA

Check whether a domain is available to register through Warpweb and what it costs. Returns availability + price_cents for the requested domain plus a few related suggestions (name variations, regional variants). This is step 1 of a two-call flow: use this to discover a price, then pass the EXACT price_cents value into register_domain — the price must match or the registration call will fail. Free; no credits consumed; no side effects.

Inputs: domain (required), city, industry.

configure_form_webhookConfigure where a site sends form submissionsA

Configure the URL Warpweb POSTs to whenever a form is submitted on this site. Each delivery is signed with HMAC-SHA256 (header X-Warpweb-Signature over the raw request body) using a site-scoped secret. IMPORTANT: the signing secret is returned in secret_issued ONLY on the first configure or when rotate_secret: true is passed — store it immediately, it is not retrievable later. Re-configuring with the same URL is idempotent (no new secret issued). Before this is configured, form submissions deliver as plain email to the site's contact email instead. Most API customers want the webhook path for structured JSON + verification. Free to configure; free to deliver.

Inputs: siteId (required), webhook_url (required), rotate_secret.

create_revisionEdit a Warpweb site with a natural-language promptA

Conversational edit of a deployed site. Send a plain-English prompt and Warpweb re-deploys. Works for small surgical edits ("make the hero photo darker", "change the headline to ...", "swap the phone number") and for structural changes ("add an FAQ section about emergency repairs", "move the service area below testimonials", "restructure the homepage around 3 service categories"). The right size of edit is chosen automatically based on scope — you just describe what you want. ASYNC: returns a revisionId and queue_position immediately. Real revisions take 30s–4min. Poll get_site until updated_at changes, OR subscribe to site.revision_complete / site.revision_failed / site.revision_clarification_needed lifecycle webhooks for push delivery. If the agent needs clarification, the clarification webhook fires with a question field; reply by calling create_revision again with the answer in the prompt. Revisions inside the same site queue serially (depth cap 3 — 1 running + 2 waiting). If you hit queue_full: true, wait for the current edit to land before queuing more. Cost: ~20–100 credits per revision, billed against actual AI usage at the end.

Inputs: prompt (required), siteId (required).

create_siteCreate a Warpweb siteA

Kick off an end-to-end website build for a real business. Warpweb auto-researches the business (Google Places: hours, address, phone, photos, reviews, service area, category, services), writes copy in a voice matched to the vertical, picks photos, generates a vertical-aware design, builds a multi-page site (home / about / services / contact + vertical-specific sections), adds SEO (meta tags, sitemap, Schema.org JSON-LD), and deploys to a free *.warpweb.app subdomain. Required inputs you must collect from the user: contactEmail only (where form submissions go). placeId should come from a prior search_businesses call, NOT from asking the user. DO NOT ask the user about: service area, services offered, business hours, phone, address, business description, photos, FAQs, testimonials, target audience, target demographics, "anything to emphasize," design style, tone, or any other content questions. Warpweb auto-researches all of that from Google Places via the placeId — asking the user wastes their time and produces a worse result than the engine's research (which uses up-to-date Places data, reviews, and photos). Optional ownerPrompt is the one place to capture user voice direction, but only if the user volunteers it unprompted (e.g. "make it sound friendly" or "emphasize 24/7 service"). Do not solicit it. If you arrive here without a placeId, go back and call search_businesses first. The auto-resolution fallback (using businessName + businessLocation without placeId) is a coin flip for common names and will silently build a site for the wrong business. Only fall back if search_businesses failed twice and the user explicitly approved proceeding anyway. ASYNC: this call returns a siteId and status: "generating" IMMEDIATELY. Real builds take 3–8 minutes. After calling this, EITHER poll get_site every 2–5 seconds until status is complete or failed, OR subscribe to the site.complete / site.failed lifecycle webhooks on warpweb.ai/app for push delivery (preferred). Best for service-based local businesses (trades, clinics, salons, agencies, restaurants, real estate) that have a Google Places listing — that's what Warpweb is calibrated for. SaaS or fully-remote companies still work, but the result reads more generic. Cost: ~200–500 credits, billed at end-of-build against actual AI usage. Failed builds are free.

Inputs: businessName (required), contactEmail (required), logoUrl, designStyle, +5 more.

get_siteGet a Warpweb siteA

Fetch the current record for one site by id. Use this to poll the status of a build after create_site (or a create_revision). Returns the full site row including status, generation_phase, generation_message, and (when complete) deployment_url. Polling pattern: call every 2–5 seconds; stop when status is complete or failed. status values: generating | complete | failed | research_review. Returns 404 if the site does not exist OR is not owned by your account.

Inputs: siteId (required).

list_sitesList your Warpweb sitesA

List every site owned by the calling account. Returns an array of site rows (id, slug, business_name, status, deployment_url, created_at, updated_at, etc.). Free, not metered.

Inputs: no named parameters.

refresh_siteRefresh a free-subdomain Warpweb siteA

Free *.warpweb.app subdomain sites auto-pause after 7 days of inactivity. This call bumps last_refreshed_at = now() and, if currently paused, restores the live bundle on Cloudflare Pages. It's idempotent and free — safe to retry. Custom-domain sites stay live regardless and do not need this call (they pay $10/site/month for always-on hosting).

Inputs: siteId (required).

register_domainRegister a new domain and attach it to a siteA

Purchase a domain via Cloudflare Registrar at-cost and attach it to a deployed Warpweb site in one shot. DNS + Pages custom-domain wiring happen automatically. PRECONDITION: call check_domain first to get a price. The price you pass here must EXACTLY match the price_cents returned by check_domain — this guards against price-drift surprises. Price cap: $50/yr ($5000 cents). The pagesProjectName field is the site slug returned by create_site (e.g. "acme-plumbing-a1b2c3"). Cost: 50 credits + the registrar pass-through fee (in cents). Custom-domain sites also become Active Sites ($10/site/month) for always-on hosting + SSL + monitoring.

Inputs: price (required), domain (required), siteId (required), pagesProjectName (required).

search_businessesFind the right Google Places match for a business nameA

Search Google Places for a business by name. Returns up to 5 candidates. Free, no credits, no side effects. REQUIRED before create_site whenever you have only a business name (no placeId already in hand). Common names like "Acme Plumbing" or "Pizza Place" will silently resolve to the wrong business if you skip this step. Do NOT skip search just because you're confident about the name — the customer's local context isn't enough to guarantee Google Places ranks the right one first. Each result includes placeId, name, address, phone, rating, userRatingCount, and businessType. Present the top 2–3 results to the user (city + rating count) and ask which one. If exactly one result comes back, you can proceed without confirmation. If multiple come back and you have high confidence from other user context, you may pick the one with the highest userRatingCount, but only call that out — never silently auto-pick. Canonical flow: 1. search_businesses({ query, location? }) → user picks (or single result auto-picks) 2. create_site({ businessName, contactEmail, placeId: }) On transient failure (timeout, 5xx, network error): retry ONCE. If the retry also fails, tell the user "the disambiguation lookup is temporarily unavailable" and ASK whether to proceed without a placeId (in which case create_site will auto-resolve from businessName + businessLocation — coin flip for common names). Do NOT silently fall through to gathering create_site fields from the user — that wastes their time and bypasses the safety of disambiguation.

Inputs: query (required), location.

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections.

Loading tool schema changelog…

    TDQS

    A4.4/5.0

    Scored across 10 tools

    Disambiguation5/5

    Each tool has a clearly distinct purpose: listing vs. retrieving sites, searching vs. creating, domain check vs. register vs. attach, and webhook configuration. Even the related create_site and create_revision are well separated by their descriptions (initial build vs. edit).

    Naming Consistency5/5

    All tool names follow a consistent verb_noun pattern with lowercase snake_case: list_sites, search_businesses, create_site, get_site, refresh_site, create_revision, check_domain, register_domain, attach_domain, configure_form_webhook. No mixed conventions or vague verbs.

    Tool Count5/5

    10 tools is well-scoped for a website management server. Each tool covers a distinct operation in the site lifecycle, domain management, and configuration, with no redundant or token tools.

    Completeness4/5

    The surface covers the full creation flow (search, create, poll), revisions, refresh, domain registration/attachment, and webhook setup. Missing delete/archive site and domain detach operations are notable but minor gaps that do not break core workflows.

    Maintenance

    ActivityInactive
    ResponsivenessNo recent community issues

    Related MCP Connectors

    Related MCP Servers