mcp について
@json-render/mcp は、Claude、ChatGPT、Cursor、VS Code などのクライアントに、json-render UIをインタラクティブな MCP Apps として提供します。描画ツールと UI リソースを登録する MCP サーバーを作成し、iframe 内の React アプリで仕様を表示します。
主な機能
- 01完全な MCP サーバーの作成
- 02json-render ツールと UI リソースの登録
- 03自己完結型 iframe HTML の生成
- 04React フックによる UI 仕様と接続状態の取得
- 05サーバーツールの呼び出し
活用シーン
- 01MCP クライアントでインタラクティブな json-render UIを表示
- 02有効な仕様生成に必要なカタログ情報を LLM に提供
- 03iframe アプリをホストに接続して仕様を描画
MCP 対応
MCP サーバーを作成し、`render-ui` ツールと `ui://` HTML リソースをクライアントに登録します。iframe アプリは `postMessage` でホストに接続し、UI 仕様を描画します。
インストール
コマンドをコピーしてターミナルで実行します。
$
npx skills add https:/ / github.com/ vercel-labs/ json-render --skill mcpインストール後、Claude Code で/mcpを入力して読み込まれたか確認します。
詳細
@json-render/mcp
json-render UI を、Claude、ChatGPT、Cursor、VS Code などの MCP 対応クライアント内でインタラクティブな MCP Apps として提供する MCP Apps 統合機能です。
クイックスタート
サーバー(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()は、render-uiツールとui://HTML リソースを登録するMcpServerを作成します- ツールの説明にはカタログプロンプトが含まれており、LLM が有効な spec の生成方法を把握できます
- HTML リソースは、json-render レンダラーを含む Vite バンドル済みの単一ファイル React アプリです
- iframe 内では、
useJsonRenderApp()がpostMessageを介してホストに接続し、spec をレンダリングします
サーバー API
createMcpApp(options)- メインエントリーポイント。完全な MCP サーバーを作成しますregisterJsonRenderTool(server, options)- 既存のサーバーに json-render ツールを登録しますregisterJsonRenderResource(server, options)- UI リソースを登録します
クライアント API(@json-render/mcp/app)
useJsonRenderApp(options?)- React フック。{ 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"]
}
}
}
依存関係
# Server
npm install @json-render/mcp @json-render/core @modelcontextprotocol/sdk
# Client (iframe)
npm install @json-render/react @json-render/shadcn react react-dom
# Build tools
npm install -D vite @vitejs/plugin-react vite-plugin-singlefile
コメント
Markdown 対応