🚀 火箭。聊天最小MCP生成器
谷歌代码之夏2026——火箭。聊天 一个专门的MCP服务器生成器,通过手术从官方Rocket中提取功能。聊天OpenAPI规范和脚手架最小化,生产就绪的MCP服务器——配备自动化测试套件。
](https://nodejs.org/)   
______________________________________________________________________
📋 目录
______________________________________________________________________
🧩 问题陈述
当AI代理需要与Rocket等大型REST API交互时。聊天(12个以上域中的数百个端点),他们面临两个关键瓶颈:
- 上下文块 --将整个OpenAPI规范输入LLM会耗尽代币预算,导致工具调用准确性差。
- 终点幻觉 -在没有基础的情况下,LLM发明了不存在的API路径,从而导致生产代理循环中的静默故障。
- 零测试覆盖率 --手动搭建的MCP服务器很少包含测试套件,这使得在自动化工作流程中无法进行回归检测。
💡 解决方案概述
这 最小MCP发生器 通过a解决所有三个问题 双工具架构 它强制执行生成前发现工作流:
┌─────────────────────────────────────────────────────────┐
│ AI Agent / LLM │
│ "I need to delete messages and manage roles" │
└────────────────────┬────────────────────────────────────┘
│
┌────────────▼────────────┐
│ Tool 1: explore_rc_api │ ─── Discovers real endpoints
│ (TOON-compressed) │ from OpenAPI YAML specs
└────────────┬────────────┘
│ Returns TOON summaries
┌────────────▼────────────────┐
│ Tool 2: scaffold_mcp_server │ ─── Generates full project
│ (Template-based) │ with tests & client
└────────────┬────────────────┘
│
┌────────────▼────────────────┐
│ Self-Testing Guarantee │ ─── npm install → tsc → vitest
│ (Automated Verification) │
└─────────────────────────────┘______________________________________________________________________
✨ 主要特点
| 特性 | 描述 |
|---|---|
| 手术摘除 | 从不生成完整的API包装。识别 *最小* 用户工作流的端点集。 |
| TOON压缩 | 将冗长的JSON模式简化为超密集的简写,节省 代币预算的约75%. |
| 双工具架构 | 将发现与生成分开,以消除终点幻觉。 |
| 零回归测试 | 每个生成的工具都包含一个相应的Vitest套件,其中包含模拟的HTTP客户端。 |
| 上下文保护 | 生成客户端功能 8KB有效载荷截断 和 429指数回退. |
| 自检保证 | 后一代挂钩自动运行 npm install → tsc --noEmit → vitest run. |
______________________________________________________________________
🏗 建筑
graph TD
A["manifest.json - Domain Registry"] -->|Domain lookup| B["Parser - src/parser.ts"]
C["RC OpenAPI YAMLs - GitHub Raw"] -->|HTTP fetch| B
B -->|TOON summaries| D["Tool 1: explore_rc_api"]
B -->|Endpoint objects| E["Endpoint Cache - In-Memory Map"]
E -->|Selected endpoints| F["Tool 2: scaffold_mcp_server"]
F -->|Endpoints + projectName| G["Generator - src/generator.ts"]
H["Handlebars Templates"] -->|Compiled| G
G -->|Writes files| I["Generated Project"]
G -->|npm install + tsc + vitest| J["Self-Testing Report"]
style A fill:#1a1a2e,stroke:#e94560,color:#fff
style B fill:#16213e,stroke:#0f3460,color:#fff
style D fill:#0f3460,stroke:#53354a,color:#fff
style F fill:#0f3460,stroke:#53354a,color:#fff
style G fill:#533483,stroke:#e94560,color:#fff
style I fill:#2b2d42,stroke:#8d99ae,color:#fff
style J fill:#06d6a0,stroke:#073b4c,color:#fff核心模块
| 模块 | 文件 | 责任 |
|---|---|---|
| MCP服务器 | src/index.ts | 通过MCP SDK公开双工具架构 StdioServerTransport。管理工具调用之间的内存端点缓存。 |
| 解析器 | src/parser.ts | 火箭。从GitHub聊天OpenAPI YAML规范,取消引用 $ref 指针,提取结构化 Endpoint[] 并计算TOON压缩审计度量。 |
| 发电机 | src/generator.ts | 执行引擎。编译9个Handlebars模板,构建目录树,写入所有文件,并运行生成后验证管道。 |
| 清单 | manifest.json | 注册12个API域及其OpenAPI源文件、关键字匹配器和预先计算的TOON缩写。 |
______________________________________________________________________
🔀 双工具编排
该架构实施了严格的 探索→ 然后脚手架 防止LLM端点幻觉的工作流程:
工具1: explore_rc_api
Input: { requirement: "External Vendor Provisioning: Create Guest Account, Restrict to Channel, Notify Sponsor" }
Output: TOON-compressed endpoint summaries + agent instructions它的作用:
- 读取
manifest.json并将用户的需求与域关键字进行匹配。 - 从官方获取相关的OpenAPI YAML规范 RocketChat-Open-API公司 存储库。
- 使用解析和取消引用规范
@apidevtools/swagger-parser. - 将每个端点压缩为TOON简写,并缓存结构化
Endpoint物体。 - 返回TOON摘要,其中包含代理选择特定内容的说明
toolName串。
工具2: scaffold_mcp_server
Input: { projectName: "rc-vendor-provisioning-mcp", selectedToolNames: ["post_api_v1_users_create", ...] }
Output: Full TypeScript project + Self-Testing Guarantee Report它的作用:
- 仅从内存缓存中检索请求的终结点(任何产生幻觉的终结点都不能通过)。
- 编译Handlebars模板以生成完整的项目结构。
- 运行生成后验证管道(
npm install→tsc --noEmit→vitest run). - 返回一个结构化报告,其中包含每个验证步骤的通过/失败状态。
______________________________________________________________________
🗜 TOON(面向令牌的对象表示法)
TOON是一种自定义压缩格式,专门设计用于在传输API模式信息时最大限度地减少LLM令牌消耗。
压缩规则
| 完整类型 | TOON | 节省 |
|---|---|---|
string | s | 83% |
boolean | b | 86% |
number | n | 83% |
array | a | 80% |
integer | n | 86% |
参数快捷方式
| 全名 | TOON |
|---|---|
roomId | rid |
msgId | mid |
userId | uid |
username | u |
text | m |
转换示例
之前(原始OpenAPI):
POST /api/v1/chat.delete
requestBody:
roomId: string (required)
msgId: string (required)
asUser: boolean (optional)之后(TOON):
chat.del(rid:s, mid:s, [u:b])解析器还计算 储蓄审计:
--- MSG (Savings: 78.3%) ---
- post_api_v1_chat_delete: chat.del(rid:s, mid:s, [u:b])
- post_api_v1_chat_sendMessage: chat.send(rid:s, m:s, [alias:s])______________________________________________________________________
📦 生成的输出结构
每个生成的子服务器都遵循一个标准化的架构:
examples/rc-[feature]-bot/
├── src/
│ ├── server.ts # MCP entry point — dynamically registers all selected tools
│ ├── rc-client.ts # Token-aware HTTP client with 429 backoff & 8KB truncation
│ └── tools/ # One file per endpoint with Zod input validation
│ ├── post_api_v1_chat_delete.ts
│ └── ...
├── tests/
│ ├── setup.ts # Global mock environment — intercepts all HTTP calls
│ ├── post_api_v1_chat_delete.test.ts
│ └── ... # One test file per tool (Zero-Regression Testing)
├── .env.example # ROCKETCHAT_URL, ROCKETCHAT_AUTH_TOKEN, ROCKETCHAT_USER_ID
├── package.json # Dependencies: @modelcontextprotocol/sdk, zod, vitest
├── tsconfig.json # Strict TypeScript configuration
├── vitest.config.ts # Vitest configuration with setup file
└── README.md # Auto-generated documentation for the sub-server生成的文件亮点
rc-client.ts --上下文安全HTTP客户端
- 8KB有效负载截断:自动修剪超过8KB的API响应,以防止LLM的上下文窗口崩溃。数组被智能地截断到前5项。
- 429指数回退:检索率限制请求高达3次,具有指数级延迟,遵守
Retry-After标题。 - 灵活的身份验证:支持用户名/密码登录和预生成的身份验证令牌工作流。
tools/*.ts -单个API终点
- 每个工具都导出一个标准化的对象
name,description,inputSchema(Zod),以及handler. - 括号内URL变量的动态路径插值(例如。,
/api/v1/settings/{_id}). - TOON标头用作工具描述,以实现最大的令牌效率。
tests/*.test.ts --零回归测试套件
每个生成的测试文件都验证:
- ✅ 正确的工具名称和描述导出
- ✅ Zod模式接受有效参数
- ✅ Zod模式拒绝缺少必需的参数
- ✅ 正确的HTTP方法、路径和有效负载转发
______________________________________________________________________
🧬 模板
发电机使用 9把手模板 --每个生成项目的“DNA”:
| 模板 | 输出文件 | 目的 |
|---|---|---|
server.hbs | src/server.ts | MCP服务器入口,带有动态工具导入和注册 |
rc-client.hbs | src/rc-client.ts | 具有退避和截断功能的令牌感知HTTP客户端 |
tool.hbs | src/tools/[name].ts | 具有Zod验证的单个端点逻辑 |
test.hbs | tests/[name].test.ts | 每个工具的Vitest套件 |
setup.hbs | tests/setup.ts | 用于隔离测试的全球模拟环境 |
package.hbs | package.json | 项目元数据和依赖关系声明 |
tsconfig.hbs | tsconfig.json | 严格的TypeScript编译器配置 |
vitest.config.hbs | vitest.config.ts | Vitest转轮配置 |
readme.hbs | README.md | 自动生成的项目文档 |
______________________________________________________________________
🚀 入门指南
先决条件
- Node.js v20或更高
- npm (包含在Node.js中)
安装
# 1. Clone the repository
git clone
cd GSoC
# 2. Install dependencies
npm install
# 3. Start the MCP Architect server
npx tsx src/index.ts连接到Gemini CLI
该项目作为一艘 Gemini CLI扩展The gemini-extension.json 自动注册MCP服务器:
{
"mcpServers": {
"rc-master": {
"command": "npx",
"args": ["tsx", "${extensionPath}/src/index.ts"],
"cwd": "${extensionPath}"
}
}
}安装后,Gemini CLI将公开 explore_rc_api 和 scaffold_mcp_server 作为原生工具。
______________________________________________________________________
🎬 用法示例
提示
*“外部供应商设置:创建来宾帐户→ 仅限于单一供应商渠道→ 设置帐户过期时间→ DM内部赞助商”*
第一步:发现(explore_rc_api)
代理人打电话来 explore_rc_api 根据用户的要求。该工具与 users, rooms,以及 msg 域,返回:
Found domains: [rooms, msg, users]
--- USERS (Savings: 85.0%) ---
- post_api_v1_users_create: users.new(name:o, email:o, password:o, u:o, [roles:a], [customFields:o], ...)
- post_api_v1_users_update: users.upd(uid:o, data:o)
--- ROOMS (Savings: 85.7%) ---
- post_api_v1_channels_invite: channels.invite(rid:o, uid:o)
- post_api_v1_groups_invite: groups.invite(rid:o, uid:o)
--- MSG (Savings: 86.4%) ---
- post_api_v1_im_create: dm.new(u:o)
- post_api_v1_chat_postMessage: chat.post(rid:o, m:o)
INSTRUCTION FOR AGENT: Review the TOON headers above. Select the exact
'toolName' strings you need, and pass them as an array to scaffold_mcp_server.步骤2:生成(scaffold_mcp_server)
代理选择相关工具名称并调用 scaffold_mcp_server:
{
"projectName": "rc-vendor-provisioning-mcp",
"selectedToolNames": [
"post_api_v1_users_create",
"post_api_v1_users_update",
"post_api_v1_channels_invite",
"post_api_v1_groups_invite",
"post_api_v1_im_create",
"post_api_v1_chat_postMessage",
"get_api_v1_users_info"
]
}第三步:自检保证报告
生成器为项目搭建脚手架,安装依赖项,并验证:
Project "rc-vendor-provisioning-mcp" generated with 7 tools at examples/rc-vendor-provisioning-mcp.
📁 Generated Test Files:
- tests/post_api_v1_users_create.test.ts
- tests/post_api_v1_channels_invite.test.ts
- ... (7 files)
🛡️ Self-Testing Guarantee Report:
npm install: ✅ Passed
tsc --noEmit: ✅ Passed
vitest run: ✅ Passed______________________________________________________________________
🌐 支持的API域
这 manifest.json 地图 12火箭。聊天API域 到他们的OpenAPI源文件:
| 域 | OpenAPI源 | 关键字 | TOON前缀 |
|---|---|---|---|
| 认证 | authentication.yaml | 登录、注销、令牌、会话、2fa | auth.ops |
| 内容 | content-management.yaml | 文件、上传、媒体、下载 | cnt.ops |
| 集成 | integrations.yaml | webhook、脚本、传入、传出 | int.ops |
| 市场 | marketplace-apps.yaml | 应用程序、安装、卸载、捆绑包 | mkt.ops |
| 消息 | messaging.yaml | 消息、聊天、发布、反应、删除 | msg.ops |
| 杂项 | miscellaneous.yaml | 信息、版本、健康、盾牌 | msc.ops |
| 通知 | notifications.yaml | 推送、电子邮件、提醒、未读、提及 | ntfy.ops |
| 全 | omnichannel.yaml | 在线聊天、客服、访客、排队 | omni.ops |
| 房间 | rooms.yaml | 频道、房间、群组、邀请、加入 | rm.ops |
| 设置 | settings.yaml | 配置、权限、oauth、ldap | cfg.ops |
| 统计 | statistics.yaml | 统计、指标、报告、使用情况 | stt.ops |
| 用户 | user-management.yaml | 用户、状态、存在、化身 | usr.ops |
所有规格都是从官方现场获取的 RocketChat-Open-API公司 GitHub存储库。
______________________________________________________________________
🛠 技术栈
| 层 | 技术 | 目的 |
|---|---|---|
| 运行时 | Node.js+TypeScript | 类型安全的服务器执行 |
| 协议 | MCP-SDK(@modelcontextprotocol/sdk) | AI工具注册和stdio传输 |
| 验证 | Zod | 生成工具的运行时输入模式验证 |
| 模板化 | Handlebars | 代码生成来源 .hbs 模板文件 |
| 规范解析 | @apidevtools/swagger-parser + js-yaml | OpenAPI YAML解引用和解析 |
| 超文本传输协议 | Axios(解析器)+原生 fetch (生成的客户端) | API规范获取和生成的客户端请求 |
| 测试 | Vitest | 使用模拟环境生成测试套件 |
______________________________________________________________________
📂 项目结构
GSoC/
├── src/
│ ├── index.ts # MCP Server — Two-Tool Architecture entry point
│ ├── parser.ts # OpenAPI YAML parser & TOON compressor
│ └── generator.ts # Execution Engine — template compilation & project scaffolding
├── templates/
│ ├── server.hbs # Generated server entry template
│ ├── rc-client.hbs # HTTP client template (429 backoff + 8KB truncation)
│ ├── tool.hbs # Individual tool endpoint template
│ ├── test.hbs # Vitest test suite template
│ ├── setup.hbs # Test environment mock setup template
│ ├── package.hbs # package.json template
│ ├── tsconfig.hbs # TypeScript config template
│ ├── vitest.config.hbs # Vitest config template
│ └── readme.hbs # Generated README template
├── examples/ # Generated sub-servers (output directory)
│ ├── rc-cleanup-bot/
│ ├── rc-admin-dashboard-mcp/
│ └── rc-stats-server/
├── manifest.json # API domain registry (12 domains)
├── gemini-extension.json # Gemini CLI extension configuration
├── CONTEXT.md # Project history & architectural decisions
├── GEMINI.md # AI system prompt & SOPs
├── package.json # Root project dependencies
└── tsconfig.json # Root TypeScript configuration______________________________________________________________________
⚠️ 约束和护栏
- 无幻觉:仅从官方发现端点 RocketChat-Open-API公司 可以生成规格。基于缓存的架构使得在结构上不可能构建一个没有首先探索过的端点。
- 代币效率:TOON压缩确保有效载荷最小化。生成的HTTP客户端强制执行8KB截断。
- 安全:凭据从不硬编码。所有身份验证流都使用
process.env配置通过.env文件夹。 - 错误处理:每个生成的工具都会捕获
401 Unauthorized和403 Forbidden响应并返回人类可读的MCP错误消息。
______________________________________________________________________
🤝 贡献
- 分叉存储库
- 创建要素分支(
git checkout -b feature/amazing-feature) - 提交您的更改(
git commit -m 'Add amazing feature') - 推到分支(
git push origin feature/amazing-feature) - 打开拉取请求
发展
# Run the Architect server in development
npx tsx src/index.ts
# Run an example generated server
cd examples/rc-cleanup-bot
npm install
npm start
# Run generated tests
npm test______________________________________________________________________
📄 许可证
该项目根据MIT许可证获得许可。请参阅 许可证 文件以获取详细信息。
______________________________________________________________________
Built with ❤️ for Google Summer of Code 2026 × Rocket.Chat
