Rocket.Chat MCP工具生成器

该服务通过自然语言请求生成Rocket.Chat MCP工具,并通过本地MCP服务器提供服务,适用于自动化工作流生成和执行。

  • by CodeMatrix1
  • JavaScript
  • 本地部署
  • 更新于
在 GitHub 查看 CodeMatrix1/MCP-generator

使用说明

RC MCP合成器

此仓库生成Rocket。根据自然语言能力请求聊天MCP工具,并通过本地MCP服务器为其提供服务。

建筑

该项目围绕两个运行时角色进行组织:

  • Control MCP
    • 处理规划、工作流起草、端点缩小、最终选择和生成
  • Runtime MCP
    • 仅加载生成的工具,并对Rocket执行已接受的工作流。聊天

从高层次上讲,该系统分为三个阶段:

  1. Selection
    • 解释请求并构建面向工作流的计划
  2. Generation
    • 根据已接受的计划生成最小的MCP工具集和工作流模块
  3. Serve
    • 通过本地运行时服务器执行生成的运行时工件

选择管道

选择是精心策划的 src/selection/service.js 使用 @langchain/langgraph.

该图按以下顺序运行:

  1. classify_tags
    • 将查询分类为Rocket。聊天域名和标签
  2. retrieve_candidates
    • 缩小火箭。将API表面聊天到候选端点池
  3. draft_workflow
    • 将自由形式的查询转换为仅提供抽象服务的工作流
  4. select_final_endpoints
    • 从候选池中选择最终端点集
  5. map_endpoints
    • 将工作流步骤映射到端点候选和面向运行时的步骤元数据
  6. refine_workflow
    • 改进映射后的工作流结构和步骤组合
  7. validate_selection
    • 验证工作流和端点映射是否可用
  8. finalize_plan
    • 返回最终的结构化规划工件

这种基于图的设计保持了中间状态的明确性,因此系统可以保留工件,如解析域、候选端点、草稿工作流、精炼工作流、映射步骤和验证输出。

工作流模型

工作流起草从开始 src/workflows/WorkflowSelect.js.

工作流程草案有意抽象。它包含:

  • key
  • label
  • description
  • inputSchema
  • 有序的 steps

在这个阶段,工作流从语义上描述了应该发生什么,而不是哪个确切的Rocket。应调用聊天端点。这使得工作流可以作为主要的规划工件,用于审查、细化、再生和端点映射。

起草是通过本地Gemini桥进行LLM驱动的,但结果会被解析为结构化的JSON,并在后续阶段使用之前进行验证。

工作流优化发生在 src/workflows/WorkflowRefineNode.js此阶段改进了端点映射后的工作流结构,并可以在需要时形成更丰富的步骤类型,如运行时步骤、LLM步骤、计算步骤、条件步骤和循环步骤。

生成管道

发电协调 src/generation/service.js.

接受选择后,生成层:

  1. 收集最终选定的端点
  2. 将工作流步骤解析为可执行端点候选
  3. 清除上一个工具缓存
  4. 为所选火箭生成MCP工具模块。聊天操作
  5. 将可执行工作流模块写入 src/tool_cache/workflows
  6. 保存工件,例如 last_selection.json, confirmed_workflow.json,以及生成的清单

这意味着计划输出被编译成具体的运行时工件,而不仅仅是选择元数据。

运行时执行

运行时执行由以下人员处理 src/MCP_Runtime_Server.js.

当运行时服务器启动时,它:

  1. 扫描生成的工具缓存
  2. 动态导入每个生成的工具模块
  3. 在内存中注册工具元数据和处理程序
  4. 公开轻量级端点,例如 /tools, /health,以及 /call/:key

在执行过程中,运行时服务器不会重做计划。它使用早期阶段生成的工作流和工具绑定,并将调用直接分派给生成的工具函数及其解析的参数和上下文。

主要图书馆

  • @langchain/langgraph
    • 基于图的选择管道编排
  • ajv
    • 用于工作流草稿和可执行工作流结构的JSON模式验证
  • express
    • 用于生成MCP工具执行的本地运行时服务器
  • handlebars
    • 从模板生成工作流/模块代码
  • commander
    • CLI入口点,如 mcp-generate 以及运行时调用
  • dotenv
    • 运行时配置加载
  • @dqbd/tiktoken
    • 用于即时大小会计的令牌计数

模式

  • /mcp:generate
    • 规划+发电
    • 这是唯一应该使用的模式 --from-last-selection
    • --from-last-selection 这里的意思是“重用刚刚保存的生成端点集来启动运行时服务器”
  • /mcp:serve
    • 实景模式
    • 应仅使用控制/运行时服务器
    • 不应该谈论 --from-last-selection 在正常请求期间

身份验证设置

添加你的火箭。聊天验证值 .env.

支持的变量:

BASE_URL="http://localhost:3000"
ROCKETCHAT_BASE_URL=""

ROCKETCHAT_AUTH_TOKEN=""
ROCKETCHAT_USER_ID=""

AUTH_TOKEN=""
USER_ID=""

笔记:

  • ROCKETCHAT_BASE_URL 覆盖 BASE_URL 如果两者都已设置。
  • ROCKETCHAT_AUTH_TOKEN 或 AUTH_TOKEN 将按以下方式发送 X-Auth-Token.
  • ROCKETCHAT_USER_ID 或 USER_ID 将按以下方式发送 X-User-Id.

例子:

ROCKETCHAT_BASE_URL="http://localhost:3000"
ROCKETCHAT_AUTH_TOKEN="your_auth_token_here"
ROCKETCHAT_USER_ID="your_user_id_here"
MCP_SERVER_PORT="3001"
MCP_SERVER_HOST="127.0.0.1"

更新后 .env,重新启动MCP服务器。

现场认证

如果期间缺少身份验证 /mcp:execute,系统可以要求:

  • 基地址
  • 授权令牌
  • 用户ID

并在运行时通过以下方式存储它们:

node src/cli/mcp-call.js rc.server.overview '{"baseUrl":"http://localhost:3000","authToken":"...","userId":"..."}'

要清除已保存的运行时身份验证,请执行以下操作:

rm -f .mcp-auth.json