htmldrop

io.github.vin-spiegel由 GitHub 帳號 vin-spiegel 發布v0.1.0更新於 Oct 24, 2026

Publish HTML, Markdown, PDF, or images as instant shareable links with expiry and passwords.

發布方自己的服務:Htmldrop

已驗證Streamable HTTP可網頁執行效率與工作流檔案與儲存

概覽

AI 產生的概覽

把 HTML、Markdown、PDF 或圖片發佈成可分享的 htmldrop.link 連結,可設定到期時間與密碼保護。

可以做什麼
  • 發佈 HTML 或 Markdown 內容,取得可分享的子網域連結
  • 把 Markdown、文字或 JSON 轉成簡潔的閱讀頁面
  • 依網址抓取遠端 HTML 頁面並重新發佈
  • 設定標題(用於中繼資料與社群預覽卡)、有效天數與選用密碼
適用情境
當助理產出報告、儀表板、圖表、展示或其他文件,需要讓他人直接用瀏覽器開啟,而不想經過 git、建置流程或託管後台時使用。
執行需求
遠端 Streamable HTTP 端點 htmldrop.link/mcp;匿名使用不需帳號、金鑰或環境變數。僅支援 stdio 的桌面用戶端需透過 mcp-remote 之類的橋接。自架則改用 htmldrop-mcp npm 套件,需設定 BASE_DOMAIN 及選用的 Cloudflare R2 變數。
安裝前請注意
未設密碼時,發佈內容可透過其子網域公開存取;匿名連結預設 7 天後到期。owner_key 或 x-htmldrop-key 可提高額度與有效期。內容會上傳到第三方服務,請勿發佈密鑰或私密資料;HTML 在沙箱 CSP 下允許內嵌腳本執行。

安裝

在 SourceWeft 中

  1. 開啟 儀表板中的 htmldrop,將其新增到工作區。
  2. 為需要使用其工具的對話啟用該服務。

Web executable,透過 Streamable HTTP。 遠端服務在工作區中設定後即可從網頁執行環境執行。

交給代理程式安裝

把這段提示詞貼上到 Claude Code、Codex、Cursor 等代理程式,或 SourceWeft 對話中。代理程式會讀取該伺服器的安裝指南,先向你展示發布者、端點和登入方式,經你同意後再把它新增到你的客戶端。金鑰不會寫進任何命令。

閱讀 https://sourceweft.com/mcp/io.github.vin-spiegel%2Fhtmldrop/install.md,並按其中說明把這個 MCP 伺服器接入我的客戶端。修改任何設定之前,先告訴我它的發布者、端點和登入方式,等我確認。不要把 API 金鑰寫進命令或我會提交的檔案;問我金鑰應從哪裡取得。

檢視代理程式所依據的安裝指南

其他 MCP 客戶端

把它新增到你客戶端的 mcpServers 設定中。

{
  "mcpServers": {
    "htmldrop": {
      "type": "http",
      "url": "https://htmldrop.link/mcp"
    }
  }
}

README

[htmldrop logo]

htmldrop

Publish anything for agents — one API call, MCP server included.

[htmldrop.link] [CI] [npm] [MIT]

English · 한국어 · 日本語 · 简体中文 · Español · Français · Deutsch


htmldrop turns any HTML, Markdown, PDF, or image artifact into a shareable link in seconds. Reports, dashboards, charts, demos — anything an agent (or a human) creates. Markdown/text/JSON render into a clean reader page; PDFs and images are served as-is. No git, no build, no dashboard.

Try it now: htmldrop.link — drag & drop an HTML file, paste HTML source, or POST to the API.

How it works

bash
curl -X POST https://htmldrop.link/publish \  -H "Content-Type: application/json" \  -d '{"html":"<h1>Hello agents</h1>","title":"Demo"}'
json
{  "url": "https://happy-otter-42.htmldrop.link",  "id": "...",  "subdomain": "happy-otter-42",  "expires_at": "2026-07-17T00:00:00.000Z"}

Every link gets its own subdomain, an auto-generated Open Graph preview card, and a TTL — shared artifacts don't live forever.

Connect your agent (MCP)

The hosted MCP server lives at https://htmldrop.link/mcp (Streamable HTTP) and exposes one tool: publish_html.

Claude Code

bash
claude mcp add --transport http htmldrop https://htmldrop.link/mcp

Claude Desktop

Claude Desktop speaks stdio, so bridge to the hosted server with mcp-remote. In claude_desktop_config.json:

json
{  "mcpServers": {    "htmldrop": {      "command": "npx",      "args": ["-y", "mcp-remote", "https://htmldrop.link/mcp"]    }  }}

Cursor

Cursor connects to a remote MCP URL directly. In .cursor/mcp.json:

json
{  "mcpServers": {    "htmldrop": { "url": "https://htmldrop.link/mcp" }  }}

Codex CLI

In ~/.codex/config.toml:

toml
[mcp_servers.htmldrop]command = "npx"args = ["-y", "mcp-remote", "https://htmldrop.link/mcp"]

Self-hosted instance (npm, stdio)

