本文来自微软MCP课程,我重新将内容进行了整理和翻译,去除掉了我自己认为的一些冗余内容,原文:

MCP介绍

为什么需要MCP

虽然,大模型使用起来非常容易,但随着应用使用时间的增加,你会期望AI可以集成各种功能和资源,比如访问电脑上的文件,或者想使用多个模型。随着应用规模的扩大,应用复杂度的提升,大模型的使用(更多大模型开发者的使用)越来越需要一个标准,这个标准就是Model Context Protocol(MCP)。

什么是 Model Context Protocol(MCP)?

Model Context Protocol(MCP) 是一个开放、标准化的接口,允许大语言模型(LLMs)与外部工具、API 和数据源无缝交互。它提供了一种一致的架构,使 AI 模型的功能超越其训练数据,从而构建更智能、可扩展且响应更快的 AI 系统。

举个例子:假如你有一个非常博学的机器人,但他所有的知识都来自于几年前读过的书(这就像 AI 的“训练数据”)。他不知道今天的新闻,不会查天气,也不能帮你叫外卖。 MCP(模型上下文协议) 就像是给这个机器人配了一个万能插座和一堆智能工具(比如浏览器、计算器、外卖App)。 通过这个“万能插座”(也就是 MCP):

  • 机器人就能安全地连接并使用这些外部工具。
  • 他可以立刻查询实时信息、处理数据、执行操作。

Model Context Protocol(MCP)就像 USB-C 之于物理设备连接一样,为 AI 交互提供了通用标准。在 AI 领域,MCP 提供了一致的接口,使模型(客户端)能够与外部工具和数据提供方(服务器)无缝集成,无需为每个 API 或数据源开发不同的自定义协议。 在 MCP 下,兼容的工具(称为 MCP 服务器)遵循统一标准。这些服务器可以列出其提供的工具或操作,并在 AI 智能体请求时执行这些操作。支持 MCP 的 AI 智能体平台能够从服务器发现可用工具,并通过该标准协议调用它们。

Model Context Protocol(MCP)的优点

在 MCP 出现之前,将模型与工具集成需要:

  • 为每对工具-模型编写定制代码
  • 每个供应商使用非标准 API
  • 因频繁更新导致集成中断
  • 工具数量增加时难以扩展

MCP 标准化的优势

优势说明
互操作性LLM 可无缝使用来自不同供应商的工具
一致性在不同平台和工具间行为统一
可复用性一次构建的工具可在多个项目和系统中复用
加速开发通过标准化、即插即用的接口减少开发时间
使用 MCP 的实际优势如下:
  • MCP 标准化了 AI 模型与工具和数据的交互方式
  • 促进可扩展性、一致性和互操作性
  • MCP 有助于减少开发时间、提高可靠性并扩展模型能力
  • 客户端-服务器架构支持灵活、可扩展的 AI 应用 使用MCP可为模型带来以下优势:
  • 数据新鲜度:模型可访问训练数据之外的最新信息
  • 能力扩展:模型可利用专用工具完成未经过训练的任务
  • 减少幻觉:外部数据源提供事实依据
  • 隐私保护:敏感数据可保留在安全环境中,无需嵌入提示中

MCP 高层架构概览

MCP 采用客户端-服务器模型,其中:

  • MCP Host(宿主) 运行 AI 模型
  • MCP Client(客户端) 发起请求
  • MCP Server(服务器) 提供上下文、工具和能力

核心组件

  • Resources(资源) – 提供给模型的静态或动态数据
  • Prompts(提示模板) – 用于引导生成的预定义工作流
  • Tools(工具) – 可执行函数,如搜索、计算等
  • Sampling(采样) – 通过递归交互实现智能体行为

MCP 服务器如何工作

