thin.host / use-cases / docusaurus

Host your Docusaurus site
from Claude Code.

Build the docs, say "publish", get a live URL. Nothing to install: connect Claude Code, claude.ai or Claude Desktop to the hosted MCP server, or run it locally to publish straight from your build folder. Custom domain with TLS, redeploys that clean up after themselves, password-protected previews.

  claude code — ~/acme-docs
youBuild the docs and publish the build folder to thin.host as acme-docs.
claudeBuilt 277 pages. Publishing… publish_website(source_path="…/acme-docs/build", title="Acme Docs", slug="acme-docs") Live at https://thin.host/s/acme-docs/ — 277 pages, 400 assets, uploaded in 5 requests. This build uses baseUrl /, so it will render fully once you map a custom domain; want me to set up docs.acme.com?
youYes. And I just fixed the install page — redeploy.
claudeupdate_website(website="acme-docs", source_path="…/acme-docs/build", sync=True) Redeployed. 12 stale chunks from the previous build removed, your 2 dashboard redirects kept. Domain claim link: https://thin.host/claim/…

Docs hosting that speaks agent

Everything a docs site needs, exposed as two MCP tools and three REST endpoints — so the agent that wrote the docs can ship them.

🚀

One call to publish

Point publish_website at build/. Hundreds of files are batched across requests automatically; you get back a URL.

🧹

Redeploys that don't rot

Every Docusaurus build renames its hashed chunks. sync=true deletes what the new build no longer ships instead of hoarding it forever.

🌐

Custom domain, TLS included

Map docs.yourco.com from the dashboard or let the agent provision it. Sitemap, robots.txt and canonical tags are generated for you.

🔒

Password or email gating

Protect the whole site or single pages — internal docs, pre-launch previews, partner-only sections. Survives every redeploy.

🧭

Your own 404 page

The build's 404.html becomes the site's not-found page, served with a real 404 status so search engines get the message.

🤖

Skill included

A drop-in Claude skill encodes the whole flow — baseUrl decision, publish, sync, domain — so "deploy my docs" just works.

Redeploy without leftovers

Static hosts that only upsert files quietly accumulate every previous build. thin.host treats a synced upload as the whole site: new files land first, pages switch over, then everything the manifest doesn't list is removed.

  • Assets upload before pages, so a page never references a missing chunk
  • Redirect pages you authored in the dashboard are never pruned
  • Page-level protection is kept — pages update in place
  • Safe to re-run: a failed deploy tells you which request stopped
# Redeploy the docs after a change
update_website(
  website="acme-docs",
  source_path="/Users/me/acme-docs/build",
  sync=True,
)
# → { url, updated_page_count: 277,
# removed_assets: ["/assets/js/main.0a1b2c3d.js", …],
# kept_redirects: ["/guide/moved"] }

Preview on thin.host, go live on your domain

Docusaurus bakes baseUrl into every asset path, so there is one decision to make. The publish tools detect Docusaurus, read the build's baseUrl, and warn you when it won't resolve where the site is served — instead of you staring at an unstyled page.

Where readers lookbaseUrl
Custom domain docs.acme.com/
Preview thin.host/s/acme-docs//s/acme-docs/
// docusaurus.config.ts — one repo, both builds
url: 'https://docs.acme.com',
baseUrl: process.env.DOCUSAURUS_BASE_URL ?? '/',

# custom-domain build
npm run build
# preview build for thin.host
DOCUSAURUS_BASE_URL=/s/acme-docs/ npx docusaurus build --out-dir build-preview

Connect once, then it's a sentence

Pick how Claude reaches thin.host. Same tools either way; the only difference is whether the server can read your build folder or receives it as a zip.

1

Connect the thin.host MCP server

Recommended · nothing to install

One command, sign in, done

Points Claude Code at https://thin.host/mcp. A browser tab asks you to allow the connection; or skip OAuth and pass a dashboard API key as a header.

  • Works in any Claude Code session, no Python, no repo
  • Publishes from a zip. Signed in with OAuth: give Claude a public zip link (a release asset, object storage). Using an API key: Claude can also zip the build and curl it straight in
  • Every tool: publish, redeploy with sync, domains, email
# OAuth (browser consent)
claude mcp add --transport http thin-host https://thin.host/mcp

