AGI围城
首页
基础知识
工程实践
所见所思
  • 学习
  • 面试
  • 心情杂货
  • 实用技巧
  • 友情链接
关于
收藏
  • 分类
  • 标签
  • 归档
GitHub (opens new window)

AGI围城

是的,这个世界还是很有趣的。
首页
基础知识
工程实践
所见所思
  • 学习
  • 面试
  • 心情杂货
  • 实用技巧
  • 友情链接
关于
收藏
  • 分类
  • 标签
  • 归档
GitHub (opens new window)
  • 提示词工程

  • 大模型API调用

  • OpenAI工具

  • 嵌入向量

  • 检索增强生成(RAG)

  • LlamaIndex

  • LangChain

  • Agent

  • Workflow

  • Transformer

  • 微调

  • MCP

    • 1.MCP概述
    • 2.MCP核心架构
      • 2.1 整体架构
      • 2.2 核心组件
        • Host(主机)
        • Client(客户端)
        • Server(服务器)
      • 2.3 协议原语(Primitives)
        • Resources(资源)
        • Tools(工具)
        • Prompts(提示词模板)
        • Sampling(采样)
        • 原语对比
      • 2.4 传输机制
        • stdio 传输
        • Streamable HTTP 传输
      • 2.5 消息格式
        • 请求消息
        • 响应消息
        • 通知消息
        • 错误响应
      • 2.6 连接生命周期
        • Server 组件与生命周期
        • 能力协商
      • 2.7 小结
    • 3.MCP开发实践
    • 4.MCP生态与资源
  • A2A

  • 基础知识
  • MCP
xiao_sl
2025-05-03
目录

2.MCP核心架构

# 2.1 整体架构

MCP 采用客户端-服务器架构,通过标准化的协议实现 AI 应用与外部资源的通信。

mcp-3

# 2.2 核心组件

# Host(主机)

Host 是运行 MCP Client 的应用程序,负责:

  • 管理多个 MCP Client 实例
  • 协调 AI 模型与 MCP Server 之间的交互
  • 处理用户授权和安全策略

常见的 Host 应用:

  • Claude Desktop
  • Cursor IDE
  • VS Code + Cline 插件
  • 自定义 AI 应用

# Client(客户端)

Client 是 Host 内部的组件,负责:

  • 与单个 MCP Server 建立连接
  • 维护与 Server 的通信会话
  • 处理协议层的消息收发

特点:

  • 一个 Host 可以包含多个 Client
  • 每个 Client 连接一个 Server
  • Client 与 Server 保持 1:1 的关系

# Server(服务器)

Server 是提供具体功能的服务端程序,负责:

  • 暴露 Resources(资源)
  • 提供 Tools(工具)
  • 定义 Prompts(提示词模板)

Server 的运行方式:

  • 本地进程(通过 stdio 通信)
  • 远程服务(通过 Streamable HTTP 通信)

# 2.3 协议原语(Primitives)

MCP 定义了四种核心原语,用于描述 Server 提供的能力:

# Resources(资源)

Resources 是 Server 暴露给 Client 的数据内容,类似于文件或数据库记录。

{
  "uri": "file:///path/to/document.txt",
  "name": "项目文档",
  "description": "项目的主要文档",
  "mimeType": "text/plain"
}
1
2
3
4
5
6

特点:

  • 由 URI 唯一标识
  • 可以是文本或二进制数据
  • 支持订阅变更通知
  • 由 应用程序控制(Application-controlled)

常见用途:

  • 文件内容
  • 数据库查询结果
  • API 响应数据
  • 实时数据流

# Tools(工具)

Tools 是 Server 提供的可执行功能,允许 AI 模型执行特定操作。

