Roo Code 2.2.0 引入 Model Context Protocol(MCP)支持:外部工具接入、服务器管理与动态创建实战指南
Roo Code 2.2.0 引入 Model Context ProtocolMCP支持外部工具接入、服务器管理与动态创建实战指南【免费下载链接】Roo-CodeRoo Code gives you a whole dev team of AI agents in your code editor.项目地址: https://gitcode.com/GitHub_Trending/ro/Roo-CodeRoo Code 2.2.0 版本正式引入对 Model Context ProtocolMCP的支持使 Roo Code 能够在代码编辑器中通过统一协议调用自定义外部工具与第三方服务如 Web 搜索、GitHub 工具等并提供专门的 MCP 服务器管理面板以及基于用户请求动态创建新 MCP 服务器的能力。阅读本文后你将掌握 MCP 服务器在 Roo Code 中的配置方式、三种传输类型的参数细节、工具调用与资源访问的底层机制以及如何利用“动态创建”能力按需扩展 Agent 的工具集。2.2.0 版本特性总览本版本围绕 MCP 引入了三项核心能力Model Context ProtocolMCP支持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 服务器架构与核心组件MCPModel Context Protocol服务器是 Roo Code 与外部能力之间的桥梁它向 Roo Code 暴露一组标准的工具tools和资源resources使 Agent 能调用数据库、API、自定义脚本等外部能力。从源码结构看MCP 支持主要由src/services/mcp目录下的三个组件承载McpHub.ts核心枢纽负责读取配置、建立/关闭连接、调用工具、读取资源、监听配置文件变更并同步 Webview 状态。McpServerManager.ts单例管理器确保所有 Webview 共享同一组 MCP 服务器实例基于 Promise 锁实现线程安全初始化。UseMcpToolTool.tsuse_mcp_tool工具的实现完成参数校验、工具存在性校验、用户审批与结果回传。McpHub使用modelcontextprotocol/sdk的Client配合三种传输StdioClientTransport、SSEClientTransport、StreamableHTTPClientTransport与服务器通信。每个连接被建模为可辨识联合类型discriminated unionConnectedMcpConnection已建立连接持有client与transportDisconnectedMcpConnection占位连接服务器被禁用或 MCP 全局关闭时client与transport为null。McpHub启动时会通过initializeGlobalMcpServers()与initializeProjectMcpServers()并行初始化全局与项目级服务器waitUntilReady()会等待所有服务器完成初次连接尝试每个服务器自行处理超时因此不会无限阻塞相关测试见 McpHub.spec.ts。配置 MCP 服务器两种配置来源与优先级Roo Code 支持在两级作用域配置 MCP 服务器全局配置存储在mcp_settings.json通过 VS Code 设置目录访问对所有工作区生效除非被项目级配置覆盖。项目级配置位于项目根目录的.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完成会拒绝混合字段例如同时出现command与url、非法type以及缺少必需字段的配置。三种传输类型与完整参数说明MCP 支持三种传输类型。源码中的 Zod schema 将配置约束为三种形态stdio本地子进程、streamable-http现代远程标准与 sse遗留远程协议。STDIO 传输本地服务器用于运行在本机的服务器通过标准输入/输出流通信延迟低、无网络暴露、安全性更高。配置参数如下参数是否必填说明command必填要执行的命令如node、python、npx或绝对路径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-httpurl必填远程 MCP 服务器单一端点的完整 URL如https://your-server.com/mcpheaders可选自定义 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必填必须为sseurl必填SSE 服务器端点 URLheaders可选自定义 HTTP 头若包含AuthorizationMcpHub会自动为 EventSource 启用withCredentials注意对任何 URL 型配置省略type会立即报错——Roo Code 无法仅凭url推断传输类型stdio 配置含command则默认type为stdio可省略。服务器管理面板状态查看与操作通过 Roo Code 面板顶部导航的服务器图标即可打开 MCP 管理视图。界面提供两类核心功能全局开关Enable MCP Servers勾选后 Roo Code 可与 MCP 服务器交互禁用可减少 token 消耗Enable MCP Server Creation勾选后 Roo Code 可通过命令创建新 MCP 服务器禁用可减少 token 消耗。服务器列表与管理操作每个服务器条目展示其名称、来源范围global / project与运行状态绿色圆点表示已连接并提供删除垃圾桶、刷新循环、启停开关等按钮。McpHub会在连接状态变化时通过notifyWebviewOfServerChanges()将服务器列表项目服务器在前、全局服务器在后均按配置文件定义顺序排序推送到 Webview。在视图底部可编辑配置文件Edit Global MCP打开全局mcp_settings.jsonEdit Project MCP打开项目级.roo/mcp.json若文件不存在Roo Code 会自动创建。对应的 Webview 消息处理位于 webviewMessageHandler.ts包括openMcpSettings、openProjectMcpSettings、deleteMcpServer、restartMcpServer、toggleMcpServer、refreshAllMcpServers、updateMcpTimeout等命令分别映射到McpHub的deleteServer、restartConnection、toggleServerDisabled、refreshAllConnections、updateServerTimeout方法。toggleServerDisabled在启用/禁用服务器时会同步更新配置文件并刷新该服务器的工具、资源与资源模板列表。工具调用机制use_mcp_tool 的完整执行链路Roo Code 通过use_mcp_tool工具调用已连接服务器上的能力。其实现位于 UseMcpToolTool.ts执行链路如下参数校验validateParams检查server_name、tool_name是否缺失arguments必须是结构化对象不是数组或字符串否则报“invalid JSON argument”错误并计入连续错误计数。工具存在性校验validateToolExists从McpHub.getAllServers()查找服务器服务器不存在时快速失败并列出可用服务器名服务器无工具时列出空集工具不存在时列出可用工具名工具被disabledTools禁用enabledForPrompt false时只列出已启用工具。名称匹配使用模糊匹配toolNamesMatch将连字符与下划线视为等价以应对模型把连字符改写成下划线的情况。用户审批askApproval校验通过后重置连续错误计数将完整调用参数服务器名、解析后的工具原名、参数字符串发给用户确认。模型歪曲工具名时会使用服务器返回的原始工具名resolvedToolName发起调用。执行与结果回传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/list、resources/list、resources/templates/list预取服务器能力清单对应类型为McpTool、McpResource、McpResourceTemplate。资源读取由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。模糊匹配normalizeMcpToolName与toolNamesMatch将__与--视为等价例如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_tool与access_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),仅供参考
上一篇/下一篇内容由系统自动关联
返回资讯列表 →