MCP协议概述

MCP是一种轻量级协议,用于在语言模型和托管它的运行时之间建立双向通信,使模型可以调用外部工具,访问上下文信息,并于宿主系统进行结构化数据交换。它的核心思想是创建一个通过的“语言”和“接口”,解决AI生态系统中M个模型与N个工具/数据源集成时的M×N复杂性问题。

MCP的核心架构与组件

MCP遵循 客户端-服务器(Client-Server)架构,但其中引入了一个额外的角色:Host (宿主应用)。

  1. Host (宿主应用)

    • 用户之间交互AI的应用,比如Claude Desktop、一个IDE(集成开发环境)中AI助手、一个企业内部聊天机器人页面等。
    • 它负责解释用户的请求,并在需要时与MCP客户端协作来获取上下文或执行工具。
    • Host 内部包含 MCP Client
  2. MCP Client (客户端)

    • 一个轻量化的协议客户端,通常内置在Host应用中。
    • 负责与MCP Service 建立并维护连接
    • 主要职责是将Host 或LLM发出的工具调用请求翻译成MCP协议格式的消息,发送给MCP Service。
    • 同时,也负责接收MCP Service 返回的结果,并将其传递回Host 或LLM。
    • 负责会话管理、中断处理、超时、重连和错误处理等。
  3. MCP Service (服务器)

    • MCP架构的核心,负责 暴露具体的能力给AI模型。
    • 每个MCP Service 可以封装一个或多个工具(Tools)、资源(Resource) 或提示词模板(Prompt)
    • 当MCP Client 发送请求时,MCP Service 会执行相应的工具,查询数据源或提供预定义的提示内容
    • MCP Service的设计原则是 轻量级且高度可组合,它只关注 特定、明确的功能,不应该“看到” LLM的完整对话历史,从而增强安全性和隔离性。

协议内容与消息格式

MCP 协议的核心通信机制是基于 JSON-RPC 2.0. 所有在客户端和服务器之间交换的消息都是 JSON 格式的,并且遵循 JSON-RPC 2.0 的规范。三种基本消息类型如下

  1. 请求(Requests)

    • 由客户端发个服务器,用于发起一个操作
    • 格式示例
    • {
        "jsonrpc": "2.0",
        "id": 1,         // 唯一的请求标识符
        "method": "tools/call", // 要调用的方法名,例如 "tools/call" 或 "resources/read"
        "params": {      // 方法的参数
          "name": "weather_api",
          "arguments": {
            "location": "Singapore"
          }
        }
      }
      
    • 解释: 在这个例子中,客户端请求服务器调用名为 weather_api 的工具,并传入 location="Singapore" 作为参数。
  2. 响应(Responses):

    • 由服务器返回给客户端,用于回应一个请求。

    • 包含与原请求相同的id

    • 成功响应格式示例

      • {
          "jsonrpc": "2.0",
          "id": 1,
          "result": {    // 操作成功的结果
            "temperature": 30,
            "conditions": "Partly cloudy"
          }
        }
        
    • 错误响应格式示例:

      • {
          "jsonrpc": "2.0",
          "id": 1,
          "error": {     // 操作失败的错误信息
            "code": -32602,
            "message": "Invalid location parameter",
            "data": { "details": "The provided location 'Singapore' is invalid." }
          }
        }
        
  3. 通知(Notifications)

    • 一种单向消息,不需要响应

    • 通常由服务器发送给客户端,用于提供更新、进度信息或异步事件。

    • 格式示例

      • {
          "jsonrpc": "2.0",
          "method": "progress", // 方法名,例如 "progress" 或 "log"
          "params": {
            "message": "Processing data...",
            "percent": 50
          }
        }
        

MCP 的传输机制

JSON-RPC 定义了消息格式,但 MCP 也指定了这些消息如何在客户端和服务器之间传输。主要的传输机制包括:

  1. STDIO (标准输入/输出):

    • 这是最简单的传输方式,适用于客户端和服务器在同一台机器上运行,或者作为同一个进程的不同子进程时。
    • 客户端通过标准输出来发送请求,服务器通过标准输出来接收请求;服务器通过标准输出来发送响应/通知,客户端通过标准输出来接收。
    • 这种方式在本地开发和测试时非常方便。
  2. HTTP/WebSocket (通常是 SSE - Server-Sent Events):

    • 适用于客户端和服务器位于不同机器或需要跨网络通信的场景。
    • 它允许更复杂的部署模式,例如远程 MCP 服务器。
    • HTTP 通常用于发送请求,而 SSE 或 WebSocket 可以用于服务器向客户端发送实时更新和通知,保持连接的状态性

MCP 的内部实现流程(简化版)

  1. 初始化与能力协商:

    • MCP Client 连接到 MCP Server。
    • 双方会进行一个初始化握手 (initialize 请求/响应),交换协议版本、客户端/服务器信息,并协商各自支持的能力(例如,哪些工具可用、支持哪些资源类型、是否支持日志等)。这是一个关键步骤,确保了兼容性和功能发现。
  2. 工具/资源发现:

    • LLM (通过 Host 和 Client) 可能首先会询问 MCP Server 有哪些可用的工具 (tools/list 或在初始化阶段获取)。
    • MCP Server 会返回可用工具的列表,包括它们的名称、描述和参数 schema (通常是 JSON Schema),以便 LLM 能够理解如何使用它们。
  3. LLM 推理与工具调用:

    • 用户向 Host 应用提问。
    • Host 将用户问题连同 MCP Server 提供的工具描述发送给 LLM。
    • LLM 经过推理 (例如 ReAct 模式),决定需要调用某个工具。它生成一个工具调用请求的文本或结构。
    • MCP Client 捕获 LLM 的工具调用意图,将其翻译成 MCP 的 JSON-RPC tools/call 请求消息
  4. 请求执行与结果返回:

    • MCP Client 通过选定的传输机制(如 HTTP 或 STDIO)将 tools/call 请求发送给 MCP Server。
    • MCP Server 接收请求,查找对应的工具实现(例如一个 Python 函数或一个对外部 API 的调用),并执行它。
    • 工具执行完成后,MCP Server 将结果封装成 MCP 的 JSON-RPC 响应消息(resulterror),返回给 MCP Client。
    • MCP Client 接收响应,将其格式化为 LLM 可以理解的文本(通常是 Observation: 格式) ,并将其作为新的上下文反馈给 LLM。
  5. LLM 继续推理或给出最终答案:

    • LLM 接收到工具执行的 Observation: 后,继续其推理过程,最终给出用户问题的答案。

