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 渲染成简洁的阅读页面
  • 按 URL 抓取远程 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 集成