# or with an API key from Settings → Create API key
claude mcp add --transport http thin-host https://thin.host/mcp \
  --header "Authorization: Bearer th_live_…"

# with an API key, Claude can upload the build itself:
cd build && zip -qr ../site.zip . && cd ..
curl -F file=@site.zip -F title="Acme Docs" -F slug=acme-docs \
  -H "Authorization: Bearer th_live_…" https://thin.host/v1/websites/archive

# with OAuth, hand Claude a public zip link instead:
# "publish https://…/site.zip to thin.host as acme-docs"
Reads your build folder directly

Local server via uvx

Runs the same server on your machine, so publish_website reads build/ straight from disk and batches the upload itself. No zipping, and large builds stream in several requests.

  • Needs uv and an API key from the dashboard; the package is thinhost-mcp on PyPI
  • Best for big docs sites and tight edit-redeploy loops
  • Also the engine behind the Claude Desktop .mcpb bundle
claude mcp add thin-host \
  -e THINHOST_API_URL=https://thin.host/v1 \
  -e THIN_HOST_API_KEY=th_live_… \
  -- uvx thinhost-mcp

# then, in Claude Code:
# "publish ./build to thin.host as acme-docs"
# → publish_website(source_path="…/build", title="Acme Docs", slug="acme-docs")
No terminal at all

Add it as a connector

claude.ai and Claude Desktop connect to the hosted server through their Connectors settings and sign you in with OAuth. Give Claude a public link to the zipped build and it publishes from there.

  • Settings → Connectors → Add custom connector
  • URL: https://thin.host/mcp, then Allow on the thin.host consent page
  • Publish from a zip URL: a release asset, object storage, a slim.to link
# what Claude calls after you paste a zip link
publish_website_from_url(
  source_url="https://github.com/acme/docs/releases/download/v1/site.zip",
  title="Acme Docs",
  slug="acme-docs",
)

# next release: same link, stale chunks pruned
update_website_from_url(website="acme-docs", source_url="…/v2/site.zip")
2

Install the skill (optional)

Teaches Claude the baseUrl decision, the sync rule, and which publish path fits the connection, so you never have to.

curl --create-dirs -o \
  ~/.claude/skills/thin-host-docusaurus/SKILL.md \
  https://thin.host/skills/thin-host-docusaurus/SKILL.md
3

Say it

"Build the docs and publish them to thin.host as acme-docs." Then "map docs.acme.com". Then, forever after, "redeploy the docs".

Astro, VitePress, Hugo, Next export too

The tools work on any static build folder. Docusaurus gets the baseUrl detection because it is the one that needs it; everything else just uploads. Hand-written HTML sites use the same tools — without sync, to keep editing single pages. Use it from claude.ai or Claude Desktop too: add https://thin.host/mcp as a custom connector and sign in.

Docusaurus recipe MCP tool reference

Questions

Hosted or local — which should I pick?

Hosted, unless your build is large or you redeploy every few minutes. Hosted means nothing to install and works from claude.ai and Claude Desktop too, but the build travels as a zip (30MB per upload). The local server reads the build folder directly and streams big sites in batches. You can switch any time; both talk to the same account.

Why not GitHub Pages or Vercel?

They host Docusaurus fine — for a human with a CI pipeline and a hosting dashboard. thin.host is for the case where an agent produced the docs and should also ship them: publish, redeploy, domain, and access control are tool calls with structured errors, not YAML and web forms.

How big can a docs site be?

A real docs site with an API reference is a few hundred files and tens of megabytes; that uploads in a handful of requests. The per-site cap is 150MB and single files over about 15MB do not fit a request — compress videos or host them elsewhere.

Can I use it from CI instead of Claude Code?

Yes. One curl: zip the build folder and POST it to /v1/websites/:slug/archive — files the new build dropped are pruned automatically. The recipe has the command.

Does versioned docs / i18n work?

Anything Docusaurus writes into build/ is served as-is — versioned docs, locales, search indexes, the OpenAPI plugin's generated pages. Nested index.html files map to clean paths (docs/1.0/intro/index.html → /docs/1.0/intro).

What does it cost?

Hosting on a thin.host URL is free. Custom domains are billed per domain — see billing.

Ship your docs today

Create an account, add the MCP server, and say "publish". No credit card required.

Get started free