示例交互流程图

用户宿主应用MCP Client (Host 内置)LLM (AI Agent)MCP Server外部工具/服务提问 (e.g., "旧金山今天天气?")初始化请求 / 能力协商initialize Request (JSON-RPC)initialize Response (JSON-RPC, 包含可用工具列表)确认初始化完成 & 提供工具描述用户问题 + 可用工具描述ReAct 推理 (Thought: 需要获取天气)Action: 工具调用意图 (e.g., GetWeather(location="旧金山"))捕获工具调用意图tools/call Request (JSON-RPC)执行工具函数 / 调用 API工具执行结果tools/call Response (JSON-RPC)Observation: 工具结果 (格式化为文本)ReAct 推理 (Thought: 获得结果,可以回答)Final Answer: 最终答案 (e.g., "旧金山25°C")展示最终答案用户宿主应用MCP Client (Host 内置)LLM (AI Agent)MCP Server外部工具/服务
资源下载链接为: https://pan.quark.cn/s/abbae039bf2a DDC控制器是一种智能化的控制设备,广泛应用于建筑自动化、工业控制以及环境监控等领域。它基于先进的微处理器技术,具备强大的数据处理能力和灵活的编程功能。通过预先设定的程序,DDC控制器能够对各类传感器采集的信号进行分析处理,并根据预设的控制策略,精准地驱动执行器完成相应的操作。 在建筑自动化系统中,DDC控制器可用于控制暖通空调系统,实现对温度、湿度、风速等参数的精确调节。它能根据室内外环境的变化,自动调整空调设备的运行状态,确保室内环境的舒适性,同时优化能源消耗。此外,DDC控制器还可用于照明控制,根据自然光照强度和人员活动情况,自动调节灯光亮度,实现节能与舒适性的平衡。 在工业控制领域,DDC控制器可用于监控和控制生产线上的各种设备。它可以实时采集设备的运行数据,如温度、压力、流量等,通过分析这些数据判断设备的运行状态,并及时发出指令调整设备的运行参数,确保生产过程的稳定性和产品质量的可靠性。 DDC控制器具有高度的可靠性和稳定性,能够在恶劣的环境条件下长期稳定运行。其模块化的设计便于安装、调试和维护,用户可以根据实际需求灵活配置控制器的输入输出模块。此外,DDC控制器还具备良好的兼容性,能够与多种类型的传感器和执行器无缝对接,构建完整的自动化控制系统。 总之,DDC控制器凭借其卓越的性能和广泛的应用领域,已成为现代自动化控制系统中不可或缺的核心设备,为实现智能化、高效化和节能化的控制目标提供了有力支持。
### 关于Cursor和MCP协议 #### Cursor简介 Cursor并不是直接关联到MCP协议中的官方术语或者组件,在提及的参考资料中并未找到关于Cursor作为MCP组成部分的具体描述[^1][^2][^3]。然而,考虑到上下文环境以及可能存在的混淆情况,“cursor”一词通常用于数据库操作指代查询结果集的位置标记;但在讨论MCP时,如果提到“cursor”,可能是特指某种形式的状态指示器或是迭代过程中位置跟踪机制。 #### MCP协议概述 MCP(Model Context Protocol)是一种开放式的协议,旨在标准化应用程序向大型语言模型(LLMs)提供上下文信息的方法[^3]。通过这种协议可以更高效地构建代理(Agent)或基于LLM的工作流程应用。具体来说: - **原理**:MCP定义了一套接口和服务来处理来自不同源的数据输入,并将其转换成适合传递给LLM的形式。这包括但不限于文本片段、文件附件以及其他结构化/非结构化的数据对象。 - **架构设计**:该协议支持多种通信模式,允许开发者灵活配置消息传输方式,从而适应不同的应用场景需求。例如,在实时对话系统中可以通过WebSocket保持持久连接以便快速响应用户请求;而在批处理任务里则更适合采用HTTP RESTful API来进行异步交互。 #### 使用场景分析 当涉及到复杂的上下文管理和多轮次互动的任务时,推荐使用MCP而非传统的函数调用(Function Call)[^2]。这是因为前者能够更好地维护会话状态并动态调整后续行为策略,尤其适用于以下几种典型情形: - 需要持续更新背景资料以辅助决策制定的过程; - 跨多个模块共享同一组参数设定而不必重复发送相同的信息; - 支持插件式扩展能力使得第三方服务轻松接入现有框架之内。 ```python import mcp_client def setup_context(): client = mcp_client.connect(server='example.com', port=8080) context_data = { 'user_profile': {'name': 'Alice'}, 'conversation_history': ['Hi!', 'How are you?'] } response = client.send(context=context_data) return response.get('next_action') action_to_take = setup_context() print(f"The next action is {action_to_take}") ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值