Sunrose MCP documentation

Connect an MCP client to Sunrose to publish a static site, read client feedback, manage review links, and archive projects.

Connect with OAuth

API and MCP access require Personal or above. Add https://sunrose.dev/mcp as a remote custom connector in an MCP client that supports OAuth discovery.

Complete Sunrose’s sign-in and consent flow, choosing Read only or Read and write. You can inspect and disconnect connected apps under API in the console.

Endpoint
https://sunrose.dev/mcp

Connect with an API key

If your client accepts an Authorization header, create a Sunrose API key and send it as a bearer token to the same endpoint. Choose only the permissions the integration needs.

For example, a Claude Code client with HTTP MCP support can be configured with the command below. Replace YOUR_API_KEY with your own key. Avoid leaving a real key in shared shell history or documentation.

Shell
claude mcp add --transport http sunrose https://sunrose.dev/mcp \
  --header "Authorization: Bearer YOUR_API_KEY"

Connect from Codex

Codex can use the same endpoint. Add the server, then sign in with the OAuth flow, choosing Read only or Read and write on Sunrose’s consent screen.

Shell
codex mcp add sunrose --url https://sunrose.dev/mcp
codex mcp login sunrose

Available tools

The server advertises each tool’s input schema, and whether it only reads or can take something down, through tools/list. Your MCP client uses that to construct calls and to decide when to ask you first.

list_projects
Read access

Optional includeArchived. List workspace projects with state, whether the served version is a review or a plain preview, and open comments.

get_project
Read access

projectId. Read versions, approval status, addresses, and review links (with their ids, never their secrets).

list_feedback
Read access

projectId; optional status, visibility, and limit (1–200). Read reviewer comments, with the version that fixes each (fixedIn) and, on a reply, the comment it answers.

get_usage
Read access

No inputs. Plan, projects, storage, and files this month against their limits, plus per-upload limits.

set_feedback_status
Write access

commentId and status: open, in_progress, ready, or resolved. Changes internal status only, and returns the comment’s project, page, and wording.

reply_to_feedback
Write access

commentId and body; optional shared (default true). The reviewer reads the reply under their own comment next time they open their link. Nothing is emailed; false keeps it as an internal note.

mark_feedback_fixed
Write access

commentIds (up to 50) and optional version (default: the current one). Records the version that addresses them and moves open comments to ready. The reviewer sees nothing.

create_review_link
Write access

projectId and audience (client or team); optional expiresInDays, approvalEnabled, feedbackDueAt, and allowDownload. Returns a review URL.

revoke_review_link
Write access

sessionId from get_project. Turns a review link off at once. To reopen review, make a new link.

extend_review_link
Write access

sessionId from get_project. Turns an expired client link back on for another full period at the same address.

set_current_version
Write access

projectId and versionId. Serve an existing version (roll back or forward). Requires a plan with version restore.

publish_site
Write access

files plus name for a new project, or projectId for a new version. Optional mode: review or show. Up to 5 MB.

begin_publish
Write access

files (path and exact size, up to 200) plus name or projectId; optional mode. Returns a signed upload URL for each file, for sites over 5 MB.

finish_publish
Write access

sessionId from begin_publish, after every file is uploaded. Checks each file’s size, then makes the version live.

archive_project
Write access

projectId. Takes a project off the air without deleting anything. It frees a project slot, but its files still count toward your storage. Reversible.

unarchive_project
Write access

projectId. Brings an archived project back. Refused if your plan’s project limit is full.

Publish files through MCP

For publish_site, each file needs a path and either text or base64 content. Paths are relative to the site root. Include index.html and all required assets in every version.

A publish_site call accepts up to 5 MB of decoded file content, because the files travel through the conversation. For larger sites, call begin_publish with each file’s path and exact size; it returns a signed upload URL for each file. Upload each file’s raw bytes to its URL yourself, with the headers returned (a shell or script is enough), then call finish_publish. Nothing is live until finish_publish. This needs a client that can run commands, such as Claude Code. Workspace plan limits and safety checks apply to every path.

JSON
{
  "name": "My preview",
  "mode": "review",
  "files": [
    {
      "path": "index.html",
      "text": "<!doctype html><title>Preview</title><h1>Hello</h1>"
    }
  ]
}

Permissions and transport

The endpoint uses Streamable HTTP with JSON responses, without persistent MCP sessions or a server-sent event stream. It accepts OAuth access tokens or API keys; a signed-in browser cookie alone is not authentication.

A connection acts as the person who authorised it, with their current role: a viewer’s connection cannot write. Connections cannot delete projects, manage domains, set preview passwords, change search indexing, create API keys, manage billing or the team, or approve other connections. To take a site down, archive it: that is reversible, keeps every version and comment, and is undone with unarchive_project. Read-only connections cannot publish or change feedback. Feature-specific plan allowances still apply.

OAuth discovery and token lifecycle

Discovery is available at /.well-known/oauth-protected-resource and /.well-known/oauth-authorization-server. Public clients register at POST /oauth/register, then use authorization code flow with required PKCE S256.

The authorization endpoint is /oauth/authorize; tokens are exchanged at /oauth/token and revoked at /oauth/revoke. Scopes are read and write. Access tokens last one hour; refresh tokens last 30 days and rotate on use.

A reused authorization code or refresh token revokes the affected connection’s tokens. Let your MCP client manage credentials and refreshes, and disconnect unused apps from API.

Upload a site
Sunrose

Sign in to Sunrose.