@shipsite/mcp

Deploy static websites

shipsite.sh

Static site hosting API for LLMs. Deploy sites with one API call. No git, no build steps, no dashboards. $0.10/site/day.

shipsite.sh lets LLM agents deploy static websites by POSTing files as JSON and receiving a live URL. Sites are served globally on a CDN edge network with HTTPS, auto-expire after 24 hours unless pinned, and cost $0.10 per site per day (prorated daily, billed monthly via Stripe). No free tier — payment is required before any deploys work.

API base URL: https://api.shipsite.sh Authentication: Bearer sk_live_… (all endpoints except account creation) Keys are returned once at account creation and are inert (return 402) until Stripe checkout completes.

Quick start:

  1. POST /v1/accounts with { "email": "you@example.com" } — returns api_key + setup_url
  2. Open setup_url to complete Stripe checkout and activate the key
  3. POST /v1/sites with Authorization: Bearer sk_live_… and { "files": { "index.html": "…" } } — returns { "url": "https://site\_abc123.shipsite.sh" }

Endpoints:

  • POST /v1/accounts (no auth): Create account. Body: { "email": "…" }. Returns: { "api_key": "sk_live_…", "setup_url": "https://checkout.stripe.com/…", "status": "pending" }
  • POST /v1/sites: Create a site. Body: { "files": { "path": "content" }, "name": "optional-slug", "meta": {} }. Text files as strings, binary files with "base64:" prefix. Returns: { "id": "site_…", "url": "https://….shipsite.sh", "expires_at": "…" }
  • GET /v1/sites: List sites. Supports ?limit= and ?offset= pagination.
  • GET /v1/sites/:id: Get site details (metadata, file list, expiry).
  • PUT /v1/sites/:id: Update a site. Same body as POST. Omitted files unchanged. Set a file to null to delete it.
  • DELETE /v1/sites/:id: Delete a site immediately. Billing stops.
  • POST /v1/sites/:id/pin: Remove auto-expiry. Site persists until deleted.
  • POST /v1/sites/:id/unpin: Re-apply 24h TTL from current time.
  • GET /v1/accounts/me: Get account status and active site count.

File encoding rules:

  • Text files (.html, .css, .js, .svg, .json, .txt, .xml, .md): send as plain strings
  • Binary files (.png, .jpg, .gif, .webp, .ico, .woff2, .pdf): "base64:" prefix + base64 content

Site behavior:

  • Served at https://{site_id}.shipsite.sh (or https://{name}.shipsite.sh if named)
  • index.html served for / and as SPA fallback
  • HTTPS on all sites, global CDN, CORS: Access-Control-Allow-Origin: *
  • No injected content — sites served exactly as uploaded
  • Auto-expire after 24 hours unless pinned

Limits: 1,000 active sites, 120 deploys/hour, 100 files/site, 15 MB total payload, 5 MB per file, 100,000 requests/site/day.

Error format: { "error": { "code": "…", "message": "Actionable description of what went wrong, why, and how to fix it.", "details": { … } } } Common codes: payment_required (402), rate_limited (429), validation_error (400), not_found (404).

Documentation

  • API Reference: Full endpoint details, examples, and file encoding rules
  • Terms of Service: Acceptable use policy, DMCA process, prohibited content

MCP Server

  • @shipsite/mcp: MCP server package for Claude Code, Cursor, and Windsurf

MCP config: { "mcpServers": { "shipsite": { "command": "npx", "args": ["@shipsite/mcp"], "env": { "SHIPSITE_API_KEY": "sk_live_…" } } } }

Tools: deploy_site, list_sites, get_site, delete_site, pin_site, create_account

Optional

  • Homepage: Marketing site with visual examples and pricing breakdown
  • Pricing examples: 1 site/30 days = $3, 10 sites/30 days = $30, 1 site/2 hours = $0.10

Related Servers