简体中文
  • MCP
  • Model Context Protocol
  • AI

什么是 MCP(模型上下文协议)以及它是如何工作的

一份易于理解的模型上下文协议(MCP)指南,解释它如何帮助大型语言模型(LLM)访问外部资源,克服知识限制,从而构建更强大的人工智能应用。

Yijun
Yijun
Developer

不要在用户认证上浪费数周时间
使用 Logto 更快地发布安全应用。几分钟内集成用户认证,专注于您的核心产品。
立即开始
Product screenshot

什么是 MCP?

MCP(模型上下文协议)是一个开放的、通用的协议,标准化了应用程序如何为大型语言模型(LLM)提供上下文信息。

简单来说,就像 HTTP 协议允许不同网站和浏览器按照相同规则交换信息一样,MCP 就像是 AI 世界的 HTTP 协议。MCP 使得不同的 AI 模型能够以标准化的方式连接到各种数据源和工具。此标准化使开发者能够更轻松地构建 AI 应用程序,而无需为每个模型或数据源创建专用接口。

为什么需要 MCP?

大型语言模型(LLM)功能强大,但它们面临几个关键限制:

  • 知识限制和更新挑战:LLM 仅了解其训练数据中包含的信息。例如,GPT-4 的知识在 2023 年 4 月截止。训练大型语言模型需要巨大的计算资源和时间,经常需要六个月或更长时间来完成新版本。这就造成了一个困难的问题:模型的知识总是“过时的”,而更新代价极高且耗时长。到一个新模型完成训练时,其知识已经开始落后。

  • 缺乏专业领域知识:LLM 是使用公开可用的常规数据进行训练的。它们不能深入理解特定业务场景中的专业数据和信息。例如,医疗机构的内部流程、一家公司的产品目录或某组织的专有知识不在模型的训练范围内。

  • 没有统一的外部数据访问标准:目前,有很多方法可以为 LLM 提供附加信息,如 RAG(检索增强生成)、本地知识库、互联网搜索等。不同的开发团队提供不同的集成解决方案,导致系统之间的集成成本高昂。具有专业领域数据的系统(如 CRM、ERP、医疗记录系统等)很难与 LLM 无缝集成。每次集成都需要自定义开发,缺乏通用的、标准化的方法。

这就是为什么我们需要 MCP。MCP 提供了一个标准化协议,让 LLM 能够以一致的方式访问外部信息和工具,解决所有上述问题。通过 MCP,我们可以获得以下关键好处:

  • 丰富的预构建集成:MCP 提供许多现成的服务器集成,包括文件系统、数据库(PostgreSQL、SQLite)、开发工具(Git、GitHub、GitLab)、网络工具(Brave Search、Fetch)、生产力工具(Slack、Google Maps)等。这意味着你不需要从头构建这些集成。你可以简单地使用这些预构建的连接器,让 LLM 访问这些系统中的数据。

  • 在 LLM 供应商之间灵活切换:今天你可能使用 GPT-4,明天你可能想尝试 Claude 或 Gemini,或者针对不同场景使用不同的 LLM。有了 MCP,你不需要重写整个应用程序的集成逻辑。你只需要更改底层模型,所有数据和工具集成都保持不变。

  • 构建复杂的 AI 工作流:想象一个法律文件分析系统需要查询多个数据库,使用特定工具进行文件比较,并生成报告。MCP 允许你在 LLM 上构建这样的复杂代理和工作流。

MCP 如何工作

在 MCP 中,有三个核心角色:MCP 服务器(提供工具和数据访问),MCP 客户端(嵌入在 LLM 中并与 MCP 服务器通信),以及 MCP 主机(集成 LLM 和客户端的应用程序,如 Claude Desktop、Cursor 等)。我们来详细了解这三个角色如何协同工作。

MCP 服务器

MCP 服务器是一个程序,提供 LLM 可以使用的工具和数据访问能力。与传统的远程 API 服务器不同,MCP 服务器可以作为用户设备上的本地应用程序运行,也可以部署到远程服务器。

每个 MCP 服务器提供一组具体的工具,负责从本地数据或远程服务中检索信息。当一个 LLM 决定在处理任务时需要使用某个工具时,它将使用 MCP 服务器提供的工具来获取所需数据并返回给 LLM。

MCP 客户端

