MCP详解及协议的使用(python版本和Node版本)
MCP详解及协议的使用
🧩 一、MCP详解
1、✅ MCP 是什么?
MCP 是一种统一协议,使得 语言模型(LLM)能以结构化方式与外部系统进行交互,支持多轮、多工具、多模态(文本、图像、音频等)调用。
它类似于一种“操作系统中的系统调用协议”,让模型不只是聊天,而是真正地“调用”外部服务。
2、🔧 能用来做什么?应用场景
2.1. ✅调用函数 / API(函数调用 Function Calling)
例如:
用户输入:“帮我查一下明天上海的天气,并推荐附近的餐馆。”
模型识别出两个意图:
- 先调用 getWeather(location=“上海”) 获取天气
- 再调用 findNearbyRestaurants(location=“上海”)
模型通过 MCP 协议请求这两个工具,组合响应内容再生成回答
2.2. ✅插件系统的底层机制
MCP 是 OpenAI 插件系统的底层协议。比如:
- 文件上传分析插件
- 数据库查询插件
- 网络搜索插件(如 Bing、Klarna)
这些插件的调用流程背后都遵循 MCP。
2.3. ✅中间调度器(Tool Router)
MCP 允许构建“中间调度系统”:
- 模型只负责推理出“需要调用哪些工具”
- 调度器根据模型的指令逐个调用函数、组合结果,再反馈给模型
这使得系统具备“多步逻辑处理能力”,比如:
问“帮我订一张明天下午从北京飞上海的机票”,模型自动调用:
- 航班查询
- 用户账户信息获取
- 订单创建与支付
2.4. ✅支持多模态输入和输出
随着 GPT-4o 支持图像/语音,MCP 也能支持:
- 传入图片给模型分析(如图像 OCR、识别表格、分析图纸)
- 模型返回语音/图像/视频等格式的结果
- 混合调用工具链,如上传 PDF 后提取表格、再用图表库绘图
2.55、🛠️ MCP 的核心组成
成分 | 作用 、 |
---|---|
tool_calls | 模型发出工具调用请求,包含工具名、参数等 |
tool_response | 外部系统处理请求后的响应数据(可以是 JSON) |
function_calling | OpenAI 提供的轻量实现方式,MCP 的子集 |
intermediate steps | 工具调用步骤的中间过程,帮助模型持续更新对话状态 |
🧩 二、简单的使用架构
┌──────────────┐ TCP / WebSocket / HTTP│ Client │ ─────────────────────────────► ┌────────────┐│ │ │ MCP Server ││ 发出请求 │ │ │└──────────────┘ └────────────┘│▼┌──────────────────────┐│ Tool Registry ││ - tool_1 ││ - tool_2 │└──────────────────────┘
基于 MCP 协议的服务端连接客户端模块,通过 stdio 与服务端子进程通信。这种设计模式通常用于:
-
启动一个可交互的子进程服务器(如 MCP server)
-
使用 标准输入输出(stdin/stdout)作为通信通道
-
异步初始化会话,并获取工具列表
🧩 三、MCP协议的使用(Python版本)
连接服务端以及和服务端子进程通信:
async def connect_to_server(self, server_script_path: str):r'''连接到MCP服务器首先启动服务端,然后初始化会话最后获取可用工具列表'''is_python = server_script_path.endswith('.py')command = "python" if is_python else "node"print(f"🛠️ 启动服务端命令: {command} {server_script_path}")# 构造一个 StdioServerParameters 对象,常用于设置一个# 通过标准输入输出(stdin/stdout)与主程序通信的子进程服务器script_dir = os.path.abspath(