Roo Code 2.2.0 引入 Model Context Protocol(MCP)支持:外部工具接入、服务器管理与动态创建实战指南
2026/9/13 2:08:43 网站建设 项目流程

Roo Code 2.2.0 引入 Model Context Protocol(MCP)支持:外部工具接入、服务器管理与动态创建实战指南

【免费下载链接】Roo-CodeRoo Code gives you a whole dev team of AI agents in your code editor.项目地址: https://gitcode.com/GitHub_Trending/ro/Roo-Code

Roo Code 2.2.0 版本正式引入对 Model Context Protocol(MCP)的支持,使 Roo Code 能够在代码编辑器中通过统一协议调用自定义外部工具与第三方服务(如 Web 搜索、GitHub 工具等),并提供专门的 MCP 服务器管理面板以及基于用户请求动态创建新 MCP 服务器的能力。阅读本文后,你将掌握 MCP 服务器在 Roo Code 中的配置方式、三种传输类型的参数细节、工具调用与资源访问的底层机制,以及如何利用“动态创建”能力按需扩展 Agent 的工具集。

2.2.0 版本特性总览

本版本围绕 MCP 引入了三项核心能力:

  • Model Context Protocol(MCP)支持:Roo Code 可通过标准 MCP 协议使用自定义外部工具和服务(例如 Web 搜索、GitHub 工具等),将第三方能力无缝接入 Agent 的工具调用流程。
  • MCP 服务器管理:新增 MCP 服务器管理标签页(通过服务器图标访问),用于配置和管理服务器连接,支持查看连接状态、启停服务器、编辑全局与项目级配置。
  • 动态 MCP 服务器创建:Roo Code 可以基于用户的请求动态创建新的 MCP 服务器,例如当你告诉 Agent“添加一个工具”时,它可以生成并配置一个新的 MCP 服务器。

在界面设置中,这两项能力对应两个独立的开关(详见下文“服务器管理面板”一节):

  • Enable MCP Servers:启用后 Roo Code 才能与 MCP 服务器交互;禁用可减少 token 消耗。
  • Enable MCP Server Creation:启用后 Roo Code 可通过命令动态创建新的 MCP 服务器;禁用同样可减少 token 消耗。

MCP 服务器架构与核心组件

MCP(Model Context Protocol)服务器是 Roo Code 与外部能力之间的桥梁:它向 Roo Code 暴露一组标准的工具(tools)和资源(resources),使 Agent 能调用数据库、API、自定义脚本等外部能力。从源码结构看,MCP 支持主要由src/services/mcp目录下的三个组件承载:

  • McpHub.ts:核心枢纽,负责读取配置、建立/关闭连接、调用工具、读取资源、监听配置文件变更并同步 Webview 状态。
  • McpServerManager.ts:单例管理器,确保所有 Webview 共享同一组 MCP 服务器实例(基于 Promise 锁实现线程安全初始化)。
  • UseMcpToolTool.ts:use_mcp_tool工具的实现,完成参数校验、工具存在性校验、用户审批与结果回传。

McpHub使用@modelcontextprotocol/sdkClient配合三种传输(StdioClientTransportSSEClientTransportStreamableHTTPClientTransport)与服务器通信。每个连接被建模为可辨识联合类型(discriminated union):

  • ConnectedMcpConnection:已建立连接,持有clienttransport
  • DisconnectedMcpConnection:占位连接(服务器被禁用或 MCP 全局关闭时),clienttransportnull

McpHub启动时会通过initializeGlobalMcpServers()initializeProjectMcpServers()并行初始化全局与项目级服务器,waitUntilReady()会等待所有服务器完成初次连接尝试(每个服务器自行处理超时,因此不会无限阻塞),相关测试见 McpHub.spec.ts。

配置 MCP 服务器:两种配置来源与优先级

Roo Code 支持在两级作用域配置 MCP 服务器:

  1. 全局配置:存储在mcp_settings.json(通过 VS Code 设置目录访问),对所有工作区生效,除非被项目级配置覆盖。
  2. 项目级配置:位于项目根目录的.roo/mcp.json,可实现项目专属服务器,并通过版本控制与团队成员共享。Roo Code 启动时若检测到该文件会自动加载。