MCP 客户端是连接 LLM 和 MCP 服务器的桥梁。嵌入在 LLM 中,它负责:

  • 接收来自 LLM 的请求
  • 将请求转发至适当的 MCP 服务器
  • 将 MCP 服务器的结果返回给 LLM

你可以查看 开发一个 MCP 客户端 以了解更多关于 MCP 客户端与 LLM 集成的信息。

MCP 主机

像 Claude Desktop、IDE(如 Cursor 等)这样的程序,或希望通过 MCP 访问数据的 AI 工具。这些应用程序为用户提供与 LLM 交互的界面,同时集成 MCP 客户端以连接到 MCP 服务器,使用 MCP 服务器提供的工具扩展 LLM 功能。

MCP 工作流

上述三个角色最终形成了一个基于 MCP 的 AI 应用程序。

该系统的示例工作流程如下:

如何构建一个 MCP 服务器

MCP 服务器是 MCP 系统中最关键的环节。它决定了 LLM 可以使用哪些工具访问哪些数据,直接影响 AI 应用程序的功能边界和能力。

要开始构建自己的 MCP 服务器,建议首先阅读官方 MCP 快速入门指南,其中详细介绍了从环境设置到 MCP 服务器实现和使用的完整过程。我们将仅解释核心实现细节。

定义 MCP 服务器提供的工具

MCP 服务器的核心功能是通过 server.tool() 方法定义工具。这些工具是 LLM 可以调用的函数,用于获取外部数据或执行特定操作。让我们来看一个使用 Node.js 的简化示例:

在这个例子中,我们定义了一个名为 search-documents 的工具,接受查询字符串和最大结果数量作为参数。工具的实现将连接到知识库系统并返回查询结果。

LLM 将根据工具的定义和用户的问题决定是否使用该工具。如果需要,LLM 将调用此工具,获取结果,并结合用户的问题生成答案。

定义工具的最佳实践

构建此类工具时,你可以遵循以下最佳实践:

  • 清晰的描述:为每个工具提供详细、准确的描述,明确说明其功能、适用场景和限制。这不仅有助于 LLM 选择合适的工具,也让开发者更容易理解和维护代码。
  • 参数验证:使用 Zod 或类似库严格验证输入参数,确保类型正确、值范围合理,并拒绝不符合条件的输入。这可以防止错误传播到后端系统,提高整体稳定性。
  • 错误处理:实施全面的错误处理策略,捕获可能的异常,并返回用户友好的错误信息。这改善了用户体验,并允许 LLM 基于错误条件提供有意义的响应,而不是简单地失败。
  • 数据访问控制:确保后端资源 API 具有强大的身份验证和授权机制,并精心设计权限范围,以限制 MCP 服务器仅能访问和返回用户授权的数据。这可以防止敏感信息泄漏并确保数据安全。

如何确保 MCP(AI 模型)与外部系统之间数据交换的安全性

在实现连接 AI 模型与外部系统的 MCP 服务器时,在 MCP 实现中有两个关键的安全挑战:

  • 身份验证:与传统应用不同,在 MCP 环境中,用户不能通过传统的登录方式(如用户名/密码、电子邮件/验证码等)来访问外部系统。
  • MCP 服务器请求的访问控制:通过 AI 工具访问系统的用户是可能直接使用你的系统的同一个人。当通过 AI 工具交互时,MCP 服务器充当他们的代表。仅为了适应 MCP 服务器而重新设计整个访问控制机制,将需要大量的努力和成本。

解决这些挑战的关键是实施 个人访问令牌(PAT)。PAT 提供了一种用户在不共享凭据或不需要交互式登录的情况下授予访问权限的安全方式。

以下是工作流程的功能:

这种方法允许你的现有服务维护其身份验证机制,同时安全地启用 MCP 集成。

你可以参考博文:Empower your business: Connect AI tools to your existing service with access control 以及完整的源代码示例 了解如何使用 Logto 的个人访问令牌(PAT)结合基于角色的访问控制(RBAC)以限制 MCP 可以从后端服务访问的资源。

总结

MCP(模型上下文协议)为 LLM 与特定业务的结合带来了革命性的变化。它解决了大型语言模型的知识限制、缺乏专业领域知识以及外部数据访问标准不统一的问题。

使用 MCP 连接你自己的服务将为你的业务带来新的可能性。MCP 是连接 AI 与商业价值的桥梁。你可以创建真正了解公司内部知识的 AI 助手,开发访问最新数据的智能工具,并构建满足行业特定需求的专业应用。