MCP 服务器按以下方式运行:

  • 请求流程
    1. 由最终用户或代表用户的软件发起请求。
    2. MCP 客户端将请求发送给 MCP 宿主(Host),后者管理 AI 模型运行时。
    3. AI 模型接收用户提示,并可能通过一个或多个工具调用请求访问外部工具或数据。
    4. MCP 宿主(而非模型本身)使用标准化协议与一个或多个 MCP 服务器通信。
  • MCP 宿主功能
    • 工具注册表(Tool Registry):维护可用工具及其能力的目录。
    • 身份验证(Authentication):验证工具访问权限。
    • 请求处理器(Request Handler):处理来自模型的工具请求。
    • 响应格式化器(Response Formatter):将工具输出格式化为模型可理解的形式。
  • MCP 服务器执行
    • MCP 宿主将工具调用路由到一个或多个 MCP 服务器,每个服务器暴露特定功能(如搜索、计算、数据库查询等)。
    • MCP 服务器执行各自操作,并以一致格式将结果返回给 MCP 宿主
    • MCP 宿主格式化结果并将其传递给 AI 模型
  • 响应完成
    • AI 模型将工具输出整合到最终响应中。
    • MCP 宿主将该响应发送回 MCP 客户端,再由客户端交付给最终用户或调用软件。
---
title: MCP 架构与组件交互图
description: 展示 MCP 各组件之间数据流的示意图。
---
graph TD
    Client[MCP 客户端/应用] -->|发送请求| H[MCP 宿主]
    H -->|调用| A[AI 模型]
    A -->|工具调用请求| H
    H -->|MCP 协议| T1[MCP 服务器 工具01:网络搜索]
    H -->|MCP 协议| T2[MCP 服务器 工具02:计算器]
    H -->|MCP 协议| T3[MCP 服务器 工具03:数据库访问]
    H -->|MCP 协议| T4[MCP 服务器 工具04:文件系统]
    H -->|发送响应| Client

    subgraph "MCP 宿主组件"
        H
        G[工具注册表]
        I[身份验证]
        J[请求处理器]
        K[响应格式化器]
    end

    H <--> G
    H <--> I
    H <--> J
    H <--> K

    style A fill:#f9d5e5,stroke:#333,stroke-width:2px
    style H fill:#eeeeee,stroke:#333,stroke-width:2px
    style Client fill:#d5e8f9,stroke:#333,stroke-width:2px
    style G fill:#fffbe6,stroke:#333,stroke-width:1px
    style I fill:#fffbe6,stroke:#333,stroke-width:1px
    style J fill:#fffbe6,stroke:#333,stroke-width:1px
    style K fill:#fffbe6,stroke:#333,stroke-width:1px
    style T1 fill:#c2f0c2,stroke:#333,stroke-width:1px
    style T2 fill:#c2f0c2,stroke:#333,stroke-width:1px
    style T3 fill:#c2f0c2,stroke:#333,stroke-width:1px
    style T4 fill:#c2f0c2,stroke:#333,stroke-width:1px

MCP 的应用场景

MCP 通过扩展 AI 能力,支持广泛的应用:

促进知识访问

除了提供工具,MCP 还促进知识访问。它使应用能够通过连接各种数据源,为大语言模型(LLMs)提供上下文。例如,一个 MCP 服务器可能代表公司的文档库,允许智能体按需检索相关信息;另一个服务器可能处理特定操作,如发送邮件或更新记录。对智能体而言,这些只是可使用的工具——有些返回数据(知识上下文),有些执行操作。MCP 高效地管理这两类功能。

智能体连接到 MCP 服务器后,会自动通过标准格式了解服务器的可用能力和可访问数据。这种标准化实现了动态工具可用性。例如,向智能体系统添加一个新的 MCP 服务器后,其功能可立即使用,无需进一步定制智能体的指令。

这种简化的集成与下图所示流程一致:服务器同时提供工具和知识,确保系统间无缝协作。

示例:可扩展的智能体解决方案

