Back to Directory/Cloud Providers

HTML Cloud

Share AI-generated HTML as a private, end-to-end encrypted link. Update it later at the same link.

Cloud ProvidersBladev0.5.0

Your browser encrypts the file with AES-256-GCM before anything is uploaded. The decryption key lives after the # in the share URL — browsers never send that part to the server. We store only ciphertext.

How it works

  1. Drop an HTML file on the homepage
  2. Your browser generates two random keys: a view key (AES-256-GCM) and an edit key
  3. The file is encrypted in-browser and uploaded as ciphertext
  4. You get two links:
    • Share link /v/{id}#viewKey — give this to anyone you want to read the file
    • Edit link /e/{id}#editKey — keep this private; it lets you replace the file, change its expiry, or delete it without changing the share link
  5. Files self-destruct after the chosen expiry (7 days, 30 days, or never — 30 days by default)

The server stores:

  • The encrypted blob
  • The view key encrypted with the edit key (so the edit page can re-encrypt without exposing the view key)
  • SHA-256(editKey) for authorization — never the plaintext keys

Security properties

  • Zero-knowledge uploads — the server cannot read any uploaded content
  • Key-in-fragment — browsers strip the URL fragment before sending HTTP requests; the key never reaches the server
  • Edit authorization — only SHA-256(editKey) is stored; the raw edit_key is verified on every write request (replace, expiry, settings, delete)
  • Expiry enforcement — expired documents are invisible to every route and hard-deleted daily by model:prune
  • 10 MB upload limit enforced server-side
  • No accounts — the API is stateless; every state-mutating request is authorized by the edit key, and uploads are rate-limited

See html.cloud/security for the full write-up.

CLI

Share a file from the terminal — encrypted locally, same crypto module as the browser:

npx html-cloud ./file.html

Or pipe straight from a generator:

my-report-tool | npx html-cloud -

The package lives in cli/ and on npm. See html.cloud/cli for usage and options.

MCP server

Let Claude (or any MCP client) share HTML for you. The server is published as html-cloud-mcp and lives in cli/mcp/:

{
  "mcpServers": {
    "html-cloud": {
      "command": "npx",
      "args": ["-y", "html-cloud-mcp"]
    }
  }
}

See html.cloud/mcp for setup instructions.

Stack

  • Laravel 13 (PHP 8.4+)
  • SQLite (swap to MySQL/Postgres via .env for production)
  • Vite 8 (CSS and JS build pipeline)
  • Web Crypto API (all crypto is browser-native; no external crypto libraries)

Setup

cp .env.example .env
php artisan key:generate
php artisan migrate
npm install && npm run build
php artisan serve

Run the test suite with:

php artisan test

For production, add a cron entry to run the scheduler:

* * * * * cd /path/to/html.cloud && php artisan schedule:run >> /dev/null 2>&1

Self-hosting

Clone, configure .env (APP_URL, DB_* if using MySQL/Postgres), run behind nginx or Caddy. Everything, including the encrypted blobs, lives in the database — back that up and you have the whole state.

License

MIT

Installation

Source-derived launch command. Check the maintainer’s required arguments and credentials before running:

bash
npx -y html-cloud-mcp

Set up in your AI client

Merge this template into ~/Library/Application Support/Claude/claude_desktop_config.json. Keep existing servers. Add any arguments, credentials, and permissions required by the maintainer; this template has not been install-tested.

json
{
  "mcpServers": {
    "cloud-html-html-cloud": {
      "command": "npx",
      "args": [
        "-y",
        "html-cloud-mcp"
      ]
    }
  }
}

Restart Claude Desktop completely for changes to take effect. Confirm the server appears connected in the client’s tool list, then try a read-only example from its documentation.

Claude Desktop setup reference

Package

html-cloud-mcpnpm

Compatible MCP Clients

HTML Cloud works with any MCP-compatible client. Copy the config snippet from the Configuration section above and add it to the file shown for your client, then restart the application.

  • Claude Desktop~/Library/Application Support/Claude/claude_desktop_config.jsonRestart Claude Desktop completely for changes to take effect.
  • Cursor~/.cursor/mcp.jsonRestart Cursor for changes to take effect.
  • VS Code.vscode/mcp.jsonReload VS Code window for changes to take effect.
  • Windsurf~/.codeium/windsurf/mcp_config.jsonRestart Windsurf for changes to take effect.
  • Claude Code.mcp.jsonSave at the project root, then start Claude Code in that project and review the MCP server approval prompt. Keep real credentials out of shared files.

Learn More