Deploy plain HTML to thin.host
Publish a folder of hand-written HTML, CSS and JS (or a single index.html) to thin.host. thin.host serves the static files and gives you a live URL right away. Your agent can do every step for you through the thin.host MCP server, or you can run one curl command.
At a glance
| Step | plain HTML |
|---|---|
| Folder to deploy | the folder that holds index.html |
| Deploy | curl -F file=@site.zip -H "Authorization: Bearer $THINHOST_API_KEY" https://thin.host/v1/websites/archive |
| Live URL | https://thin.host/s/my-site/, or your own domain |
Before you start
- Requires: Nothing to install.
- A thin.host account. Sign up, then create an API key under Settings (for
curland the local MCP server), or connect your agent with OAuth as shown in Quickstart (MCP).
Check your links
Until a domain points at it, a thin.host site lives under a sub-path: https://thin.host/s/<slug>/. Use relative paths (style.css, img/logo.png, about.html). Root-absolute paths such as /style.css only resolve once a custom domain points at the site.
<link rel="stylesheet" href="style.css">
<a href="about.html">About</a>
Deploy from your agent (MCP)
Connect thin.host to Claude Code, Claude Desktop, Cursor, VS Code, Windsurf, Codex or ChatGPT once (setup for each client), then ask:
Save this page as index.html and publish it to thin.host with the slug my-site.
With the local server (uvx thinhost-mcp) the agent writes the file and calls publish_website with its path. Ask for changes in the same conversation and it pushes them with update_website.
The hosted connector (https://thin.host/mcp, used by claude.ai and ChatGPT) cannot read your disk. From a coding agent it uploads with the REST call below; otherwise it publishes from a public link to a zip or HTML file with publish_website_from_url.
Deploy with curl
zip -r site.zip . -x '.*'
curl -F file=@site.zip -F title="My plain HTML site" -F slug=my-site \
-H "Authorization: Bearer $THINHOST_API_KEY" \
https://thin.host/v1/websites/archive
The JSON response includes url, the live address (https://thin.host/s/my-site/). To redeploy, upload the new zip to the site's archive endpoint; pages and assets missing from it are removed:
curl -F file=@site.zip \
-H "Authorization: Bearer $THINHOST_API_KEY" \
https://thin.host/v1/websites/my-site/archive
A single upload can be up to 30 MB. See the REST API reference for every field.
Add a custom domain
- Open the site in the dashboard and add your hostname under Custom Domains, for example
www.example.com. A<name>.thin.hostsubdomain is free and works immediately. - Create the DNS record the dashboard shows: a
CNAMEpointing atcname.thin.host. TLS is issued automatically once DNS resolves.
Pages on a custom domain get a canonical tag, a generated robots.txt and a sitemap.xml.
Plain HTML notes
- index.html becomes /, about.html becomes /about, blog/index.html becomes /blog, and 404.html becomes the site's not-found page.
- A single file can be uploaded as-is: curl -F file=@index.html …/v1/websites/archive.
FAQ
Can I upload without the command line?
Yes. Sign in and drop the files (or a zip) on the upload page at thin.host; you get the same live URL.
How large can a site be?
A single archive upload can be up to 30 MB. The local MCP server (uvx thinhost-mcp) reads the build folder directly and splits large sites across requests, up to 150 MB.
Other frameworks: all deploy guides. Coming from another host? Compare thin.host.