ngx-json-render UI
ภาพรวม
คำอธิบายจากผู้ทำ (ภาษาอังกฤษตามต้นฉบับ)
Renders dashboards, forms and tables inline in the chat as Angular Material components (MCP App).
สามเสาของ PopNx MCP
สามเรื่องนี้ไม่รวมเป็นคะแนนเดียว เพราะความเห็น การวัด และความนิยม เป็นคนละเรื่องกัน
- เสียงผู้ใช้iยังไม่มีรีวิวรีวิวเปิดพร้อมระบบบัญชีในขั้นถัดไป
- ผลตรวจเบื้องต้นของเราiผ่าน 4 จาก 4 ข้อตรวจจากข้อมูลที่เปิดอยู่ ยังไม่ได้สแกนโค้ด
- การใช้งานiเริ่มต้น★ 1
ใช้ทำอะไรได้
ตัวนี้ยังไม่ได้เรียบเรียงเป็นภาษาไทย ด้านล่างคือข้อเท็จจริงที่เราอ่านจาก registry
- การเชื่อมต่อ: รันบนคลาวด์
- ช่องทาง (transport): Streamable HTTP
- หมวด: เครื่องมือนักพัฒนา
ติดตั้ง
เลือกโปรแกรม AI ที่คุณใช้ แล้วคัดลอกค่าตั้งไปวาง
ก่อนติดตั้ง
- ผลตรวจเบื้องต้น: ผ่าน 4 จาก 4 ข้อ
- รันบนเครื่องของผู้ทำ สิ่งที่คุณถามจะผ่านเครื่องของเขา
- ทำได้ 1 อย่าง (เครื่องมือ) render-ui
- ทะเบียนไม่ได้ระบุ key ที่ต้องใส่
ต้องเตรียมก่อน
- รันบนคลาวด์ไม่ต้องลงโปรแกรมเพิ่ม ต่อผ่านอินเทอร์เน็ตได้เลย
คุณใช้แอปไหน
เลือกแอปด้านบน เราจำไว้ให้ ครั้งหน้าปุ่มจะขึ้นว่า “ติดตั้งลง …”
ใช้ได้ทั้ง Claude บนเว็บ แอปคอมพิวเตอร์ และมือถือ:
- เปิด Settings → Connectors
- กด Add custom connector
- วางที่อยู่ด้านล่างแล้วกด Add
- ถ้าให้ล็อกอิน ให้ล็อกอินกับผู้ทำ
https://ngx-json-render.angular-generative-ui-chat.workers.dev/mcpพิมพ์คำสั่งนี้ใน Terminal
claude mcp add --transport http ngx-json-render-ui https://ngx-json-render.angular-generative-ui-chat.workers.dev/mcpหรือคัดลอกค่าตั้งเอง
วางในไฟล์ .cursor/mcp.json ของโปรเจกต์ หรือ ~/.cursor/mcp.json
{
"mcpServers": {
"ngx-json-render-ui": {
"url": "https://ngx-json-render.angular-generative-ui-chat.workers.dev/mcp"
}
}
}เบราว์เซอร์จะถามก่อนเปิดแอป จากนั้นแอปแสดงค่าตั้งให้ตรวจแล้วกดยืนยัน ช่อง key เว้นว่างไว้ให้คุณใส่เอง
หรือคัดลอกค่าตั้งเอง
วางในไฟล์ .vscode/mcp.json ของโปรเจกต์
{
"servers": {
"ngx-json-render-ui": {
"type": "http",
"url": "https://ngx-json-render.angular-generative-ui-chat.workers.dev/mcp"
}
}
}เบราว์เซอร์จะถามก่อนเปิดแอป จากนั้นแอปแสดงค่าตั้งให้ตรวจแล้วกดยืนยัน ช่อง key เว้นว่างไว้ให้คุณใส่เอง
ChatGPT ต่อได้เฉพาะ server ที่อยู่บนอินเทอร์เน็ต:
- เปิด ChatGPT บนเว็บ → Settings → Connectors (Apps)
- กด Create หรือ Add (บางแพ็กเกจต้องเปิด Developer mode ใน Advanced ก่อน)
- วางที่อยู่ด้านล่าง ตั้งชื่อ แล้วบันทึก
- ถ้าให้ล็อกอิน ให้ล็อกอินกับผู้ทำ
https://ngx-json-render.angular-generative-ui-chat.workers.dev/mcpชื่อเมนูอาจต่างกันเล็กน้อยตามแพ็กเกจและรุ่นของแอป
ตัวเลือกเก็บในคุกกี้บนเครื่องนี้ ไม่ต้องมีบัญชี
ค่าตั้งนี้สร้างจากข้อมูลใน registry ของผู้ทำ ถ้าไม่ตรงกับ README ให้เชื่อ README
ใช้กับโปรแกรมไหนได้
ดูจากแบบการต่อของ server ตัวนี้ และเอกสารของผู้ทำโปรแกรมแต่ละตัว ตรวจเมื่อ 10 พ.ย. 2569
ต่อผ่านคลาวด์ได้ใน
ClaudeChatGPTGooseLM StudioMsty StudioCherry StudioCursorVS Code + GitHub CopilotVisual StudioWindsurf (Devin Desktop)ZedKiroClineContinueJetBrains AI AssistantClaude CodeCodex CLIGemini CLIOpenCodenodecodeWarpLibreChatOpen WebUIRaycast
ทำอะไรได้บ้าง
ชื่อและคำอธิบายเครื่องมือตามที่ server ตอบมาเมื่อ 7 พ.ย. 2569 ผู้ทำเป็นคนเขียน ไม่ใช่เรา แสดงเป็นข้อความล้วน
render-uiRender an interactive Angular Material UI inline in the chat. Pass `spec`: one complete json-render spec object (not JSON Patch lines). The input schema lists every component, its props and allowed values, and every action; use only those. - `root` is the key of the top element.
ผลตรวจเบื้องต้นi
เราตรวจจากข้อมูลที่ใครก็เปิดดูได้ ยังไม่ได้อ่านโค้ด ข้อที่ไม่เกี่ยวกับตัวนี้ไม่นับในตัวหาร · ตรวจเมื่อ 10 พ.ย. 2569
- ✓ ผ่าน
ตัวตนผู้ทำตรงกับ repo
ชื่อใน registry ยืนยันด้วยบัญชี GitHub shteynu ซึ่งเป็นเจ้าของ repo
- ✓ ผ่าน
ยังมีคนดูแล
มีการแก้โค้ดล่าสุด 5 วันที่ผ่านมา
- … ยังไม่ตรวจ
มีสัญญาอนุญาต (license)
ยังไม่ได้อ่านข้อมูล repo จาก GitHub
- ✓ ผ่าน
endpoint ตอบ
ตอบกลับใน 106 ms (HTTP 200)
- – ไม่เกี่ยว
ล็อกอินแบบ OAuth
ไม่ต้องล็อกอิน
- ✓ ผ่าน
คำอธิบายเครื่องมือไม่มีคำสั่งแอบแฝง
อ่านคำอธิบายเครื่องมือ 1 ตัวแล้ว ไม่พบคำสั่งแอบแฝงถึง AI
เทียบกับตัวอื่นในหมวด เครื่องมือนักพัฒนาi
- ดาวมากกว่า 65% ของอีก 5729 ตัวในหมวดนี้
- ส่งรุ่นใหม่เข้า registry ล่าสุดกว่า 65% ของอีก 5729 ตัวในหมวดนี้
- ผลตรวจเบื้องต้นดีกว่าหรือเท่ากับ 100% ของอีก 5729 ตัวในหมวดนี้
เทียบกับทุก server ที่ยังใช้งานในหมวดนี้ทั้งทะเบียน ดาวนับเฉพาะเมื่อผู้ลงทะเบียนเป็นเจ้าของ repo
คำถามที่พบบ่อย
ngx-json-render UI ปลอดภัยไหม?
จากการตรวจเบื้องต้นของเรา ผ่าน 4 จาก 4 ข้อที่ตรวจได้ เรายังไม่ได้อ่านโค้ด ก่อนใส่กุญแจหรือ token ให้ดูว่า server ขอสิทธิ์อะไร และเลือกกุญแจที่ทำได้เท่าที่จำเป็น
ต้องใช้กุญแจหรือรหัสอะไรบ้าง?
registry ไม่ได้ระบุว่าต้องใช้กุญแจ แต่บางตัวจะขอให้ล็อกอินตอนใช้ครั้งแรก
ตัวนี้รันบนเครื่องหรือบนคลาวด์?
รันบนคลาวด์ของผู้ทำ ต่อผ่านอินเทอร์เน็ตได้เลย ไม่ต้องลงโปรแกรม แต่ข้อมูลที่ส่งให้จะผ่านเซิร์ฟเวอร์ของผู้ทำ
ยังมีคนดูแลอยู่ไหม?
repo บน GitHub มีการแก้โค้ดล่าสุด 5 วันที่ผ่านมา และส่งรุ่นล่าสุด (0.1.1) เข้า registry 13 วันที่ผ่านมา
ใช้กับโปรแกรมไหนได้บ้าง?
โปรแกรมที่รองรับ MCP เช่น Claude Desktop, Claude Code, Cursor และ VS Code ตัวนี้ต่อผ่าน URL จึงใช้กับโปรแกรมที่รับ remote MCP ได้ เช่น ChatGPT ที่เปิดโหมดนักพัฒนา
มีตัวไหนใช้แทนได้บ้าง?
ในหมวดเดียวกันมี REA, Netdata, Front-End Checklist
ตัวที่ใช้แทนได้
server หมวดเดียวกันจากผู้ทำคนอื่น เรียงตามดาว
อ่านการ์ด:↓ ดาวน์โหลดต่อสัปดาห์i★ ดาว GitHubiสามเสา: รีวิว · ผลตรวจ · การใช้งานiอัปเดต = วันที่ส่งรุ่นล่าสุดเข้า registryi
Netdata
Real-time infrastructure monitoring with metrics, logs, alerts, and ML-based anomaly detection.
Front-End Checklist
Review frontend code and live pages against 386 quality-gated web development rules.
README จากผู้ทำ
เปิดอ่าน README
ส่วนนี้คัดจาก repo ของผู้ทำตามต้นฉบับ PopNx MCP ไม่ได้ตรวจหรือรับรองเนื้อหา ตัด HTML รูปภาพ และสคริปต์ออกแล้ว ลิงก์จะพาออกนอกเว็บ
MCP App example (prototype)
The Angular Material catalog served as an MCP App: a model calls one tool with a json-render spec, and Claude, ChatGPT, VS Code, Cursor or any other MCP Apps host renders it inline in the chat as real Angular Material components.
It is built on upstream's @json-render/mcp, not beside it. That package ships the server side (the render-ui tool and the ui:// resource) and a React hook, useJsonRenderApp, for the view in the iframe. This project adds the missing Angular piece:
| Piece | React (upstream) | Angular (here) |
|---|---|---|
MCP server, tool, ui:// view | @json-render/mcp | the same, see server/app.ts |
| View: connect to the host | useJsonRenderApp() | injectJsonRenderApp(), signals |
| View: render the spec | + shadcn registry | + materialRegistry |
| Render while the model writes | no, waits for the tool result | yes, from toolinputpartial (streamPartialInput) |
| Host theme | not handled | follows theme from the host context |
| UI actions reach the model | no default | sendMessage action, posted as a chat message |
Run it
npm run build:lib && npm run build:material # the view renders the built packages
npm run build:mcp-app # dist/mcp-app/view.html + server.mjs
node dist/mcp-app/server.mjs # stdio node dist/mcp-app/server.mjs --http # Streamable HTTP on http://localhost:3001/mcp
Claude Desktop or Cursor (.cursor/mcp.json):
{
"mcpServers": { "ngx-json-render": { "command": "node", "args": ["/absolute/path/to/ngx-json-render/dist/mcp-app/server.mjs"] } } }
VS Code reads .vscode/mcp.json, whose top-level key is servers, not mcpServers:
{
"servers": { "ngx-json-render": { "command": "node", "args": ["/absolute/path/to/ngx-json-render/dist/mcp-app/server.mjs"] } } }
The server resolves its dependencies from this workspace's node_modules, so run it from a checkout, not a copied dist/. Then ask for UI: "show me a dashboard of my last three releases".
To try it without building, point the host at the hosted endpoint instead, for example in VS Code { "servers": { "ngx-json-render-ui": { "type": "http", "url": "https://ngx-json-render.angular-generative-ui-chat.workers.dev/mcp" } } }, or install it in one click: VS Code, Cursor (2.6 or later renders the view). Checked in VS Code 1.141 with GitHub Copilot Chat in Agent mode: the render-ui call renders inline in the chat.
How it fits together
injectJsonRenderApp()fromngx-json-render/mcp. It has the same fields as upstream'sUseJsonRenderAppReturn(spec,loading,connected,connecting,error,app,callServerTool), as signals, and reads a tool result the same way (parseSpecFromToolResult). Everything specific to this project is an option:streamPartialInput,autoResizeandtransport.src/app/app.ts: the view,with the Material registry.scripts/build-mcp-app.mjs: type-checks the server, then runsng run mcp-app:mcp, thengx-json-render:mcp-appbuilder (fromdist/, since this workspace does not install its own package). Hosts load aui://resource as one HTML document, so the builder folds Angular's chunks into one inline module, inlines the styles, and bundles the server with its dependencies.server/app.ts: the server, fromcreateRenderUiServer()inngx-json-render/mcp/server, with what is specific to this deployment: the catalog, a CSP that allows only Google Fonts instead of anyhttps:origin, and the ChatGPT widget domain. It serves Streamable HTTP statelessly.ngx-json-render/mcp/serverregisters the tool the waycreateMcpAppdoes, with a read-only annotation and what the model sees of the tool: a short description, and an input schema with each component's props and each action's params, which the SDK also enforces. A spec whose children or root are missing is sent back to the model as an error, and so is a$templatethat reads a repeat item as${$item/field}: it would render as an empty string, and the error tells the model to write${field}.server/catalog.ts: the catalog the tool describes to the model, the Material catalog plus thesendMessageaction (below), added withwithSendMessagefromngx-json-render/mcp/server. The published catalog stays host-neutral; the action needs the view's handler,mcp.handlers.server/server.ts: stdio and a local HTTP server.server/worker.ts: the hosted endpoint, a Cloudflare Worker.npm run build:mcp-app -- --cloudflarebundles it, with every dependency and the view inlined, into.cloudflare/worker.mjs, andnpx wrangler deploypublishes it with the settings inwrangler.jsonc. Until 2026-10-28 it was hosted on Vercel;vercel.jsonnow only redirects the old URL here.
The server imports the Material catalog from ngx-json-render-material/catalog, which holds the catalog without the components, on top of ngx-json-render/schema. Neither loads Angular, so the server runs in plain Node. Upstream splits its packages the same way, with @json-render/shadcn/catalog and @json-render/react/schema. The build bundles both entry points from dist/, so the server runs the same code an app's server gets from npm.
Upstream issues in createMcpApp
It drops state, on and watch
createMcpApp in @json-render/mcp 0.21.0 passes catalog.zodSchema() as the tool's input schema. That schema describes root and elements (type, props, children, visible, repeat) and nothing else. The MCP SDK parses tool arguments with it, so a spec's top-level state and each element's on and watch are stripped before the tool handler runs, and catalog.validate strips them again in the handler. The catalog prompt tells the model to _always_ send state for data-backed UI, so tables and lists arrive empty, and no button does anything. The React schema has the same shape, so this is not specific to Angular.
specInputSchema() in ngx-json-render/mcp/server replaces it with a schema built from the catalog: state, on, watch, visible and repeat are declared, each component's props are its own schema (a value may also be a dynamic expression such as { "$state": "/path" }; an unknown prop is rejected), and each binding's action must be a built-in or a catalog action, with the catalog action's params checked. Shared parts are JSON Schema definitions, and the validation hint the catalog repeats on every form field (for catalog.prompt(), which lists components one by one) is stated once, on elements, so the whole schema is about 44 000 characters.
Claude cuts the description off
createMcpApp uses catalog.prompt() as the tool description: about 26 000 characters, written as a system prompt for a model that streams JSON Patch. Claude shows a tool description to the model cut off after roughly 2 000 characters, which that prompt spends on its patch-streaming instructions. Asked to quote where the description ended, Claude quoted the middle of the state-streaming example: it had seen no component, prop or action, and guessed ("variant": "primary" on a Button, which the view then could not draw). renderUiDescription() in ngx-json-render/mcp/server is about 1 600 characters, covers what a schema cannot say (state, bindings, repeat, events, sendMessage), and leaves the vocabulary to the input schema.
Once upstream fixes both, the server can go back to a plain createMcpApp({ name, version, catalog, html }).
Actions that reach the model
Built-in actions (setState, submitForm, …) only change the view. For a button that should continue the conversation ("Approve", "Show more", a submitted form), the tool description offers one more action:
{
"on": { "press": { "action": "submitForm", "params": { "action": "sendMessage", "params": { "text": "Sign me up", "data": { "$state": "/form" } } } } } }
The view's handler, mcp.handlers.sendMessage, calls mcp.sendMessage(text, data), which posts a ui/message to the host as a user message: the text, then data as a JSON block. Claude does not send it on its own: it puts the message in the message box, under a warning to review it, and the user sends it. The model then answers it like anything the user typed, and can call render-ui again with the next screen. The handler rejects, so a binding's onError runs, when the host does not declare the message capability or declines the message. Either way the view says what happened under the UI, from mcp.lastMessage: "Message passed to the chat." or the reason it could not send.
data has to be a single { "$state": "/path" }: core resolves $state only at the top level of a custom action's params. Through submitForm the inner params are resolved deeply, but the description asks for the single reference either way so the model has one rule.
Not done yet
- Only
sendMessageis wired.mcp.callServerTool()(replace the spec with a server tool's result) andapp.updateModelContext()(hand the model context without a visible message) are there for an app that needs them. - Tried in Claude (the message lands in the message box, as above) and in ChatGPT, which posts it to the chat at once; there the model did not answer the posted message. Whether Claude passes the whole input schema to the model, or cuts it off like the description, is checked only by asking it.
- The view is about 1.4 MB uncompressed, because it bundles Angular Material, zod and the MCP SDK. That works for an inline resource, but it has not been optimized.