技术文档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的三大核心组件:
- MCP 协议规范与 SDK,供开发者构建与集成 MCP;
- Claude 桌面应用中的本地 MCP 服务器支持,便于开发者测试;
- MCP 服务器的开源存储库,帮助开发者快速接入不同系统。
为什么MCP?
MCP让你能够在LLM之上构建智能代理(Agents)和复杂工作流。在智能体交互过程中LLM需要与数据和工具集成,MCP提供了:
- 丰富的预构建集成,LLM 可直接对接
- 跨 LLM 供应商的灵活性,支持随时切换
- 数据安全的最佳实践,确保数据存储在本地基础设施中
Function call vs MCP
- 同步vs异步:点菜与网购的隐喻
- Function Call 是同步调用,如同在餐厅点菜后必须等待厨师完成才能进行下一步操作。调用函数后,程序会阻塞等待返回结果,适合需要即时响应且后续逻辑依赖结果的场景,例如简单的数据查询
- MCP则是异步协议,类似网购下单后继续处理其他任务,系统在后台完成请求后通过回调通知结果。这种机制避免了程序阻塞,适用于耗时操作(如网络请求、文件读写)。
- 标准化 vs 私有化:通用插座与专属充电器
- Function Call 由特定厂商(如OpenAI)定义,类似于品牌手机的专属充电协议,功能局限于预定义的函数列表,灵活性较低。
- MCP 标准化协议(基于JSON-RPC 2.0),如同"万能插座",为不同大模型和工具提供统一的交互规范,开发者只需遵循一次接口标准,即可实现跨平台兼容。
- 交互灵活性:单步执行与多线程协作
- Function Call通常仅支持单次函数调用,且受限于预定义的操作集合,难以应对复杂多步骤任务。
- MCP支持动态上下文管理和并行请求,例如同时从多个服务器获取数据并整合结果,显著提升复杂工作流的效率。
Function Call
- OpenAI提供了一个规范化调用函数的方法: Function call
- 发给ai的说明书System Prompt用json格式定义(tools)
- 所有外部工具都通过http暴露接口出来,在dify这样的智能体平台把外部工具的API schema配置好。
dify把http信息转换成function call的工具使用说明书格式
- 缺点:
- 要为每个http写一个API Schema,一个Agent可能有几百个外部工具,而且外部工具的接口变动都需要修改对应的schema
- 每个工具都暴露接口,安全也有问题
- 缺点:
解决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底层原理讲解
- MCP client和MCP server之间的通信:Cline(VScode) MCP
- STDIO Transport:适合server和client在同一主机之间的通信(localhost)
- HTTP+SSE方式通信 Server-Sent Events (SSE) transport:AI一个字一个字往外蹦的效果就是通过SSE方式实现的
- 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
- 抓包分析了MCP,直接惊呆了!高端的技术往往只需要最朴素的实现方式~
- MCP的问题:System prompt和user prompt总共花了六万多token
- MCP+GraphRAG+LLM智能体全栈开发课程
- SSE MCP服务器教程