优先级规则:若同一服务器名同时存在于全局与项目配置中,项目级配置优先McpHub.getServers()在去重时即按此规则处理——项目服务器覆盖全局服务器;findConnection()与 Webview 通知逻辑也同样优先返回项目连接。配置文件变更时,McpHub通过chokidar文件监听器与 500ms 防抖(debounceConfigChange)自动更新连接;若文件被删除,项目级服务器会被全部清理。

两种配置文件均使用统一 JSON 格式,核心结构为mcpServers对象:

{ "mcpServers": { "server1": { "command": "python", "args": ["/path/to/server.py"], "env": { "API_KEY": "your_api_key" }, "alwaysAllow": ["tool1", "tool2"], "disabled": false } } }

配置校验由McpHub.validateServerConfig()结合 Zod 模式(ServerConfigSchema)完成,会拒绝混合字段(例如同时出现commandurl)、非法type以及缺少必需字段的配置。

三种传输类型与完整参数说明

MCP 支持三种传输类型。源码中的 Zod schema 将配置约束为三种形态:stdio(本地子进程)、streamable-http(现代远程标准)与 sse(遗留远程协议)。

STDIO 传输(本地服务器)

用于运行在本机的服务器,通过标准输入/输出流通信,延迟低、无网络暴露、安全性更高。配置参数如下:

参数是否必填说明
command必填要执行的命令,如nodepythonnpx或绝对路径
args可选传给命令的参数数组,支持${env:VARIABLE_NAME}引用系统环境变量
cwd可选服务器进程的工作目录;省略时默认取第一个工作区文件夹路径或主进程工作目录
env可选设置给服务器进程的环境变量对象
alwaysAllow可选自动审批的该服务器工具名数组
disabled可选设为true可禁用该服务器配置
timeout可选每服务器超时(秒,1–3600),默认 60 秒
watchPaths可选要监听的路径数组,任一文件变化时服务器自动重启
disabledTools可选禁用工具名数组,这些工具即使服务器提供也不可用

完整示例:

{ "mcpServers": { "local-server": { "command": "node", "args": ["server.js"], "cwd": "/path/to/project/root", "env": { "API_KEY": "your_api_key" }, "alwaysAllow": ["tool1", "tool2"], "disabled": false } } }

在 Windows 上,McpHub会自动将命令包装为cmd.exe /c <command>以兼容 npx.ps1 等 PowerShell 脚本型可执行文件(node 版本管理器 fnm、nvm-windows、volta 常用此方式实现)。stdio 进程的 stderr 流会被监听:INFO级别日志作为普通信息输出,其余内容作为错误记录到服务器的errorHistory并同步到界面。

在参数中引用系统环境变量

args数组支持${env:VARIABLE_NAME}语法,可在不硬编码敏感凭据的情况下传入密钥。例如用 Docker 启动 GitHub MCP 服务器:

{ "mcpServers": { "github": { "command": "docker", "args": [ "run", "-i", "--rm", "-e", "GITHUB_PERSONAL_ACCESS_TOKEN=${env:GITHUB_PERSONAL_ACCESS_TOKEN}", "ghcr.io/github/github-mcp-server" ], "alwaysAllow": ["get_pull_request"] } } }

${env:GITHUB_PERSONAL_ACCESS_TOKEN}会被替换为系统环境变量GITHUB_PERSONAL_ACCESS_TOKEN的实际值。此语法特别适用于:向 Docker 容器传递环境变量、避免在配置文件中保存明文凭据、以及在不同环境间复用同一份配置。注意:变量必须在系统环境中真实存在(可通过操作系统设置或.bashrc.zshrc、Windows 环境变量配置)。

Streamable HTTP 传输(现代远程标准)

用于通过 HTTP/HTTPS 访问远程服务器的现代标准,以 HTTP POST/GET 与单一 MCP 端点通信,可选 SSE 流式响应,支持多客户端连接与集中部署。配置参数:

