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.
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.
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.
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.
Reload Claude Code, Codex, Cursor, or whichever client you use so the MCP connection is picked up.
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.
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")).
The installer configures Claude Code automatically. For other clients, add the spacesheep MCP server manually:
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.
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.
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
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"
}
}
}
}
Add to ~/.codeium/windsurf/mcp_config.json:
{
"mcpServers": {
"spacesheep": {
"serverUrl": "https://mcp.spacesheep.dev/mcp",
"headers": {
"Authorization": "Bearer YOUR_API_KEY"
}
}
}
}
spacesheep CLINo 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 }}
deploy | Upload 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_spaces | List all your deployed spaces. |
read_space | Read deployed files. Accepts a URL or UUID. |
share_space | Grant access to others by email. |
delete_space | Remove a space and its files. |
get_space | View metadata and access list. |
list_comments | Read viewer feedback on a space. |
add_comment | Reply as Claude. Also react_to_comment, resolve_comment. |
download_pdf | Export a space as a PDF — a short-lived download link for the current version. |