spacesheep

Getting Started

Deploy publication-quality documents from ChatGPT, Claude Code, Codex, Cursor, Windsurf, and any MCP-compatible client. The /sheep skill generates polished HTML pages and publishes them to a private, shareable URL in one step.

Fastest: hand it to your agent

Paste this into Claude Code, Codex, Cursor, Windsurf — anything that can open a URL. Your agent reads the guide, writes the right config for whichever client it's running in, and checks the connection.

Set up spacesheep for me: https://spacesheep.dev/setup

Rather do it yourself? The steps below cover every client by hand. On ChatGPT, Claude.ai or Grok? Those can't configure themselves — it's two clicks in their settings, here.

1
Install
npx spacesheep-skill

or

curl -fsSL https://spacesheep.app/install.sh | bash

Installs the /sheep skill and configures the MCP server for Claude Code. Add -g for global install. For other clients, see MCP setup below.

2
Sign in via your browser

The installer opens spacesheep.dev, you approve with one click, and it wires up the MCP server automatically — no API key to copy and paste. First time, you'll claim an @username: it becomes your URL namespace, so spaces publish to spacesheep.dev/@you/<title>. Prefer manual setup? Create a key on the dashboard and see the config below.

3
Restart your client

Reload Claude Code, Codex, Cursor, or whichever client you use so the MCP connection is picked up.

4
Create something
Deploy a quarterly metrics report from this data to spacesheep
Build an architecture overview and publish it
Create a comparison page: Postgres vs SQLite vs D1

The MCP deploy tool builds a self-contained HTML document and publishes it to a private URL you can share. In Claude Code, the /sheep skill adds design best practices automatically.


Worker mode

Need server-side logic, API endpoints, or a shared database? Include a worker.js file and spacesheep deploys it as a live Cloudflare Worker with D1 database access.

// worker.js — ES module format
export default {
  async fetch(request, env) {
    const url = new URL(request.url);
    if (url.pathname === "api/votes") {
      const rows = await env.D1.prepare("SELECT * FROM votes").all();
      return Response.json(rows.results);
    }
    return new Response("<h1>Hello</h1>", {
      headers: { "Content-Type": "text/html" }
    });
  }
};

Include a schema.sql file for database migrations — it runs against D1 on every deploy. Use CREATE TABLE IF NOT EXISTS for idempotent migrations.

Deploy with worker.js + any other files — worker mode is detected automatically. Use relative URLs in frontend code (e.g. fetch("api/data")).


MCP setup by client

The installer configures Claude Code automatically. For other clients, add the spacesheep MCP server manually:

ChatGPT, Claude.ai, Grok — hosted assistants

No terminal, no config file, and nothing for the assistant to install: a connector is a setting you add, which is why asking ChatGPT to set itself up never works. Copy the server URL, then add it in your assistant's settings and approve the browser sign-in.

https://mcp.spacesheep.dev/mcp

No API key: all three speak OAuth, so you approve once in the browser and the assistant holds a token it can rotate. If spacesheep is already listed but its tools look wrong or out of date, remove the connector and add it again — these clients snapshot the tool list when you connect and won't refresh it on their own.

Claude Code

Easiest is the CLI — it writes the right file in the right shape, and OAuth means no key to manage:

claude mcp add --transport http --scope user spacesheep https://mcp.spacesheep.dev/mcp

Then run /mcp inside Claude Code to finish the browser sign-in. To write it by hand instead, the file is ~/.claude.json for user scope or .mcp.json in the project root — not ~/.claude/settings.json, which doesn't read mcpServers:

{
  "mcpServers": {
    "spacesheep": {
      "type": "http",
      "url": "https://mcp.spacesheep.dev/mcp"
    }
  }
}

"type": "http" is required — an entry with a url and no type is read as a stdio server and errors. If you can't use OAuth, add "headers": { "Authorization": "Bearer ${SPACESHEEP_API_KEY}" }; Claude Code expands ${VAR}, so the key stays out of a file you might commit.

Codex (OpenAI)

Add to ~/.codex/config.toml (or .codex/config.toml per project):

[mcp_servers.spacesheep]
url = "https://mcp.spacesheep.dev/mcp"
bearer_token_env_var = "SPACESHEEP_API_KEY"

Then set the env var: export SPACESHEEP_API_KEY=YOUR_API_KEY

Cursor

Add to ~/.cursor/mcp.json (global) or .cursor/mcp.json (project):

{
  "mcpServers": {
    "spacesheep": {
      "url": "https://mcp.spacesheep.dev/mcp",
      "headers": {
        "Authorization": "Bearer YOUR_API_KEY"
      }
    }
  }
}

Windsurf

Add to ~/.codeium/windsurf/mcp_config.json:

{
  "mcpServers": {
    "spacesheep": {
      "serverUrl": "https://mcp.spacesheep.dev/mcp",
      "headers": {
        "Authorization": "Bearer YOUR_API_KEY"
      }
    }
  }
}

Terminal and CI — the spacesheep CLI

No agent needed. The CLI is an open-source MCP client (github.com/micmmakarov/spacesheep-cli) that publishes a folder with an index.html, or a single HTML file:

npx spacesheep login          # sign in through the browser once
npx spacesheep deploy ./dist  # prints the URL; run again to publish a new version

To deploy automatically on every push, add an API key from settings to the repo as the SPACESHEEP_KEY secret and use the GitHub Action:

- uses: actions/checkout@v4
- uses: micmmakarov/spacesheep-cli@v1
  with:
    dir: dist
    key: ${{ secrets.SPACESHEEP_KEY }}

MCP tools

deployUpload files as a static site or Worker app. Pass access: { visibility, emails[] } (visibility: public / members / private) for sharing. Include worker.js for dynamic mode with D1.
list_spacesList all your deployed spaces.
read_spaceRead deployed files. Accepts a URL or UUID.
share_spaceGrant access to others by email.
delete_spaceRemove a space and its files.
get_spaceView metadata and access list.
list_commentsRead viewer feedback on a space.
add_commentReply as Claude. Also react_to_comment, resolve_comment.
download_pdfExport a space as a PDF — a short-lived download link for the current version.