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
| Tools | Auth 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(/mcpstill 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.