当前位置:首页 > 技术 > 正文内容

在 VS Code 中配置与接入自定义 MCP 服务端

访客 技术 2026年10月14日 1

概述

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"
      }
    }
  }
}

相关文章

Linux crontab 详解

1) crontab 是什么cron 是 Linux 的定时任务守护进程;crontab 是用来编辑/查看“按时间周期执行命令”的表(cron table)。常见两类:用户 crontab:每个用户一份(crontab -e 编辑)系统级 crontab / cron.d:可指定执行用户(/etc/crontab、/etc/cron.d/*)2) crontab 时间...

富文本里可以允许的 HTML 属性

一、所有标签默认允许的安全属性(极少)class        (可选)id           (通常建议禁用)title️ 注意:id 容易被滥用做锚点注入,很多系统直接禁用class 允许的话最好只允许固定前缀(如 editor-*)二、a 标签允许属性<a href="" t...

Mac 安装 Node.js 指南

方法一:通过官网安装包(最简单,适合初学者)如果你只是想快速安装并开始使用,这是最直接的方法。访问 Node.js 官网。页面会显示两个版本:LTS (Recommended For Most Users):长期支持版,最稳定。建议选这个。Current:最新特性版,包含最新功能但可能不够稳定。下载 .pkg 安装包并运行。按照安装向导点击“下一步”即可完成。方法二:使用 Homebrew 安装(...

Dom\HTML_NO_DEFAULT_NS 的副作用:自动加闭合标签

在使用Dom\HTMLDocument时,Dom\HTML_NO_DEFAULT_NS 将禁止在解析过程中设置元素的命名空间, 此设置是为了与DOMDocument向后兼容而存在的。当使用它时,已知的一个副作用就是:自动加闭合标签例如 </img> 为什么会这样?当你使用:Dom\HTML_NO_DEFAULT_NS文档会变成 无命名空间模式,此时内部更接近 XML...

Laravel 事件和监听器创建

在 Laravel 中,使用 Artisan 命令创建 Events(事件) 和 Listeners(监听器) 是非常高效的。你可以通过以下几种方式来实现:1. 手动创建单个 Event如果你只想创建一个事件类,可以使用 make:event 命令:Bashphp artisan make:event UserRegistered执行后,文件将生成在 app/Even...

自定义域名解析神器 dnsmasq

什么是 dnsmasq?dnsmasq 是一个轻量级、功能强大的网络服务工具,专为小型和中等规模网络设计。它是一个综合的网络基础设施解决方案[1]。dnsmasq 能做什么?功能说明应用场景DNS 转发与缓存将 DNS 查询转发到上游服务器(ISP、Google DNS 等),并在本地缓存结果加快 DNS 查询速度,减少外部 DNS 流量本地 DNS解析本地网络设备的主机名,无需编辑&n...

发表评论

访客

◎欢迎参与讨论,请在这里发表您的看法和观点。