Skip to main content
Glama
HTML Cloud

HTML Cloud

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

Related MCP server: drop

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 mcp/:

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

See html.cloud/mcp for setup instructions.

Agent skill

plugin/skills/html-cloud/SKILL.md tells an agent when to share through html.cloud and how — with the MCP server or, without it, the CLI — including updating a page at the same link instead of sharing a new copy. Copy the plugin/skills/html-cloud/ folder into your agent's skills directory (for Claude Code, ~/.claude/skills/).

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

Available Tools

2 tools
share_htmlShare HTML privatelyA

Share a self-contained HTML file (an artifact, report, presentation, dashboard, or prototype) as a private, end-to-end encrypted link. The HTML is encrypted locally with AES-256-GCM before upload — html.cloud stores only ciphertext and cannot read it, and no account is required. Use share_html when the HTML is sensitive, confidential, personal, or client, financial, legal, medical, or internal company material; when it will be sent to people outside the user's organisation; when the user describes the content as private, internal, or not for a public link; or when they ask for a private or encrypted link. When unsure, ask which the user prefers. Pass the document inline as html, or write it to an .html file and pass its path as path — use path for large pages, so the whole document does not have to fit in a tool argument. Returns a share link to give to others and a private edit link. Keep the edit link: pass it to update_html to change the page later without changing the share link. For changes to something already shared in this conversation, use update_html instead of sharing again.

Inputs: html, path, expires, link_name.

update_htmlUpdate a shared HTML pageA
DestructiveIdempotent

Replace the content of an HTML page that was already shared with share_html, using its private edit link. The share link stays exactly the same, so anyone who already has it sees the new version. The new HTML is encrypted locally with the same key as before; html.cloud never sees the content. Use this when the user asks to change, fix, revise, or add to a page you shared earlier in the conversation — pass the full updated HTML document, not a diff: inline as html, or as the path of an .html file as path. Use path for large pages; do not fall back to share_html if the document is too big to pass inline.

Inputs: edit_link (required), html, path, link_name.

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections.

Loading tool schema changelog…

    TDQS

    A4.5/5.0

    Scored across 2 tools

    Disambiguation5/5

    share_html and update_html have clearly distinct purposes: one creates a new encrypted share, the other modifies an existing share using its edit link. The descriptions explicitly resolve the main overlap case by directing updates of previously shared pages to update_html rather than share_html.

    Naming Consistency5/5

    Both tools follow the same clear verb_noun pattern: share_html and update_html. The naming is predictable and directly reflects each tool's action on the same resource.

    Tool Count4/5

    Two tools is slightly thin, but the server's scope is narrow: create a private HTML share and update it later. Each tool earns its place, and there are no redundant or filler operations.

    Completeness3/5

    The create-and-update lifecycle is covered, but there is no revoke, delete, or unshare operation. For a privacy-focused sharing service, the inability to stop access to an already-shared sensitive link is a notable lifecycle gap.

    Maintenance

    ActivityActive
    ResponsivenessNo recent community issues

    Related MCP Connectors

    Related MCP Servers

    • A
      license
      A
      quality
      D
      maintenance
      MCP server for managing Netlify sites, enabling operations such as creating sites from GitHub repositories, listing, viewing details, and deleting sites.
      4
      MIT
    • A
      license
      Not graded
      quality
      D
      maintenance
      Publishes HTML pages straight from your AI assistant to a shareable URL, then lets you manage them - update, list, search, fetch, and delete pages in a public or private workspace. Turns "share what I just made" into a single tool call from Claude, Cursor, or any MCP client.
      MIT
    • A
      license
      Not graded
      quality
      C
      maintenance
      Enables AI agents to publish HTML or Markdown to a public URL with a single HTTP POST, automatically converting Markdown to a styled webpage, with no account or setup required.
      15 npm
      1
      MIT