---
title: 使用 MCP 的可扩展智能体解决方案
description: 示意图展示用户如何与 LLM 交互,LLM 连接到多个 MCP 服务器,每个服务器同时提供知识和工具,形成可扩展的 AI 系统架构
---
graph TD
    User -->|提示| LLM
    LLM -->|响应| User
    LLM -->|MCP| ServerA
    LLM -->|MCP| ServerB
    ServerA -->|通用连接器| ServerB
    ServerA --> KnowledgeA
    ServerA --> ToolsA
    ServerB --> KnowledgeB
    ServerB --> ToolsB

    subgraph Server A
        KnowledgeA[知识]
        ToolsA[工具]
    end

    subgraph Server B
        KnowledgeB[知识]
        ToolsB[工具]
    end

通用连接器使 MCP 服务器能够相互通信并共享能力,允许 ServerA 将任务委托给 ServerB 或访问其工具和知识。这实现了跨服务器的工具和数据联合,支持可扩展且模块化的智能体架构。由于 MCP 标准化了工具暴露方式,智能体可以动态发现并在服务器之间路由请求,而无需硬编码集成。

工具与知识联合:跨服务器访问工具和数据,支持更可扩展、模块化的智能体架构。

高级 MCP 场景:客户端 LLM 集成

除了基本 MCP 架构,还存在更高级的场景:客户端和服务器端都包含 LLM,实现更复杂的交互。在下图中,客户端应用可能是一个集成多个 MCP 工具供 LLM 使用的 IDE:

---
title: 客户端-服务器 LLM 集成的高级 MCP 场景
description: 序列图展示用户、客户端应用、客户端 LLM、多个 MCP 服务器和服务器端 LLM 之间的详细交互流程,包括工具发现、用户交互、直接工具调用和功能协商阶段
---
sequenceDiagram
    autonumber
    actor User as  用户
    participant ClientApp as ️ 客户端应用
    participant ClientLLM as  客户端 LLM
    participant Server1 as  MCP 服务器 1
    participant Server2 as  MCP 服务器 2
    participant ServerLLM as  服务器端 LLM
    
    %% 发现阶段
    rect rgb(220, 240, 255)
        Note over ClientApp, Server2: 工具发现阶段
        ClientApp->>+Server1: 请求可用工具/资源
        Server1-->>-ClientApp: 返回工具列表(JSON)
        ClientApp->>+Server2: 请求可用工具/资源
        Server2-->>-ClientApp: 返回工具列表(JSON)
        Note right of ClientApp: 本地存储合并后的工具目录
    end
    
    %% 用户交互
    rect rgb(255, 240, 220)
        Note over User, ClientLLM: 用户交互阶段
        User->>+ClientApp: 输入自然语言提示
        ClientApp->>+ClientLLM: 转发提示 + 工具目录
        ClientLLM->>-ClientLLM: 分析提示并选择工具
    end
    
    %% 场景 A:直接工具调用
    alt 直接工具调用
        rect rgb(220, 255, 220)
            Note over ClientApp, Server1: 场景 A:直接工具调用
            ClientLLM->>+ClientApp: 请求执行工具
            ClientApp->>+Server1: 执行指定工具
            Server1-->>-ClientApp: 返回结果
            ClientApp->>+ClientLLM: 处理结果
            ClientLLM-->>-ClientApp: 生成响应
            ClientApp-->>-User: 显示最终答案
        end
    
    %% 场景 B:功能协商(VS Code 风格)
    else 功能协商(VS Code 风格)
        rect rgb(255, 220, 220)
            Note over ClientApp, ServerLLM: 场景 B:功能协商
            ClientLLM->>+ClientApp: 识别所需能力
            ClientApp->>+Server2: 协商功能/能力
            Server2->>+ServerLLM: 请求额外上下文
            ServerLLM-->>-Server2: 提供上下文
            Server2-->>-ClientApp: 返回可用功能
            ClientApp->>+Server2: 调用协商后的工具
            Server2-->>-ClientApp: 返回结果
            ClientApp->>+ClientLLM: 处理结果
            ClientLLM-->>-ClientApp: 生成响应
            ClientApp-->>-User: 显示最终答案
        end
    end

关键要点

使用 MCP 的关键要点如下:

  • MCP 标准化了 AI 模型与工具和数据的交互方式
  • 促进可扩展性、一致性和互操作性
  • MCP 有助于减少开发时间、提高可靠性并扩展模型能力
  • 客户端-服务器架构支持灵活、可扩展的 AI 应用

