使用 Python 入门 Model Context Protocol(MCP)——对接服务器

90 阅读9分钟

到目前为止,我们已经了解了如何创建服务器,也看过如何通过你自己编写的专用客户端来“消费”(使用)它们。本节将介绍如何使用现有软件(如 Visual Studio Code(VS Code)Claude Desktop)来消费服务器。这里所说的“消费”,指的是安装服务器、进行配置,然后用它们来运行工具或以其他方式与服务器交互。

在本章中,你将学会:

  • 了解如何用现有工具消费服务器
  • 在 VS Code 中安装与配置服务器
  • 使用 mcp.json 文件进行服务器管理
  • 管理服务器所需的密钥与配置
  • 使用 VS Code 测试并与服务器交互
  • 消费服务器时应用安全最佳实践

本章涵盖以下主题:

  • 使用 Claude Desktop 与 VS Code 等宿主(host)进行消费
  • 安装流程
  • 添加服务器
  • 本地安装与全局安装
  • 小贴士与技巧
  • 安全要点
  • 服务器建议

使用 Claude Desktop 与 VS Code 等宿主进行消费

“消费服务器”是什么意思?要使用 MCP 服务器及其特性,你需要一种与之交互的方式。第 7 章中你已经看到如何创建服务器以及如何编写客户端与之交互——这当然可行,但需要你写代码

另一种方式是使用现有软件(如 Claude Desktop 或 VS Code)。这些工具天生就能与 MCP 服务器协作,并且内置了大语言模型,让你可以通过提示词以更友好的方式与服务器交互。

我们把这些软件当作宿主(host) :它们内置 MCP 客户端,并使用配置文件来记录已安装的服务器、可用的工具等信息。

它们的工作方式概括如下:

  • 通过选定的传输类型(如 STDIOSSEStreamable HTTP)与 MCP 服务器建立连接
  • 提供图形界面让你输入提示词、使用工具、进行配置等
  • 借助配置文件记录已安装的服务器、可用工具与其他设置

下面是 VS Code 中的一个界面示例,能代表这类宿主的工作方式:

image.png

图 8.1 – VS Code 界面

在该界面中你可以看到:

  • 当前通过已安装服务器提供的工具列表
  • 一个可输入提示词的聊天界面

接下来我们分别看看具体宿主及其特性。

VS Code 对 MCP 的支持

VS Code 与 GitHub Copilot 一起,对 MCP 服务器提供了广泛支持。它提供多种功能帮助你安装、配置与保护服务器,既适用于你在开发/试用自建服务器的场景,也能把 VS Code 变成一个代理式应用,通过你的提示来运行工具。

VS Code 为 MCP 服务器提供的能力包括:

  • 安装服务器:既支持全局安装也支持工作区级安装;同时支持 STDIO、SSE、Streamable HTTP 三种传输类型。
  • 工具管理:可为某个服务器启用/禁用工具,确保客户端拥有所需上下文。
  • 特性交互:除了工具,还支持**用户提示(prompts)资源(resources)**等特性。
  • 服务器管理:可添加/移除服务器并进行配置。
  • 采样(Sampling) :当服务器发送采样请求时,你可以与之交互、微调请求后再返回响应。
  • 引导请求(Elicitations) :当服务器需要更多用户信息以继续处理请求时,提供相应支持。
  • 日志与调试:便于你在开发服务器或客户端时进行诊断。

新功能会不断加入;若想尽早体验,建议使用 VS Code Insiders(新功能会优先发布在那里)。

Claude Desktop

你也可以用 Claude Desktop 来消费 MCP 服务器。前往下载页(claude.ai/download)安装与你操作系统对应的客户端。与 VS Code 类似,它提供图形界面和一整套与 MCP 服务器交互的功能。

Claude 的能力远不止 MCP——它是一个全功能 AI 助手,可类比 ChatGPTCopilot。完整功能列表可访问:claude.ai/login?retur…

安装流程

