游乐游手机版
首页/AI教程/文章详情

MCP Model Context Protocol技术理解第六篇

时间:2026-05-29 06:49
MCPClient通过AI应用调用Server,LLM仅负责推理输出而非直接调用。使用场景分两种:在现有AI应用中配置JSON文件启动Server,或开发者使用SDK编写Client代码。Client负责连接管理、协议转换及安全拦截,通过初始化、工具发现、指令执行等步骤完成交互。

引言

在上一篇文章中,我们深入拆解了一个天气实时预报的MCP Server,相信大家已经对MCP的基本形态有了直观认识。本篇将聚焦于MCP客户端在实际应用中的常见问题与配置方法,如果篇幅允许,还会顺带介绍几个MCP的高级特性。

正式探讨之前,先快速回顾此前系列内容以保持知识连贯:MCP技术理解系列的前五篇文章,分别从协议基础、工作原理、Server实现等角度进行了系统梳理。本篇则深入Client端,解决“如何调用”和“怎样配置”等更为落地的实际问题。

MCP Server的调用方法

很多人存在一个误解:认为让LLM直接发出指令就能调用对应的MCP Server。实际上这种理解并不准确。根本原因在于,LLM本身不具备外部调用能力——它无法直接发起HTTP请求或执行系统命令。

事实上,调用MCP Server的场景分为两类,但无论哪种情况,真正的调用方都是AI应用通过MCP Client完成的,LLM仅负责推理输入和输出。理解了这两类场景,我们再拆解MCP Client的配置细节就会更加清晰。

这里先铺垫两个关键认识:

  • 安全隔离:这意味着可以在Client层进行前置拦截。如果LLM“发疯”了,试图执行rm -rf /这样的危险操作,你的Java或Go代码完全可以在发送给Server之前检测并拦截该请求。
  • 协议转换:LLM输出的是文本/Token,而MCP Server需要的是JSON-RPC消息。Client正是那个适配器(Adapter),负责完成这两种格式的互转。

场景一:作为用户在现有Host中调用

如果你只是想利用Claude Code或Cursor这类现有AI应用,去调用一个现成的MCP Server(包括你自己编写的),那么你完全不需要编写任何MCP Client代码,只需修改配置文件即可。在这种情况下,Host就是AI应用本身,它已内置了写好的MCP Client代码。你配置好MCP Server后,它会自动维护连接并完成后续所有操作。

场景二:作为开发者通过代码调用

如果你想在自己开发的Java、Go或Python程序中调用MCP Server——例如构建一个能够调用本地工具的AI Agent——那么你需要自己实现一个MCP Client。

以Stdio传输方式为例,核心交互流程可简化为三步:

  1. 启动进程:你的程序(Client)启动MCP Server作为子进程,例如执行npx -y @modelcontextprotocol/server-filesystem这样的命令。
  2. 握手(Initialization):发送initialize请求,协商协议版本与能力。
  3. 发送指令:发送tools/listtools/callresources/read等JSON-RPC消息。

在此场景下,你需要手动编写MCP Client代码来处理初始化连接、维护协议与连接、发送消息以及处理响应。

一次完整的MCP调用示例

看完上述流程,可能有人仍有疑惑:LLM在整个过程中到底扮演什么角色?别急,我们上面其实已经提到——AI应用通过MCP Client调用MCP Server,LLM只负责推理输入和输出。下面通过一个完整的调用链来演示,看完就会一目了然。

先明确各个角色的职责:

  • AI应用:负责全局管控,协调各类请求与负载均衡。
  • MCP Client:负责连接Server、管理进程、维护对话上下文。
  • MCP Server:无状态的Worker,它不知道上下文,也不关心调用方是谁,只负责接收指令→执行操作→返回结果。
  • LLM:没有“手脚”(不能联网、不能读文件)。它的工作是对用户的自然语言进行分析,对比AI应用提供的Tools List,然后生成一个结构化的JSON文本,告诉AI应用:“请帮我调用这个函数,参数是X和Y。”

