MCP(模型上下文协议)说明

背景

MCP(Model Context Protocol,模型上下文协议)旨在解决大型语言模型(LLM)与外部数据源及工具集成的问题。由Anthropic公司于2024年11月提出并开源,目标是实现AI模型与现有系统的无缝集成。

解决的问题

  1. 统一接口:MCP 提供了一个统一的接口,解决了不同数据源和工具之间的兼容问题,使得 AI 应用能够更加灵活地与外部资源进行交互。
  2. 降低集成成本:开发者不再需要为每种工具或数据源编写单独的集成代码,通过 MCP 协议,AI 模型能够轻松接入多种服务,减少了开发和维护的工作量。
  3. 双向通信:MCP 协议的双向通信机制使得 AI 应用可以与外部工具和数据源进行更为复杂和智能的交互,为未来的智能化应用提供了更加广阔的可能性。
  4. 高度扩展性:MCP 支持多种数据传输机制和传输层协议,具有良好的扩展性,能够适应不同的应用需求。

发展历程与时间线

MCP协议的发展经历了几个关键阶段:

  • 2024年11月24日:Anthropic首次提出MCP协议,旨在为无法直接修改底层逻辑的Agent(如Cursor、Claude桌面端等)提供工具调用标准

  • 2024年12月:技术社区出现首批基于Claude 3.5 + MCP的应用案例,如通过MCP协议实现Claude与本地文件系统、数据库的自动化交互

  • 2025年3月初:MCP生态进入规模化应用阶段,企业如Block、Apollo等通过集成MCP实现跨系统数据调度,业务流程响应速度提升数倍

  • 2025年3月11日:LangChain联合创始人与LangGraph负责人围绕MCP展开辩论,40%参与者支持MCP成为未来标准

  • 2025年3月17日:Anthropic推出MCP协议新传输方案"Streamable HTTP",彻底重构通信机制,解决原HTTP+SSE方案在连接恢复性、服务器负载及双向通信方面的核心瓶颈

  • 2025年3月27日:OpenAI宣布支持MCP协议,标志着MCP获得行业广泛认可

MCP Servers主要功能

  • 资源暴露:服务器提供给客户端的数据实体,可以是文件、数据库记录等。
  • 工具提供:服务器暴露的可执行功能,客户端可以通过调用这些工具完成特定任务。
  • 动态通知:当资源发生变化时,服务器可以通过通知机制主动推送更新到客户端。
  • 会话管理:处理客户端的连接初始化、能力协商和会话关闭。

协议架构

MCP 采用客户端-服务器架构:

  • MCP Host(主机):运行LLM的应用程序,例如Claude 桌面版、IDE 插件或聊天机器人。主机是与外部数据源或工具交互的核心,通常需要从外部获取上下文数据或执行操作。
  • MCP Server(服务器):提供特定的功能或数据访问能力。服务器封装与实际数据源的交互逻辑,并对外暴露统一的MCP接口。
  • MCP Client(客户端):充当主机和服务器之间的中介,负责将主机的请求转发给服务器,并将服务器的响应返回给主机。每个客户端与一个特定的服务器建立 1:1 的连接。

通过这种架构,MCP 协议消除了传统上每种数据源都需要单独集成的繁琐步骤,使得 AI 应用能够通过统一的接口与各种外部资源进行交互。

  • MCP 主机 :通过 MCP 访问数据的 Claude Desktop、IDE 或 AI 工具等程序
  • MCP 客户端 :与服务器保持 1:1 连接的协议客户端
  • MCP 服务器 :轻量级程序,每个程序都通过标准化的 Model Context Protocol 公开特定功能
  • 本地数据源 :MCP 服务器可以安全访问的计算机文件、数据库和服务
  • 远程服务 :MCP 服务器可以连接到的 Internet 上可用的外部系统(例如,通过 API)

核心原理

MCP 协议基于标准的客户端-服务器架构,其中 Host、Client 和 Server 分别承担不同的角色。通信过程遵循 JSON-RPC 等通用 Web 协议来实现双向通信。Host 通过 MCP Client 调用 Server 提供的服务或方法(例如读取文件、执行搜索等),而 Server 完成相应操作后将结果返回给 Host。

整个过程采用 JSON 格式的消息进行数据传输,这样做的好处是确保了上下文在多次交互中得以保持,实现了“连续对话”的功能,而不仅仅是一次性 API 调用。

模型如何确定工具选择

模型通过prompt engineering来确定应该使用哪些工具:

  1. 当MCP Server初始化时,它会获取所有可用工具的描述信息
  2. 这些工具描述(包括名称、功能说明和参数要求)被格式化成文本形式
  3. 格式化后的工具描述与用户问题一起作为prompt发送给LLM
  4. LLM基于这些描述和用户问题进行推理,决定是否需要调用工具及调用哪些工具
  5. 如果需要调用工具,LLM会输出JSON格式的工具调用请求

工具的描述信息通常直接来自开发者定义的函数名和函数docstring。

ReAct循环与处理机制

