---
name: carnival
description: Publish a static website you built (HTML/CSS/JS, images, fonts) to a free public URL that stays live for 7 days; update it; check its status and logs via the Carnival MCP connector.
---

# Carnival

## Purpose
For a small website the user wants online now: a menu, opening hours, a price list. Built static files only; embed video and audio (YouTube, Vimeo). Free plan: a site lives 7 days from first publish, then is deleted; at most 3 live sites. Not for logins, payments or anything private: every file is public.

## Tooling
- `carnival_deploy`: publish a new site, or update one with `site` (slug or URL).
- `carnival_status`: slots used; each site's URL, status and time left.
- `carnival_logs`: events, error codes with fixes, missing pages.

## Auth
Server: https://carnival-staging.dev/mcp. OAuth 2.1 with PKCE; the user signs in. Take every endpoint from https://carnival-staging.dev/.well-known/oauth-protected-resource/mcp and the metadata it lists; never guess one. Allowed host: carnival-staging.dev.

## Operating rules
1. Build first; deploy the output folder (`index.html` at the top level).
2. Show the user what will be published and get a yes.
3. Send all files (text as utf8; images and fonts as base64). More than 30 files, or large uploads: `finalize=false` with up to 72 files a call (`{path, sha256}` entries don't count there), stylesheets in the first, keep `deploy_id`, send the rest, then `finalize=true` with the last 30 or fewer (`{path, sha256}` entries included). On Muse keep each call under about 90 KB. Pass an `idempotency_key` (8–64 of `A-Za-z0-9._:-`): new per call, reused only to retry it.
4. On `isError`: read `error.code` and `error.hint`, fix, call again; repeat an unchanged call only if `retryable`.
5. To change a site, pass `site` with only the changed files (and `delete_paths`): same URL and expiry, no extra slot, live at once.
6. With 3 live sites, update one or ask the user to end one at https://carnival-staging.dev/dashboard. Only the user can end sites or add time.
7. After publishing, tell the user the URL, the exact expiry in their local time (the site is deleted then), and that the dashboard offers Redeploy (7 fresh days) and End.
8. If content is rejected for policy, don't work around it; the user can email support@carnival.dev with the `request_id`.

Docs: https://carnival-staging.dev/llms.txt
