ต้นแบบ · รุ่นทดลอง: มีทุก server ในทะเบียนทางการ อัปเดตทุก 30 นาที รีวิวและบัญชีผู้ใช้จะมาในขั้นถัดไป
PopNx MCPที่รวม MCP สำหรับคนใช้ AI · อธิบายเป็นภาษาคน

Artifacts

โดย kuyazeeรุ่น 1.0.0i★ –iรันบนเครื่อง
ชื่อใน registryio.github.kuyazee/artifacts

ติดตั้ง

ภาพรวม

คำอธิบายจากผู้ทำ (ภาษาอังกฤษตามต้นฉบับ)

Self-hosted artifact publishing: POST HTML/JSX/Markdown/zip, get an unguessable URL on your domain

สามเสาของ PopNx MCP

สามเรื่องนี้ไม่รวมเป็นคะแนนเดียว เพราะความเห็น การวัด และความนิยม เป็นคนละเรื่องกัน

ใช้ทำอะไรได้

ตัวนี้ยังไม่ได้เรียบเรียงเป็นภาษาไทย ด้านล่างคือข้อเท็จจริงที่เราอ่านจาก registry

  • การเชื่อมต่อ: รันบนเครื่อง
  • ช่องทาง (transport): Streamable HTTP
  • หมวด: อื่น ๆ
  • ต้องใส่ค่าเหล่านี้: ARTIFACTS_API_KEY

ติดตั้ง

เลือกโปรแกรม AI ที่คุณใช้ แล้วคัดลอกค่าตั้งไปวาง

ก่อนติดตั้ง

ค่าที่ติดป้ายความลับคือกุญแจของบัญชีคุณ อย่าส่งให้ใคร และอย่าวางในแชต

ต้องเตรียมก่อน

  • 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": "ใส่ค่าของคุณ",
        "BASE_URL": "ใส่ค่าของคุณ"
      }
    }
  }
}

พิมพ์คำสั่งนี้ใน Terminal

claude mcp add artifacts --env ARTIFACTS_API_KEY='ใส่ค่าของคุณ' --env BASE_URL='ใส่ค่าของคุณ' -- docker run -i --rm -e ARTIFACTS_API_KEY -e BASE_URL ghcr.io/kuyazee/artifacts:latest

เติมค่าที่เว้นว่างไว้ก่อนรัน

เปิดใน Cursor

หรือคัดลอกค่าตั้งเอง

วางในไฟล์ .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": "ใส่ค่าของคุณ",
        "BASE_URL": "ใส่ค่าของคุณ"
      }
    }
  }
}

เบราว์เซอร์จะถามก่อนเปิดแอป จากนั้นแอปแสดงค่าตั้งให้ตรวจแล้วกดยืนยัน ช่อง key เว้นว่างไว้ให้คุณใส่เอง

เปิดใน VS Code

หรือคัดลอกค่าตั้งเอง

วางในไฟล์ .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": "ใส่ค่าของคุณ",
        "BASE_URL": "ใส่ค่าของคุณ"
      }
    }
  }
}

เบราว์เซอร์จะถามก่อนเปิดแอป จากนั้นแอปแสดงค่าตั้งให้ตรวจแล้วกดยืนยัน ช่อง key เว้นว่างไว้ให้คุณใส่เอง

ตัวนี้รันในเครื่องคุณ แต่ ChatGPT ต่อได้เฉพาะ server บนอินเทอร์เน็ต ลองเลือกแอปอื่น

ตัวเลือกเก็บในคุกกี้บนเครื่องนี้ ไม่ต้องมีบัญชี