无论是 Claude 还是 VS Code,安装服务器都依赖一个核心概念:mcp.json 文件。这是你的主配置文件,用于添加服务器地址及其他所需配置。它相当于已安装服务器的清单(manifest) 。所谓“安装服务器”,本质上就是在该文件中新增一条记录。例如:

{
  "inputs": [
    
  ],
  "servers": {
    "docs": {
      "type": "http",
      "url": "https://learn.microsoft.com/api/mcp"
    }
  }
}

在这个文件里,servers 下有一个指向 https://learn.microsoft.com/api/mcp 的服务器项;此时该 MCP 服务器就被视为已安装

完整安装与运行特性的流程如下:

  1. mcp.jsonservers 字段中添加一条服务器记录
  2. 启动服务器;
  3. 在宿主里输入与该服务器某个工具匹配的提示,使用该服务器

稍后我们会演示一个完整场景。先更深入地看看 mcp.json

mcp.json 文件

mcp.json 主要有两个顶级属性:

1) inputs

用于定义敏感信息占位符(例如 API Key 或 Token)。定义后,VS Code 的界面会弹出输入框让你填写,并将答案保存到一个变量供后续引用。示例:

[
  {
    "id": "my_api_key",
    "description": "The API key that my MCP server needs",
    "type": "promptString",
    "password": true
  }
]

然后把它与某个服务器项关联起来,例如:

"my_mcp_server": {
  "type": "http",
  "url": "http://localhost:8000/mcp",
  "headers": {
    "Authorization": "Bearer ${my_api_key}"
  }
}

注意这里把 my_api_key 作为 headers 的一部分传入;这样每次请求 http://localhost:8000/mcp 都会携带该 API Key,从而安全访问 MCP 服务器。通过这种方式,机密信息不会直接写入 mcp.json

2) servers

用于声明服务器条目的对象。不同传输类型下的配置写法不同。示例如下:

使用 Streamable HTTP:

"my_mcp_server": {
  "type": "http",
  "url": "http://localhost:8000/mcp"
}

这里 typehttp,并提供了 url

使用 SSE:

"my_mcp_server": {
  "type": "sse",
  "url": "http://localhost:8000/sse"
}

与 Streamable HTTP 一样,SSE 面向远程可访问的服务器,因此也使用 url 指定地址。

使用 STDIO:

"playwright": {
  "command": "npx",
  "args": ["-y", "@executeautomation/playwright-mcp-server"]
}

STDIO(标准输入/输出)需要指定如何启动该服务器,因而必须提供 commandargs。而 SSE 与 Streamable HTTP 已经在远端运行,不需要本地启动命令。

添加服务器(Adding a server)

你在上一节已经看到可以用多种方式添加服务器了,这里我们动手完整走一遍添加与使用服务器的流程。以 Playwright(端到端 E2E 测试框架)为例。要把它作为 MCP 服务器安装,通常做法是找到它的 GitHub 仓库并查看安装说明。Playwright 的仓库在:github.com/microsoft/p…

该服务器功能很多,所以说明也比较长;我们从 Getting started 小节摘取安装指引,如下:

"playwright": {
    "command": "npx",
    "args": [
        "@playwright/mcp@latest"
    ]
}

可以看出它显然是 STDIO 类型的服务器,因为填写了 commandargs 字段。

步骤 1:安装服务器

我们通过 VS Code 安装。通常有两种方式:

  • 直接在 mcp.json 中添加对应条目;
  • 使用图形界面:在查看 mcp.json 时点击 Add Server 按钮,或在命令面板运行 MCP: Add Server。两种方式都会弹出 UI 让你选择传输类型,并根据所选传输填写 urlcommand/args 信息。

例如,点击 Add Server 后,你会看到如下界面:

image.png

图 8.2 – 安装服务器

可以看到有多种安装选项:不同的传输方式、来自不同包管理器的源,甚至支持 Docker。

如果选择 Browse MCP Servers…,会跳转到一份已审核的 MCP 服务器列表code.visualstudio.com/insider/mcp),你可以从中选择要安装的服务器。

虽然我们在 GitHub 仓库已经找到 Playwright 的安装说明,但这里也可以从该列表中选择 Install Playwright 来安装:

