Rocket.Chat MCP Server Generator
A gemini-cli extension that generates minimal, workflow-driven MCP servers for Rocket.Chat — solving context bloat while supporting event-driven RC Apps with AI reasoning.
______________________________________________________________________
问题
如今,采用MCP的一个主要问题是 上下文膨胀 -几乎所有的MCP服务器都是为了支持大量的服务API而编写的,任何采用这些服务API的人的大部分令牌预算都将被与他们永远不需要的API调用相关的静态MCP需求所消耗。这种情况在代理代码生成器工作流中更为严重,其中每个代理都在循环中不必要地燃烧令牌,同时支持项目永远不会使用的API/工具。
解决方案
这个生成器通过让Rocket来解决上下文膨胀问题。聊天开发人员生成一个生产级最小MCP服务器,覆盖 仅 他们的项目所需的API子集。用简明的英语描述你需要什么-生成器识别相关的API和Apps-Engine事件,组成多步骤工作流,将API调用与人工智能推理链接起来,并输出一个完整的项目和测试。
输出不仅仅是一个精简的REST包装器——每个生成的MCP工具都是一个 工作流 将N个API调用、LLM采样、用户启发和条件逻辑链接到一个原子操作中。当提示描述实时事件时(“消息发送时…”),生成器还会生成一个本机 RC应用程序 它桥接到MCP服务器。
建筑
三级管道:发现→ 架构检查→ 生成
主要特点
API和事件发现
- 自动OpenAPI解析 --火箭。Chat的官方OpenAPI YAML规范(12个域中的558个端点)在运行时使用GitHub
@apidevtools/swagger-parser无需手动定义端点。 - 应用引擎事件解析 --从中动态发现所有47个事件处理程序接口
@rocket.chat/apps-engine使用ts-morph,从中提取方法签名、参数类型和形状.d.ts文件夹。 - 零维护 --当RC添加或更改端点或事件接口时,它们立即可用。没有手动更新。
- 三层缓存 --解析后的规范缓存在内存中以供即时重用,持久化到磁盘(24小时TTL)以在重启后生存,并且仅在缓存未命中时从GitHub获取。
- 延迟模式提取 --浏览仅显示轻量级摘要。昂贵的JSON模式映射仅适用于您实际选择的端点。
- 并行域获取 -同时提取和解析多个API域。
工作流引擎
- 工作流作为数据 --每个生成的MCP工具都是一个多步骤的工作流,定义为声明性JSON,而不是命令式代码。运行时引擎在执行时解释步骤定义。
- 5种步骤类型 —
api_call(RC REST API),sampling(通过MCP采样进行LLM推理),elicitation(人在循环确认),transform(数据重塑),conditional(分支逻辑)。 - 依赖图 --步骤声明
dependsOn形成DAG的数组。具有共享依赖关系的步骤可以并行执行。 - 坚持 --通过RC Apps Engine进行交叉调用状态跟踪(每个用户、每个房间或自定义密钥)
IPersistence. - 工作流编辑器 --验证LLM生成的工作流定义:检查步骤引用、检测循环、计算拓扑顺序、自动添加缺失
dependsOn,并警告常见错误(硬编码的房间ID、静态采样提示、孤立步骤)。
RC应用程序生成
- 桥梁建筑 --当提供事件接口时,生成器会生成一个MCP服务器(AI推理)和一个RC应用程序(事件处理),通过HTTP桥链接。RC应用程序捕获事件并将其委托给MCP服务器以执行工作流。
- 动态事件接线 --事件处理程序代码生成自
ts-morph-解析的接口签名。支持所有47个应用引擎事件,包括事件前处理程序(IPreMessageSentPrevent,IPreRoomCreatePrevent). - Slash命令和webhooks --生成的RC应用程序可以包括斜线命令和webhook端点以及事件处理程序。
- 本地RC应用程序结构 --输出与官方匹配
rc-appsCLI结构:app.json,键入处理程序、设置、帮助程序,.rcappsconfig.
代码生成
- 带测试的多文件输出 --每个生成的服务器都是一个完整的项目:每个工作流工具一个文件、一个共享的HTTP客户端、每个工具的测试文件、工作流引擎模块、README和配置文件。
- 生成时的输入验证 --验证
inputMapping在生成代码之前,根据实际的OpenAPI模式检查字段名,检查必填字段,并模糊纠正操作ID拼写错误。 - 表达式安全 --转换和条件表达式在生成时进行验证,拒绝以下模式
require(),import(),eval(),process.exit(). - 自动注册 --生成的MCP服务器会自动在中注册
~/.gemini/settings.json因此,它们可以立即作为Gemini CLI工具使用。
先决条件
- v22+
- 双子座气候 已安装并配置
安装
- 克隆存储库:
git clone https://github.com/sezallagwal/mcpGenerator
cd mcpGenerator- 安装依赖项:
npm install- 注册为gemini cli扩展:
mkdir -p ~/.gemini/extensions
ln -s "$(pwd)" ~/.gemini/extensions/mcpGenerator这将项目符号链接到gemini-cli的extensions目录中,以便自动加载。
用法
发射 gemini 在任何项目目录中。该扩展提供了三个MCP工具,Gemini会根据您的自然语言请求自动使用:
| 工具 | 目的 | 何时致电 |
|---|---|---|
get_capability_guide | 返回所有558个API端点和47个应用程序引擎事件 | 首次发现 |
get_endpoint_schemas | 返回所选操作ID和事件接口的精确JSON模式 | 第二--检查模式 |
generate | 验证工作流、编写项目、写入所有文件 | Last--generate |
快速开始
用简单的英语描述你想要什么:
gemini> I need an MCP server that can send messages and manage channels双子座会:
- 呼叫
get_capability_guide发现相关端点和事件 - 呼叫
get_endpoint_schemas获取工作流步骤的精确字段名称 - 呼叫
generate使用组合工作流--输出完整的项目
斜杠命令
gemini> /generator:generate send alerts based on workspace statistics示例
以下是一个真实世界的提示,可以生成一个完全可用的入职机器人:
当在Rocket中创建新用户时。聊天,自动: 1. 将它们添加到 #将军 和 #公告,加上适合角色的渠道——如果他们的角色包括admin,添加到 #管理员操作;如果livechat-agent,添加到 #支持团队;如果moderator,添加到 #mod团队 1. 向他们发送欢迎DM 1. 使用AI根据分配的角色生成个性化的入职检查表 1. 创建私人 入职培训-{用户名} 频道并邀请创建它们的用户(performedBy)作为入职伙伴 1. 在该渠道中发布生成的检查表
从这个提示中,生成器生成:
- 一 MCP服务器 使用多步骤工作流工具(
api_call→conditional→sampling→api_call链条) - 一 RC应用程序 带着一个
IPostUserCreated通过HTTP桥触发工作流的事件处理程序 - 完整的测试套件,
.env.example、README和gemini设置中的自动注册
管道
流水线是完全自动化的——Gemini自主处理端点选择、工作流组合和代码生成:
Describe intent → get_capability_guide → get_endpoint_schemas → generate → Ready to deploy- 描述你的意图 --用简单的英语说你想说的话。Gemini自动将您的关键字映射到正确的API域和事件接口。
- 能力指南 --双子座来电
get_capability_guide它返回按域分组的所有端点和所有Apps Engine事件接口。Gemini选择它需要的操作ID和事件接口。 - 架构查找 --双子座来电
get_endpoint_schemas使用选定的操作IDs/eventInterface来获取精确的请求/响应模式和事件参数形状。 - 生成 --双子座来电
generate一次性完成所有工作流。该工具验证步骤引用,检查inputMapping字段名与模式相对应,组成依赖关系图,并将整个项目写入磁盘。
步骤类型参考
每个工作流都由步骤组成。支持五种步骤类型:
| 类型 | 目的 | 关键字段 |
|---|---|---|
api_call | 呼叫火箭。聊天REST API端点 | operationId, inputMapping, outputPath, forEach, as, continueOnError |
sampling | LLM推理(Gemini CLI或API) | prompt, systemPrompt, maxTokens, responseFormat |
elicitation | 人在循环确认 | message, requestedSchema, onDecline |
transform | 通过JS表达式进行数据整形 | expression (已验证,沙盒) |
conditional | 分支逻辑 | condition, thenStep, elseStep |
步骤支持模板表达式({{params.*}}, {{steps.*}})对于步骤之间的动态数据流:
{
"id": "send_welcome",
"type": "api_call",
"operationId": "post-api-v1-chat_sendMessage",
"dependsOn": ["compose_message"],
"inputMapping": {
"message": {
"rid": "{{params.roomId}}",
"msg": "{{steps.compose_message.result}}",
},
},
}生成的项目结构
生成器使用MCP服务器(始终)和可选的RC应用程序(如果需要实时事件)创建一个monorepo:
my-project/
├── mcp-server/
│ ├── src/
│ │ ├── server.ts # MCP server entry point
│ │ ├── rc-client.ts # Shared Rocket.Chat HTTP client
│ │ ├── engine/
│ │ │ └── workflow-engine.ts # Runtime workflow execution engine
│ │ ├── tools/
│ │ │ └── *.ts # One file per workflow tool
│ │ └── tests/
│ │ ├── setup.ts # Test setup & mock infrastructure
│ │ └── *.test.ts # Per-tool test files
│ ├── package.json
│ ├── tsconfig.json
│ ├── .env.example
│ └── README.md
└── rc-app/ # Only if eventInterfaces provided
├── app.json # RC App manifest
├── *App.ts # Main app class (event wiring)
├── handlers/ # Event handler files
├── commands/ # Slash command files
├── bridge/
│ └── mcp-bridge.ts # HTTP bridge to MCP server
├── helpers/
│ └── message.ts # Message creation helpers
├── settings/
│ └── settings.ts # Admin-configurable settings
└── package.json使用生成的服务器
cd projects/my-rc-server/mcp-server
npm install
cp .env.example .env
# Edit .env with your Rocket.Chat credentials生成的服务器使用stdio传输。将其添加到MCP客户端的配置中:
{
"mcpServers": {
"my-rc-server": {
"command": "npm",
"args": ["start"],
"cwd": "/path/to/my-rc-server/mcp-server"
}
}
}发展
项目结构
mcpGenerator/
├── commands/
│ └── generator/
│ └── generate.toml # /generator:generate slash command
├── src/
│ ├── server.ts # MCP server (3 tools)
│ ├── capability-guide.ts # Capability guide formatter
│ ├── utils.ts # Shared utilities
│ ├── mcp-server/
│ │ ├── mcpServerCodegen.ts # Workflow → TypeScript code generator
│ │ ├── mcpServerTemplates.ts# Shared project scaffolding templates
│ │ ├── workflowComposer.ts # Workflow validation & composition
│ │ ├── workflow-engine.ts # Runtime engine (copied into generated projects)
│ │ ├── types.ts # Workflow type definitions
│ │ ├── ensureChannelInjector.ts # Channel name normalization
│ │ └── parser/
│ │ ├── index.ts # OpenAPI parser (fetch, cache, list, extract)
│ │ ├── schema-mapper.ts # OpenAPI → JSON Schema 7 conversion
│ │ └── types.ts # Parser type definitions
│ ├── rc-app/
│ │ ├── rcAppGenerator.ts # RC App project orchestrator
│ │ ├── rcAppTemplates.ts # RC App code templates
│ │ ├── parser.ts # Apps-Engine capability parser (ts-morph)
│ │ └── types.ts # RC App type definitions
│ └── tests/
│ ├── parser.test.ts # 47 tests — OpenAPI parsing & schema mapping
│ ├── generate.test.ts # 56 tests — Code generation & validation
│ ├── workflow.test.ts # 100 tests — Workflow composition & validation
│ ├── workflow-engine.test.ts # 76 tests — Runtime engine execution
│ ├── rc-app.test.ts # 104 tests — RC App code generation
│ ├── rc-app-parser.test.ts # 30 tests — Apps-Engine interface parsing
│ └── capability-guide.test.ts # 30 tests — Guide formatting
├── package.json
├── tsconfig.json
└── gemini-extension.json # Extension manifest运行测试
npm test建筑
npm run build在开发模式下运行
npm run dev