下面是完整的交互流程:

  • 初始化(Handshake)
    • Client启动Server。
    • Client询问Server:“你有什么本事?”(Tools List)
    • Server回答:“我会读文件(fs.read),我会查数据库(db.query)。”
  • 用户提问
    • 用户对Client说:“帮我查一下user_id=101的订单。”
  • Prompt组装(AI应用内部逻辑)
    • AI应用将用户的System Prompt、Server提供的工具定义(Schema)以及用户问题打包发送给LLM。
  • LLM决策
    • LLM经过推理,发现db.query工具能解决该问题。
    • LLM返回给AI应用(而非直接给Server)一个结构化指令:{ "tool_use": "db.query", "params": { "sql": "SELECT * FROM orders WHERE user_id=101" } }
  • 执行(真正的MCP调用发生在此处)
    • AI应用解析LLM的响应,发现它想调用工具,于是控制MCP Client发送相关请求和数据。
    • Client通过JSON-RPC(Stdio/SSE)向MCP Server发送tools/call请求。
  • Server响应
    • Server执行SQL,将JSON数据返回给Client。
  • 回环(Loop Back)
    • AI应用接收到Client返回的数据,将Server的执行结果再次喂给LLM。
    • AI应用说:“刚才你让我调用的工具,结果是[Order A, Order B],请生成给用户的最终回复。”
  • 最终输出
    • LLM生成自然语言回复:“用户你好,ID为101的用户有两笔订单……”

在AI应用中配置MCP Server

通过上面的解析,相信大家对整个调用过程已经比较清晰了。接下来,我们按场景逐步拆解MCP Client的配置要点。

如前所述,在Claude Code这类现成的AI应用里,我们只需配置MCP Server即可,无需编写MCP Client代码。下面以Claude Code为例,详细介绍配置方法。

配置信息写在claude_desktop_config.json文件中:

// ~/Library/Application Support/Claude/claude_desktop_config.json { "mcpServers": { "weather": { "command": "uv", "args": ["--directory", "/absolute/path/to/weather", "run", "weather-server"] }, "filesystem": { "command": "npx", "args": ["-y", "@modelcontextprotocol/server-filesystem", "/Users/username/Documents"] }, "github": { "command": "npx", "args": ["-y", "@modelcontextprotocol/server-github"], "env": { "GITHUB_PERSONAL_ACCESS_TOKEN": "ghp_your_token_here" } } } }

可以将每一项配置理解为在终端执行一个长连接的子进程。以下是关键参数的详细说明:

1. mcpServers:根节点,是一个Map。Key(如weathergithub)是该Server的唯一标识符,用于在AI界面中显示和内部隔离。

2. command(可执行文件)
这是Client尝试启动的二进制文件或脚本解释器,用于指定入口程序。常见值包括npx(Node.js)、pythonuv(Python包管理器),或者编译好的Go/Java二进制文件。

3. args(启动参数)
这是一个字符串数组,会被追加在command后面,形成完整的shell启动命令。

  • weather示例uv --directory /path/to/weather run weather-server,告知uv切换到特定目录并运行该项目。
  • filesystem示例npx -y @modelcontextprotocol/server-filesystem /Users/username/Documents-y表示自动确认安装,最后一个参数是传给Server程序内部的参数,用于告知它允许访问哪个文件夹——这是一个白名单机制。

4. env(环境变量)
这是子进程启动时注入的环境变量,用于传递敏感信息(API Keys)或配置参数,从而避免将这些信息硬编码在代码或命令行参数中。就像在Docker中配置ENV或在本地.env文件中定义变量一样。以GitHub示例为例,GITHUB_PERSONAL_ACCESS_TOKEN会被注入到该进程的上下文中,Server代码可以通过os.Getenv("GITHUB_PERSONAL_ACCESS_TOKEN")(Go)或System.getenv(...)(Java)获取。