核心概念

MCP架构

MCP 生态系统基于客户端 - 服务器模型构建。这种模块化结构使 AI 应用程序能够高效地与工具、数据库、API 和上下文资源进行交互。MCP中的一个host(宿主)应用程序可以连接到多个服务器。

  • MCP Host(宿主):希望通过 MCP 访问数据的程序,如 VSCode、Claude 桌面端、IDE 或 AI 工具;
  • MCP Client(客户端):与服务器维持 1:1 连接的协议客户端;
  • MCP Server(服务器):通过标准化模型上下文协议暴露特定功能的轻量级程序;
  • 本地数据源:MCP 服务器可安全访问的计算机文件、数据库和服务;
  • 远程服务:MCP 服务器可通过 API 连接的互联网外部系统。

MCP Host(宿主机)

在模型上下文协议中,MCP 宿主机是作为用户与协议交互主要接口的 AI 应用程序。宿主机通过为每个服务器连接创建专用的 MCP 客户端,来协调和管理到多个 MCP 服务器的连接。Host是协调 AI 模型交互的应用程序。它们:

  • 协调 AI 模型:执行或与 LLMs 交互以生成响应,并协调 AI 工作流。
  • 管理客户端连接:创建并维护每个 MCP 服务器连接对应的一个 MCP 客户端。
  • 控制用户界面:处理对话流、用户交互和响应呈现。
  • 强制执行安全:控制权限、安全约束和认证。
  • 处理用户授权:管理用户对数据共享和工具执行的批准流程。 Host 示例包括:AI 应用程序:Claude Desktop、Visual Studio Code、Claude Code;开发环境:集成了 MCP 的 IDE 和代码编辑器;自定义应用:专门构建的 AI 智能体和工具

MCP Client(客户端)

客户端是维持宿主机与 MCP 服务器之间专用一对一连接的关键组件。每个 MCP 客户端由主机实例化,以连接到特定的 MCP 服务器,从而确保通信通道的组织性和安全性。多个客户端使得主机能够同时连接到多个服务器。 客户端是主机应用程序内的连接器组件。 它们:

  • 协议通信:向服务器发送带有提示和指令的 JSON-RPC 2.0 请求。
  • 能力协商:在初始化期间与服务器协商支持的功能和协议版本。
  • 工具执行:管理来自模型的工具执行请求并处理响应。
  • 实时更新:处理来自服务器的通知和实时更新。
  • 响应处理:处理并格式化服务器响应以呈现给用户。

MCP Server(服务器)

服务器 是向 MCP 客户端提供上下文、工具和能力的程序。它们可以在本地(与主机同一台机器)或远程(在外部平台上)执行,负责处理客户端请求并提供结构化响应。服务器通过标准化的模型上下文协议暴露特定功能。 服务器是提供上下文和能力的服务。它们:

  • 功能注册:向客户端注册并暴露可用的原语(资源、提示、工具)。
  • 请求处理:接收并执行来自客户端的工具调用、资源请求和提示请求。
  • 上下文提供:提供上下文信息和数据以增强模型响应。
  • 状态管理:维护会话状态并在需要时处理有状态的交互。
  • 实时通知:向连接的客户端发送关于能力变更和更新的通知。 任何人都可以开发服务器,通过专业化功能来扩展模型能力,并且它们支持本地和远程部署场景。

Server Primitives(服务器原语/基本组件)

MCP Server提供了三个核心原语,定义客户端、主机和语言模型之间丰富交互的基本构建块。这些原语指定协议中可用的上下文信息和操作类型。 MCP 服务器可暴露以下三个核心原语的任意组合:

资源

资源是为 AI 应用程序提供上下文信息的数据源。它们表示静态或动态内容,可增强模型理解和决策:

  • 上下文数据:结构化信息和模型消费的上下文
  • 知识库:文档库、文章、手册和研究报告
  • 本地数据源:文件、数据库和本地系统信息
  • 外部数据:API 响应、网络服务和远程系统数据
  • 动态内容:根据外部条件更新的实时数据