参数是否必填说明
type必填必须为"streamable-http"
url必填远程 MCP 服务器单一端点的完整 URL(如https://your-server.com/mcp
headers可选自定义 HTTP 头对象(如认证令牌)
alwaysAllow/disabled/timeout/disabledTools可选语义同 STDIO

示例:

{ "mcpServers": { "modern-remote-server": { "type": "streamable-http", "url": "https://your-modern-server.com/api/mcp-endpoint", "headers": { "X-API-Key": "your-secure-api-key" }, "alwaysAllow": ["newToolA", "newToolB"], "disabled": false } } }

SSE 传输(遗留协议)

用于访问旧式远程服务器。新实现推荐使用 Streamable HTTP。SSE 通过 Server-Sent Events 通信,通常需要独立的客户端到服务端、服务端到客户端端点。配置参数:

参数是否必填说明
type必填必须为"sse"
url必填SSE 服务器端点 URL
headers可选自定义 HTTP 头;若包含AuthorizationMcpHub会自动为 EventSource 启用withCredentials

注意:对任何 URL 型配置,省略type会立即报错——Roo Code 无法仅凭url推断传输类型;stdio 配置(含command)则默认type"stdio",可省略。

服务器管理面板:状态查看与操作

通过 Roo Code 面板顶部导航的服务器图标即可打开 MCP 管理视图。界面提供两类核心功能:

  1. 全局开关

    • Enable MCP Servers:勾选后 Roo Code 可与 MCP 服务器交互,禁用可减少 token 消耗;
    • Enable MCP Server Creation:勾选后 Roo Code 可通过命令创建新 MCP 服务器,禁用可减少 token 消耗。
  2. 服务器列表与管理操作:每个服务器条目展示其名称、来源范围(global / project)与运行状态(绿色圆点表示已连接),并提供删除(垃圾桶)、刷新(循环)、启停开关等按钮。McpHub会在连接状态变化时通过notifyWebviewOfServerChanges()将服务器列表(项目服务器在前、全局服务器在后,均按配置文件定义顺序排序)推送到 Webview。

在视图底部可编辑配置文件:

  • Edit Global MCP:打开全局mcp_settings.json
  • Edit Project MCP:打开项目级.roo/mcp.json;若文件不存在,Roo Code 会自动创建。

对应的 Webview 消息处理位于 webviewMessageHandler.ts,包括openMcpSettingsopenProjectMcpSettingsdeleteMcpServerrestartMcpServertoggleMcpServerrefreshAllMcpServersupdateMcpTimeout等命令,分别映射到McpHubdeleteServerrestartConnectiontoggleServerDisabledrefreshAllConnectionsupdateServerTimeout方法。toggleServerDisabled在启用/禁用服务器时会同步更新配置文件,并刷新该服务器的工具、资源与资源模板列表。

工具调用机制:use_mcp_tool 的完整执行链路

Roo Code 通过use_mcp_tool工具调用已连接服务器上的能力。其实现位于 UseMcpToolTool.ts,执行链路如下:

  1. 参数校验validateParams):检查server_nametool_name是否缺失;arguments必须是结构化对象(不是数组或字符串),否则报“invalid JSON argument”错误并计入连续错误计数。
  2. 工具存在性校验validateToolExists):从McpHub.getAllServers()查找服务器;服务器不存在时快速失败并列出可用服务器名;服务器无工具时列出空集;工具不存在时列出可用工具名;工具被disabledTools禁用(enabledForPrompt === false)时只列出已启用工具。名称匹配使用模糊匹配(toolNamesMatch),将连字符与下划线视为等价,以应对模型把连字符改写成下划线的情况。
  3. 用户审批askApproval):校验通过后重置连续错误计数,将完整调用参数(服务器名、解析后的工具原名、参数字符串)发给用户确认。模型歪曲工具名时,会使用服务器返回的原始工具名(resolvedToolName)发起调用。
  4. 执行与结果回传executeToolAndProcessResult):向 Webview 发送started状态,调用McpHub.callTool()(超时时间取自服务器配置的timeout,默认 60 秒),随后解析 MCP 返回的content数组——text文本直接展示、resource资源以 JSON 摘要展示、image图片按data:mimeType;base64格式提取;最终以completed/error状态与工具结果回传任务。

