一、MCP介绍


定义

MCP(Model Context Protocol,模型上下文协议) 是由 Anthropic 于 2024 年 11 月提出的一种开放标准协议,旨在为 AI 模型(如大语言模型 LLM)提供一种统一的方式来连接和访问外部数据源、工具和服务。
可以把 MCP 理解为 AI 世界的 USB-C 接口 —— 就像 USB-C 为各种设备提供了统一的连接标准一样,MCP 为 AI 模型与外部系统之间提供了统一的交互协议。

定位:

连接Agent、RAG、Skill的“中间层”,负责标准化调度、权限管理、上下文维护,

当驾驶员(Agent)想打开空调,他不需要知道压缩机的工作原理,他只需要按下中控台的标准化按钮(MCP 接口)。MCP 将“打开空调”的指令标准化,让 Agent 能无缝调用任何品牌的空调(Skill)。

在旧式 AI 中,驾驶员(Agent)可能需要专门学习如何操作某一款特定的空调(Skill)。而有了 MCP,就像汽车有了标准化的 CAN 总线,任何符合标准的设备(如新加的自动驾驶仪、氛围灯)都能即插即用,Agent 无需重新学习。

核心能力:

    统一调度:接收Agent的调用请求,根据请求类型(需要知识/需要执行),分发到对应的RAG或Skill组件;
    接口标准化:为RAG、Skill提供统一的调用接口,避免不同组件“接口不兼容”的问题,降低系统集成成本;
    上下文与权限管理:保存任务进度、用户偏好、会话状态,同时控制Agent对RAG/ Skill的调用权限,避免违规操作;
    异常处理:当RAG检索失败、Skill调用超时或权限不足时,统一处理并反馈给Agent,让Agent重新调整决策。

类比:电脑的USB-TypeC接口——不管是U盘、显示器还是充电器,都能通过这个统一接口连接电脑,MCP就相当于这个“统一接口”,让Agent、RAG、Skill能高效、安全地协同工作。 
 

二、核心架构


MCP 采用经典的 客户端-服务器(Client-Server) 架构

角色说明

MCP Host(宿主):AI 应用程序本身,如 IDE(Copilot)、Claude Desktop 等
MCP Client(客户端):嵌入在 Host 中,负责与 MCP Server 建立连接、发送请求
MCP Server(服务端):轻量级服务程序,封装了对外部资源/工具的访问能力 

通信协议


MCP 基于 JSON-RPC 2.0 协议进行通信,支持两种传输方式:
stdio:通过标准输入/输出通信,使用场景:本地进程,如本地脚本、CLI 工具
HTTP(Streamable HTTP):通过 HTTP 请求通信, 使用场景:远程服务。

MCP 的三大核心能力

MCP Server 可以向 Client 暴露三种类型的能力:
1. 🔧 Tools(工具)
模型可以调用的函数/操作
例如:查询告警事件、创建 TAPD 需求、执行数据库查询
以你的配置为例,s1sPplEvent 提供了 ListEvent、UpdateEvent 等工具
2. 📦 Resources(资源)
模型可以读取的数据
例如:文件内容、数据库记录、API 响应
3. 📝 Prompts(提示模板)
预定义的提示词模板
帮助模型更好地完成特定任务

三、MCP工作原理


核心原理:MCP 协议的服务发现机制
MCP 协议的设计灵感类似于 OpenAPI/Swagger 或 gRPC 的服务反射,它内置了一套标准的服务发现(Service Discovery)流程:

详细步骤


第一步:初始化连接(Initialize)


当 IDE 启动或加载 MCP 配置时,客户端向你配置的 URL 发送一个 initialize 请求:

{
  "jsonrpc": "2.0",
  "method": "initialize",
  "params": {
    "protocolVersion": "2024-11-05",
    "clientInfo": { "name": "CodeBuddy", "version": "1.0" },
    "capabilities": {}
  }
}

服务端返回它支持的能力,比如是否支持 tools、resources、prompts 等。

返回格式:


{"jsonrpc":"2.0","id":1,"result":{
    "protocolVersion": "2025-03-26",
    "capabilities": {
        "experimental": {},
        "tools": {
            "listChanged": false
        }
    },
    "serverInfo": {
        "name": "newrpc_mcp_server",
        "version": "0.0.1"
    }
}}


protocolVersion不能随意改:

MCP(Model Context Protocol)的协议版本号protocolVersion,它不是随意自定义的版本,而是MCP 官方规范定义的版本。它表示你的服务端实现遵循的是哪个版本的 MCP 协议规范。
目前 MCP 官方发布的协议版本
版本号 2024-11-05:MCP 早期正式版本
版本号  2025-03-26:当前最新的稳定版本

不能随意改:
1、客户端会校验版本:MCP 客户端(如 CodeBuddy、Claude Desktop 等)在 initialize 阶段会进行版本协商。如果服务端返回一个客户端不认识的版本(比如你随便写个 "2026-01-01"),客户端会直接报错拒绝连接,否则报错: unsupported protocol version 
2、版本决定协议行为:不同版本的 MCP 协议在请求/响应格式、能力声明、工具调用方式等方面可能有差异。版本号告诉客户端你的服务端支持哪些特性。
3、版本协商机制:initialize 时的流程是

第二步:列出工具(tools/list)

客户端发送 tools/list 请求:

{
  "jsonrpc": "2.0",
  "method": "tools/list"
}

服务端返回所有注册的工具定义,包括:

{
  "tools": [
    {
      "name": "ListBiz",
      "description": "查询业务列表...",
      "inputSchema": {
        "type": "object",
        "properties": {
          "biz_name": { "type": "string", "description": "业务名" },
          "start_time": { "type": "string", "description": "开始时间" }
        },
        "required": []
      }
    },
    {
      "name": "ListBizDecl",
      "description": "查询全部业务定义列表..."
    }
    // ... 其他工具
  ]
}

第三步:调用工具(tools/call)

当 AI 决定使用某个工具时,客户端发送 tools/call 请求:

{
  "jsonrpc": "2.0",
  "method": "tools/call",
  "params": {
    "name": "ListEventDecl",
    "arguments": {}
  }
}

类比理解:

四、总结


简单来说,MCP 就是一个让 AI 模型能够安全、标准化地调用外部工具和访问外部数据 的协议。它解决了以往每个 AI 应用都需要为每个外部服务单独写集成代码的问题,实现了 "一次接入,处处可用" 的目标。

Logo

AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。

更多推荐