提示

提示是可重用模板,帮助结构化与语言模型的交互。它们提供标准化交互模式和模板化工作流:

  • 模板化交互:预结构化消息和对话开场白
  • 工作流模板:常见任务和交互的标准序列
  • 少样本示例:基于示例的模型指令模板
  • 系统提示:定义模型行为和上下文的基础提示
  • 动态模板:适应特定上下文的参数化提示
工具

工具是 AI 模型可调用以执行特定操作的可执行函数。它们代表 MCP 生态系统的"动词",使模型能够与外部系统交互:

  • 可执行函数:具有特定参数的离散操作
  • 外部系统集成:API 调用、数据库查询、文件操作、计算
  • 唯一标识:每个工具都有独特的名称、描述和参数模式
  • 结构化输入输出:工具接受验证参数并返回结构化、带类型的响应
  • 动作能力:使模型能够执行实际操作并检索实时数据

Clien Primitives (客户端源语/基本组件)

在模型上下文协议中,客户端可以暴露原语,使服务器能够向主机应用程序请求额外的能力。这些客户端原语允许实现更丰富、更具交互性的服务器,从而访问 AI 模型能力和用户交互。

Sampling(采样)

采样 允许服务器向客户端的 AI 应用程序请求语言模型补全。此原语使服务器能够在无需嵌入自身模型依赖项的情况下访问 LLM 能力:

  • 模型无关访问:服务器可以请求补全,而无需包含 LLM SDK 或管理模型访问。
  • 服务器发起的 AI:使服务器能够使用客户端的 AI 模型自主生成内容。
  • 递归 LLM 交互:支持服务器在处理时需要 AI 协助的复杂场景。
  • 动态内容生成:允许服务器使用主机的模型创建上下文响应。
Elicitation (启发)

启发 使服务器能够通过客户端界面向用户请求额外信息或确认:

  • 用户输入请求:服务器可以在工具执行需要时请求额外信息。
  • 确认对话框:请求用户对敏感或有影响的操作进行批准。
  • 交互式工作流:使服务器能够创建逐步的用户交互。
  • 动态参数收集:在工具执行期间收集缺失或可选参数。
Logging(日志)

日志记录 允许服务器向客户端发送结构化的日志消息,用于调试、监控和操作可见性:

  • 调试支持:使服务器能够提供详细的执行日志以进行故障排除。
  • 操作监控:向客户端发送状态更新和性能指标。
  • 错误报告:提供详细的错误上下文和诊断信息。
  • 审计追踪:创建服务器操作和决策的全面日志。 日志消息被发送到客户端,以提供服务器操作的透明度并促进调试。

MCP中的信息流

模型上下文协议定义了主机、客户端、服务器和模型之间结构化的信息流。理解此流程有助于阐明用户请求如何处理以及外部工具和数据如何集成到模型响应中。

  1. 宿主机发起连接
    宿主机应用程序(如 IDE 或聊天界面)建立到 MCP 服务器的连接,通常通过 STDIO、WebSocket 或其他支持的传输方式。
  2. 能力协商
    客户端(嵌入在主机中)和服务器交换关于其支持的功能、工具、资源和协议版本的信息。这确保了双方都了解会话中可用的能力。
  3. 用户请求
    用户与宿主机交互(例如,输入提示或命令)。宿主机收集此输入并将其传递给客户端进行处理。
  4. 资源或工具使用
    • 客户端可能向服务器请求额外的上下文或资源(如文件、数据库条目或知识库文章),以丰富模型的理解。
    • 如果模型确定需要工具(例如,获取数据、执行计算或调用 API),客户端会向服务器发送工具调用请求,指定工具名称和参数。
  5. 服务器执行
    服务器接收资源或工具请求,执行必要的操作(如运行函数、查询数据库或检索文件),并将结果以结构化格式返回给客户端。
  6. 响应生成
    客户端将服务器的响应(资源数据、工具输出等)整合到正在进行的模型交互中。模型利用这些信息生成全面且与上下文相关的响应。
  7. 结果呈现
    宿主机从客户端接收最终输出,并将其呈现给用户,通常包括模型生成的文本以及工具执行或资源查找的任何结果。 此流程使 MCP 能够通过将模型与外部工具和数据源无缝连接,来支持高级、交互式和上下文感知的 AI 应用程序。

