MCP详解及协议的使用(python版本和Node版本)

发布于:2025-06-09 ⋅ 阅读:(15) ⋅ 点赞:(0)

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(