在 VS Code 中配置与接入自定义 MCP 服务端
概述
Model Context Protocol (MCP) 为大语言模型提供了与外部系统交互的标准接口。本文详细解析如何在 Visual Studio Code 环境中部署并接入本地构建的 MCP 服务端。尽管 VS Code 官方对 GitHub Copilot 的集成最为原生,但该协议架构同样兼容通义灵码等第三方 AI 扩展。完整流程涵盖服务端逻辑开发、本地运行环境配置以及 IDE 内的联调测试。
基于 GitHub Copilot 的集成方案
1. 开发 MCP 服务端逻辑
使用 Python 和 fastmcp 框架编写基础的工具集。以下示例定义了一个包含算术运算、气候查询和时间获取的 MCP 服务端。
from fastmcp import FastMCP
from typing import TypeAlias, Union
from datetime import datetime
# 初始化 MCP 服务端实例
server = FastMCP("arithmetic_assistant")
# 定义数值类型别名
NumericType: TypeAlias = Union[int, float]
@server.tool()
def calculate_sum(first_operand: NumericType, second_operand: NumericType) -> NumericType:
"""
计算两个数值的总和。
参数:
first_operand (NumericType): 第一个加数
second_operand (NumericType): 第二个加数
返回:
NumericType: 相加后的结果
"""
return first_operand + second_operand
@server.tool()
def calculate_difference(first_operand: NumericType, second_operand: NumericType) -> NumericType:
"""
计算两个数值的差。
参数:
first_operand (NumericType): 被减数
second_operand (NumericType): 减数
返回:
NumericType: 相减后的结果
"""
return first_operand - second_operand
@server.tool()
def calculate_product(first_operand: NumericType, second_operand: NumericType) -> NumericType:
"""
计算两个数值的乘积。
参数:
first_operand (NumericType): 第一个乘数
second_operand (NumericType): 第二个乘数
返回:
NumericType: 相乘后的结果
"""
return first_operand * second_operand
@server.tool()
def calculate_quotient(numerator: NumericType, denominator: NumericType) -> NumericType:
"""
计算两个数值的商。
参数:
numerator (NumericType): 被除数
denominator (NumericType): 除数
返回:
NumericType: 相除后的结果
异常:
ValueError: 当除数为零时抛出
"""
if denominator == 0:
raise ValueError("除数不能为零")
return numerator / denominator
@server.tool()
def compare_magnitude(value_a: NumericType, value_b: NumericType) -> bool:
"""
比较两个数值的大小。
参数:
value_a (NumericType): 第一个比较值
value_b (NumericType): 第二个比较值
返回:
bool: 如果 value_a 大于 value_b 则返回 True,否则返回 False
"""
return value_a > value_b
@server.tool()
async def fetch_climate_info(location_name: str) -> str:
"""
获取指定城市的气候信息。
参数:
location_name (str): 城市名称
返回:
str: 描述该城市气候的字符串
"""
return f"{location_name} 今天天气晴朗!"
@server.tool()
async def retrieve_system_timestamp() -> str:
"""
获取当前系统的日期和时间。
返回:
str: 格式为 YYYY-MM-DD HH:MM:SS %z 的当前时间字符串
"""
return datetime.now().strftime("%Y-%m-%d %H:%M:%S %z")
if __name__ == "__main__":
# 使用标准输入输出流进行通信
server.run(transport="stdio", show_banner=False)
2. 配置工作区启动参数
在项目根目录下创建 .vscode/mcp.json 文件,用于定义服务端的启动命令和运行环境。此处使用 uv 作为包管理和运行工具。
{
"servers": {
"arithmetic_assistant": {
"command": "uv",
"args": [
"run",
"--directory",
"/workspace/mcp-dev",
"calculator_tools.py"
]
}
}
}
3. 激活与绑定服务
- 在
.vscode/mcp.json文件编辑器内,点击代码上方提供的启动按钮(CodeLens)来运行服务端进程。 - 打开 Copilot Chat 面板,点击右下角的"配置工具"(Configure Tools)图标。
- 在弹出的菜单列表中,找到并勾选刚刚注册的
arithmetic_assistant服务。
4. 联调与排错
在聊天框中发起测试请求以验证工具调用。若发现 AI 未成功触发 MCP 工具,可尝试以下排错步骤:
- 通过命令面板(
Ctrl + Shift + P)执行Reload Window刷新 IDE 界面。 - 在
mcp.json文件中重新启动 MCP 服务端进程。 - 完全关闭并重启 VS Code 实例。
接入第三方 AI 扩展(以通义灵码为例)
对于非 Copilot 的 AI 助手,配置逻辑基本一致,但配置文件的位置和结构规范略有差异。
在通义灵码的设置界面中手动添加 MCP Server 配置,填入如下 JSON 数据。保存后插件会自动拉起服务端进程,随后即可在对话中验证工具调用情况。
{
"mcpServers": {
"arithmetic_assistant": {
"type": "stdio",
"command": "uv",
"args": [
"run",
"--directory",
"/workspace/mcp-dev",
"calculator_tools.py"
],
"env": {
"PROJECT_ROOT": "/workspace/mcp-dev"
}
}
}
}