deed.page

For AI agents: the documentation index is at /llms.txt.

Blog ·

How to publish a static site from ChatGPT, Claude, Grok, or Cursor

Publishing a static site from ChatGPT, Claude, Grok, or Cursor means letting the assistant upload the HTML, CSS, and image files it wrote to a static host, which returns a public https link anyone can open. On deed.page the Free plan holds 25 sites of up to 25 MB each for $0, with no account and no expiry unless you ask for one (pricing).

Every command below was run against production on October 29, 2026. The test sites used a 15-minute expiry and were then deleted.

How to publish a static site from ChatGPT, Claude, Grok, or Cursor

There are two ways in, and which one fits depends on what the assistant can do:

  • It can run a shell command (Cursor's agent, Claude Code, Codex, a Grok Bot agent on its own box): it runs one curl and reads the link from the reply.
  • It can use an MCP server (Claude, ChatGPT, Cursor): you add https://deed.page/mcp once, then say "publish this on deed.page" and it calls the publish_site tool.

Either way the reply has the live url and, on the first publish, a deed_tok_… token the assistant keeps to update the same site later.

The one-line curl

Pick a slug; it becomes the address. chat-site-q7m3 turns into https://chat-site-q7m3.deed.page/. Use your own suffix; that one is an example.

curl -X PUT "https://deed.page/v1/sites?slug=chat-site-q7m3&ref=blog" -T index.html -H "X-Client: <your agent name>"

For a site with more than one file, pack the folder into a tarball and send that instead. In our test a two-file site (index.html plus style.css) came back as "files":2, "version":"v2", and the stylesheet served as text/css:

tar -czf site.tgz index.html style.css && curl -X PUT "https://deed.page/v1/sites?slug=chat-site-q7m3" --data-binary @site.tgz -H "Content-Type: application/gzip" -H "Authorization: Bearer $DEEDPAGE_TOKEN"

A single request body is capped at 4 MB; bigger sites use the plan-upload flow and keep the same URL (large sites). Choosing an upload format covers JSON file maps and multipart too.

Setup for each assistant

Claude (claude.ai, Claude Desktop, Claude mobile). Open Settings, then Connectors, choose Add custom connector, and paste https://deed.page/mcp. There is no sign-in step (docs). Claude Code users run claude mcp add --transport http deed-page https://deed.page/mcp.

ChatGPT. Add https://deed.page/mcp/chatgpt as a custom MCP connector where your plan allows connectors. It is the same server with the same publishing tools, minus the upgrade and billing ones (docs). ChatGPT also has its own Sites feature; OpenAI says Sites is not available on the Free or Go plans and that new Sites are private until you share them (OpenAI Help Center).

Cursor. Add the server to mcp.json:

{"mcpServers":{"deed-page":{"url":"https://deed.page/mcp"}}}

Cursor's agent can also just run the curl line above in its terminal.

Grok. A Grok Bot agent with a shell runs the curl line directly. To make it stick across sessions, install the public skill, which ships plugin manifests for Grok Bot, Claude Code, Codex, Cursor, Gemini CLI, and GitHub Copilot CLI: npx skills add f-o-x11/deed-page-skill (install walkthrough).

The MCP call

This is the request an MCP client sends. In our test both /mcp and /mcp/chatgpt returned "ok": true, "version": "v1", and a live subdomain URL:

{"jsonrpc":"2.0","id":1,"method":"tools/call","params":{"name":"publish_site","arguments":{"slug":"chat-site-mcp-q7m3","files":{"index.html":"<!doctype html><title>Hello</title><h1>Hello from my assistant</h1>","style.css":"h1{color:teal}"}}}}

The assistant passes the returned token to update_site later in the conversation. The MCP walkthrough goes through the other tools, including list_versions and delete_site.

Keep the link the same when the site changes

Ask the assistant to save the token (it is shown once; deed.page stores only a SHA-256 of it). Publishing again to the same slug with Authorization: Bearer keeps the URL and bumps the version, and older versions stay restorable (version history). Token hygiene covers where to keep it. If the page should disappear on its own, add -H "X-Ttl: 86400" for one day (TTLs).

If the same assistant also needs an inbox to send the link from, Cooper Email (cooperemail.com) is a sister product from the same team at Avatar 8 LLC.

FAQ

Do I need a deed.page account to publish from my assistant?

No. The first publish returns a token in the reply, and that token is the account. Add a recovery email later only if you want a way back in after losing it.

Can the assistant publish a React or Vite app?

Yes, after a build. Have it run the build and publish the output folder as a tarball; for client-side routes, turn on SPA mode.

What if the slug is taken?

The reply is 409 slug_taken with a suggested free slug. Pick a slug with a random suffix, as above, and the assistant rarely hits it (choosing a slug).

By Avatar 8 · Published · Markdown copy