Artifacts
概览
作者提供的说明(英文原文)
Self-hosted artifact publishing: POST HTML/JSX/Markdown/zip, get an unguessable URL on your domain
PopNx MCP 的三大支柱
这三项永远不会合并成一个分数:意见、测量和人气是不同的东西。
- 用户评价i暂无评价评价功能将在后续阶段与账户功能一起开放
- 我们的基础检查i1 项中通过 1 项依据公开信息检查;尚未扫描代码
- 使用情况i非常新★ –
它能帮你做什么
我们还没有为它写通俗的介绍。下面是我们从注册中心读取到的事实。
- 连接方式: 在你的电脑上运行
- 传输方式: Streamable HTTP
- 分类: 文档、表格与办公
- 你需要填写:ARTIFACTS_API_KEY
安装
选择你使用的 AI 应用,然后复制设置。
安装之前
- 基础检查:1 项中通过 1 项
- 在你的电脑上运行,拥有你的用户账户的权限(文件、网络、应用)。
- 需要你自己填写:
ARTIFACTS_API_KEY,BASE_URL
标为机密的值是你账户的钥匙。千万不要分享给别人,也不要粘贴到聊天里。
你需要
- Docker已安装 Docker
你用的是哪个应用?
在上方选择你的应用。我们会记住它,下次按钮会显示“安装到 …”。
打开 Claude Desktop → Settings → Developer → Edit Config,把下面的内容粘贴到 claude_desktop_config.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": "your-value",
"BASE_URL": "your-value"
}
}
}
}在终端中运行这条命令
claude mcp add artifacts --env ARTIFACTS_API_KEY=your-value --env BASE_URL=your-value -- docker run -i --rm -e ARTIFACTS_API_KEY -e BASE_URL ghcr.io/kuyazee/artifacts:latest运行前请先填写空着的值。
或者自己复制设置
粘贴到项目中的 .cursor/mcp.json,或 ~/.cursor/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": "your-value",
"BASE_URL": "your-value"
}
}
}
}浏览器会先询问是否打开应用,然后应用会显示设置并请你确认。密钥的值会留空,由你自己填写。
或者自己复制设置
粘贴到项目中的 .vscode/mcp.json
{
"servers": {
"artifacts": {
"type": "stdio",
"command": "docker",
"args": [
"run",
"-i",
"--rm",
"-e",
"ARTIFACTS_API_KEY",
"-e",
"BASE_URL",
"ghcr.io/kuyazee/artifacts:latest"
],
"env": {
"ARTIFACTS_API_KEY": "your-value",
"BASE_URL": "your-value"
}
}
}
}浏览器会先询问是否打开应用,然后应用会显示设置并请你确认。密钥的值会留空,由你自己填写。
这个服务器在你的电脑上运行,而 ChatGPT 只能连接互联网上的服务器。请选择其他应用。
你的选择通过 Cookie 保存在这台设备上,无需账户。
需要你填写的值
- Bearer token required for all writes and the MCP endpoint
BASE_URLenvPublic origin used in returned artifact URLs (e.g. https://artifacts.example.com)
这些设置是根据作者在注册中心的条目生成的。如果 README 的写法不同,请以 README 为准。
它能做什么
它在你的电脑上运行;安装后,工具列表会显示在你的 AI 应用中。
基础检查i
我们检查的是任何人都能看到的信息;我们没有阅读代码。不适用的检查项不计入总数。 · 检查于 2026年11月9日
- ✓ 通过
作者与仓库一致
注册名称已通过 GitHub 账户 kuyazee 验证,该账户拥有此仓库
- … 尚未检查
仍在维护
我们还没有从 GitHub 读取这个仓库
- … 尚未检查
有许可证
我们还没有从 GitHub 读取这个仓库
- – 不适用
端点有响应
它在你的电脑上运行,没有互联网端点
- – 不适用
使用 OAuth 登录
在你的电脑上运行,改用本地设置
- … 尚未检查
工具描述中没有隐藏指令
它在你的电脑上运行;我们只能读取互联网端点的工具列表
与“文档、表格与办公”中的其他服务器比较i
- 星标数多于此分类中其他 3603 个服务器的 0%
- 发布到注册中心的时间比此分类中其他 3603 个服务器的 17% 更新
- 基础检查结果等于或优于此分类中其他 3603 个服务器的 100%
与注册中心里这个分类中所有活跃的服务器比较。只有当发布者拥有该仓库时,星标数才计入。
常见问题
Artifacts 安全吗?
它在 1 项适用的基础检查中通过了 1 项。我们没有阅读代码。在添加密钥或令牌之前,请先看看这个服务器要求哪些权限,并使用只具备所需权限的密钥。
它需要哪些密钥或代码?
你需要填写:ARTIFACTS_API_KEY
它在我的电脑上运行还是在云端?
它在你的电脑上运行。你的 AI 应用会在需要时启动它,数据不会经过作者的服务器(除非它自己调用在线服务)。
它还在维护吗?
GitHub 仓库最后更新于–,最新版本(1.0.0)于4个月前进入注册中心。
哪些应用可以使用它?
支持 MCP 的应用,例如 Claude Desktop、Claude Code、Cursor 和 VS Code。你的电脑上还需要有 Docker。
有什么可以替代它?
同一分类中有:Agent-Native Calendar, Excel MCP Server, MCP Server for Excel
替代选择
同一分类中其他作者的服务器,按星标数排序。
如何看卡片:↓ 每周下载量i★ GitHub 星标i三大支柱:评价 · 检查 · 使用情况i更新 = 最新版本发布到注册中心的时间i
Excel MCP Server
Create and edit Excel files with AI: charts, PivotTables, formulas. No Excel needed.
MCP Server for Excel
Excel automation for AI - Sheets, Power Query, DAX, VBA, Tables, Ranges and more. Windows only.
作者的 README
打开 README
按原文从作者的仓库复制。PopNx MCP 没有审查或背书其内容。HTML、图片和脚本已被移除。链接会离开本站。
artifacts
Self-hosted, Claude-style artifact publishing
POST HTML, a React component, Markdown, a PDF, or a zipped static site. Get back an unguessable URL on your own domain.
= 22">
Quick start · Deploy · API · CLI · MCP · Security
Dashboard: publish, group by project, and manage
A published artifact served with the viewer topbar
About
AI assistants produce a lot of shareable output: dashboards, prototypes, reports, small apps. Claude's hosted artifacts work well, but the URLs live on someone else's infrastructure. This is the self-hosted version, about 1,100 lines. You POST content, it serves the rendered result at an unguessable URL on a domain you control.
It runs as one container with a single admin account and, by default, no database. Each artifact is a directory of plain files under /data, so backing up that directory backs up everything. On hosts that wipe local disk on restart, point it at durable external storage instead (an S3-compatible bucket, a git remote, or Postgres) by setting STORAGE_BACKEND. See deploying.
Features
- Content types. HTML, JSX/TSX (a single React component, no build step), Markdown, BPMN 2.0 process maps, PDF, and zipped static sites.
- Agent-native, human-friendly. A built-in MCP server lets Claude Code, Codex, or any MCP client publish with one tool call. Humans get a drag-and-drop web UI at
/(behind an admin login) and a CLI. - Two-tier auth. An admin logs into the dashboard with a password; CLI and MCP carry scoped, revocable API keys (
read/publish/full) with optional expiry, so you never share one master secret. - Private by default, with per-artifact visibility. A new artifact is
private, shared through a signed capability link (?k=…) you can rotate to revoke. Switch any artifact topublic(anyone with the bare link) or password-protected. Nothing is discoverable by default: unguessable slugs,noindexeverywhere. See visibility. - Optional viewer frame. A slim top toolbar (title, copy link, hide) like Claude, Gemini, and ChatGPT artifacts. Toggle it globally in Settings or per artifact;
?raw=1serves the bare content. Redirects are never framed. - Markdown render settings. Pick the reading font, content width, base font size, and starting theme for every Markdown artifact in Settings. Markdown renders from its source on each view, so a change shows on existing artifacts too. Framed Markdown gets a navbar button that cycles Auto, Light, and Dark for that reader. A fenced
mermaidcode block is drawn as a diagram that follows the theme. See docs/formats.md. - BPMN process maps. Publish a BPMN 2.0 file and it gets a diagram viewer with pan, zoom, and SVG or
.bpmndownload. The XML is checked on publish, and a file with no diagram layout gets one drawn for it, pools and lanes included, so an agent can write the process and leave the coordinates to the server. See docs/formats.md. - PDF hosting. Publish a PDF and it gets a viewer page plus a direct-download link. Three per-artifact viewer modes (standard, presentation, minimal) and a download toggle that removes the viewer's buttons. The toggle is a convenience, not protection: the file's URL still answers with the bytes. See docs/formats.md.
- Redirects.
type: "redirect"turns a slug into a short link that answers an HTTP 301 at the server, where other hosts fall back to a JavaScript bounce. The target must be an absolute http(s) URL and cannot carry credentials, and the response is uncacheable, so repointing the slug takes effect on the next visit. Repoint one from the row menu in the dashboard, or with aPUT. Read the cost of running an open redirector on your domain first: docs/formats.md. - Embeddable. A public artifact drops into any page as one
. The row menu writes the tag for you, pointing at?raw=1so the frame holds the artifact and not a second toolbar. Private and password-protected artifacts stay unembeddable on purpose, and the unlock prompt refuses to be framed at all. See docs/embedding.md. - QR code per artifact. Every artifact has a QR of its permanent URL, from the row menu in the dashboard,
GET /api/artifacts/:slug/qr, orartifacts qr. SVG or PNG, generated in-process: no QR library, no third-party image service, nothing about your artifacts leaves the box. See the API reference. - Organize by project. Group artifacts built for the same project into collapsible sections, with a search box across project, title, slug, tags, and a redirect's target. Tags stay for cross-cutting labels.
- Lifecycle controls. Custom slugs, rename, tags, disable without deleting, auto-expire, delete.
- Abuse-resistant. Login and unlock endpoints are rate-limited per client IP (failures only), and password hashing runs off the event loop, so a burst of guesses slows those two routes instead of stalling the server. Set
TRUST_PROXYfor the real client IP behind Cloudflare or a reverse proxy. See deploying.
Quick start
Clone, configure, start:
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
Or skip the clone and run the image directly:
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
Publish something:
curl -s -X POST https://artifacts.example.com/api/artifacts \
-H "Authorization: Bearer $ARTIFACTS_API_KEY" \ -H "Content-Type: application/json" \ -d '{"content": " hello ", "type": "html", "slug": "hello", "tags": ["demo"]}'
{"slug":"hello","url":"https://artifacts.example.com/a/hello"}
Let Claude Code publish for you:
claude mcp add --transport http artifacts https://artifacts.example.com/mcp \
--header "Authorization: Bearer ${ARTIFACTS_API_KEY}" --scope user
Documentation
| I want to… | Read |
|---|---|
| Deploy it (Docker, compose, Coolify, bare node, env vars) | docs/deploy.md |
| Use the REST API (incl. zip sites and tags) | docs/api.md |
| Publish from the terminal | docs/cli.md |
| Hook up Claude Code / Codex / any agent | docs/mcp.md |
| Set up login + scoped API keys | docs/auth.md |
| Understand JSX/TSX rendering + zip validation | docs/formats.md |
| Put an artifact inside another page | docs/embedding.md |
Development
No build step. 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
The end-to-end suite is one shell script:
bash .github/workflows/smoke.sh http://localhost:3000 <your-key>
A few cases cannot be reached over HTTP, such as a hand-edited auth.json. Those run as unit tests on node's built-in runner, no server needed:
npm test
That covers the dashboard too. dashboard-check.mjs fetches /, parses the inline script in public/index.html, and checks that every element the script grabs by id is still in the markup. It runs no browser, so it catches a syntax error or a deleted element but not a runtime error.
PRs welcome. See CONTRIBUTING.md.
Hosted version
Self-hosting is the product, and the open source version stays complete. If you would rather not run a server, Anvil Nine is building a managed version: same publishing flow, custom domains, backups handled for you. A waitlist page opens with the first cloud announcement; watch this repo's releases until then.
Security
Uploaded HTML runs in the browser. That is the whole point, so the model is built to contain it:
- Serve artifacts from their own origin. Point artifact URLs at a domain that hosts nothing else, so a published page can never touch the dashboard's session cookie.
- Writes need a scoped API key. Publishing carries a bearer key; the admin dashboard uses a separate HttpOnly, SameSite=Strict session cookie.
- Reads rely on unguessable slugs. Public artifacts are reachable by anyone with the link and carry
noindex, but there is no listing to browse. Don't publish secrets. - Credential routes are throttled. Login and unlock rate-limit per client IP and hash passwords off the event loop. A caller below
publishscope gets a 256 kB body parser instead of the 10 MB one, and a cap of 20 large bodies a minute per client IP, both checked before the body is parsed. Put a CDN or edge limiter in front for volumetric attacks.
Full threat model in SECURITY.md.
Acknowledgements
This project stands on other people's open source. All of the following are MIT licensed.
Runtime
- express for the HTTP server
- marked for Markdown rendering
- nanoid for unguessable slug generation
- adm-zip for zip site extraction
- zod for request validation
- @modelcontextprotocol/sdk for the built-in MCP server
Optional storage backends (loaded only when selected)
- aws4fetch for S3-compatible signing
- isomorphic-git for the git backend
- pg for the Postgres backend
The SQLite backend uses Node's built-in node:sqlite (no dependency).
Web UI
- Tabler Icons for the app-bar icons (search, new, settings, lock), inlined as SVG
License
MIT © 2026 Zonily Jame
One container. Plain files by default; pluggable S3 / git / Postgres / SQLite storage.