Running your own htmldrop? The htmldrop-mcp package is a local stdio MCP server that publishes to your storage and domain:

json
{  "mcpServers": {    "htmldrop": {      "command": "npx",      "args": ["-y", "htmldrop-mcp"],      "env": {        "BASE_DOMAIN": "your-domain.example",        "CLOUDFLARE_R2_ENDPOINT": "...",        "CLOUDFLARE_R2_ACCESS_KEY_ID": "...",        "CLOUDFLARE_R2_SECRET_ACCESS_KEY": "...",        "CLOUDFLARE_R2_BUCKET_NAME": "..."      }    }  }}

publish_html tool

ArgumentTypeDescription
htmlstringHTML content to publish (or use markdown / url)
markdownstringMarkdown content — rendered into a styled reader page
urlstringRemote HTML page to fetch and publish
titlestringOptional title for metadata and social cards
ttl_daysnumberDays until the artifact expires
passwordstringOptional password protection
owner_keystringOptional key for higher limits and longer TTL

Full agent-facing docs live in AGENTS.md, also served at htmldrop.link/agents.md.

REST API

EndpointBodyNotes
POST /publishJSON { html | markdown, title, ttl_days, password, url }Primary endpoint
POST /publish/rawraw body: text/html, text/markdown, text/plain, application/json, text/csv, application/pdf, image/*Title via x-htmldrop-title header or ?title=
POST /publish/from-urlJSON { url, title, ttl_days, password }Fetches and republishes a page

Pass an owner key in the x-htmldrop-key header for higher rate limits and a longer default TTL. (x-pin-key is still accepted for backwards compatibility.)

Self-hosting

bash
git clone https://github.com/vin-spiegel/htmldrop.gitcd htmldroppnpm installcp .env.example .env   # defaults work out of the boxpnpm dev               # http://localhost:3000

The only variable you need to set is BASE_DOMAIN. Everything else has a working default. Storage falls back to the local filesystem (./data) when no object store is configured — no database required.

Environment variables

VariableDefaultDescription
BASE_DOMAINlocalhostBase domain for artifact subdomains. The one value most self-hosters must set.
PORT3000HTTP port (usually set by your host)
NODE_ENVdevelopmentSet to production when deploying
CLOUDFLARE_R2_ENDPOINT—S3-compatible endpoint. Set all four R2 vars to use object storage; leave all blank for filesystem
CLOUDFLARE_R2_ACCESS_KEY_ID—Object-storage access key
CLOUDFLARE_R2_SECRET_ACCESS_KEY—Object-storage secret key
CLOUDFLARE_R2_BUCKET_NAME—Bucket name
ANON_TTL_DAYS7TTL for anonymous publishes
KEY_TTL_DAYS30TTL for keyed publishes
MAX_HTML_SIZE_BYTES26214400Upload cap (25 MiB)
RATE_LIMIT_ANON_PER_MINUTE10Per-IP rate limit
RATE_LIMIT_KEY_PER_MINUTE60Per-owner-key rate limit

Any S3-compatible store works for the CLOUDFLARE_R2_* variables (Cloudflare R2, AWS S3, MinIO, …). On ephemeral/container hosts, either use object storage or mount a persistent volume at ./data, or artifacts are lost on redeploy.

Production needs a wildcard DNS record (*.your-domain) pointing at the server so artifact subdomains resolve.

Deploy to Railway

bash
railway loginrailway init --name htmldroprailway up

Then set BASE_DOMAIN and (optionally) the R2 variables in the Railway dashboard, and attach your domain plus its wildcard.

Safety defaults

  • Artifacts are served with X-Robots-Tag: noindex, nofollow, noarchive
  • New HTML artifacts use a versioned CSP sandbox: inline scripts work, while external network requests/assets, forms, popups, and top-level navigation are blocked
  • Per-IP and per-key rate limits
  • Everything expires via TTL
  • Optional password protection per artifact

See SECURITY.md for vulnerability and abuse reporting.

Development

bash
pnpm dev        # run with tsxpnpm test       # vitestpnpm run build  # tsc -> dist/

License

MIT

來源:README.md,提交 8f8c42b

工具

1

publish_html

Publish an HTML or markdown artifact (or fetch a remote HTML page) and get a shareable URL. Markdown is rendered into a clean reader page. Useful for sharing reports, dashboards, visualizations, or any document produced by an agent.

輸入參數urlhtmltitlemarkdownpasswordttl_daysowner_key

版本歷史

1
  1. v0.1.0最新Sep 16, 2026

評分

已滿足適用檢查項的 100%

該評分衡量此收錄條目的完整程度,依據註冊中心條目、端點與公開來源計算得出。它不是對伺服器本身的評價,也不表示伺服器安全或目前可用:可連通性是帶日期的檢查結果,評分也不包含安裝量或使用者評價。

  • 近 30 天內可連通必需25 分
  • 已宣告認證方式必需10 分
  • 已列出工具必需15 分
  • 描述必需15 分
  • 圖示10 分
  • 文件15 分
  • 授權條款10 分

其他 Htmldrop 整合