[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"project-10838":3},{"id":4,"name":5,"fullName":6,"owner":7,"repo":5,"description":8,"homepage":9,"htmlUrl":10,"language":11,"languages":10,"totalLinesOfCode":10,"stars":12,"forks":13,"watchers":14,"openIssues":15,"contributorsCount":16,"subscribersCount":16,"size":16,"stars1d":17,"stars7d":18,"stars30d":19,"stars90d":16,"forks30d":16,"starsTrendScore":20,"compositeScore":21,"rankGlobal":10,"rankLanguage":10,"license":22,"archived":23,"fork":23,"defaultBranch":24,"hasWiki":23,"hasPages":25,"topics":26,"createdAt":10,"pushedAt":10,"updatedAt":33,"readmeContent":34,"aiSummary":35,"trendingCount":16,"starSnapshotCount":16,"syncStatus":36,"lastSyncTime":37,"discoverSource":38},10838,"mcp-ui","MCP-UI-Org\u002Fmcp-ui","MCP-UI-Org","UI over MCP. Create next-gen UI experiences with the protocol and SDK!","https:\u002F\u002Fmcpui.dev",null,"TypeScript",4901,380,38,40,0,4,26,101,17,90.74,"Apache License 2.0",false,"main",true,[27,28,29,30,31,32],"ai","frontend","llm","mcp","ui","web","2026-06-12 04:00:52","## 📦 Model Context Protocol UI SDK\n\n\u003Cp align=\"center\">\n  \u003Cimg width=\"250\" alt=\"image\" src=\"https:\u002F\u002Fgithub.com\u002Fuser-attachments\u002Fassets\u002F65b9698f-990f-4846-9b2d-88de91d53d4d\" \u002F>\n\u003C\u002Fp>\n\n\u003Cp align=\"center\">\n  \u003Ca href=\"https:\u002F\u002Fwww.npmjs.com\u002Fpackage\u002F@mcp-ui\u002Fserver\">\u003Cimg src=\"https:\u002F\u002Fimg.shields.io\u002Fnpm\u002Fv\u002F@mcp-ui\u002Fserver?label=server&color=green\" alt=\"Server Version\">\u003C\u002Fa>\n  \u003Ca href=\"https:\u002F\u002Fwww.npmjs.com\u002Fpackage\u002F@mcp-ui\u002Fclient\">\u003Cimg src=\"https:\u002F\u002Fimg.shields.io\u002Fnpm\u002Fv\u002F@mcp-ui\u002Fclient?label=client&color=blue\" alt=\"Client Version\">\u003C\u002Fa>\n  \u003Ca href=\"https:\u002F\u002Frubygems.org\u002Fgems\u002Fmcp_ui_server\">\u003Cimg src=\"https:\u002F\u002Fimg.shields.io\u002Fgem\u002Fv\u002Fmcp_ui_server\" alt=\"Ruby Server SDK Version\">\u003C\u002Fa>\n  \u003Ca href=\"https:\u002F\u002Fpypi.org\u002Fproject\u002Fmcp-ui-server\u002F\">\u003Cimg src=\"https:\u002F\u002Fimg.shields.io\u002Fpypi\u002Fv\u002Fmcp-ui-server?label=python&color=yellow\" alt=\"Python Server SDK Version\">\u003C\u002Fa>\n  \u003Ca href=\"https:\u002F\u002Fdiscord.gg\u002FCEAG4KW7ZH\">\u003Cimg src=\"https:\u002F\u002Fimg.shields.io\u002Fdiscord\u002F1401195140436983879?logo=discord&label=discord\" alt=\"Discord\">\u003C\u002Fa>\n  \u003Ca href=\"https:\u002F\u002Fgitmcp.io\u002Fidosal\u002Fmcp-ui\">\u003Cimg src=\"https:\u002F\u002Fimg.shields.io\u002Fendpoint?url=https:\u002F\u002Fgitmcp.io\u002Fbadge\u002Fidosal\u002Fmcp-ui\" alt=\"MCP Documentation\">\u003C\u002Fa>\n\u003C\u002Fp>\n\n\u003Cp align=\"center\">\n  \u003Ca href=\"#-whats-mcp-ui\">What's mcp-ui?\u003C\u002Fa> •\n  \u003Ca href=\"#-core-concepts\">Core Concepts\u003C\u002Fa> •\n  \u003Ca href=\"#-installation\">Installation\u003C\u002Fa> •\n  \u003Ca href=\"#-getting-started\">Getting Started\u003C\u002Fa> •\n  \u003Ca href=\"#-walkthrough\">Walkthrough\u003C\u002Fa> •\n  \u003Ca href=\"#-examples\">Examples\u003C\u002Fa> •\n  \u003Ca href=\"#-supported-hosts\">Supported Hosts\u003C\u002Fa> •\n  \u003Ca href=\"#-security\">Security\u003C\u002Fa> •\n  \u003Ca href=\"#-roadmap\">Roadmap\u003C\u002Fa> •\n  \u003Ca href=\"#-contributing\">Contributing\u003C\u002Fa> •\n  \u003Ca href=\"#-license\">License\u003C\u002Fa>\n\u003C\u002Fp>\n\n----\n\n**`mcp-ui`** pioneered the concept of interactive UI over [MCP](https:\u002F\u002Fmodelcontextprotocol.io\u002Fintroduction), enabling rich web interfaces for AI tools. Alongside Apps SDK, the patterns developed here directly influenced the [MCP Apps](https:\u002F\u002Fgithub.com\u002Fmodelcontextprotocol\u002Fext-apps) specification, which standardized UI delivery over the protocol.\n\nThe `@mcp-ui\u002F*` packages implement the MCP Apps standard. `@mcp-ui\u002Fclient` is the recommended SDK for MCP Apps Hosts.\n\n> *The @mcp-ui\u002F* packages are fully compliant with the MCP Apps specification and ready for production use.*\n\n\u003Cp align=\"center\">\n  \u003Cvideo src=\"https:\u002F\u002Fgithub.com\u002Fuser-attachments\u002Fassets\u002F7180c822-2dd9-4f38-9d3e-b67679509483\">\u003C\u002Fvideo>\n\u003C\u002Fp>\n\n## 💡 What's `mcp-ui`?\n\n`mcp-ui` is an SDK implementing the [MCP Apps](https:\u002F\u002Fgithub.com\u002Fmodelcontextprotocol\u002Fext-apps) standard for UI over MCP. It provides:\n\n* **`@mcp-ui\u002Fserver` (TypeScript)**: Create UI resources with `createUIResource`. Works with `registerAppTool` and `registerAppResource` from `@modelcontextprotocol\u002Fext-apps\u002Fserver`.\n* **`@mcp-ui\u002Fclient` (TypeScript)**: Render tool UIs with `AppRenderer` (MCP Apps) or `UIResourceRenderer` (legacy MCP-UI hosts).\n* **`mcp_ui_server` (Ruby)**: Create UI resources in Ruby.\n* **`mcp-ui-server` (Python)**: Create UI resources in Python.\n\nThe MCP Apps pattern links tools to their UIs via `_meta.ui.resourceUri`. Hosts fetch and render the UI alongside tool results.\n\n## ✨ Core Concepts\n\n### MCP Apps Pattern (Recommended)\n\nThe MCP Apps standard links tools to their UIs via `_meta.ui.resourceUri`:\n\n```ts\nimport { registerAppTool, registerAppResource } from '@modelcontextprotocol\u002Fext-apps\u002Fserver';\nimport { createUIResource } from '@mcp-ui\u002Fserver';\n\n\u002F\u002F 1. Create UI resource\nconst widgetUI = await createUIResource({\n  uri: 'ui:\u002F\u002Fmy-server\u002Fwidget',\n  content: { type: 'rawHtml', htmlString: '\u003Ch1>Widget\u003C\u002Fh1>' },\n  encoding: 'text',\n});\n\n\u002F\u002F 2. Register resource handler\nregisterAppResource(server, 'widget_ui', widgetUI.resource.uri, {}, async () => ({\n  contents: [widgetUI.resource]\n}));\n\n\u002F\u002F 3. Register tool with _meta linking\nregisterAppTool(server, 'show_widget', {\n  description: 'Show widget',\n  inputSchema: { query: z.string() },\n  _meta: { ui: { resourceUri: widgetUI.resource.uri } }  \u002F\u002F Links tool → UI\n}, async ({ query }) => {\n  return { content: [{ type: 'text', text: `Query: ${query}` }] };\n});\n```\n\nHosts detect `_meta.ui.resourceUri`, fetch the UI via `resources\u002Fread`, and render it with `AppRenderer`.\n\n### UIResource (Wire Format)\n\nThe underlying payload for UI content:\n\n```ts\ninterface UIResource {\n  type: 'resource';\n  resource: {\n    uri: string;       \u002F\u002F e.g., ui:\u002F\u002Fcomponent\u002Fid\n    mimeType: 'text\u002Fhtml;profile=mcp-app';\n    text?: string;      \u002F\u002F HTML content\n    blob?: string;      \u002F\u002F Base64-encoded HTML content\n  };\n}\n```\n\n* **`uri`**: Unique identifier using `ui:\u002F\u002F` scheme\n* **`mimeType`**: `text\u002Fhtml;profile=mcp-app` — the MCP Apps standard MIME type\n* **`text` vs. `blob`**: Plain text or Base64-encoded content\n\n### Client Components\n\n#### AppRenderer (MCP Apps)\n\nFor MCP Apps hosts, use `AppRenderer` to render tool UIs:\n\n```tsx\nimport { AppRenderer } from '@mcp-ui\u002Fclient';\n\nfunction ToolUI({ client, toolName, toolInput, toolResult }) {\n  return (\n    \u003CAppRenderer\n      client={client}\n      toolName={toolName}\n      sandbox={{ url: sandboxUrl }}\n      toolInput={toolInput}\n      toolResult={toolResult}\n      onOpenLink={async ({ url }) => window.open(url)}\n      onMessage={async (params) => console.log('Message:', params)}\n    \u002F>\n  );\n}\n```\n\nKey props:\n- **`client`**: Optional MCP client for automatic resource fetching\n- **`toolName`**: Tool name to render UI for\n- **`sandbox`**: Sandbox configuration with proxy URL\n- **`toolInput`** \u002F **`toolResult`**: Tool arguments and results\n- **`onOpenLink`** \u002F **`onMessage`**: Handlers for UI requests\n\n#### UIResourceRenderer (Legacy MCP-UI)\n\nFor legacy hosts that embed resources in tool responses:\n\n```tsx\nimport { UIResourceRenderer } from '@mcp-ui\u002Fclient';\n\n\u003CUIResourceRenderer\n  resource={mcpResource.resource}\n  onUIAction={(action) => console.log('Action:', action)}\n\u002F>\n```\n\nProps:\n- **`resource`**: Resource object with `uri`, `mimeType`, and content (`text`\u002F`blob`)\n- **`onUIAction`**: Callback for handling tool, prompt, link, notify, and intent actions\n\nAlso available as a Web Component:\n```html\n\u003Cui-resource-renderer\n  resource='{ \"mimeType\": \"text\u002Fhtml\", \"text\": \"\u003Ch2>Hello!\u003C\u002Fh2>\" }'\n>\u003C\u002Fui-resource-renderer>\n```\n\n### Supported Resource Types\n\n#### HTML (`text\u002Fhtml;profile=mcp-app`)\n\nRendered using the internal `\u003CHTMLResourceRenderer \u002F>` component, which displays content inside an `\u003Ciframe>`. This is suitable for self-contained HTML.\n\n*   **`mimeType`**: `text\u002Fhtml;profile=mcp-app` (MCP Apps standard)\n\n### UI Action\n\nUI snippets must be able to interact with the agent. In `mcp-ui`, this is done by hooking into events sent from the UI snippet and reacting to them in the host (see `onUIAction` prop). For example, an HTML may trigger a tool call when a button is clicked by sending an event which will be caught handled by the client.\n\n\n### Platform Adapters\n\nMCP-UI SDKs includes adapter support for host-specific implementations, enabling your open MCP-UI widgets to work seamlessly regardless of host. Adapters automatically translate between MCP-UI's `postMessage` protocol and host-specific APIs. Over time, as hosts become compatible with the open spec, these adapters wouldn't be needed.\n\n#### Available Adapters\n\n##### Apps SDK Adapter\n\nFor Apps SDK environments (e.g., ChatGPT), this adapter translates MCP-UI protocol to Apps SDK API calls (e.g., `window.openai`).\n\n**How it Works:**\n- Intercepts MCP-UI `postMessage` calls from your widgets\n- Translates them to appropriate Apps SDK API calls\n- Handles bidirectional communication (tools, prompts, state management)\n- Works transparently - your existing MCP-UI code continues to work without changes\n\n**Usage:**\n\n```ts\nimport { createUIResource } from '@mcp-ui\u002Fserver';\n\nconst htmlResource = await createUIResource({\n  uri: 'ui:\u002F\u002Fgreeting\u002F1',\n  content: {\n    type: 'rawHtml',\n    htmlString: `\n      \u003Cbutton onclick=\"window.parent.postMessage({ type: 'tool', payload: { toolName: 'myTool', params: {} } }, '*')\">\n        Call Tool\n      \u003C\u002Fbutton>\n    `\n  },\n  encoding: 'text',\n});\n```\n\n\n## 🏗️ Installation\n\n### TypeScript\n\n```bash\n# using npm\nnpm install @mcp-ui\u002Fserver @mcp-ui\u002Fclient\n\n# or pnpm\npnpm add @mcp-ui\u002Fserver @mcp-ui\u002Fclient\n\n# or yarn\nyarn add @mcp-ui\u002Fserver @mcp-ui\u002Fclient\n```\n\n### Ruby\n\n```bash\ngem install mcp_ui_server\n```\n\n### Python\n\n```bash\n# using pip\npip install mcp-ui-server\n\n# or uv\nuv add mcp-ui-server\n```\n\n## 🚀 Getting Started\n\nYou can use [GitMCP](https:\u002F\u002Fgitmcp.io\u002Fidosal\u002Fmcp-ui) to give your IDE access to `mcp-ui`'s latest documentation!\n\n### TypeScript (MCP Apps Pattern)\n\n1. **Server-side**: Create a tool with UI using `_meta.ui.resourceUri`\n\n   ```ts\n   import { McpServer } from '@modelcontextprotocol\u002Fsdk\u002Fserver\u002Fmcp.js';\n   import { registerAppTool, registerAppResource } from '@modelcontextprotocol\u002Fext-apps\u002Fserver';\n   import { createUIResource } from '@mcp-ui\u002Fserver';\n   import { z } from 'zod';\n\n   const server = new McpServer({ name: 'my-server', version: '1.0.0' });\n\n   \u002F\u002F Create UI resource\n   const widgetUI = await createUIResource({\n     uri: 'ui:\u002F\u002Fmy-server\u002Fwidget',\n     content: { type: 'rawHtml', htmlString: '\u003Ch1>Interactive Widget\u003C\u002Fh1>' },\n     encoding: 'text',\n   });\n\n   \u002F\u002F Register resource handler\n   registerAppResource(server, 'widget_ui', widgetUI.resource.uri, {}, async () => ({\n     contents: [widgetUI.resource]\n   }));\n\n   \u002F\u002F Register tool with _meta linking\n   registerAppTool(server, 'show_widget', {\n     description: 'Show widget',\n     inputSchema: { query: z.string() },\n     _meta: { ui: { resourceUri: widgetUI.resource.uri } }\n   }, async ({ query }) => {\n     return { content: [{ type: 'text', text: `Query: ${query}` }] };\n   });\n   ```\n\n2. **Client-side**: Render tool UIs with `AppRenderer`\n\n   ```tsx\n   import { AppRenderer } from '@mcp-ui\u002Fclient';\n\n   function ToolUI({ client, toolName, toolInput, toolResult }) {\n     return (\n       \u003CAppRenderer\n         client={client}\n         toolName={toolName}\n         sandbox={{ url: sandboxUrl }}\n         toolInput={toolInput}\n         toolResult={toolResult}\n         onOpenLink={async ({ url }) => window.open(url)}\n         onMessage={async (params) => console.log('Message:', params)}\n       \u002F>\n     );\n   }\n   ```\n\n### Legacy MCP-UI Pattern\n\nFor hosts that don't support MCP Apps yet:\n\n   ```tsx\n   import { UIResourceRenderer } from '@mcp-ui\u002Fclient';\n\n   \u003CUIResourceRenderer\n     resource={mcpResource.resource}\n     onUIAction={(action) => console.log('Action:', action)}\n   \u002F>\n   ```\n\n### Python\n\n**Server-side**: Build your UI resources\n\n   ```python\n   from mcp_ui_server import create_ui_resource\n\n   # Inline HTML\n   html_resource = create_ui_resource({\n     \"uri\": \"ui:\u002F\u002Fgreeting\u002F1\",\n     \"content\": { \"type\": \"rawHtml\", \"htmlString\": \"\u003Cp>Hello, from Python!\u003C\u002Fp>\" },\n     \"encoding\": \"text\",\n   })\n\n   # External URL\n   external_url_resource = create_ui_resource({\n     \"uri\": \"ui:\u002F\u002Fgreeting\u002F2\",\n     \"content\": { \"type\": \"externalUrl\", \"iframeUrl\": \"https:\u002F\u002Fexample.com\" },\n     \"encoding\": \"text\",\n   })\n   ```\n\n### Ruby\n\n**Server-side**: Build your UI resources\n\n   ```ruby\n   require 'mcp_ui_server'\n\n   # Inline HTML\n   html_resource = McpUiServer.create_ui_resource(\n     uri: 'ui:\u002F\u002Fgreeting\u002F1',\n     content: { type: :raw_html, htmlString: '\u003Cp>Hello, from Ruby!\u003C\u002Fp>' },\n     encoding: :text\n   )\n\n   # External URL\n   external_url_resource = McpUiServer.create_ui_resource(\n     uri: 'ui:\u002F\u002Fgreeting\u002F2',\n     content: { type: :external_url, iframeUrl: 'https:\u002F\u002Fexample.com' },\n     encoding: :text\n   )\n\n   # remote-dom\n   remote_dom_resource = McpUiServer.create_ui_resource(\n     uri: 'ui:\u002F\u002Fremote-component\u002Faction-button',\n     content: {\n       type: :remote_dom,\n       script: \"\n        const button = document.createElement('ui-button');\n        button.setAttribute('label', 'Click me from Ruby!');\n        button.addEventListener('press', () => {\n          window.parent.postMessage({ type: 'tool', payload: { toolName: 'uiInteraction', params: { action: 'button-click', from: 'ruby-remote-dom' } } }, '*');\n        });\n        root.appendChild(button);\n        \",\n       framework: :react,\n     },\n     encoding: :text\n   )\n   ```\n\n## 🚶 Walkthrough\n\nFor a detailed, simple, step-by-step guide on how to integrate `mcp-ui` into your own server, check out the full server walkthroughs on the [mcp-ui documentation site](https:\u002F\u002Fmcpui.dev):\n\n- **[TypeScript Server Walkthrough](https:\u002F\u002Fmcpui.dev\u002Fguide\u002Fserver\u002Ftypescript\u002Fwalkthrough)**\n- **[Ruby Server Walkthrough](https:\u002F\u002Fmcpui.dev\u002Fguide\u002Fserver\u002Fruby\u002Fwalkthrough)**\n- **[Python Server Walkthrough](https:\u002F\u002Fmcpui.dev\u002Fguide\u002Fserver\u002Fpython\u002Fwalkthrough)**\n\nThese guides will show you how to add a `mcp-ui` endpoint to an existing server, create tools that return UI resources, and test your setup with the `ui-inspector`!\n\n## 🌍 Examples\n\n**Client Examples**\n* [Goose](https:\u002F\u002Fgithub.com\u002Fblock\u002Fgoose) - open source AI agent that supports `mcp-ui`.\n* [LibreChat](https:\u002F\u002Fgithub.com\u002Fdanny-avila\u002FLibreChat) - enhanced ChatGPT clone that supports `mcp-ui`.\n* [ui-inspector](https:\u002F\u002Fgithub.com\u002Fidosal\u002Fui-inspector) - inspect local `mcp-ui`-enabled servers.\n* [MCP-UI Chat](https:\u002F\u002Fgithub.com\u002Fidosal\u002Fscira-mcp-ui-chat) - interactive chat built with the `mcp-ui` client. Check out the [hosted version](https:\u002F\u002Fscira-mcp-chat-git-main-idosals-projects.vercel.app\u002F)!\n* MCP-UI RemoteDOM Playground (`examples\u002Fremote-dom-demo`) - local demo app to test RemoteDOM resources\n* MCP-UI Web Component Demo (`examples\u002Fwc-demo`) - local demo app to test the Web Component integration in hosts\n\n**Server Examples**\n* **TypeScript**: A [full-featured server](examples\u002Fserver) that is deployed to a hosted environment for easy testing.\n  * **[`typescript-server-demo`](.\u002Fexamples\u002Ftypescript-server-demo)**: A simple Typescript server that demonstrates how to generate UI resources.\n  * **server**: A [full-featured Typescript server](examples\u002Fserver) that is deployed to a hosted Cloudflare environment for easy testing.\n    * **HTTP Streaming**: `https:\u002F\u002Fremote-mcp-server-authless.idosalomon.workers.dev\u002Fmcp`\n    * **SSE**: `https:\u002F\u002Fremote-mcp-server-authless.idosalomon.workers.dev\u002Fsse`\n* **Ruby**: A barebones [demo server](\u002Fexamples\u002Fruby-server-demo) that shows how to use `mcp_ui_server` and `mcp` gems together.\n* **Python**: A simple [demo server](\u002Fexamples\u002Fpython-server-demo) that shows how to use the `mcp-ui-server` Python package.\n* [XMCP](https:\u002F\u002Fgithub.com\u002Fbasementstudio\u002Fxmcp\u002Ftree\u002Fmain\u002Fexamples\u002Fmcp-ui) - Typescript MCP framework with `mcp-ui` starter example.\n\nDrop those URLs into any MCP-compatible host to see `mcp-ui` in action. For a supported local inspector, see the [ui-inspector](https:\u002F\u002Fgithub.com\u002Fidosal\u002Fui-inspector).\n\n## 💻 Supported Hosts\n\nThe `@mcp-ui\u002F*` packages work with both MCP Apps hosts and legacy MCP-UI hosts.\n\n### MCP Apps Hosts\n\nThese hosts implement the [MCP Apps specification](https:\u002F\u002Fgithub.com\u002Fmodelcontextprotocol\u002Fext-apps) and support tools with `_meta.ui.resourceUri`:\n\n| Host | Notes |\n| :--- | :---- |\n| [Claude](https:\u002F\u002Fwww.claude.ai\u002F) | ✅ | ✅ |\n| [VSCode](https:\u002F\u002Fgithub.com\u002Fmicrosoft\u002Fvscode\u002Fissues\u002F260218) | |\n| [Postman](https:\u002F\u002Fwww.postman.com\u002F) | |\n| [Goose](https:\u002F\u002Fblock.github.io\u002Fgoose\u002F) | |\n| [MCPJam](https:\u002F\u002Fwww.mcpjam.com\u002F) | |\n| [LibreChat](https:\u002F\u002Fwww.librechat.ai\u002F) | |\n| [mcp-use](https:\u002F\u002Fmcp-use.com\u002F) | |\n| [Smithery](https:\u002F\u002Fsmithery.ai\u002Fplayground) | |\n\n### Legacy MCP-UI Hosts\n\nThese hosts expect UI resources embedded directly in tool responses:\n\n| Host | Rendering | UI Actions | Notes |\n| :--- | :-------: | :--------: | :---- |\n| [Nanobot](https:\u002F\u002Fwww.nanobot.ai\u002F) | ✅ | ✅ |\n| [MCPJam](https:\u002F\u002Fwww.mcpjam.com\u002F) | ✅ | ✅ |\n| [Postman](https:\u002F\u002Fwww.postman.com\u002F) | ✅ | ⚠️ | |\n| [Goose](https:\u002F\u002Fblock.github.io\u002Fgoose\u002F) | ✅ | ⚠️ | |\n| [LibreChat](https:\u002F\u002Fwww.librechat.ai\u002F) | ✅ | ⚠️ | |\n| [Smithery](https:\u002F\u002Fsmithery.ai\u002Fplayground) | ✅ | ❌ | |\n| [fast-agent](https:\u002F\u002Ffast-agent.ai\u002Fmcp\u002Fmcp-ui\u002F) | ✅ | ❌ | |\n\n### Hosts Requiring Adapters\n\n| Host | Protocol | Notes |\n| :--- | :------: | :---- |\n| [ChatGPT](https:\u002F\u002Fchatgpt.com\u002F) | Apps SDK | [Guide](https:\u002F\u002Fmcpui.dev\u002Fguide\u002Fapps-sdk) |\n\n**Legend:** ✅ Supported · ⚠️ Partial · ❌ Not yet supported\n\n## 🔒 Security\nHost and user security is one of `mcp-ui`'s primary concerns. In all content types, the remote code is executed in a sandboxed iframe.\n\n## 🛣️ Roadmap\n\n- [X] Add online playground\n- [X] Expand UI Action API (beyond tool calls)\n- [X] Support Web Components\n- [X] Support Remote-DOM\n- [ ] Add component libraries (in progress)\n- [ ] Add SDKs for additional programming languages (in progress; Ruby, Python available)\n- [ ] Support additional frontend frameworks\n- [ ] Explore providing a UI SDK (in addition to the client and server one)\n- [ ] Add declarative UI content type\n- [ ] Support generative UI?\n      \n## Core Team\n`mcp-ui` is a project by [Ido Salomon](https:\u002F\u002Fx.com\u002Fidosal1), in collaboration with [Liad Yosef](https:\u002F\u002Fx.com\u002Fliadyosef).\n\n## 🤝 Contributing\n\nContributions, ideas, and bug reports are welcome! See the [contribution guidelines](https:\u002F\u002Fgithub.com\u002Fidosal\u002Fmcp-ui\u002Fblob\u002Fmain\u002F.github\u002FCONTRIBUTING.md) to get started.\n\n## 📄 License\n\nApache License 2.0 © [The MCP-UI Authors](LICENSE)\n\n## Disclaimer\n\nThis project is provided \"as is\", without warranty of any kind. The `mcp-ui` authors and contributors shall not be held liable for any damages, losses, or issues arising from the use of this software. Use at your own risk.\n","mcp-ui 是一个基于 Model Context Protocol (MCP) 的 UI SDK，用于创建下一代的 AI 工具的用户界面。它提供了 `@mcp-ui\u002Fserver` 和 `@mcp-ui\u002Fclient` 两个主要包，分别用于在服务器端创建 UI 资源和在客户端渲染这些资源。此外，还支持 Ruby 和 Python 语言的服务器端开发。mcp-ui 通过实现 MCP Apps 标准，使得开发者能够轻松构建与 AI 模型交互的丰富前端应用。适合需要为 AI 应用或工具提供高质量、可定制用户界面的场景使用。",2,"2026-06-11 03:30:27","top_topic"]