image.png

图 8.3 – 安装 Playwright

此时 VS Code 会弹出一个对话框,提供该服务器的更多信息及安装步骤。之前从仓库获取安装方法是可行的,但通过这里安装也同样方便。

小结:要么手动把需要的配置粘贴进 mcp.json,要么用 VS Code 的多种安装选项完成。

步骤 2:管理服务器

添加完成后,你的 mcp.json 看起来应类似如下(注意已添加 playwright):

{
  "servers": {
    "playwright": {
      "command": "npx",
      "args": [
        "@playwright/mcp@latest"
      ]
    }
  },
  "inputs": []
}

接着看看 UI 如何辅助我们。打开 Extensions(扩展)视图,能看到已安装服务器列表:

image.png

图 8.4 – 已安装的服务器

在这个视图中点击某个服务器右侧的齿轮按钮,可进行交互:

image.png

图 8.5 – 与服务器交互

可以看到多种操作:启动服务器、查看日志,甚至查看 JSON 配置。这些操作也可以直接在 mcp.json 里完成。

步骤 3:与服务器交互

启动服务器后,切换到GitHub Copilot 的聊天界面。确保在下拉框中选中对应的代理(agent),然后输入如下提示词:

Navigate to tfl.gov.uk/. I want to go from Paddington to Heathrow, show me how to get there by underground, important use playwright tool

有时 VS Code 不太“乐意”使用某个工具,因此需要在提示词中强调要使用它。上面的提示里加入了 “important use playwright tool” ,以确保触发该工具。

在聊天界面你应看到类似内容:

image.png

图 8.6 – 使用该工具

这表示一个工具被触发,并询问你是否允许运行。你可以看到提示中的 URL 被解析并作为 Playwright 工具的输入。随后 Playwright 会发起一系列工具调用:打开网站、定位输入框、尝试完成你设定的任务。

有时需要重启聊天会话;一旦正常工作,你会看到类似下图,表明 Playwright 已开始正确导航,尝试从 Paddington 到 Heathrow 的路线查询:

image.png

图 8.7 – Playwright 查询

完成后,你可以继续与之交互以获取所需内容,甚至让它基于这次互动生成 Playwright 测试——这正是其真正价值所在。

本地安装与全局安装

到目前为止,我们把服务器安装在 .vscode/mcp.json,这意味着它只在当前工作区可用。你也可以在整台机器上全局安装服务器。方法是使用命令面板的 MCP: Add Server,在最后一步选择 Global,这会在 (Settings)/User/mcp/json 位置创建 mcp.json,也就是把服务器写入用户级设置而非某个工作区。这样当你打开另一个 VS Code 工作区时,无需再次安装该服务器。

下面是用户级 mcp.json 在全局安装后可能的样子:

{
  "servers": {
    "my-mcp-server-6801ea17": {
      "url": "https://learn.microsoft.com/api/mcp",
      "type": "http"
    }
  },
  "inputs": []
}

可以看到,配置内容本身并无差异,不同之处在于 mcp.json 的存放位置。经验法则是:常用的服务器就全局安装;不常用的就安装在当前工作区的 .vscode/mcp.json

技巧与提示(Tips and tricks)

到目前为止我们已经走过基础用法,那还有哪些进阶点需要了解?其实有不少可配置项。完整功能清单可见官方文档:code.visualstudio.com/docs/copilo…

调试(Debugging)

作为开发者,学会调试至关重要。根据文档(code.visualstudio.com/docs/copilo…),目前支持 Node.js 调试

"server-ts": {
  "command": "node",
  "args": ["08 - consuming servers/code/build/index.js"],
  "dev": {
    "watch": "08 - consuming servers/code/build/**/*.js",
    "debug": { "type": "node" }
  }
}

按上述配置,你需要:

  • commandargs 中设置如何运行服务器

  • 添加 dev,包含两个属性:

    • watch:一个 GLOB 模式,用于监听你的 JavaScript 文件变更;
    • debug:指定用哪种进程来调试(此处为 node)。