协议架构与层次

MCP 由数据层和传输层两个架构层次组成,它们协同工作以提供完整的通信框架。

数据层

数据层 使用 JSON-RPC 2.0 作为其基础来实现核心 MCP 协议。该层定义了消息结构、语义和交互模式: 核心组件

  • JSON-RPC 2.0 协议:所有通信都使用标准化的 JSON-RPC 2.0 消息格式进行方法调用、响应和通知。
  • 生命周期管理:处理客户端和服务器之间的连接初始化、能力协商和会话终止。
  • 服务器原语:使服务器能够通过工具、资源和提示提供核心功能。
  • 客户端原语:使服务器能够向 LLMs 请求采样、请求用户输入和发送日志消息。
  • 实时通知:支持异步通知以实现动态更新,无需轮询。 关键特性
  • 协议版本协商:使用基于日期的版本控制(YYYY-MM-DD)以确保兼容性。
  • 能力发现:客户端和服务器在初始化期间交换支持的功能信息。
  • 有状态会话:跨多个交互维护连接状态以实现上下文连续性。
传输层

传输层 管理 MCP 参与者之间的通信通道、消息帧和认证: 支持的传输机制

  • STDIO 传输
    • 使用标准输入/输出流进行直接进程通信。
    • 适用于同一台机器上的本地进程,无网络开销。
    • 通常用于本地 MCP 服务器实现。
  • 可流式 HTTP 传输
    • 使用 HTTP POST 进行客户端到服务器的消息传递。
    • 可选的服务器发送事件用于服务器到客户端的流式传输。
    • 支持跨网络的远程服务器通信。
    • 支持标准 HTTP 认证(承载令牌、API 密钥、自定义头)。
    • MCP 推荐使用 OAuth 进行安全的基于令牌的认证。 传输抽象
      传输层将通信细节从数据层抽象出来,使得相同的 JSON-RPC 2.0 消息格式能够跨所有传输机制使用。这种抽象允许应用程序在本地和远程服务器之间无缝切换。

安全与授权

MCP 包含几个内置的概念和机制,用于在整个协议中管理安全性和授权:

  • 工具权限控制
    客户端可以指定模型在会话期间允许使用哪些工具。这确保了只有明确授权的工具可被访问,降低了意外或不安全操作的风险。权限可以根据用户偏好、组织策略或交互上下文进行动态配置。
  • 认证
    服务器在授予对工具、资源或敏感操作的访问权限之前可以要求认证。这可能涉及 API 密钥、OAuth 令牌或其他认证方案。适当的认证确保只有受信任的客户端和用户才能调用服务器端能力。
  • 验证
    对所有工具调用强制执行参数验证。每个工具都为其参数定义预期的类型、格式和约束,服务器据此验证传入的请求。这可以防止格式错误或恶意的输入到达工具实现,并有助于维护操作的完整性。
  • 速率限制
    为防止滥用并确保服务器资源的公平使用,MCP 服务器可以对工具调用和资源访问实施速率限制。速率限制可以按用户、按会话或全局应用,并有助于防范拒绝服务攻击或过度的资源消耗。 通过结合这些机制,MCP 为将语言模型与外部工具和数据源集成提供了安全的基础,同时赋予用户和开发人员对访问和使用的细粒度控制权。

文章来源

  • 微软开源MCP课程00-01: gitee.com/mirrors/mic…
本站提供的所有下载资源均来自互联网,仅提供学习交流使用,版权归原作者所有。如需商业使用,请联系原作者获得授权。 如您发现有涉嫌侵权的内容,请联系我们 邮箱:[email protected]