VS Code 1.99 引入 Model Context Protocol 支持
Visual Studio Code( VS Code
)在其 1.99 版本中正式引入了对模型上下文协议(Model Context Protocol, MCP
)的支持。 MCP 是一个开放标准,旨在提供一个统一接口,让 AI 模型能够与外部工具和服务进行交互。
MCP
的引入主要是为了增强 GitHub Copilot 的 Agent 模式。通过这个协议,开发者可以配置 MCP 服务器,将自定义的工具和服务接入到 VS Code
的 AI 工作流中,极大地扩展了 AI 助手的潜力,使其能够执行更广泛、更动态的任务,例如查询实时数据、操作本地文件或调用特定的 API
。
前提条件:启用 Agent 模式与环境依赖
VS Code
1.99 将 MCP
集成到了 GitHub Copilot 的 Agent 模式中。因此,要使用 MCP
功能,必须首先启用 Agent 模式。这可以通过 VS Code
的 Chat 视图顶部的下拉菜单来完成。
另外一个需要注意的地方,也是 MCP
目前面临的一个普遍反馈,就是运行 MCP
服务器可能需要预先安装 Node.js
、 Docker
或其他依赖项。这是因为许多 MCP
服务器实现(尤其是用于执行脚本或容器化工具的)依赖这些外部环境。虽然这增加了初始设置的复杂度,但它也提供了连接各种强大自定义工具的灵活性。
配置 MCP 服务器
在 VS Code
中,MCP
的核心配置位于工作区(Workspace)的 .vscode/mcp.json
文件内。通过这个 JSON
文件,你可以定义一个或多个 MCP
服务器,Agent 模式将使用这些服务器提供的工具。
步骤 1:创建 MCP 配置文件
- 打开你的项目文件夹于
VS Code
中。 - 在项目根目录下,找到或创建一个名为
.vscode
的文件夹。 - 在
.vscode
文件夹内,创建一个名为mcp.json
的文件。 - 将以下基本配置模板添加到
mcp.json
文件中:{ "servers": { "example-server": { "type": "stdio", "command": "node", "args": ["path/to/your/script.js"] } } }
在这个配置中:
servers
: 一个对象,用于定义所有的MCP
服务器,每个键是一个唯一的服务器名称(如 "example-server")。type
: 指定服务器的通信类型。常见类型包括:stdio
: 服务器通过标准输入/输出(Standard Input/Output)与VS Code
通信,通常用于运行本地脚本或可执行文件。sse
: 服务器使用服务器推送事件(Server-Sent Events)进行通信,常用于连接到远程服务或需要持续推送更新的服务。
command
和args
: 定义了启动该服务器所需的命令及其参数。在这个例子中,它会使用Node.js
来运行一个指定的JavaScript
文件。
步骤 2:添加具体服务器配置
你可以手动编辑 mcp.json
文件来添加服务器,也可以使用 VS Code
命令面板提供的便捷方式:
- 打开命令面板(快捷键
Ctrl+Shift+P
或Cmd+Shift+P
)。 - 输入并运行
MCP: Add Server
命令。 - 选择
Workspace Settings
,VS Code
会自动打开或创建.vscode/mcp.json
文件,并可能提供智能提示(IntelliSense)来帮助你完成配置。
以下是一个配置名为 fetch
的服务器示例,该服务器使用 uvx
命令来运行 mcp-server-fetch
工具,目的是获取指定 URL 的网页内容:
{
"servers": {
"fetch": {
"type": "stdio",
"command": "uvx",
"args": ["mcp-server-fetch"]
}
}
}
步骤 3:安全处理敏感信息
在配置文件中硬编码 API
密钥或其他敏感凭证是不安全的。MCP
支持使用输入变量(Input Variables)来处理这种情况。当 VS Code
启动需要这些变量的服务器时,会提示用户输入。
{
"inputs": [
{
"type": "promptString",
"id": "api-key",
"description": "Your API Key",
"password": true
}
],
"servers": {
"perplexity": {
"type": "stdio",
"command": "docker",
"args": ["run", "-i", "--rm", "-e", "PERPLEXITY_API_KEY", "mcp/perplexity-ask"],
"env": {
"PERPLEXITY_API_KEY": "${input:api-key}"
}
}
}
}
在这个例子中:
inputs
数组定义了需要用户输入的变量。这里定义了一个ID
为api-key
的密码类型输入。password: true
确保输入时内容被隐藏。- 在服务器配置的
env
部分,${input:api-key}
语法引用了之前定义的输入变量。VS Code
会负责安全地存储和传递这个值给服务器进程的环境变量PERPLEXITY_API_KEY
。
使用和管理 MCP 工具
启用 Agent 模式并发现工具
当你正确配置了 .vscode/mcp.json
文件并保存后,切换到 GitHub Copilot
的 Agent 模式(通过 Chat 视图顶部的下拉菜单选择 Agent
)。Agent 模式会自动检测并加载配置文件中定义的服务器及其提供的工具。
调用工具
一旦服务器和工具被 Agent 模式识别,你就可以在 Chat 视图中通过自然语言或特定指令来调用它们。例如:
- 如果你配置了上面示例中的
fetch
服务器,可以输入:@workspace /fetch https://bytenote.net
来获取该网页的内容。 - 如果你配置了一个能查询时间的
MCP
服务器,可以尝试问:@workspace What's the time in Saigon?
Agent 会解析你的请求,判断是否需要调用外部工具,并与相应的 MCP
服务器交互以获取结果。
管理服务器状态
有时你需要查看已配置服务器的状态或进行管理(启动、停止、查看日志等)。
- 打开命令面板(
Ctrl+Shift+P
或Cmd+Shift+P
)。 - 输入并运行
MCP: List Servers
命令。 - 这将打开一个视图,列出所有在
mcp.json
中定义的服务器及其当前状态(例如Started
,Stopped
)。 - 你可以点击列表中的服务器来执行启动、停止或重启等操作,并查看其输出日志,这对于调试服务器配置非常有用。
高级配置示例
配置多个服务器
mcp.json
文件可以定义多个服务器,每个服务器提供不同的功能。
{
"inputs": [
{
"type": "promptString",
"id": "perplexity-key",
"description": "Perplexity API Key",
"password": true
}
],
"servers": {
"Perplexity": {
"type": "stdio",
"command": "docker",
"args": ["run", "-i", "--rm", "-e", "PERPLEXITY_API_KEY", "mcp/perplexity-ask"],
"env": {
"PERPLEXITY_API_KEY": "${input:perplexity-key}"
}
},
"Fetch": {
"type": "stdio",
"command": "uvx",
"args": ["mcp-server-fetch"]
},
"RemoteServer": {
"type": "sse",
"url": "http://api.example.com/sse",
"headers": {
"VERSION": "1.2"
}
}
}
}
这个配置定义了三个服务器:
Perplexity
: 使用Docker
运行一个工具,可能用于执行复杂的搜索或问答,需要API
密钥。Fetch
: 使用uvx
运行一个本地工具,用于抓取网页内容。RemoteServer
: 连接到一个远程的SSE
服务端点,可能用于接收实时通知或数据流。注意sse
类型需要url
参数,并且可以包含自定义headers
。
使用预定义变量
MCP
配置支持一些预定义的变量,方便引用上下文信息。
{
"servers": {
"filesystem": {
"type": "stdio",
"command": "npx",
"args": ["@modelcontextprotocol/server-filesystem", "${workspaceFolder}"]
}
}
}
在这个例子中,${workspaceFolder}
是一个预定义变量,它会被替换为当前 VS Code
打开的工作区的根目录路径。这对于需要访问项目文件的工具非常有用。
通过 MCP
,VS Code
为开发者打开了一扇门,让 AI 助手能够借助外部工具的力量,更深入地融入到日常开发工作流中。虽然初始配置可能涉及一些环境设置,但其带来的定制化和能力扩展是相当可观的。