配置好并启动服务器后,界面上方会出现灰色的调试提示文本。记得在合适位置打断点(如服务器启动、运行工具等)。你可以这样测试不同场景:

  • 测试启动:在启动代码处打断点,然后从 mcp.json 启动服务器,你应看到断点被触发:

image.png

图 8.8 – 启动断点

  • 测试工具:用 Inspector 的 CLI 模式测试工具。以下命令测试名为 add 的工具,输入参数为 ab;请按你服务器的操作与参数调整:

    npx @modelcontextprotocol/inspector --cli node ./build/index.js --method tools/call --tool-name add --tool-arg a=1 --tool-arg b=2
    

    终端会直接返回类似结果:

    {
      "content": [{ "type": "text", "text": "3" }]
    }
    

故障排查(Troubleshooting)

有时你会在聊天区的工具图标上看到错误提示。此时打开终端区域的 Output 面板即可查看问题详情。该区域也很适合日常观察:你能看到 VS Code 与服务器的每一次交互(启动/停止、初始化、列工具等)。

例如我们连接调试器时,Output 输出如下信息(节选):

2025-08-03 19:18:56.856 [info] Connection state: Starting
2025-08-03 19:18:56.857 [info] Connection state: Running
2025-08-03 19:18:56.857 [info] [editor -> server] {"jsonrpc":"2.0","id":1,"method":"initialize","params":{"protocolVersion":"2025-06-18","capabilities":{"roots":{"listChanged":true},"sampling":{},"elicitation":{}},"clientInfo":{"name":"Visual Studio Code - Insiders","version":"1.103.0-insider"}}}
2025-08-03 19:18:56.888 [warning] [server stderr] Debugger listening on ws://127.0.0.1:9230/...
...
2025-08-03 19:19:10.874 [info] [server -> editor] {"result":{"protocolVersion":"2025-06-18","capabilities":{"tools":{"listChanged":true}},"serverInfo":{"name":"demo-server","version":"1.0.0"}},"jsonrpc":"2.0","id":1}
2025-08-03 19:19:10.874 [info] [editor -> server] {"method":"notifications/initialized","jsonrpc":"2.0"}
2025-08-03 19:19:10.874 [info] [editor -> server] {"jsonrpc":"2.0","id":2,"method":"tools/list","params":{}}
2025-08-03 19:19:10.891 [info] [server -> editor] {"result":{"tools":[{"name":"add","title":"Addition Tool","description":"Add two numbers","inputSchema":{"type":"object","properties":{"a":{"type":"number"},"b":{"type":"number"}},"required":["a","b"],"additionalProperties":false,"$schema":"http://json-schema.org/draft-07/schema#"}}]},"jsonrpc":"2.0","id":2}

要点解读:

  • 编辑器与服务器握手:编辑器发送其支持的能力(如 rootssamplingelicitation):

    [editor -> server] {"method":"initialize", ... "capabilities":{"roots":{"listChanged":true},"sampling":{},"elicitation":{}} ...}
    
  • 服务器回应握手:说明它支持 tools

    [server -> editor] {"result":{"capabilities":{"tools":{"listChanged":true}}} ...}
    
  • 已初始化通知:握手最后一步,客户端(此处为 VS Code)发送 notifications/initialized

    [editor -> server] {"method":"notifications/initialized","jsonrpc":"2.0"}
    
  • 询问工具:客户端请求工具列表:

    [editor -> server] {"method":"tools/list", ...}
    
  • 返回工具列表:服务器给出工具清单:

    [server -> editor] {"result":{"tools":[{"name":"add", ...}]}}
    

工具管理(Tool management)

