mcpField
A
Artifacts — self-hosted artifact publishing (HTML/JSX/Markdown/zip → unguessable URL)

Artifacts — self-hosted artifact publishing (HTML/JSX/Markdown/zip → unguessable URL)

本地服务
github.com云与基础设施68 周前更新

关于 Artifacts — self-hosted artifact publishing (HTML/JSX/Markdown/zip → unguessable URL)

Artifacts 是可自托管的发布服务,可将 HTML、React 组件、Markdown、PDF 和压缩站点发布到自有域名,并生成难以猜测的链接。它为用户和 Agent 提供管理面板、命令行及内置 MCP 服务。

主要功能

  1. 01发布 HTML、JSX/TSX、Markdown、PDF 和压缩站点
  2. 02支持私有、公开或密码保护
  3. 03面板整理、搜索和生命周期管理
  4. 04命令行与可撤销的分级 API 密钥
  5. 05可选查看器框架和 PDF 模式

适用场景

  1. 01分享 Agent 生成的报告或原型
  2. 02从压缩包托管静态站点
  3. 03发布 Markdown 文档或 PDF
  4. 04按项目整理和管理制品

MCP 相关

内置 MCP 服务允许 MCP 客户端通过工具调用发布制品。MCP 访问使用分级 API 密钥。

配置

本地服务的配置在各客户端中通用,复制后粘贴到客户端的 MCP 配置文件即可。

