MCP(Model Context Protocol)介绍

December 15, 2025 作者: yonghao 分类: 浏览: 0 评论: 0

一、什么是 MCP?

MCP(Model Context Protocol,模型上下文协议) 是一种面向 AI 模型与外部系统之间交互的应用层协议

它的目标是:

为 AI 模型提供一种标准化、可控、可扩展的方式,用于发现、访问和调用外部能力与上下文。

MCP 并不是某个具体模型或 SDK,而是一套协议规范,用于定义模型与“工具 / 资源 / Prompt”等外部能力之间的交互方式。


二、MCP 解决了什么问题?

在 MCP 出现之前,模型调用外部能力通常存在以下问题:

  • 工具调用方式各不相同,缺乏统一标准

  • Prompt、工具、上下文强耦合在代码中,难以复用

  • 模型对外部资源的访问不可控、不可审计

  • 不同 Agent / 框架之间难以互操作

MCP 的核心价值在于:

  • 把「模型如何使用外部能力」这件事协议化

  • 把上下文、工具、Prompt 提升为一等协议对象

  • 提供清晰的安全边界和能力声明机制


三、MCP 的协议定位

3.1 MCP 不是什么

  • ❌ 不是模型推理协议(不替代 OpenAI / Claude / Minimax API)

  • ❌ 不是单纯的函数调用机制

  • ❌ 不是某个语言或框架私有方案

3.2 MCP 是什么

  • ✅ 一个 AI 与外部世界交互的标准协议

  • ✅ 构建在 JSON-RPC 2.0 之上的应用层协议

  • ✅ 面向 Agent、工具系统、上下文系统设计


四、MCP 的协议分层结构

从协议栈角度看,MCP 位于应用层

┌────────────────────────────┐
│        AI Model / Agent    │
├────────────────────────────┤
│   MCP Application Layer    │  ← MCP 核心定义
├────────────────────────────┤
│        JSON-RPC 2.0        │
├────────────────────────────┤
│ Transport (HTTP / SSE /    │
│ STDIO / Streamable HTTP)   │
├────────────────────────────┤
│      OS / Network          │
└────────────────────────────┘

MCP 不重新发明传输协议,而是专注于定义交互语义和能力模型


五、MCP 定义的核心协议内容

5.1 基础通信协议(JSON-RPC 2.0)

MCP 强制基于 JSON-RPC 2.0,继承其三种消息类型:

  • Request:请求(有 id,需要响应)

  • Response:响应

  • Notification:通知(无 id,不需要响应)

基本消息结构示例:

{
  "jsonrpc": "2.0",
  "id": "123",
  "method": "method.name",
  "params": {}
}

5.2 会话生命周期与初始化流程

MCP 定义了明确的会话初始化与握手流程

初始化顺序

Client  → initialize  → Server
Client  ← capabilities ← Server
Client  → initialized → Server

初始化阶段的作用

  • 协议版本协商

  • 客户端能力声明

  • 服务端能力发现(Capabilities Discovery)

  • 为后续交互建立上下文边界


六、MCP 的能力模型(核心设计)

MCP 协议最重要的部分,是对 能力(Capabilities) 的标准化定义。

6.1 三类一等能力对象

MCP 明确定义了三种能力类型:

能力类型

含义

Tool

可执行的操作或函数

Resource

可读取的上下文资源

Prompt

可复用的 Prompt 模板

这三者都属于协议级对象,而不是实现细节。


6.2 Tool(工具)协议定义

Tool 表示模型可以调用的动作,其协议定义包含:

  • 名称

  • 描述

  • 输入参数 Schema(JSON Schema)

示例:

{
  "name": "search_orders",
  "description": "Search orders by user id",
  "inputSchema": {
    "type": "object",
    "properties": {
      "userId": { "type": "string" }
    }
  }
}

协议层明确规定了:

  • Tool 的声明方式

  • Tool 的调用方式

  • Tool 返回结果的结构


6.3 Resource(资源)协议

Resource 用于描述模型可按需获取的上下文信息

例如:

  • 文件

  • 文档

  • 数据查询结果

  • 知识条目

协议示例:

{
  "uri": "file:///docs/manual.pdf",
  "mimeType": "application/pdf"
}

与传统 RAG 不同,MCP 中的 Resource 是:

模型可主动请求的上下文资源


6.4 Prompt(提示模板)协议

Prompt 在 MCP 中被协议化和资产化。

{
  "name": "summarize_document",
  "arguments": ["language"]
}

这意味着 Prompt:

  • 可以被版本化

  • 可以复用

  • 可以由系统统一管理

  • 不再散落在代码中


七、交互行为与并发模型

MCP 明确支持以下交互特性:

  • 多个并发请求(in-flight requests)

  • 单向通知(Notification)

  • 流式返回(Streaming)

  • 双向通信

这些能力使 MCP 非常适合构建 Agent Loop 和复杂交互系统。


八、传输层支持(与传输解耦)

MCP 本身是传输无关的协议,但规范中明确支持:

  • HTTP(请求-响应)

  • Server-Sent Events(SSE)

  • STDIO(本地进程通信)

  • 可流式 HTTP 连接

这使 MCP 既可以用于:

  • 本地插件

  • IDE 集成

  • 后端服务

  • Agent 运行时


九、错误模型(Error Handling)

MCP 基于 JSON-RPC 的错误结构,并扩展其语义。

{
  "code": -32001,
  "message": "Resource not found",
  "data": {
    "uri": "file:///missing.txt"
  }
}

错误类型包括:

  • 协议错误

  • 工具执行错误

  • 权限或鉴权错误


十、安全与边界设计

MCP 在协议层面强调安全与可控性

  • 所有工具和资源必须显式声明

  • 模型不能访问未暴露的能力

  • 服务端负责授权与鉴权

  • 协议层不允许“隐式能力”

这是 MCP 与“让模型随意执行代码”方案的根本区别。


十一、总结

MCP 定义的不是某个 SDK,而是一整套标准化交互协议。

它核心解决的是:

AI 模型如何在安全、可控、可复用的前提下,与外部世界进行结构化交互。

一句话总结 MCP:

MCP 是 AI Agent 访问工具、资源和上下文的通用协议标准。


如果你需要,我也可以继续输出:

  • 📄《MCP 与 Function Calling 的协议级对比》

  • 📄《为什么 MCP 适合构建 Agent 系统》

  • 📄《MCP 协议交互完整示例(JSON)》

你可以直接说要哪一篇。


评论