{
  "name": "search_files",
  "description": "在指定目录中搜索文件",
  "inputSchema": {
    "type": "object",
    "properties": {
      "directory": {
        "type": "string",
        "description": "搜索目录路径"
      },
      "pattern": {
        "type": "string",
        "description": "文件名匹配模式"
      }
    },
    "required": ["directory", "pattern"]
  }
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18

特点:

  • 由 模型控制(Model-controlled)
  • 需要用户确认后执行
  • 支持复杂的输入参数
  • 可以产生副作用(如修改文件)

常见用途:

  • 文件操作(创建、修改、删除)
  • 数据库操作(查询、更新)
  • API 调用
  • 系统命令执行

# Prompts(提示词模板)

Prompts 是预定义的提示词模板,帮助用户更好地与 AI 交互。

{
  "name": "code_review",
  "description": "代码审查提示词模板",
  "arguments": [
    {
      "name": "code",
      "description": "需要审查的代码",
      "required": true
    },
    {
      "name": "language",
      "description": "编程语言",
      "required": false
    }
  ]
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16

特点:

  • 由 用户控制(User-controlled)
  • 支持参数化
  • 可以包含动态内容
  • 提供标准化的交互模式

# Sampling(采样)

Sampling 允许 Server 请求 AI 模型生成内容,实现更复杂的交互模式。

{
  "messages": [
    {
      "role": "user",
      "content": "请分析以下代码的性能问题..."
    }
  ],
  "maxTokens": 1000
}
1
2
3
4
5
6
7
8
9

特点:

  • Server 可以主动请求 AI 生成
  • 支持多轮对话
  • 需要 Host 授权

# 原语对比

原语 控制方 主要用途 是否有副作用
Resources 应用程序 提供数据 否
Tools AI 模型 执行操作 可能有
Prompts 用户 交互模板 否
Sampling Server 请求生成 否

# 2.4 传输机制

MCP 支持两种传输机制,适用于不同的部署场景:

# stdio 传输

通过标准输入/输出进行通信,适用于本地进程。

mcp-2

特点:

  • 简单直接,无需网络配置
  • 适合本地工具和脚本
  • Server 作为子进程运行
  • 通信延迟低

适用场景:

  • 本地文件系统访问
  • 本地数据库连接
  • 命令行工具封装

# Streamable HTTP 传输

通过 HTTP 进行双向流式通信,适用于远程服务。这是 MCP 最新的传输标准,取代了之前的 HTTP+SSE 方案。

mcp-2

特点:

  • 支持真正的双向流式通信
  • 单一 HTTP 端点,简化部署
  • 支持远程部署和负载均衡
  • 更好的连接管理和错误处理
  • 兼容现代 HTTP 基础设施

适用场景:

  • 云端 API 服务
  • 共享的 MCP Server
  • 需要认证的服务
  • 微服务架构集成

# 2.5 消息格式

MCP 使用 JSON-RPC 2.0 作为消息格式,所有通信都遵循这一标准。

# 请求消息

{
  "jsonrpc": "2.0",
  "id": 1,
  "method": "tools/call",
  "params": {
    "name": "search_files",
    "arguments": {
      "directory": "/home/user/projects",
      "pattern": "*.py"
    }
  }
}
1
2
3
4
5
6
7
8
9
10
11
12

# 响应消息

{
  "jsonrpc": "2.0",
  "id": 1,
  "result": {
    "content": [
      {
        "type": "text",
        "text": "找到 5 个匹配的文件..."
      }
    ]
  }
}
1
2
3
4
5
6
7
8
9
10
11
12

# 通知消息

{
  "jsonrpc": "2.0",
  "method": "notifications/resources/updated",
  "params": {
    "uri": "file:///path/to/file.txt"
  }
}
1
2
3
4
5
6
7

# 错误响应

{
  "jsonrpc": "2.0",
  "id": 1,
  "error": {
    "code": -32600,
    "message": "Invalid Request",
    "data": {
      "details": "Missing required parameter: directory"
    }
  }
}
1
2
3
4
5
6
7
8
9
10
11

# 2.6 连接生命周期

MCP 连接遵循以下生命周期:

lifecycle

# Server 组件与生命周期

MCP Server 由五个核心组件构成,并在整个生命周期中面临不同的安全挑战:

Server 核心组件:

组件 内容
Metadata 名称、描述、版本信息
Configuration 源代码、配置文件、清单文件
Tool List 工具名称、描述、权限定义
Resources List 数据源、端点、权限
Prompts 模板、工作流、元数据

生命周期阶段及安全风险:

Creation(创建阶段)

  • Server 注册 → 名称冲突
  • 安装部署 → 安装器欺骗
  • 代码完整性验证 → 后门植入

Operation(运行阶段)

  • 工具执行 → 工具名冲突
  • 斜杠命令 → 命令重叠
  • 沙箱机制 → 沙箱逃逸

Update(更新阶段)

  • 授权管理 → 权限持久化
  • 版本控制 → 漏洞版本引入
  • 旧版本处理 → 配置漂移

# 能力协商

在初始化阶段,Client 和 Server 会交换各自支持的能力:

Client 能力:

  • roots - 支持根目录列表
  • sampling - 支持采样请求

Server 能力:

  • resources - 提供资源
  • tools - 提供工具
  • prompts - 提供提示词模板

# 2.7 小结

MCP 的核心架构设计简洁而强大:

  • 三层结构:Host → Client → Server,职责清晰
  • 四种原语:Resources、Tools、Prompts、Sampling,覆盖各种交互场景
  • 双传输机制:stdio 和 Streamable HTTP,适应本地和远程部署
  • 标准消息格式:JSON-RPC 2.0,易于实现和调试

下一节我们将进入实践环节,学习如何配置和开发 MCP Server。

编辑 (opens new window)
#MCP#架构#协议
上次更新: 2025/12/19, 15:17:48
1.MCP概述
3.MCP开发实践

← 1.MCP概述 3.MCP开发实践→

最近更新
01
我是如何发现临时邮箱的?一个真实的故事
06-12
02
4.核心实现
05-26
03
3.A2A开发实践
05-22
更多文章>
Theme by Vdoing | Copyright © 2019-2025 AGI围城 | 桂ICP备2024034950号 | 桂公网安备45142202000030
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式