WebDesk MCP server docs.
Everything an agent builder needs: the tools, their inputs and outputs, auth, credits, errors, limits and setup for common clients. Plus a free tools server that needs no key.
Overview
- WebDesk server:
https://redcenterstudio.com/api/webdesk/mcp. Paid, bearer API key, one credit per website. - Free tools server:
https://redcenterstudio.com/api/tools/mcp. No key:geo_audit,spof_scananddecode_error. - Transport: MCP Streamable HTTP. Both servers are stateless: no session id, one JSON-RPC message or batch per POST.
Auth
Create a key on the WebDesk for AI agents page. It is free, shown once and starts with wd_; only a fingerprint is stored. Send it on every request:
Authorization: Bearer wd_YOUR_API_KEYAnyone with the key can spend its credits, so keep it in a secret store, not in code. Lost a key? Create a new one and email Hello@redcenterstudio.com with your Stripe receipt to move unused credits.
Credits
One credit creates one complete one-page website with one free redo. Packs: 1 website for $29 USD; 5 websites for $135 USD ($27 each); 10 websites for $250 USD ($25 each); 25 websites for $575 USD ($23 each). Buy them on the agents page or with buy_credits; credits are added as soon as Stripe confirms payment. Refunds follow the Terms.
WebDesk tools
create_website
Input: The brief fields above.
Output: job_id, status, and payment: { type: "paid", order_id } when a credit was spent, { type: "payment_required", ... } when the key has no credits, or { type: "checkout", checkout_url } with payment_method stripe.
get_website_status
Input: job_id (from create_website).
Output: job_id, status, message, paid, version, redos_left, preview_url (short-lived, or null), download_available, expires_at.
get_download_link
Input: job_id.
Output: job_id, url (a signed link to the ZIP), expires_at.
revise_website
Input: job_id, notes (10 to 1,000 characters, what to change), optional tone, optional palette.
Output: job_id, status, redos_left.
get_credit_balance
Input: None.
Output: balance, and packs: [{ pack, credits, price, currency }].
buy_credits
Input: pack: the pack id, which is its number of credits (1, 5, 10, 25).
Output: checkout_url, pack, credits, price, currency, note.
Brief fields for create_website
| Field | Type | Required | What it is |
|---|---|---|---|
businessName | string, 2 to 80 characters | Yes | The business name, as it should appear on the site. |
businessType | one of: trades_and_home_services, cafe_or_restaurant, salon_or_beauty, health_and_wellness, professional_services, retail_or_shop, creative_or_studio, other_small_business | Yes | The closest kind of business. |
services | string, 3 to 600 characters | Yes | What the business offers: a sentence or a comma-separated list. |
location | string, 2 to 120 characters | Yes | Suburb, town or region the business serves. |
tone | friendly, professional, bold or calm | No (friendly) | Tone of voice for the copy. |
palette | harbour, ember, forest, twilight, plum or graphite | No (harbour) | Colour palette. |
about | string, up to 600 characters | No | Anything else worth knowing, such as history, specialties or hours. |
contactEmail | email address | No | Public email shown on the site. |
contactPhone | digits, spaces, + - ( ) and dots, up to 40 characters | No | Public phone number shown on the site. |
lang | en or fr | No (en) | Language of the buyer's messages, checkout and emails. |
siteLang | en or fr | No (same as lang) | Language the website is written in. |
payment_method | credits or stripe | No (credits) | credits spends one credit; stripe returns a checkout link for a person to pay for this one website. |
Job statuses
| Status | Meaning |
|---|---|
queued | Paid and waiting to be built. |
generating | Being written and built. |
ready | Finished: preview and download are available. |
failed | Something went wrong. The message says what to do next. |
awaiting_payment | Created with payment_method stripe and waiting for the checkout to be paid. |
Errors
A tool that fails returns isError: true with a JSON body { "error": code, "message": text, "details": ... }. The codes:
| Code | What to do |
|---|---|
unauthorized (HTTP 401) | Missing or unknown API key. Send Authorization: Bearer wd_... |
rate_limited (HTTP 429 or tool error) | Too many requests. Wait a minute and retry. |
invalid_input | A field is missing or out of range. details lists the fields. |
payment_required | No credits left. Call buy_credits, or create_website with payment_method stripe. |
not_found | No job with that id for this API key. |
forbidden | The job belongs to another key. |
conflict | The job is not in the right state for that call, for example a redo before the website is ready, or a second redo. |
expired | The files were deleted after the download period. |
unavailable | The service is paused or a dependency is down. Retry later. |
internal | Unexpected error. Retry once, then email us with the job id. |
Rate limits
- WebDesk server: 60 requests a minute per connection.
- geo_audit: 5 audits a minute per connection.
- spof_scan: 6 scans a minute and about 20 fresh scans an hour per connection. A domain scanned in the last hour is answered from cache and does not count.
- decode_error: no separate limit beyond normal abuse protection.
Over a limit, wait a minute and retry. Do not retry in a tight loop.
Client setup
Claude Code
claude mcp add --transport http webdesk https://redcenterstudio.com/api/webdesk/mcp --header "Authorization: Bearer wd_YOUR_API_KEY"Free tools, no key:
claude mcp add --transport http rcs-tools https://redcenterstudio.com/api/tools/mcpClaude Desktop
The free tools server works as a custom connector: Settings, Connectors, Add custom connector, then paste https://redcenterstudio.com/api/tools/mcp. For WebDesk, which needs a bearer key, add it to claude_desktop_config.json through the mcp-remote bridge (needs Node.js):
{
"mcpServers": {
"webdesk": {
"command": "npx",
"args": [
"-y",
"mcp-remote",
"https://redcenterstudio.com/api/webdesk/mcp",
"--header",
"Authorization:${WEBDESK_AUTH}"
],
"env": {
"WEBDESK_AUTH": "Bearer wd_YOUR_API_KEY"
}
}
}
}Cursor
In ~/.cursor/mcp.json (or .cursor/mcp.json in a project):
{
"mcpServers": {
"webdesk": {
"url": "https://redcenterstudio.com/api/webdesk/mcp",
"headers": {
"Authorization": "Bearer wd_YOUR_API_KEY"
}
},
"rcs-tools": {
"url": "https://redcenterstudio.com/api/tools/mcp"
}
}
}Any Streamable HTTP client
POST JSON-RPC to the server address. The WebDesk server needs the bearer key and an Accept header that allows application/json and text/event-stream:
curl -s https://redcenterstudio.com/api/webdesk/mcp \
-H "Authorization: Bearer wd_YOUR_API_KEY" \
-H "Content-Type: application/json" \
-H "Accept: application/json, text/event-stream" \
-d '{"jsonrpc":"2.0","id":1,"method":"tools/list"}'The free tools server answers plain JSON:
curl -s https://redcenterstudio.com/api/tools/mcp \
-H "Content-Type: application/json" \
-d '{"jsonrpc":"2.0","id":1,"method":"tools/call","params":{"name":"decode_error","arguments":{"error":"ESOCKETTIMEDOUT"}}}'Free tools server
Three checks from the free tools pages, as MCP tools. No key and no sign-up. Each result is JSON. The decoder also names the matching fixed-price fix where one exists.
| Tool | Input | Output | Paid next step |
|---|---|---|---|
geo_audit | url | score out of 100, grade, each check with pass, warn or fail, the detected platform and copy-paste fixes (structured data, llms.txt, robots.txt). | GEO Foundation Package, $499 USD |
spof_scan | domain | the providers behind email, sign-in, DNS, website hosting, outbound email and SaaS, what one outage would stop, a risk score and recommendations. | Resilience Check, $299 USD |
decode_error | error | up to five matching Bubble® errors, each with the likely cause, a link to the full fix and the fixed-price service that fixes it. | App Triage or API Rescue, by error |
Help
Questions or a bug? Email Hello@redcenterstudio.com with the job id. Pricing and API keys: WebDesk for AI agents. Client examples and the registry listing: webdesk-mcp on GitHub.