VSCode 官方 Agent 模式上线还支持 MCP:编辑器正式从"工具"变"同事"
【免费下载链接】vscodeVisual Studio Code项目地址: https://gitcode.com/GitHub_Trending/vscode6/vscode
2025 年 4 月,Visual Studio Code 迎来一次被社区称为"王炸"的更新:Agent 模式正式登陆 Stable 版本,配合此前已逐步铺开的 MCP(Model Context Protocol)支持,微软终于把"编辑器"这个最基础的开发者工具,推向了"能自己动手干活的同事"这条赛道。过去两年,以 Cursor 为代表的 AI 原生编辑器把"代理式编程"(Agentic Coding)做成了标配,而 VS Code 这艘航母的转身,意味着这场竞争正式进入正面战场。本文结合 vscode 仓库源码,拆解 Agent 模式的内置机制、MCP 协议对插件生态的改写,以及它和 Cursor 代际差距的真实坐标。
Agent 模式怎么开、能替你做哪些活
Agent 模式不是一个新的独立产品,而是 GitHub Copilot Chat 中一套"意图路由 + 工具调用循环"的能力升级。开启方式很直接:在 Chat 视图的模式选择器中切换到 Agent 模式即可;如果你在旧版本中,需要先设置chat.agent.enabled。
这个开关在仓库中有着清晰的定义。在 chat.shared.contribution.ts 中,配置项ChatConfiguration.AgentEnabled被定义为:
[ChatConfiguration.AgentEnabled]: { type: 'boolean', description: "When enabled, agent mode can be activated from chat and tools in agentic contexts with side effects can be used.", default: true, order: 1, policy: { name: 'ChatAgentMode', category: PolicyCategory.InteractiveSession, minimumVersion: '1.99', ... } }三个信息很关键:默认值已经是true(意味着新版开箱即用);它支持企业策略下发(ChatAgentMode),管理员可以全局关闭;对应版本门槛是 1.99,即该配置与 Agent 能力几乎同步引入。
那么"Agent 模式"和普通聊天到底差在哪?源码揭示了机制核心:Agent 模式下,Copilot 获得了一个可以循环调用工具的"执行环"。在 chatParticipants.ts 中,默认参与者的意图判定逻辑写得很直白:
const intentGetter = (request: vscode.ChatRequest) => { if (this.configurationService.getExperimentBasedConfig(ConfigKey.TeamInternal.AskAgent, this.experimentationService) && request.model.capabilities.supportsToolCalling && this.configurationService.getNonExtensionConfig('chat.agent.enabled')) { return Intent.AskAgent; } return Intent.Unknown; };也就是说,只有当模型具备工具调用(tool calling)能力、实验开关和chat.agent.enabled三者同时满足时,请求才会被路由到Intent.AskAgent这条"代理意图"链路,而不是走普通的问答意图。这是一次刻意的能力隔离:没有工具调用能力的模型、被企业策略关闭 Agent 的环境,都不会误入代理模式。
一旦进入 Agent 意图,背后的执行主体是 agentIntent.ts,它组装AgentPrompt,驱动模型在多轮对话中不断决策"下一步该调用哪个工具"。Agent 能替开发者干的活,本质上就是仓库里那批内置工具的集合:读写文件、执行终端命令、搜索工作区、运行测试、集成浏览器抓取网页、通过 applyPatch 应用代码改动等。值得注意的是,官方在 tools.md 中明确了内置工具的边界:"与 VS Code 核心功能或核心 search/edit/terminal agent loop 相关的工具才应该内置;能用普通终端命令完成的事,就不要新造一个工具。"这条设计纪律保证了 Agent 的工具面是克制的、可组合的,而不是无限膨胀。
有副作用的能力,都过一道"确认闸"
Agent 之所以敢被称为"同事",前提是它不会被轻易放出去乱改你的仓库。仓库里对危险工具做了硬性约束。同样是 tools.md 中写明的规范:
If the tool has a potentially dangerous side-effect (e.g. the terminal tool), it MUST ask for the user's confirmation before running.
终端类工具必须通过PreparedToolInvocation.confirmationMessages请求用户确认,确认消息需给出足够的上下文,说明工具将执行什么、风险是什么。这套"工具确认"机制是 Agent 模式下所有有副作用操作的默认闸门,它把"信任边界"交还给了开发者。
除此之外,Agent 的网络行为也进入了可治理状态。在 chat.shared.contribution.ts 中可以看到chat.agent.networkFilter与域名白/黑名单(AllowedNetworkDomains/DeniedNetworkDomains)的配置定义——开启后,Agent 的 fetch 工具与集成浏览器的网络访问会被限制在允许域名内,甚至要求重启 VS Code 才完全生效。对于一个即将替开发者执行命令、访问网络的代理,这种"默认保守、逐项放行"的治理思路,正是企业级采纳的前提。
MCP 协议:把插件生态从"功能堆叠"升级为"能力接入"
与 Agent 模式同期引爆社区的另一半,是 VS Code 对 MCP(Model Context Protocol)的深度支持。MCP 的意义在于:它不再要求每个 AI 能力都以"一个插件 + 一段私有 API"的形式存在,而是定义了一套统一的"模型工具接入协议"——任何实现了 MCP 的服务(数据库、CI、监控、浏览器自动化、企业系统……)都可以作为标准工具暴露给模型,插件生态从"功能堆叠"变成了"能力接入"。
这一点在仓库里体现得极其充分。VS Code 的 MCP 不是实验性附件,而是一整套带企业治理的完整子系统,相关配置集中在 chat.shared.contribution.ts:
chat.mcp.access:控制对已安装 MCP 服务器的访问级别,支持none(完全禁止)、registry(仅允许注册表中的服务器)、any(允许任意已安装服务器);chat.mcp.allowedServers/chat.mcp.deniedServers:企业级白名单/黑名单,可按服务器名、远程 URL 通配符(如https://*.example.com/*)或本地命令精确匹配,且黑名单永远优先于白名单;chat.mcp.autostart:控制提交聊天消息时是否自动拉起 MCP 服务器(never/onlyNew/newAndOutdated);chat.mcp.serverSampling:精细到"某个服务器在聊天内/聊天外是否允许发起采样请求、能访问哪些模型",堵住了"服务器借工具调用反向调模型"的越权通道;mcp.gallery.serviceUrl与chat.mcp.gallery.enabled:MCP 服务器市场(Gallery)的存在,意味着 MCP 生态将获得类似扩展市场的分发与发现机制。
这套配置设计的潜台词是:微软把 MCP 当作与扩展市场同等重要的"平台级基础设施"来运营,而不是某个插件顺手接的协议。企业策略、采样授权、自动拉起、市场分发,每一层都对应着规模化使用才会遇到的实际问题。
从实现侧看,MCP 工具真正进入了 Copilot 的执行闭环。mcpToolCallingLoop.tsx 定义了一个专门的McpToolCallingLoop:当模型需要从多个 MCP 服务器挑选工具时,它会先调用一个轻量模型(copilot-utility-small)渲染提示、做工具筛选,再进入主模型的完整工具调用循环。也就是说,MCP 工具不是"挂在聊天旁边的摆设",而是和内置工具一样,参与"选择工具 → 调用 → 观察结果 → 再决策"的完整代理循环。Agent 模式 + MCP 的组合由此形成闭环:Agent 负责"主动干活",MCP 负责"接入干活的工具"。
对插件开发者而言,这意味着一套全新的写法。Copilot 扩展本身在package.json的contributes.languageModelTools中声明内置工具,而第三方扩展同样可以贡献语言模型工具,或直接接入现成的 MCP 服务器。工具的modelDescription写得越精确,模型越知道何时该用它;输入用 JSON Schema 描述,路径一律用绝对路径——这些在 tools.md 中被当成一等公民规范。MCP 让"一个服务器、四处复用"成为可能:你不再需要为每个编辑器重写一遍 GitHub 工具、数据库工具,写一次 MCP 服务器,Cursor、Claude Desktop、VS Code 都能接。
与 Cursor 的代际差距:核心能力追平,胜负手在生态治理
必须承认,Cursor 在过去两年抢跑了一代:Tab 补全、多文件编辑、Agent 任务面板、与具体代码库深度绑定的上下文工程,这些体验 Cursor 早已打磨成熟。VS Code 的 Agent 模式上线,在"能否自主执行多步任务"这个核心能力维度上,双方已经站到同一条起跑线——都具备多文件修改、终端执行、工具循环、人工确认闸门。而微软真正的差异化筹码,是 VS Code 自身沉淀多年的三层底牌:
第一层是治理能力。从上面看到的chat.agent.enabled企业策略、MCP 白名单/黑名单、网络域名过滤、采样授权,到基于 Chromium 的沙箱与策略分类(PolicyCategory.InteractiveSession),整套体系是 Cursor 这类创业公司短期内难以复制的——大型企业不会让一个代理随随便便在 CI 上跑rm -rf,治理能力直接决定了 Agent 能否进入企业生产环境。
第二层是生态存量。VS Code 拥有数万个扩展与近乎全量的语言/框架支持,MCP 协议的出现给了这些存量以新的接入方式:老插件不必重写,只需要为 AI 暴露"工具化"接口。相比之下,Cursor 的插件生态仍在从零积累。
第三层是开放协议对"锁定"的破解。Cursor 的护城河部分来自闭源体验,而 VS Code 这边,MCP 是开放标准,Agent 能力构建在 VSCode API 之上——这意味着社区可以围绕它自由生长:任何团队都能写自己的 MCP 服务器、贡献自己的语言模型工具,而不必等待官方排期。
但差距也依然真实存在:Cursor 在"Tab 级补全 + 代理任务"的端到端体验、上下文召回速度和交互流畅度上仍有先发优势;VS Code 的 Agent 目前深度绑定 GitHub Copilot 订阅与微软模型生态,BYOK(自带模型)与第三方模型的接入深度仍在演进。结论很清晰:代际差距在缩小,但决定胜负的已不再是"谁能写代码",而是"谁能让代理被信任、被治理、被规模化使用"。
三步上手实测记录
基于仓库源码,一条完整的 Agent + MCP 上手路径如下:
第一步:确认开关并进入 Agent 模式。确认你的 Copilot 模型支持工具调用,且chat.agent.enabled未被人为关闭(默认即为true)。在 Chat 视图的模式选择器中选择 Agent 模式,此时默认参与者会把请求路由到Intent.AskAgent。随后用自然语言下达多步任务,例如"在这个仓库里找到所有硬编码的连接字符串,统一提取到配置文件并更新所有引用"——Agent 会自行规划:搜索 → 读取 → 编辑 → 调用测试验证。
第二步:接入你的第一个 MCP 服务器。在命令面板执行MCP: List Servers,按提示添加本地(stdio 命令)或远程(HTTP URL)服务器。配置会写入工作区根的.mcp.json或.vscode/mcp.json(仓库中mcpWorkspaceRootConfig正是控制这一行为)。添加后回到 Chat 视图,让 Agent 使用该服务器的工具——例如接一个数据库 MCP 服务器后,直接让它"查一下 orders 表里最近一周的订单量并按日聚合",Agent 会在循环中自动挑选并调用该 MCP 工具。
第三步:配置确认与治理,形成"可用且可控"的工作流。高危工具第一次触发时,VS Code 会弹出确认提示(对应源码中PreparedToolInvocation.confirmationMessages机制),这是熟悉 Agent 行为边界的最佳观察点。随后按需微调:团队环境可设置chat.mcp.access收紧到registry或none;需要固定服务时启用chat.mcp.autostart为onlyNew;若 Agent 需要访问外部网站,再考虑开启chat.agent.networkFilter并配置允许域名。至此,一个"既能自主干活、又在管控边界内"的 AI 同事就位了。
当编辑器开始主动读文件、跑命令、调外部系统,并在每一步危险操作前回头征求你的同意,它就不再只是一把趁手的工具——它成了坐在你工位旁边的同事。而 VS Code 这一轮的选择,是把"同事"的准入标准、工作协议和治理规则,全部沉淀进了开源代码与开放协议里。对于开发者社区来说,这或许比 Agent 本身更值得期待:一场关于"AI 同事如何被信任"的工程实践,正在这个仓库里公开上演。
【免费下载链接】vscodeVisual Studio Code项目地址: https://gitcode.com/GitHub_Trending/vscode6/vscode
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考