VS Code 在工具管理方面也提供了多种辅助:

  • 选择/取消选择工具:添加服务器可能一次带来很多工具。无论你把编辑器当“智能代理”使用,还是需要确保调用的就是正确工具,都可以在聊天界面点击工具图标,在弹出的 UI 中勾选/取消勾选要启用的工具。

  • 运行指定工具:通常你会用尽量贴合某工具描述的提示来触发它。如果想强制使用某个工具,可在提示前加 # 。例如运行名为 add 的工具:

    #add 2 and 7
    
  • 工具数量管理:部分模型对可接受的工具数量有限制。可启用设置 github.copilot.chat.virtualTools.enabled,它会按提示自动筛选匹配的工具,避免“工具过多”导致的错误。请使用最新版 VS Code Insiders;该功能仍在积极演进中。

  • 工具授权:VS Code 计划运行工具时会弹出“Continue(继续)”的确认,你可以选择仅此一次本工作区始终允许
    示例:

    #add 2 and 7
    

    首次会要求点击 Continue,并选择“允许该工作区”。再次运行:

    #add 2 and 9
    

    这次会直接运行,因为你已授予本工作区的许可。若要撤销,可在命令面板运行 “Chat: Reset Tool Confirmations”

其他设置(Other settings)

Copilot 与 VS Code 的设置还在持续扩展中。建议使用 VS Code Insiders,在命令面板输入 MCP,你会看到大量专用命令与设置:

image.png 图 8.9 – MCP 命令
同样也可以搜索 Copilot 相关配置。该领域变化较快;如果你在开发 MCP 服务器,善用编辑器能力是你的“基本功”。

安全要点(Security aspects)

安全话题很大,这里结合编辑器使用给出一些实践建议:

  • 将机密信息从配置中剥离:可在 mcp.json 中使用 inputs 来安全注入密钥,例如:

    {
      "mcp": {
        "inputs": [
          {
            "type": "promptString",
            "id": "my-key",
            "description": "Token for my API",
            "password": true
          }
        ],
        "servers": {
          "my-server": {
            "type": "http",
            "url": "https://my-secure-api/mcp",
            "headers": {
              "Authorization": "Bearer ${input:my-key}"
            }
          }
        }
      }
    }
    

    这样在启动服务器时,UI 会提示你填写 my-key,并安全存储;服务器项通过 ${input:my-key} 引用它。之后对 https://my-secure-api/mcp 的每个请求都会自动加上 Authorization 头。

  • 运行工具的权限控制:不建议对某工具授予持续性访问,每次确认更安全,也方便你检查被解析的输入。

  • 限制服务器权限:例如文件访问型 MCP 服务器,建议仅限单一目录或明确无害的目录。

  • 使用可信服务器:GitHub 最近发布了经过审核的 MCP 服务器注册表。在 VS Code Insiders 中输入 @mcp 即可查看可安装的服务器列表;或在命令面板选择 MCP: Add Server 后点击 Browse MCP Servers。列表大致如下:

image.png

图 8.10 – MCP 注册表

总体原则:确保服务器作者可信(如 Stripe 官方维护的 Stripe MCP)。即便如此,也要配合代码扫描工具,并关注最新安全动态。相同列表也可在 code.visualstudio.com/insider/mcp 查看,但我更推荐 VS Code 内置体验。另外也可查阅服务器的 GitHub 仓库 READMEgithub.com/modelcontex…)以了解更多细节。

服务器推荐(Suggestion for servers)

那么,推荐哪些服务器呢?这取决于你的需求,但就我个人而言,会优先使用下面这些:

  • GitHubgithub.com/github/gith…):能极大简化日常工作,你可以在编辑器里直接与 Issue、Pull Request(PR)交互,甚至把工作委派给代理等。
  • Playwrightgithub.com/microsoft/p…):不仅适合站点导航,还能把一次导航过程生成为自动化测试,大幅节省时间。
  • Microsoft Learn MCP servergithub.com/microsoftdo…):微软官方的 Docs/Learn 服务器,在编辑器中直接提供文档资料。

当然还有很多其他选择,但建议先从这些开始,看看哪些适合你的场景。

总结(Summary)

本章介绍了如何消费 MCP 服务器——既包括你自己创建的服务器,也包括外部服务器;同时讲解了服务器安装后的管理配置工具使用等内容。

我们还给出了若干安全实践建议。这些仅是最低要求,你应在此基础上做得更多。

下一章我们将讨论 sampling(取样) :这是一个进阶主题,但当服务器需要把工作委托给你(用户)时非常有用。