技术文档MCP(Model Context Protocol)

MCP(Model Context Protocol)

AIMCP
内容

MCP介绍

  • MCP官网:https://modelcontextprotocol.io/introduction
  • anthropic(Claude) MCP:https://www.anthropic.com/news/model-context-protocol
  • Cline(VS code) MCP: https://docs.cline.bot/mcp-servers/mcp-transport-mechanisms

什么是Model Context Protocol(MCP)

MCP(模型上下文协议)是一种 开放标准,它允许开发者 安全地 在 数据源 和 AI 工具 之间建立 双向连接。其架构非常简单:

  • 开发者可以通过 MCP 服务器 公开他们的数据;
  • AI 应用(MCP 客户端) 可以连接到 MCP 服务器,获取所需数据。

MCP的三大核心组件:

  1. MCP 协议规范与 SDK,供开发者构建与集成 MCP;
  2. Claude 桌面应用中的本地 MCP 服务器支持,便于开发者测试;
  3. MCP 服务器的开源存储库,帮助开发者快速接入不同系统。

为什么MCP?

MCP让你能够在LLM之上构建智能代理(Agents)和复杂工作流。在智能体交互过程中LLM需要与数据和工具集成,MCP提供了:

  • 丰富的预构建集成,LLM 可直接对接
  • 跨 LLM 供应商的灵活性,支持随时切换
  • 数据安全的最佳实践,确保数据存储在本地基础设施中

Function call vs MCP

  1. 同步vs异步:点菜与网购的隐喻
    • Function Call 是同步调用,如同在餐厅点菜后必须等待厨师完成才能进行下一步操作。调用函数后,程序会阻塞等待返回结果,适合需要即时响应且后续逻辑依赖结果的场景,例如简单的数据查询
    • MCP则是异步协议,类似网购下单后继续处理其他任务,系统在后台完成请求后通过回调通知结果。这种机制避免了程序阻塞,适用于耗时操作(如网络请求、文件读写)。
  2. 标准化 vs 私有化:通用插座与专属充电器
    • Function Call 由特定厂商(如OpenAI)定义,类似于品牌手机的专属充电协议,功能局限于预定义的函数列表,灵活性较低。
    • MCP 标准化协议(基于JSON-RPC 2.0),如同"万能插座",为不同大模型和工具提供统一的交互规范,开发者只需遵循一次接口标准,即可实现跨平台兼容。
  3. 交互灵活性:单步执行与多线程协作
    • Function Call通常仅支持单次函数调用,且受限于预定义的操作集合,难以应对复杂多步骤任务。
    • MCP支持动态上下文管理和并行请求,例如同时从多个服务器获取数据并整合结果,显著提升复杂工作流的效率。

Function Call

  • OpenAI提供了一个规范化调用函数的方法: Function call
    • 发给ai的说明书System Prompt用json格式定义(tools)
    • 所有外部工具都通过http暴露接口出来,在dify这样的智能体平台把外部工具的API schema配置好。 dify把http信息转换成function call的工具使用说明书格式
      • 缺点
        1. 要为每个http写一个API Schema,一个Agent可能有几百个外部工具,而且外部工具的接口变动都需要修改对应的schema
        2. 每个工具都暴露接口,安全也有问题

解决function call的调用外部工具困难和安全问题:MCP

  • MCP server:外部工具外面封装一层
  • MCP client:和外部工具的封装层打交道的一层
    • server和client中间由MCP连接
  • MCP host:中介程序(如claude,vscode里面的cline插件) 优点:不需要编写API schema,也不用暴露HTTP接口了

MCP的架构

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

MCP底层原理讲解

  1. MCP client和MCP server之间的通信:Cline(VScode) MCP
    • STDIO Transport:适合server和client在同一主机之间的通信(localhost)
    • HTTP+SSE方式通信 Server-Sent Events (SSE) transport:AI一个字一个字往外蹦的效果就是通过SSE方式实现的
  2. MCP client和LLM之间的通信:function call

MCP应用的实现

fraud detection Voice cloning

MCP的server端和client开发

项目:MCP天气查询

  • 自定义server,实现天气查询功能
  • 定义client端,通过agent查询天气

graphrag+MCP的智能体agent开发

将rag的服务看成是一个工具,通过标准的MCP协议访问

  • 构建graphrag索引库
  • 基于graphrag索引库开发server端
  • 定义client端,并将client端封装到agent中,实现graphrag+mcp+agent的应用

rag+MCP的智能体开发

  • 使用本地的向量模型,构建rag索引库
  • 基于rag索引库开发server端
  • 定义client端,并将client端封装到agent中,实现graphrag+mcp+agent的应用

RAG

Agent

MCP+爬虫

通过本地的爬虫代码同步大模型最新的信息->询问大模型最新的信息

Reference