模型上下文协议

MCP是一种开源标准,用于将AI应用程序连接到外部系统,支持数据源访问、工具使用和工作流集成。

  • by Qiratsumra
  • 本地部署
  • 更新于
在 GitHub 查看 Qiratsumra/MCP

使用说明

什么是模型上下文协议(MCP)?

MCP(模型上下文协议)是用于将AI应用程序连接到外部系统的开源标准。MCP由Anthropic于2024年11月推出,被谷歌、OpenAI、微软等许多人工智能公司采用。使用MCP,像Claude、ChatGPT、Gemini等人工智能应用程序可以连接和访问数据源(本地文件、数据库)和工具(搜索引擎、外部获取、API)以及工作流(例如专门的提示),使它们能够访问关键信息并执行任务。

将MCP想象成AI应用程序的USB-C端口。正如USB-C提供了一种连接电子设备的标准化方式一样,MCP也提供了将AI应用程序连接到外部系统的标准化方法。

MCP可以启用什么?

  1. 客服可以使用MCP访问您的谷歌日历和Notion,作为更个性化的人工智能助手。
  2. 企业聊天机器人可以连接到整个组织的多个数据库,使用户能够使用聊天分析数据。
  3. 访问外部数据——读取文件、数据库、Google Drive、Notion等。
  4. 使用工具——搜索网络、运行代码、查询API
  5. 采取行动——发送电子邮件、创建日历事件、管理任务
  6. 连接到本地系统--与文件系统、终端或本地应用程序交互
  7. 整合服务——GitHub、Postgres以及whatsapp、instagram、facebook、twitter等社交媒体账号。

为什么MCP很重要?

根据您在生态系统中的位置,MCP可以带来一系列好处。

  • 开发者MCP在构建或集成AI应用程序或代理时减少了开发时间和复杂性。
  • AI应用程序或代理MCP使AI应用程序或代理能够访问外部系统和工具,使它们能够执行自己无法执行的任务。
  • 企业MCP使企业能够将其人工智能应用程序与现有系统集成,使他们能够利用人工智能的力量来改善运营。
  • 用户MCP使用户能够利用人工智能的力量来改善他们的生活,使他们能够执行自己无法完成的任务。

MCP架构

MCP的概念

1.与会者:

MCP遵循客户端-服务器架构,其中MCP主机在一个或多个MCP服务器之间建立连接。MCP主机通过为每个MCP服务器创建一个MCP客户端来实现这一点。每个MCP客户端与其对应的MCP服务器保持专用连接。
使用 工作室 (标准输入/输出)传输通常服务于单个MCP客户端,而使用 可流式传输的HTTP 传输通常将服务于许多MCP客户端。
- 主要参与者: MCP架构的主要参与者是: 1. MCP主机:协调和管理一个或多个MCP客户端的AI应用程序 2. MCP客户端:一个组件,用于维护与MCP服务器的连接,并从MCP服务器获取上下文供MCP主机使用 3. MCP服务器:为MCP客户端提供上下文的程序

2.图层:

  • 数据层(内部层):定义基于JSON-RPC的客户端-服务器通信协议,包括生命周期管理和核心原语,如工具、资源、提示和通知。数据层的基本元素是工具、资源、提示和通知。
  • 传输层(外部层):定义实现客户端和服务器之间数据交换的通信机制和通道,包括特定于传输的连接建立、消息帧和授权。

数据层

传输层

MCP客户端

什么是MCP客户端?

一 MCP客户端 是一个位于MCP主机内部的组件,充当AI应用程序和MCP服务器之间的桥梁。主机为每个MCP服务器创建一个专用的MCP客户端,每个客户端在整个会话期间与其相应的服务器保持持久的、有状态的连接。

MCP客户的角色

MCP客户负责:

  1. 连接管理 --使用适当的传输(本地服务器的STDIO,远程服务器的Streamable HTTP)启动、维护和优雅地终止与MCP服务器的连接。
  2. 能力协商 --在初始化握手过程中,客户端与服务器交换能力声明,以便双方都知道支持哪些功能(工具、资源、提示、采样等)。
  3. 消息路由 --将请求从主机转发到正确的服务器,并将响应返回给主机。
  4. 上下文检索 --从MCP服务器获取工具、资源和提示,以便主机(AI应用程序)在生成响应时可以使用它们。
  5. 生命周期管理 --处理连接错误、重新连接和干净关机。

