SKILL.md
唯讀
名稱
mcp
描述
json-render 的 MCP Apps 整合套件。適用於建置需要在 Claude、ChatGPT、Cursor 或 VS Code 中渲染互動式 UI 的 MCP 伺服器,或將 json-render 與 Model Context Protocol 進行整合時。
@json-render/mcp
MCP Apps 整合套件,可將 json-render UI 作為互動式 MCP App,提供給 Claude、ChatGPT、Cursor、VS Code 以及其他支援 MCP 的用戶端使用。
快速開始
伺服器端 (Node.js)
import { createMcpApp } from "@json-render/mcp";
import { defineCatalog } from "@json-render/core";
import { schema } from "@json-render/react/schema";
import { shadcnComponentDefinitions } from "@json-render/shadcn/catalog";
import { StdioServerTransport } from "@modelcontextprotocol/sdk/server/stdio.js";
import fs from "node:fs";
const catalog = defineCatalog(schema, {
components: { ...shadcnComponentDefinitions },
actions: {},
});
const server = createMcpApp({
name: "My App",
version: "1.0.0",
catalog,
html: fs.readFileSync("dist/index.html", "utf-8"),
});
await server.connect(new StdioServerTransport());
用戶端 (React,位於 iframe 內)
import { useJsonRenderApp } from "@json-render/mcp/app";
import { JSONUIProvider, Renderer } from "@json-render/react";
function McpAppView({ registry }) {
const { spec, loading, error } = useJsonRenderApp();
if (error) return <div>Error: {error.message}</div>;
if (!spec) return <div>Waiting...</div>;
return (
<JSONUIProvider registry={registry} initialState={spec.state ?? {}}>
<Renderer spec={spec} registry={registry} loading={loading} />
</JSONUIProvider>
);
}
架構說明
createMcpApp()會建立一個McpServer,並註冊render-ui工具以及ui://HTML 資源- 工具描述中包含了 catalog prompt,讓 LLM 知道如何生成有效的 spec
- HTML 資源是一個透過 Vite 打包的單一檔案 React 應用程式,內建 json-render 渲染器
- 在 iframe 內部,
useJsonRenderApp()會透過postMessage與 host 建立連線並渲染 spec
伺服器端 API
createMcpApp(options)- 主要入口,用於建立完整的 MCP 伺服器registerJsonRenderTool(server, options)- 在現有的伺服器上註冊 json-render 工具registerJsonRenderResource(server, options)- 註冊 UI 資源
用戶端 API (@json-render/mcp/app)
useJsonRenderApp(options?)- React Hook,回傳{ spec, loading, connected, error, callServerTool }buildAppHtml(options)- 從打包好的 JS/CSS 生成 HTML
建置 iframe HTML
使用 Vite + vite-plugin-singlefile 將 React 應用程式打包成單一獨立的 HTML 檔案:
// vite.config.ts
import { defineConfig } from "vite";
import react from "@vitejs/plugin-react";
import { viteSingleFile } from "vite-plugin-singlefile";
export default defineConfig({
plugins: [react(), viteSingleFile()],
build: { outDir: "dist" },
});
用戶端設定
Cursor (.cursor/mcp.json)
{
"mcpServers": {
"my-app": {
"command": "npx",
"args": ["tsx", "server.ts", "--stdio"]
}
}
}
Claude Desktop
{
"mcpServers": {
"my-app": {
"command": "npx",
"args": ["tsx", "/path/to/server.ts", "--stdio"]
}
}
}
相依套件
# 伺服器端
npm install @json-render/mcp @json-render/core @modelcontextprotocol/sdk
# 用戶端 (iframe)
npm install @json-render/react @json-render/shadcn react react-dom
# 建置工具
npm install -D vite @vitejs/plugin-react vite-plugin-singlefile