ค่าที่ต้องใส่เอง

  • ARTIFACTS_API_KEY ความลับ จำเป็น env
    Bearer token required for all writes and the MCP endpoint
  • BASE_URL env
    Public origin used in returned artifact URLs (e.g. https://artifacts.example.com)

ค่าตั้งนี้สร้างจากข้อมูลใน registry ของผู้ทำ ถ้าไม่ตรงกับ README ให้เชื่อ README

ทำอะไรได้บ้าง

รันในเครื่องคุณ รายการเครื่องมือจะขึ้นในแอป AI หลังติดตั้ง

ผลตรวจเบื้องต้นi

เราตรวจจากข้อมูลที่ใครก็เปิดดูได้ ยังไม่ได้อ่านโค้ด ข้อที่ไม่เกี่ยวกับตัวนี้ไม่นับในตัวหาร · ตรวจเมื่อ 6 พ.ย. 2569

  • ✓ ผ่าน

    ตัวตนผู้ทำตรงกับ repo

    ชื่อใน registry ยืนยันด้วยบัญชี GitHub kuyazee ซึ่งเป็นเจ้าของ repo

  • … ยังไม่ตรวจ

    ยังมีคนดูแล

    ยังไม่ได้อ่านข้อมูล repo จาก GitHub

  • … ยังไม่ตรวจ

    มีสัญญาอนุญาต (license)

    ยังไม่ได้อ่านข้อมูล repo จาก GitHub

  • – ไม่เกี่ยว

    endpoint ตอบ

    ตัวนี้รันบนเครื่องคุณ ไม่มี endpoint บนอินเทอร์เน็ต

  • – ไม่เกี่ยว

    ล็อกอินแบบ OAuth

    ตัวนี้รันบนเครื่อง ใช้ค่าที่ตั้งในเครื่องแทน

  • … ยังไม่ตรวจ

    คำอธิบายเครื่องมือไม่มีคำสั่งแอบแฝง

    รันในเครื่องคุณ เราอ่านรายการเครื่องมือได้เฉพาะตัวที่มี endpoint บนอินเทอร์เน็ต

เทียบกับตัวอื่นในหมวด อื่น ๆi

  • ดาวมากกว่า 0% ของอีก 32484 ตัวในหมวดนี้
  • ส่งรุ่นใหม่เข้า registry ล่าสุดกว่า 16% ของอีก 32484 ตัวในหมวดนี้
  • ผลตรวจเบื้องต้นดีกว่าหรือเท่ากับ 100% ของอีก 32484 ตัวในหมวดนี้

เทียบกับทุก server ที่ยังใช้งานในหมวดนี้ทั้งทะเบียน ดาวนับเฉพาะเมื่อผู้ลงทะเบียนเป็นเจ้าของ repo

คำถามที่พบบ่อย

Artifacts ปลอดภัยไหม?

จากการตรวจเบื้องต้นของเรา ผ่าน 1 จาก 1 ข้อที่ตรวจได้ เรายังไม่ได้อ่านโค้ด ก่อนใส่กุญแจหรือ token ให้ดูว่า server ขอสิทธิ์อะไร และเลือกกุญแจที่ทำได้เท่าที่จำเป็น

ต้องใช้กุญแจหรือรหัสอะไรบ้าง?

ต้องใส่ค่าเหล่านี้: ARTIFACTS_API_KEY

ตัวนี้รันบนเครื่องหรือบนคลาวด์?

รันบนเครื่องของคุณ โปรแกรม AI จะเปิด server ขึ้นมาเองเมื่อใช้ ข้อมูลไม่ต้องผ่านเซิร์ฟเวอร์ของผู้ทำ (ยกเว้นตัวที่ไปเรียกบริการออนไลน์ต่อ)

ยังมีคนดูแลอยู่ไหม?

repo บน GitHub มีการแก้โค้ดล่าสุด – และส่งรุ่นล่าสุด (1.0.0) เข้า registry 4 เดือนที่ผ่านมา

ใช้กับโปรแกรมไหนได้บ้าง?

โปรแกรมที่รองรับ MCP เช่น Claude Desktop, Claude Code, Cursor และ VS Code ตัวนี้ต้องมี Docker ในเครื่องด้วย

มีตัวไหนใช้แทนได้บ้าง?

ในหมวดเดียวกันมี Spec Driven Development, Remote Desktop Commander, Recta

ตัวที่ใช้แทนได้

server หมวดเดียวกันจากผู้ทำคนอื่น เรียงตามดาว

อ่านการ์ด:★ ดาว GitHubiสามเสา: รีวิว · ผลตรวจ · การใช้งานiอัปเดต = วันที่ส่งรุ่นล่าสุดเข้า registryi

Spec Driven Development

โดย formulahendry

MCP Server that facilitates spec-driven development workflows, not just Vibe Coding.

รันบนเครื่อง★ 440MITอัปเดต 14 เดือนที่ผ่านมา
ติดตั้ง

Remote Desktop Commander

โดย desktop-commander

Remote Desktop Commander: use files, terminal and processes on your own computers from any AI app.

รันบนคลาวด์★ 211อัปเดต เมื่อวาน
ติดตั้ง

Recta

โดย RectaBuild

Cheaper cross-chain stablecoin routes for AI agents; 5 % of the verified saving, nothing if none.

บนเครื่องหรือคลาวด์อัปเดต วันนี้
ติดตั้ง

README จากผู้ทำ

เปิดอ่าน README

ส่วนนี้คัดจาก repo ของผู้ทำตามต้นฉบับ 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 to public (anyone with the bare link) or password-protected. Nothing is discoverable by default: unguessable slugs, noindex everywhere. 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=1 serves 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 mermaid code 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 .bpmn download. 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 a PUT. 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=1 so 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, or artifacts 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_PROXY for 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 terminaldocs/cli.md
Hook up Claude Code / Codex / any agentdocs/mcp.md
Set up login + scoped API keysdocs/auth.md
Understand JSX/TSX rendering + zip validationdocs/formats.md
Put an artifact inside another pagedocs/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 publish scope 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

Optional storage backends (loaded only when selected)

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.

ถาม PopNx