MCP客户端的工作原理

当MCP主机启动时,它会读取其配置以发现要连接到哪些MCP服务器。对于每台服务器,它都会启动一个专用的MCP客户端,该客户端:

  1. 建立到服务器的传输级连接(例如,通过STDIO生成本地进程或打开到远程端点的HTTP流)。
  2. 执行 初始化握手 --发送一个 initialize 包含客户端协议版本和功能的请求,并接收服务器的协议版本和能力作为回报。
  3. 发送a notifications/initialized 消息,表示客户端已准备就绪。
  4. 开始发送请求(例如。, tools/list, tools/call, resources/read, prompts/get)根据需要代表主机。
MCP Host
   │
   ├── MCP Client A  ──── (STDIO) ────► Local MCP Server (e.g., file system)
   │
   └── MCP Client B  ──── (HTTP) ─────► Remote MCP Server (e.g., GitHub API)

MCP客户端功能

在初始化过程中,MCP客户端可以声明支持:

能力 描述
roots 通知服务器客户端可以公开的文件系统根目录
sampling 允许服务器通过客户端请求LLM完成
experimental 声明支持非标准、实验性功能

MCP服务器

什么是MCP服务器?

一 MCP服务器 是一个轻量级程序,它通过模型上下文协议向MCP客户端公开上下文(工具、资源和提示)。服务器充当AI应用程序和外部系统(如数据库、API、文件系统和第三方服务)之间的集成点。

服务器可以是:

  • 本地 --与主机在同一台机器上运行,通过以下方式进行通信 工作室.
  • 远程 --在单独的机器或云端点上运行,通过 可流式传输的HTTP.

MCP服务器的作用

MCP服务器负责:

  1. 暴露图元 --声明和提供MCP客户端可以发现和使用的工具、资源和提示。
  2. 处理请求 --处理传入的JSON-RPC请求(例如。, tools/call, resources/read)并返回格式良好的响应。
  3. 维护安全边界 --每个服务器都在自己的进程或环境中运行,隔离对它所封装的外部系统的访问。
  4. 发送通知 --主动通知连接的客户端有关更改(例如,资源已更新)。

MCP服务器原语

MCP服务器公开了客户端可以发现和使用的三个核心原语:

原始 描述 示例
工具 AI可以调用的可执行函数 search_web, run_query, send_email
资源 AI可以访问的只读数据源 文件、数据库行、网页
提示 服务器提供的预定义提示模板 摘要模板、代码审查提示

MCP服务器的工作原理

一旦与客户端的初始化握手完成,服务器:

  1. 回应 tools/list 通过返回一个包含可用工具名称、描述和输入模式(JSON模式)的列表来请求。
  2. 执行 tools/call 通过使用提供的参数运行所请求的工具并返回结果来请求。
  3. 回应 resources/list 和 resources/read 通过返回可用数据源及其内容来请求。
  4. 回应 prompts/list 和 prompts/get 通过返回可用的提示模板来请求。
  5. 发送 通知 当相关状态发生变化时(例如。, notifications/tools/list_changed).
MCP Client  ──── tools/list ────────────────► MCP Server
            ◄─── [{ name, description, ... }] ──
            ──── tools/call { name, args } ───►
            ◄─── { result } ──────────────────

MCP服务器功能

在初始化过程中,MCP服务器可能会声明支持:

能力 描述
tools 服务器公开了可调用的工具
resources 服务器公开可读的数据资源
prompts 服务器公开可重用的提示模板
logging 服务器可以向客户端发送日志消息
experimental 服务器支持非标准、实验性功能

本地与远程MCP服务器

本地MCP服务器 远程MCP服务器
运输 STDIO 流式HTTP
位置 与主机相同的机器 云或单独的机器
客户服务 通常一个(与客户1:1) 同时有多个客户
用例 文件系统、终端、本地数据库 SaaS API、共享企业服务
授权 进程级隔离 OAuth 2.0/基于令牌的身份验证