通过代码调用MCP Server

这就是前面所说的场景二——在自己构建的AI应用中,需要使用官方提供的SDK来编写MCP Client代码。

这里补充一点:官方提供了多种SDK。其中,后端开发常用的Go SDK由Google和Go官方维护,Java SDK由Spring AI官方维护,而Python SDK则由MCP官方维护。

下面是用Python SDK编写MCP Client的示例代码:

from mcp import ClientSession, StdioServerParameters from mcp.client.stdio import stdio_client # 配置服务器参数 server_params = StdioServerParameters( command="uv", args=["--directory", "/path/to/weather", "run", "weather-server"], ) async def main(): async with stdio_client(server_params) as (read, write): async with ClientSession(read, write) as session: # 初始化连接 await session.initialize() # 列出可用工具 tools = await session.list_tools() print("A vailable tools:", tools) # 调用工具 result = await session.call_tool( "get_forecast", arguments={"latitude": 37.7749, "longitude": -122.4194} ) print("Forecast:", result) # 列出资源 resources = await session.list_resources() print("A vailable resources:", resources) # 读取资源 config = await session.read_resource("weather://config") print("Config:", config) if __name__ == "__main__": import asyncio asyncio.run(main())

总结

本篇主要解答了MCP Client的几个核心问题:Client到底如何调用Server?在不同场景下,我们该如何配置或编写客户端代码?相信结合前面的系列文章,大家对MCP的整体理解已经比较完整。下一篇我们将继续深入,探讨MCP的高级特性以及一些需要特别留意的细节——这些要点在实际落地中至关重要。

来源:https://juejin.cn/post/7605810996125974562
上一篇Graphy营销人员数据可视化指南与实战技巧 下一篇免费AI修复模糊照片无需注册提升图像质量
本站内容用于信息整理与展示,如有侵权或内容问题请及时联系处理。

相关推荐

补充同频道和同主题内容,方便继续浏览更多相关内容。

同类最新

继续查看同栏目最近更新的文章。

更多
Continue Windows 本地安装配置教程 2026 最新版 下载地址与环境要求
AI教程 · 2026-07-02

Continue Windows 本地安装配置教程 2026 最新版 下载地址与环境要求

Continue是面向VSCode与JetBrains的AI编程插件,可连接云端或本地模型。Windows安装需准备编辑器、运行环境与模型服务,配置时应重点处理接口、索引、隐私与性能问题。

Tabnine新手从下载到首次运行保姆级安装教程
AI教程 · 2026-07-02

Tabnine新手从下载到首次运行保姆级安装教程

Tabnine是面向开发者的AI编程工具,适合在常见代码编辑器中辅助补全代码。安装前需确认环境、账号与编辑器版本,首次运行应完成登录、项目索引、补全测试和隐私设置。

Tabnine安装失败常见报错、日志排查与升级回滚方案
AI教程 · 2026-07-02

Tabnine安装失败常见报错、日志排查与升级回滚方案

Tabnine安装异常通常与编辑器版本、网络连接、权限、缓存或插件冲突有关。可按环境检查、日志定位、重装清理、版本切换和回滚流程逐步处理,并注意代码隐私与插件来源安全。

Tabnine插件安装配置全流程:浏览器编辑器扩展市场
AI教程 · 2026-07-02

Tabnine插件安装配置全流程:浏览器编辑器扩展市场

Tabnine适合在主流编辑器中提供代码补全与生成辅助。安装前需确认官方来源、账号策略和编辑器版本,按扩展市场或离线包方式完成配置,并注意隐私、授权与兼容问题。

Tabnine本地模型运行全攻略:下载配置与性能优化
AI教程 · 2026-07-02

Tabnine本地模型运行全攻略:下载配置与性能优化

Tabnine可在本地运行代码补全模型,适合重视代码隐私、网络环境不稳定或企业内网开发场景。配置重点包括版本确认、模型下载、路径设置、资源分配、IDE检查与性能调优。