CopilotKit生成UI MCP框架

一个即插即用的框架,用于构建基于人工智能的生成用户界面 副驾驶套件, MCP应用程序,以及 开放路由.MCP服务器工具返回直接在基于浏览器的聊天界面中呈现的交互式HTML组件。
该项目包括一个带有CopilotKit的Next.js前端、一个带有示例UI生成工具的HTTP MCP服务器,以及为Claude Code预配置的9个MCP服务器集成。
建筑
Browser (localhost:3000)
|
| User sends message in CopilotSidebar
v
Next.js API Route (/api/copilotkit)
|
| BuiltInAgent routes to OpenRouter (LLM)
v
MCPAppsMiddleware
|
| HTTP request to MCP server (localhost:3001/mcp)
| Tool returns data + _meta.ui/resourceUri reference
v
CopilotKit Frontend
|
| Fetches HTML resource from MCP server
| Renders interactive UI in sandboxed iframe
v
User sees interactive dashboard in the chat sidebar快速开始
1.克隆存储库
git clone https://github.com/Roentek/CopilotKit_Generative_UI_MCP_Framework.git
cd CopilotKit_Generative_UI_MCP_Framework2.配置环境变量
cp .env.example .env编辑 .env 并添加您的API密钥。您至少需要:
OPENAI_API_KEY=your-openrouter-api-key
OPENAI_BASE_URL=https://openrouter.ai/api/v13.安装依赖项并运行
npm run setup # Installs root + MCP server dependencies
npm run dev:all # Starts Next.js (port 3000) + MCP server (port 3001)打开 http://localhost:3000 并尝试询问助手: “显示工作流状态”
先决条件
- Node.js 18+ 和 npm
- OpenRouter API密钥 (在这里买一个)--或任何与OpenAI兼容的LLM提供者
- Claude 代码命令行工具 (可选,用于使用预配置的MCP服务器)
项目结构
CopilotKit_Generative_UI_MCP_Framework/
├── .claude/ # Claude Code settings
│ ├── settings.json # Enabled plugins
│ └── settings.local.json # Permissions + MCP server config
├── mcp-server/ # HTTP MCP server for generative UI
│ ├── package.json # Server dependencies
│ ├── tsconfig.json # TypeScript config
│ └── src/
│ ├── server.ts # Express + StreamableHTTPServerTransport
│ └── apps/
│ └── workflow-dashboard.html # Sample interactive HTML app
├── src/
│ └── app/
│ ├── layout.tsx # CopilotKit provider wrapper
│ ├── page.tsx # Dashboard + CopilotSidebar
│ ├── globals.css # Tailwind base styles
│ └── api/
│ └── copilotkit/
│ └── route.ts # CopilotRuntime + MCPAppsMiddleware
├── .env.example # Environment variable template
├── .mcp.json # 9 pre-configured MCP servers
├── CLAUDE.md # AI agent instructions
├── LICENSE # MIT License
├── package.json # Next.js + CopilotKit dependencies
└── README.md # This file环境变量
| 变量 | 必填 | 描述 |
|---|---|---|
OPENAI_API_KEY | 是 | 您的OpenRouter API密钥(由CopilotKit运行时使用) |
OPENAI_BASE_URL | 是 | 设置为 https://openrouter.ai/api/v1 适用于OpenRouter |
OPENROUTER_MODEL | 否 | 要使用的模型(默认为 openai/gpt-4o)-看 OpenRouter型号 |
MCP_SERVER_URL | 无 | MCP服务器URL(默认为 http://localhost:3001/mcp) |
SUPABASE_API_PAT | 否 | 取消MCP访问令牌 |
PINECONE_API_KEY | 否 | 松果向量DB API键 |
APIFY_API_PAT | 否 | 指定web抓取访问令牌 |
TAVILY_API_KEY | 否 | Tavilly搜索API密钥 |
VAPI_API_TOKEN | 否 | Vapi语音MCP服务器令牌 |
N8N_HOST_URL | 无 | n8n实例URL |
N8N_API_KEY | 没有 | n8n API密钥 |
GOOGLE_USER_EMAIL | 否 | 谷歌工作区电子邮件 |
GOOGLE_OAUTH_CLIENT_ID | 否 | 谷歌OAuth客户端ID |
GOOGLE_OAUTH_CLIENT_SECRET | 否 | 谷歌OAuth客户端机密 |
OPENROUTER_API_KEY | 否 | MCP服务器集成的OpenRouter密钥 |
预配置的MCP服务器集成
这9台MCP服务器配置在 .mcp.json 与Claude Code CLI/IDE一起使用:
| 服务器 | 用途 | 传输 |
|---|---|---|
| n8n | 工作流自动化 | stdio |
| 塔维利 | 网络搜索与研究 | |
| 瓦皮 | 语音和呼叫API | stdio |
| 泽普 | 文档和内存 | 远程 |
| 松果 | 矢量数据库 | stdio |
| Apify | 网络抓取 | stdio |
| Supabase | 数据库操作 | stdio |
| 开放路由 LLM 路由 | ||
| Google Workspace | 谷歌服务 |
可用的NPM脚本
| 脚本 | 描述 |
|---|---|
npm run setup | 安装所有依赖项(root+MCP服务器) |
npm run dev:all | 同时启动Next.js+MCP服务器 |
npm run dev | 仅启动Next.js开发服务器 |
npm run mcp:dev | 仅启动MCP服务器 |
npm run build | 为生产环境构建Next.js |
npm run start | 启动Next.js生产服务器 |
npm run lint | 运行ESLint |
如何添加新的MCP应用程序
MCP Apps模式允许工具返回交互式UI。以下是如何添加一个新的:
步骤1:创建HTML应用程序
在中创建一个自包含的HTML文件 mcp-server/src/apps/。它必须包含所有CSS和JavaScript内联(没有外部依赖关系)。该应用程序通过以下方式接收数据 window.addEventListener("message", ...).
/* Your styles here */
window.addEventListener("message", (event) => {
const data = typeof event.data === "string"
? JSON.parse(event.data)
: event.data;
// Render your UI with the data
});
步骤2:在中注册工具 mcp-server/src/server.ts
server.tool(
"my-tool-name",
"Description of what the tool does",
{ param1: z.string().describe("Parameter description") },
async ({ param1 }) => {
const data = { /* your data */ };
return {
content: [{ type: "text" as const, text: JSON.stringify(data) }],
_meta: { "ui/resourceUri": "ui://generative-ui/my-app" },
};
}
);步骤3:注册资源
server.resource(
"my-app",
"ui://generative-ui/my-app",
{ description: "My interactive app", mimeType: "text/html+mcp" },
async (uri) => ({
contents: [{
uri: uri.href,
mimeType: "text/html+mcp",
text: loadApp("my-app.html"),
}],
})
);步骤4:重新启动MCP服务器
npm run mcp:devOpenRouter配置
该框架使用 开放路由 作为LLM提供商。CopilotKit的运行时在内部使用OpenAI SDK,因此通过设置 OPENAI_BASE_URL 到 https://openrouter.ai/api/v1 和 OPENAI_API_KEY 对于您的OpenRouter密钥,所有LLM调用都透明地通过OpenRouter路由。
选择模型
默认模型为 openai/gpt-4o。要使用其他型号,请设置 OPENROUTER_MODEL 您的环境变量 .env 文件:
OPENROUTER_MODEL=anthropic/claude-sonnet-4 # Any OpenRouter model热门选项:
openai/gpt-4o-OpenAI GPT-4 Omni(默认,平衡性能)anthropic/claude-sonnet-4-克劳德·十四行诗4(出色的推理能力)anthropic/claude-opus-4-克劳德作品4(最有能力)google/gemini-2.0-flash-thinking-exp:free-谷歌Gemini 2.0 Flash(免费版)meta-llama/llama-3.3-70b-instruct-Llama 3.3 70Bdeepseek/deepseek-chat-DeepSeek V3(经济高效)
查看完整列表 OpenRouter型号.
故障排除
MCP服务器没有响应: 检查MCP服务器是否在端口3001上运行。跑 npm run mcp:dev 单独查看其日志。访问 http://localhost:3001/health 以验证。
CopilotSidebar显示错误: 确保 OPENAI_API_KEY 和 OPENAI_BASE_URL 设置在您的 .env 文件。API路由位于 /api/copilotkit 需要这些与OpenRouter通信。
MCPAppsMiddle的TypeScript类型错误包括: 这是一个已知的重复问题 @ag-ui/client 包装。这 route.ts 文件用途 as any 键入断言来解决这个问题。跑 npm dedupe 如果您在安装新软件包后发现问题。
端口冲突: Next.js在端口3000上运行,MCP服务器在端口3001上运行。如果这些端口正在使用中,请设置 PORT Next.js通过 next dev -p 3002 和 MCP_PORT MCP服务器的环境变量。
资源
许可证
麻省理工学院许可证-版权所有(c)2026 Roentek Designs
看 许可证 了解详情。
