Recess docs
Show your AI Recess. Get the live link back.
Start with one plain ask. Recess handles login, opens the WordPress idea as a playable Yard, returns the clean link first, and keeps a saved copy ready for the next edit.
Use this when your AI understands normal instructions. It keeps the useful answer short: live link first, details only when helpful.
Use Recess for this WordPress idea. When Recess opens, I will log in. Bring back the live Yard link first.
Some AI apps ask where Recess lives. Give them this link, log in through Recess, and let the Yard come back ready to send.
https://mcp.recess.host/mcp
Ask for Recess, log in when asked, then send the link Recess returns. That is the happy path.
Simple start
Point your AI at Recess. Log in once. Done.
For normal use, tell your AI to use Recess and log in when Recess asks. That is the whole magic trick. The Recess link is here only when something asks where to go.
https://mcp.recess.host/mcp
Quickstart
Start with the plain ask: use Recess, log in when Recess opens, and bring back the live Yard link first. If an app asks for a link, use the Recess link. If you are wiring a product or script, the exact calls and response shapes are below.
Give it the Recess link and let Recess open the login screen.
Recess turns the WordPress idea into something people can click around.
Return the clean Recess link first, with details only when asked.
export RECESS_MCP_URL="https://mcp.recess.host/mcp"
In normal AI tools, Recess handles login automatically. The manual examples below are only for people testing requests by hand.
RECESS_WORKSPACE_KEY="..." \
RECESS_LOGIN_EMAIL="you@example.com" \
npm run smoke:mcp-oauth
The smoke command behaves like an app using Recess, calls resources/list and tools/list, and never prints the issued access token.
export RECESS_AUTH_HEADER="Authorization: Bearer $RECESS_OAUTH_ACCESS_TOKEN"
curl "$RECESS_MCP_URL" \
-H "$RECESS_AUTH_HEADER"
curl -X POST "$RECESS_MCP_URL" \
-H "$RECESS_AUTH_HEADER" \
-H "Content-Type: application/json" \
-d '{
"jsonrpc": "2.0",
"id": 1,
"method": "initialize",
"params": {}
}'
curl -X POST "$RECESS_MCP_URL" \
-H "$RECESS_AUTH_HEADER" \
-H "Content-Type: application/json" \
-d '{
"jsonrpc": "2.0",
"id": 2,
"method": "tools/list",
"params": {}
}'
Where Recess Lives
These are the public Recess surfaces. Normal users only need the Recess link; the other URLs are for builders checking app, launch, and runtime behavior.
Log In
For normal use, tell your AI to use Recess and let Recess open the login screen. Approved apps keep the selected account through the whole Yard flow.
URL: https://mcp.recess.host/mcp
Scopes: yards:read yards:write
Authorization: Bearer YOUR_TOKEN
The Recess app Worker proxies browser requests server-side. Browser JavaScript should call the app's same-origin /api/agent/yards, not carry a shared API bearer token.
When Your App Asks
Most modern AI apps can use the Recess link directly and log in through Recess. Older local setups can use a bridge that forwards the same requests.
{
"mcpServers": {
"recess": {
"url": "https://mcp.recess.host/mcp"
}
}
}
{
"mcpServers": {
"recess": {
"command": "npx",
"args": [
"-y",
"mcp-remote@latest",
"https://mcp.recess.host/mcp",
"--header",
"Authorization:${AUTH_HEADER}"
],
"env": {
"AUTH_HEADER": "Bearer YOUR_TOKEN"
}
}
}
}
Bearer headers are only for internal or development deployments. Normal users should log in through Recess instead.
Update Without Losing The Saved Recipe
Use update_playset for title, summary, or prompt notes without disturbing the stored recipe. Send a replacement blueprint only when the user explicitly wants the Yard recipe changed.
Answer Shape
Builder detail: Recess calls return text content. Parse the text as JSON before reading ids, manifests, or URLs.
{
"jsonrpc": "2.0",
"id": 10,
"result": {
"content": [
{
"type": "text",
"text": "{\n \"playset\": {}\n}"
}
]
}
}
JSON.parse(response.result.content[0].text)
Core workflow
The canonical path is create_playset to create_yard to publish_pass. Send a full blueprint to create_playset when the user already has one; Recess stores it exactly. Return the clean Pass URL, not a raw playground.wordpress.net URL. Call export_blueprint only when the user asks for the portable recipe.
Action Reference
These are the current actions Recess exposes to connected assistants and builder integrations.
get_account
Inspect the signed-in account, included Recess address, billing, entitlement, limits, and auth scope.
- Required
- none
- Optional
- accountId
bootstrap_account
Create or repair the account record so Recess can start without app setup chores.
- Required
- none
- Optional
- accountName, accountSlug, userEmail, userName, role, accountId
get_billing
Read plans, billing setup, checkout pause state, current entitlement, and limits.
- Required
- none
- Optional
- accountId
create_billing_checkout
Create a hosted Checkout session when the user asks to upgrade and the plan is not paused.
- Required
- none
- Optional
- plan, interval, successUrl, cancelUrl, customerEmail, accountId
open_billing_portal
Open hosted billing management for payment, invoices, cancellation, or card fixes.
- Required
- none
- Optional
- returnUrl, accountId
list_domains
List branded domains and the included Recess address.
- Required
- none
- Optional
- accountId
create_domain
Connect a customer-owned subdomain and return DNS instructions.
- Required
- hostname
- Optional
- accountId
get_domain
Read verification, SSL, and DNS state for a customer domain.
- Required
- domainId
- Optional
- accountId
refresh_domain
Refresh customer-domain verification and SSL status.
- Required
- domainId
- Optional
- accountId
delete_domain
Remove a customer domain from the account.
- Required
- domainId
- Optional
- accountId
create_playset
Create a reusable Playset from an exact Blueprint, or from a fallback Blueprint-shaped prompt when no Blueprint exists.
- Required
- blueprint or prompt
- Optional
- title, summary, accountId
update_playset
Revise Playset metadata while preserving the stored Blueprint unless a replacement Blueprint is supplied.
- Required
- playsetId
- Optional
- prompt, title, summary, blueprint, accountId
create_yard
Create a playable draft Yard from a Playset.
- Required
- playsetId
- Optional
- title, accountId
publish_pass
Publish a Yard and create a clean Pass URL.
- Required
- yardId
- Optional
- origin, accountId, force, prebuildPolicy, slug, domainId, visibility, expiresAt, accessMode, password, passwordHint
update_pass
Update sharing controls for an existing clean Pass URL.
- Required
- slug
- Optional
- domainId, visibility, expiresAt, accessMode, password, passwordHint, accountId
revoke_pass
Revoke a clean Pass URL so it no longer launches.
- Required
- slug
- Optional
- domainId, accountId
disable_pass
Disable a clean Pass URL; useful when an AI user says turn this link off.
- Required
- slug
- Optional
- domainId, accountId
list_yards
List recent account Yards with safe version, screenshot, prebuild, and Pass-count summaries.
- Required
- none
- Optional
- limit, accountId
list_passes
List clean Pass URLs for a Yard.
- Required
- yardId
- Optional
- accountId
get_pass
Inspect one clean Pass URL and its sharing controls.
- Required
- slug
- Optional
- domainId, accountId
get_yard_status
Return the current Yard record.
- Required
- yardId
- Optional
- accountId
list_yard_versions
List version history for a Yard.
- Required
- yardId
- Optional
- accountId
get_yard_version
Read one Yard version; Blueprint and raw manifest require explicit include flags.
- Required
- yardId, versionSelector
- Optional
- includeBlueprint, includeManifest, accountId
revise_yard
Move an existing Pass slug to a revised Yard version while keeping the same share URL.
- Required
- yardId, passSlug
- Optional
- title, prompt, summary, blueprint, force, domainId, sharing controls, prebuildPolicy, banner, accountId
get_account_activity
Read account-level launch activity.
- Required
- none
- Optional
- days, from, to, limit, accountId
get_yard_activity
Read Yard-level launch activity.
- Required
- yardId
- Optional
- days, from, to, limit, accountId
get_pass_activity
Read Pass-level launch activity.
- Required
- slug
- Optional
- domainId, days, from, to, accountId
export_blueprint
Export the stored portable WordPress recipe.
- Required
- playsetId or yardId
- Optional
- accountId
upload_asset
Return HTTP upload instructions for a named asset; bytes upload through the API.
- Required
- filename
- Optional
- contentType, yardId
take_screenshot
Create a durable async screenshot job for a Yard Pass when available.
- Required
- yardId
- Optional
- passSlug, accountId
validate_blueprint
Validate a Blueprint before updating or publishing.
- Required
- blueprint
- Optional
- none
Create A Yard
This is the happy path most AI tools should run when a user asks for a WordPress Yard.
{
"jsonrpc": "2.0",
"id": 10,
"method": "tools/call",
"params": {
"name": "create_playset",
"arguments": {
"title": "First Yard",
"blueprint": {
"$schema": "https://playground.wordpress.net/blueprint-schema.json",
"meta": {
"title": "First Yard",
"description": "AI-made WordPress ideas ready for a Recess Yard.",
"author": "Recess",
"categories": ["recess"]
},
"landingPage": "/wp-admin/",
"preferredVersions": { "php": "8.4", "wp": "latest" },
"features": { "networking": false },
"steps": [{ "step": "login", "username": "admin" }]
}
}
}
}
{
"jsonrpc": "2.0",
"id": 11,
"method": "tools/call",
"params": {
"name": "create_yard",
"arguments": {
"playsetId": "playset_..."
}
}
}
{
"jsonrpc": "2.0",
"id": 12,
"method": "tools/call",
"params": {
"name": "publish_pass",
"arguments": {
"yardId": "yard_..."
}
}
}
{"shareUrl":"https://try.recess.host/odd"}The clean Pass URL is the default handoff. Use export_blueprint when the user asks for the portable WordPress recipe or wants to move the idea elsewhere.
{
"jsonrpc": "2.0",
"id": 14,
"method": "tools/call",
"params": {
"name": "export_blueprint",
"arguments": {
"yardId": "yard_..."
}
}
}
Same-Pass Review Loop
Paid-value handoffs usually need another round. Keep the same clean Pass URL, update the Yard behind it, and return the shareUrl first so people do not chase a fresh link every time the page improves.
Use update_pass for visibility, expiry, and password access on the existing Pass. Send password only when setting or replacing it.
Use revise_yard to update the Yard behind an existing Pass while keeping the same clean shareUrl.
Use take_screenshot for async proof and prebuildPolicy only as launch-prep evidence, never as a public speed claim by itself.
{
"jsonrpc": "2.0",
"id": 15,
"method": "tools/call",
"params": {
"name": "update_pass",
"arguments": {
"slug": "odd",
"visibility": "unlisted",
"accessMode": "password",
"passwordHint": "Ask the launch lead"
}
}
}
{
"jsonrpc": "2.0",
"id": 16,
"method": "tools/call",
"params": {
"name": "revise_yard",
"arguments": {
"yardId": "yard_...",
"passSlug": "odd",
"summary": "Updated review round after feedback.",
"blueprint": {
"$schema": "https://playground.wordpress.net/blueprint-schema.json",
"meta": { "title": "Next Review Round" },
"landingPage": "/",
"preferredVersions": { "php": "8.4", "wp": "latest" },
"features": { "networking": false },
"steps": []
}
}
}
}
{
"jsonrpc": "2.0",
"id": 16,
"method": "tools/call",
"params": {
"name": "take_screenshot",
"arguments": {
"yardId": "yard_...",
"passSlug": "odd"
}
}
}
prebuildPolicy: "auto"; this is the default.prebuildPolicy: "force" when waiting for prebuild evidence is acceptable.prebuildPolicy: "off" when the clean Pass matters more than queueing prep work.Yard published: {shareUrl} first, then add controls, screenshot status, or exported Blueprint only when asked.HTTP API Quickstart
Use the HTTP API when you do not need MCP and want direct app-style integration. These examples are production-copyable for trusted server-side environments, CLIs, or MCP clients. Browser code should use the app Worker proxy instead of sending a shared API token.
Agents and server-side tools can fetch the OpenAPI document at /.well-known/openapi.json or /openapi.json. Logged-in AI tools still use only https://mcp.recess.host/mcp.
curl https://recess.host/.well-known/openapi.json
export RECESS_API_TOKEN="..."
export RECESS_ACCOUNT_ID="acct_..."
curl -X POST https://api.recess.host/api/agent/yards \
-H "Content-Type: application/json" \
-H "Authorization: Bearer $RECESS_API_TOKEN" \
-H "X-Recess-Account: $RECESS_ACCOUNT_ID" \
-d '{
"prompt": "Publish my AI-made WordPress idea for a tiny launch page as a Yard.",
"title": "First Yard",
"visibility": "public",
"slug": "odd",
"expiresAt": null,
"accessMode": "open"
}'
playsetStored reusable prompt, summary, and Blueprint source record.yardPublished Yard record.passClean Pass record with a slug.shareUrlClean Pass URL to return to the user.blueprintPortable WordPress recipe.manifestLaunch manifest with Blueprint, preview, runtime, speed profile, and prebuild status.validationBlueprint validation result.summaryHuman-readable Playset summary.followUpQuestionsOptional publishing follow-ups.Validate A Blueprint
Recess validates the publishing shape before a Pass is created. Blueprints need the Playground schema URL, a title, a relative landing page, PHP and WordPress versions, and an array of steps.
{
"jsonrpc": "2.0",
"id": 20,
"method": "tools/call",
"params": {
"name": "validate_blueprint",
"arguments": {
"blueprint": {
"$schema": "https://playground.wordpress.net/blueprint-schema.json",
"meta": {
"title": "Tiny Plugin Yard",
"description": "A Recess Yard.",
"author": "Recess",
"categories": ["recess"]
},
"landingPage": "/wp-admin/",
"preferredVersions": { "php": "8.4", "wp": "latest" },
"features": { "networking": false },
"steps": [{ "step": "login", "username": "admin" }]
}
}
}
}
Include a login step so the Yard opens signed in. Keep features.networking false unless the Blueprint truly needs live downloads.
Launch Artifacts
publish_pass creates and caches the launch artifacts used by try.recess.host. Public launch traffic should use the first-party runtime host; call shell/runtime speed a shell/runtime win until click-to-usable proof clears the public claim bar.
shareUrlClean public Pass URL to open the Yard, like https://try.recess.host/odd.manifest.blueprintUrlImmutable Blueprint JSON URL.manifest.playgroundBaseUrlRuntime URL. Production should normalize to https://run.recess.host/.manifest.prebuildCurrent prebuild truth for the Yard version.manifest.assetsVersion assets. Completed screenshots attach here.Usually return prebuild.status: "not_required" and launch from a small Blueprint.
May return prebuild.status: "queued". Treat only "ready" plus a bundle as a ready prebuilt Yard.
take_screenshot is async. Jobs can become completed, skipped, or failed; it does not return an image synchronously.
Proof And Claim Boundaries
Recess publishes machine-readable proof surfaces so humans and AI teammates can say what the product has actually verified. Read these before writing speed, accessibility, uptime, paid-plan, or boundary copy that says Recess is not production WordPress hosting. Receipts are good. Invented trophies are not invited to recess.
/.well-known/recess-speed-claim.json is the source for public speed language. The current proof supports exact-scope basic/front-page language only; broad speed-crown claims remain blocked.
/.well-known/recess-accessibility.json reports the static route and contrast audit. It is not a WCAG certification, VPAT, or substitute for human assistive-technology testing.
/status.json reports public-path expectations. It is not an uptime promise or incident-history replacement until live checks back it.
Before summarizing Recess, fetch the proof URL for the claim you are making. If the proof is missing, blocked, not ready, or static-only, say that plainly and keep building the Yard.
Embed A Try Button
Put a clean Try in Recess button wherever you show an AI-made WordPress project. Use the Pass slug you already published; the script keeps raw Playground URLs out of your page.
<div data-recess-pass="odd"></div>
<script async src="https://recess.host/embed/try-button.js"></script>
<div data-recess-pass="odd" data-recess-label="Open the Yard"></div>
<script async src="https://recess.host/embed/try-button.js"></script>
When an AI tool publishes a Pass, it can give the user both the clean shareUrl and this embed snippet. The only public link should still be the Recess Pass URL.
Errors And Troubleshooting
Complete Recess login or send a valid internal/dev bearer token.
Send JSON-RPC calls to POST /mcp.
Set Content-Type: application/json.
Call validate_blueprint, revise with update_playset, then publish again.
Check the id and accountId or X-Recess-Account.
Use initialize, tools/list, tools/call, resources/list, or resources/read.
Call publish_pass; create_yard only creates a draft Yard.
Launch manifests should use https://run.recess.host/ for Playground runtime files.
Runtime .wasm files must return application/wasm or Playground boot can fail before WordPress is usable.
Blueprint, preview, and asset URLs must be cross-origin readable when the runtime fetches them from the Yard shell.
Expected. Inspect job.status and job.output.reason until capture completes or skips.
Use the accessibility status JSON for static audit proof, but do not call Recess certified or VPAT-ready without human assistive-technology review.
shareUrl after publish_pass.
Preserve ids exactly as returned.
Do not call force: true without explicit approval.
Do not present queued screenshots or prebuilds as complete.
Do not make speed claims beyond measured evidence; separate first-party shell/runtime speed from public click-to-usable claims.
Do not turn static accessibility checks into compliance claims.