mcp.json · 通用配置
{
"mcpServers": {
"artifacts": {
"command": "docker",
"args": [
"run",
"-i",
"--rm",
"-e",
"ARTIFACTS_API_KEY",
"-e",
"BASE_URL",
"ghcr.io/kuyazee/artifacts:latest"
],
"env": {
"ARTIFACTS_API_KEY": "<ARTIFACTS_API_KEY>",
"BASE_URL": "<BASE_URL>"
}
}
}
}
启动命令docker run -i --rm -e ARTIFACTS_API_KEY -e BASE_URL ghcr.io/kuyazee/artifacts:latest
需要配置的环境变量
ARTIFACTS_API_KEY密钥Bearer token required for all writes and the MCP endpoint
BASE_URLPublic origin used in returned artifact URLs (e.g. https://artifacts.example.com)

本地服务需要在你的电脑上安装运行环境(如 Node.js 18+)。各客户端的配置文件位置不同,请参考客户端文档。

安装包
ocighcr.io/kuyazee/artifacts:latest

工具

还没有获取到工具列表

本地服务需要在你的电脑上运行后才能读取工具,维护者暂未提供工具列表。

详细介绍

artifacts

可自托管、类似 Claude 的制品发布服务

POST HTML、React 组件、Markdown、PDF 或 ZIP 格式的静态网站。即可在你自己的域名下获得一个难以猜测的 URL。

CI 许可证:MIT Node >= 22

快速开始 · 部署 · API · CLI · MCP · 安全

控制面板:发布制品、按项目分组并进行管理
控制面板:发布、按项目分组并进行管理

已发布的制品,带有查看器顶部栏
带有查看器顶部栏的已发布制品

关于

AI 助手会生成大量可分享的内容:控制面板、原型、报告和小型应用。Claude 托管的制品功能很好用,但 URL 位于他人的基础设施上。这是一个可自托管的版本,代码约 1,100 行。你 POST 内容后,它会在你掌控的域名下,通过一个难以猜测的 URL 提供渲染后的结果。

它以单个容器运行,只有一个管理员账号,默认不使用数据库。每个制品都是 /data 下的一个普通文件目录,因此备份该目录就能备份所有内容。如果主机重启时会清除本地磁盘,请改用持久化的外部存储(兼容 S3 的存储桶、git 远程仓库或 Postgres),方法是设置 STORAGE_BACKEND。请参阅部署。

功能

  • 内容类型。 HTML、JSX/TSX(单个 React 组件,无需构建步骤)、Markdown、PDF 和打包为 ZIP 的静态网站。
  • 原生支持 Agent,方便人类使用。 内置的 MCP 服务让 Claude Code、Codex 或任何 MCP 客户端只需调用一次工具即可发布内容。人类用户可通过 / 访问支持拖放的网页 UI(需管理员登录),也可使用 CLI。
  • 双层身份验证。 管理员使用密码登录控制面板;CLI 和 MCP 使用权限范围明确、可撤销的 API 密钥(read / publish / full),并可设置过期时间,因此无需共享同一个主密钥。
  • 默认私有,支持按内容设置可见性。 新内容默认为 private,可通过签名的授权链接(?k=…)分享,也可轮换链接以撤销访问权限。可将任何内容设为 public(任何人都可通过普通链接访问)或设为密码保护。默认情况下,内容不会被发现:使用难以猜测的 slug,所有页面均设置 noindex。请参阅可见性。
  • 可选查看器框架。 提供类似 Claude、Gemini 和 ChatGPT 内容的精简顶部工具栏(标题、复制链接、隐藏)。可在设置中全局启用或按内容单独启用;使用 ?raw=1 可直接提供原始内容。重定向永远不会嵌入框架。
  • Markdown 渲染设置。 可在设置中为所有 Markdown 内容选择阅读字体、内容宽度、基础字号和初始主题。Markdown 会在每次查看时根据源文件渲染,因此更改也会应用于已有内容。带框架的 Markdown 页面会在导航栏中显示按钮,供读者循环切换“自动”“浅色”和“深色”主题。请参阅 docs/formats.md。
  • PDF 托管。 发布 PDF 后,系统会提供查看器页面和直接下载链接。每项内容都可单独设置查看器模式(标准、演示、精简),也可通过下载开关移除查看器按钮。该开关只是便利用途,并非保护措施:文件 URL 仍会返回文件内容。请参阅 docs/formats.md。
  • 重定向。 type: "redirect" 会将一个 slug 变为短链接,由服务端返回 HTTP 301;在其他主机上则会回退到 JavaScript 跳转。目标必须是绝对 http(s) URL,且不能包含凭据;响应不可缓存,因此更改 slug 的指向会在下次访问时生效。可在控制面板的行菜单中修改指向,也可使用 PUT。请先了解在自己的域名上运行开放式重定向器的风险:docs/formats.md。
  • 支持嵌入。 公共内容可通过一个 <iframe> 嵌入任何页面。行菜单会自动生成标签,并指向 ?raw=1,确保框架中只显示内容,而不包含第二个工具栏。私有和密码保护的内容有意禁止嵌入,解锁提示也完全拒绝被框架嵌入。请参阅 docs/embedding.md。
  • 每项内容均有 QR 码。 每项内容都有永久 URL 对应的 QR 码,可通过控制面板的行菜单、GET /api/artifacts/:slug/qr 或 artifacts qr <slug> 获取。支持 SVG 或 PNG,直接在进程内生成:无需 QR 码库、第三方图片服务,任何内容都不会离开本机。请参阅 API 参考。
  • 按项目整理。 将同一项目的内容归入可折叠分区,并可按项目、标题、slug、标签和重定向目标搜索。标签仍可用于跨项目分类。
  • 生命周期控制。 自定义 slug、重命名、添加标签、停用但不删除、自动过期、删除。
  • 防滥用。 登录和解锁端点会按客户端 IP 进行速率限制(仅统计失败请求);密码哈希运算在事件循环之外执行,因此大量猜测请求会拖慢这两个路由,而不会让服务停滞。在 Cloudflare 或反向代理后方运行时,请设置 TRUST_PROXY 以获取真实的客户端 IP。请参阅部署指南。

快速开始

克隆、配置并启动:

git clone https://github.com/anvilnine/artifacts && cd artifacts
cp .env.example .env   # set ARTIFACTS_API_KEY (openssl rand -hex 32) and BASE_URL
docker compose up -d

也可以跳过克隆,直接运行镜像:

docker run -d -p 3000:3000 -v artifacts-data:/data \
  -e ARTIFACTS_API_KEY=$(openssl rand -hex 32) \
  -e BASE_URL=https://artifacts.example.com \
  ghcr.io/anvilnine/artifacts:latest

发布内容:

curl -s -X POST https://artifacts.example.com/api/artifacts \
  -H "Authorization: Bearer $ARTIFACTS_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"content": "<h1>hello</h1>", "type": "html", "slug": "hello", "tags": ["demo"]}'
# {"slug":"hello","url":"https://artifacts.example.com/a/hello"}

让 Claude Code 为你发布:

claude mcp add --transport http artifacts https://artifacts.example.com/mcp \
  --header "Authorization: Bearer ${ARTIFACTS_API_KEY}" --scope user

文档

我想……阅读
部署它(Docker、compose、Coolify、裸 Node、环境变量)docs/deploy.md
使用 REST API(包括 zip 站点和标签)docs/api.md
在终端中发布docs/cli.md
接入 Claude Code / Codex / 任意 Agentdocs/mcp.md
设置登录和范围受限的 API 密钥docs/auth.md
了解 JSX/TSX 渲染和 zip 验证docs/formats.md
将制品放入另一个页面docs/embedding.md

开发

无需构建步骤。Node ≥ 22。

npm install
cp .env.example .env   # any ARTIFACTS_API_KEY works locally, e.g. "test"
npm run dev
# UI at http://localhost:3000

端到端测试套件是一个 shell 脚本:

bash .github/workflows/smoke.sh http://localhost:3000 <your-key>

有些情况无法通过 HTTP 测试,例如手动编辑的 auth.json。这些情况会使用 Node 内置的测试运行器作为单元测试运行,无需服务器:

npm test

这也涵盖了仪表板。dashboard-check.mjs 会获取 /,解析 public/index.html 中的内联脚本,并检查脚本通过 id 获取的每个元素是否仍在标记中。它不会运行浏览器,因此可以捕获语法错误或被删除的元素,但无法捕获运行时错误。

欢迎提交 PR。请参阅 CONTRIBUTING.md。

托管版本

自托管是本产品的核心,开源版本也保持完整。如果你不想运行服务器,Anvil Nine 正在打造一个托管版本:发布流程相同,并提供自定义域名和备份服务。首次发布云端公告时会开放候补名单页面;在此之前,请关注此仓库的 releases。

安全

上传的 HTML 会在浏览器中运行。这正是整个产品的目的,因此我们设计了相应机制来隔离它:

  • 从独立来源提供制品。 将制品 URL 指向一个不托管其他内容的域名,这样发布的页面就无法访问仪表板的会话 Cookie。
  • 写入需要范围受限的 API 密钥。 发布操作使用 bearer 密钥;管理仪表板则使用单独的 HttpOnly、SameSite=Strict 会话 Cookie。
  • 读取依赖难以猜测的 slug。 任何拥有链接的人都能访问公开制品,且制品带有 noindex,但没有可供浏览的列表。不要发布机密信息。
  • 凭据路由设有速率限制。 登录和解锁会按客户端 IP 限流,并在事件循环之外对密码进行哈希处理。publish 范围以下的调用方会使用 256 kB 请求体解析器,而非 10 MB 解析器;每个客户端 IP 每分钟最多处理 20 个大请求体。这两项检查都会在解析请求体之前进行。请在前方配置 CDN 或边缘限流器,以抵御流量攻击。

完整威胁模型见 SECURITY.md。

致谢

本项目建立在他人的开源成果之上。以下项目均采用 MIT 许可证。

运行时

可选存储后端(仅在选用时加载)

SQLite 后端使用 Node 内置的 node:sqlite(无需依赖)。

Web UI

  • Tabler Icons 用于应用栏图标(搜索、新建、设置、锁),并以内联 SVG 形式嵌入

许可证

MIT © 2026 Zonily Jame

一个容器。默认使用纯文件;可插拔的 S3 / git / Postgres / SQLite 存储。

评论

支持 Markdown

第一次接触 MCP?

从协议是什么,到在客户端里装上第一个服务,这几条回答覆盖了大多数入门问题。

一个开放协议,规定了 AI 应用如何以统一方式连接外部工具与数据源。客户端负责与模型对话,MCP 服务负责提供工具、资源和提示模板,两者通过标准消息通信,同一个服务可以被不同客户端复用。