McpHub.callTool()通过tools/call方法调用远端工具,并处理两类边界:连接不存在时给出“请确认使用 Connected MCP Servers 中的服务器”的提示;服务器被禁用时抛出明确错误。

资源访问机制:access_mcp_resource

除工具外,MCP 服务器还可暴露资源(数据源,如文件、API 响应或系统信息),作为上下文供 Agent 使用。McpHub在连接建立后通过tools/listresources/listresources/templates/list预取服务器能力清单,对应类型为McpToolMcpResourceMcpResourceTemplate。资源读取由McpHub.readResource()通过resources/read方法完成。

原生工具access_mcp_resource(定义见 access_mcp_resource.ts)要求两个参数:

  • server_name:提供资源的 MCP 服务器名称(必填);
  • uri:标识具体资源的 URI(必填)。

官方示例:

{ "server_name": "weather-server", "uri": "weather://san-francisco/current" }
{ "server_name": "filesystem-server", "uri": "file:///path/to/data.json" }

动态 MCP 服务器创建

2.2.0 的第三项核心能力是:Roo Code 可根据用户请求动态创建新的 MCP 服务器。启用“Enable MCP Server Creation”后,用户可以直接向 Agent 提出“添加一个工具 / 创建一个新服务器”之类的需求,由 Roo Code 生成并配置新的 MCP 服务器,而不必手动编辑配置文件。这一能力将“扩展 Agent 工具集”从手工配置转变为自然语言驱动的自动化流程。若不需要该能力,关闭此开关即可减少 token 消耗。

工具命名的底层约定

为了让 MCP 工具名符合各家 API 对函数名的限制,工具名统一由 mcp-name.ts 中的工具函数生成与解析:

  • 命名格式mcp--{server}--{tool},例如mcp--weather--get_forecast;前缀固定为mcp,分隔符为--(双连字符,所有供应商均允许,且不会与工具名中的下划线冲突)。超过 64 字符(Gemini 的函数名上限)时会截断。
  • 净化规则sanitizeMcpName):空格替换为下划线,仅保留字母数字、下划线与连字符,双连字符折叠为单连字符,必须以字母或下划线开头,空名回退为_unnamed
  • 模糊匹配normalizeMcpToolNametoolNamesMatch__--视为等价(例如mcp__server__tool可匹配mcp--server--tool),以应对 Claude 等模型在原生工具调用中把连字符改写为下划线的情况。

getMcpServerTools()(见 mcp_server.ts)会在系统提示词构建阶段为所有已启用且未被禁用的工具动态生成原生工具定义:跳过enabledForPrompt === false的工具、按名称去重(同名时项目服务器优先)、将工具的 inputSchema 规范化为 JSON Schema 2020-12 兼容格式(类型数组转anyOf)、缺少 schema 时回退为最小可用对象模式。

小结

Roo Code 2.2.0 以 MCP 为支点,将外部工具接入从“一次性配置”升级为“可管理、可动态扩展”的体系:通过mcp_settings.json.roo/mcp.json双级配置管理服务器;通过 STDIO / Streamable HTTP / SSE 三种传输适配本地与远程场景;通过use_mcp_toolaccess_mcp_resource提供统一的工具与资源访问入口;通过管理面板和动态创建能力让服务器生命周期管理变得可视化、自然化。无论你是想接入 GitHub 工具、Web 搜索,还是团队内部自定义服务,都可以基于本文的配置参数与源码线索快速落地。

进一步阅读:使用 MCP 的完整指南、MCP 传输类型详解、推荐的 MCP 服务器。

【免费下载链接】Roo-CodeRoo Code gives you a whole dev team of AI agents in your code editor.项目地址: https://gitcode.com/GitHub_Trending/ro/Roo-Code

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询