MCP实现了ReAct(Reasoning + Acting)循环机制:

  1. LLM分析用户需求并制定任务计划
  2. 执行工具调用并获取结果
  3. 基于结果进行推理并决定下一步行动
  4. 如果参数不完整或输出结果置信度低,启动用户协同修正流程
  5. 循环迭代直至任务完成

    传输协议

    • stdio:通过标准I/O进行通信,服务器运行在本地,数据更安全。
    • HTTP with Server-Sent Events (SSE):通过 HTTP 与外部服务进行通信。

    相关服务

    目前已经有大量服务和应用基于 MCP 实现,例如可以使用 GitHub-MCP,用自然语言提交代码、创建 PR。利用 Figma MCP,让 AI 直接生成 UI 图。接入 Browser-tools-MCP 后,甚至还能让 cursor 根据浏览器控制台中的元素节点和打印的日志进行代码调试。

    MCP与其他协议的关系

    MCP与A2A协议

    MCP和Agent-to-Agent(A2A)协议实际上是互补关系而非竞争关系:

    • MCP:连接大模型与外部数据源/工具,提供上下文和工具支持
    • A2A:不同智能体之间的通信协议,支持智能体间协作完成复杂任务

    两者可以协同工作构建复杂AI系统:

    • A2A负责任务分配、状态同步和协作管理
    • MCP为单个智能体提供外部资源访问能力

    MCP协议内容

    xx​​​​​​​Specification - Model Context Protocol

    参考文章

    一文搞懂 MCP Servers - 虫师 - 博客园

    什么是MCP协议?MCP的技术架构与核心原理是什么?MCP封装了哪些协议?_mcp服务封装-CSDN博客

    <think>嗯,用户想了解MCP模型上下文协议,还希望有代码示例。首先,我需要确认MCP模型具体指什么,因为不同的领域可能有不同的缩写。比如,在计算机科学中,MCP可能指Multi-layer Communication Protocol,或者Message Context Protocol?或者是不是某个特定框架或系统里的术语? 不过考虑到用户提到的是“上下文协议”,可能涉及到通信协议中的上下文管理,比如在分布式系统中维护会话状态或上下文信息。也有可能是指某种设计模式中的上下文处理机制。我需要先回忆一下常见的协议模型,或者是否有知名的MCP模型。 再想想,可能是Message Channel Protocol?或者是某个论文中的特定模型?如果找不到确切的信息,可能需要根据常见的上下文管理协议来推测。比如,在Web服务中,上下文可能通过HTTP头部传递,或者在RPC框架中维护调用链的上下文。 另外,用户提到“代码示例”,所以可能需要构造一个简化的示例来说明上下文如何在协议中传递。比如,客户端在请求时携带上下文信息,服务器处理时读取并传递到下一个服务。这样的例子可能用HTTP和中间件来实现。 假设MCP模型中的上下文协议是指一种维护和传递上下文信息的机制,例如在微服务架构中,通过协议头传递跟踪ID、认证令牌等信息。这种情况下,代码示例可能涉及如何设置和读取HTTP头,或者使用类似OpenTracing的标准。 需要确保解释结构清晰,分步骤说明协议的工作原理,然后给出示例代码。可能的步骤包括:上下文的创建、封装、传输、解析和处理。代码可以用Python的Flask框架展示服务器如何读取上下文,或者使用requests库展示客户端如何发送上下文。 另外,要检查是否有拼写错误,可能用户指的是MCCP(一种压缩协议)或者MCPE(游戏相关),但结合“上下文协议”,更可能是指自定义的协议模型。因此,可能需要做一个合理的假设,并明确说明这是基于常见模式的一个解释,因为MCP模型可能有不同的定义。 总结,回答的结构应该先解释上下文协议的基本概念,然后说明MCP模型中的具体实现方式,最后给出代码示例。需要确保术语使用正确,如果MCP是特定领域的术语,可能需要用户进一步澄清,但根据问题无法确认,所以基于一般知识进行回答,并适当说明假设。</think>关于MCP模型上下文协议(Message Context Protocol),目前公开资料中未找到标准定义。根据命名推测,其可能是一种面向消息传递的协议框架,核心目标是在分布式系统中实现跨组件的上下文信息传递。以下是基于常见上下文管理模式的逻辑推演说明: --- ### 核心概念 1. **上下文封装** 将请求链路中的状态信息(如事务ID、用户身份、追踪标记等)封装为独立对象。 2. **协议层透传** 通过协议头(如HTTP Header)或消息元数据传递上下文,确保跨服务边界的数据完整性。 3. **线程级绑定** 在服务内部通过ThreadLocal或协程上下文实现隐式传递,避免显式参数污染。 --- ### 典型实现逻辑(伪代码模型) ```python # 上下文对象定义 class RequestContext: def __init__(self, trace_id, user_id): self.trace_id = trace_id self.user_id = user_id # 上下文管理器(ThreadLocal存储) class ContextManager: _local = threading.local() @classmethod def set_context(cls, context): cls._local.current_context = context @classmethod def get_context(cls): return getattr(cls._local, 'current_context', None) # HTTP中间件示例(Flask) from flask import request, Response import json @app.before_request def inject_context(): # 从HTTP Header提取上下文 trace_id = request.headers.get('X-Trace-ID') user_id = request.headers.get('X-User-ID') # 构建并存储上下文 ctx = RequestContext(trace_id, user_id) ContextManager.set_context(ctx) # 业务代码隐式使用上下文 def business_logic(): ctx = ContextManager.get_context() print(f"Processing request {ctx.trace_id} from user {ctx.user_id}") # 客户端发送请求示例(携带上下文) import requests headers = { 'X-Trace-ID': 'uuid4_here', 'X-User-ID': 'user123' } response = requests.post('http://service/api', headers=headers) ``` --- ### 关键设计点 1. **传输标准化** 使用`X-Context-*`类Header传递结构化数据(如JSON Base64编码)。 2. **生命周期管理** - 入口服务创建初始上下文 - 中间件自动透传至下游服务 - 出口服务清理上下文 3. **兼容性策略** 对非MCP协议的服务采用兼容模式(如数据库注释字段追加TraceID)。 --- ### 应用场景 - 分布式追踪(APM系统) - 跨服务事务管理 - 请求链路的权限/配额控制 注:具体实现需参考实际系统文档,以上为通用设计模式的抽象示例。
    评论
    添加红包

    请填写红包祝福语或标题

    红包个数最小为10个

    红包金额最低5元

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

    抵扣说明:

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

    余额充值