creek

MCP Server

AI agent integration via Model Context Protocol. Deploy websites with a single tool call.

Overview

Creek provides a remote MCP server at mcp.creek.dev that lets any AI agent deploy websites without installing the CLI.

One tool call. Zero installation. 10 seconds to a live URL.

Connect

Add to your MCP client config (Claude Desktop, Cursor, Windsurf, etc.):

{
  "mcpServers": {
    "creek": {
      "url": "https://mcp.creek.dev",
      "headers": {
        "Authorization": "Bearer <CREEK_TOKEN>"
      }
    }
  }
}

No API key needed for sandbox tools. Authenticated tools (build log, resources) read Authorization: Bearer <key> or x-api-key from this HTTP request — never as a tool argument.

Available Tools

deploy

Deploy files to a sandbox preview (60 min).

Input:

  • files — Record<string, string> — file path to content (UTF-8 strings, not base64)
  • source — string (optional) — source identifier for tracking

Output: JSON with url, sandboxId, deployDurationMs, expiresAt, proof (ok, status, title, ttfbMs). If the preview URL is not live, error is verify_failed and the tool result is an error — the url is still included.

deploy_demo

Deploy a sample page instantly. Great for testing connectivity.

Input: none

Output: JSON with url, sandboxId, deployDurationMs, proof (same shape as deploy)

deploy_status

Check the status of a sandbox deployment.

Input:

  • sandboxId — string

Output: Full status object including status, url, expiresInSeconds, claimable

deploy_delete

Delete a sandbox before it expires.

Input:

  • sandboxId — string

list_projects

List projects in the authenticated team.

Auth: Authorization: Bearer or x-api-key

Output: { ok, projects: [{ id, slug, framework, productionDeploymentId, productionBranch, githubRepo, updatedAt }] }

get_status

Remote status for one project.

Input: projectSlug

Output: { ok, type: "project", slug, framework, productionDeploymentId, latestDeployment }

env_ls

List env var keys only (values are never returned).

Input: projectSlug

Output: { ok, project, keys: string[] }

env_set

Create or update an env var. Does not restart the worker.

Input: projectSlug, key, value

Output: { ok, key, pendingDeploy: true, nextStep: "Call deploy_prod …" } — the value is never echoed.

env_rm

Remove an env var. Same pending-deploy caveat as env_set.

Input: projectSlug, key

deploy_prod

Trigger a production deploy of the latest commit on the project's GitHub production branch (POST /github/deploy-latest). Does not wait for the build.

Input: projectSlug

Output: { ok, triggered, branch, commitSha, pending: true } — then poll get_status / list_deployments / get_build_log.

Requires a GitHub connection. Projects without one get not_found / "Project has no GitHub connection".

list_deployments

Recent deployments, newest first.

Input: projectSlug

Output: { ok, project, deployments: [{ id, version, status, branch, triggerType, createdAt }] } — pick an active row whose triggerType is not rollback as the rollback target.

rollback

Roll production back to a previous active deployment.

Input: projectSlug, required deploymentId (active non-rollback row from list_deployments), optional message

Example

An AI agent can deploy a website in a single tool call:

User: "Create a portfolio page and deploy it"

Agent:
1. Generates HTML/CSS
2. Calls creek.deploy({ files: { "index.html": "<html>...", "style.css": "..." } })
3. Returns: "Deployed to https://a1b2c3d4.creeksandbox.com"

Authentication

ToolsAuth required
Sandbox tools (deploy, deploy_demo, deploy_status, deploy_delete)No
Build log (get_build_log)Authorization: Bearer or x-api-key header
Projects (list_projects, get_status)same header
Env (env_ls, env_set, env_rm)same header
Production (deploy_prod, list_deployments, rollback)same header
Resources (list_resources, create_resource, attach_resource, detach_resource, delete_resource, rename_resource, query_database)same header

deploy_prod requires a GitHub connection on the project (same as creek deploy --from-github --prod). It returns as soon as the build is dispatched — poll get_status / list_deployments / get_build_log. env_set / env_rm do not restart the worker — follow with deploy_prod.

Do not pass apiKey as a tool argument. Prefer the CLI when you have a shell (~/.creek/config.json or CREEK_TOKEN).

Rate Limits

MCP requests are rate-limited per client IP (not per MCP server):

  • 10 sandbox deploys per hour per IP
  • Demo deploys are exempt from rate limits
  • Rate limit info is returned in tool output when triggered

Technical Details

  • Transport: Streamable HTTP (Web Standard)
  • Runtime: Cloudflare Workers
  • Protocol: MCP 2025-03-26
  • Endpoint: https://mcp.creek.dev (/mcp still works)
  • Health check: https://mcp.creek.dev/health

The MCP server is a stateless protocol translator. Sandbox tools (deploy, deploy_demo, …) call the Sandbox API; authenticated project/env/deploy tools call the Control Plane. No data is stored in the MCP server itself.

On this page