MCP(Model Context Protocol,模型上下文协议)的当前状态
作者:来自 Elastic JD Armada
了解 MCP、项目更新、功能、安全挑战、新兴用例,以及如何动手操作 Elastic 的 Elasticsearch MCP 服务器。
Elasticsearch 与业界领先的生成式 AI 工具和提供商有原生集成。查看我们关于超越 RAG 基础或构建可投入生产的应用程序 Elastic 向量数据库的网络研讨会。
为了为你的使用场景构建最佳搜索解决方案,现在开始免费云试用,或在本地机器上试用 Elastic。
我最近参加了在旧金山举办的 MCP 开发者峰会,可以明显看出 Model Context Protocol(MCP)正迅速成为 AI 智能体和上下文丰富型 AI 应用程序的基础构建模块。在这篇文章中,我将介绍会议上的关键更新、新兴用例、MCP 的发展前景,以及如何动手操作 Elastic 的 Elasticsearch MCP 服务器。
什么是 Model Context Protocol(MCP)?
对于不熟悉的人来说,Model Context Protocol 是一个开放标准,它提供了一种结构化的双向方式,将 AI 模型连接到各种数据源和工具,使其能够生成更相关、更有信息的响应。它通常被称为 “AI 应用程序的 USB-C 接口”。
下面是一个展示其双向特性的架构图:
这对 AI 从业者来说是一个重大转变,因为扩展 AI 应用的主要挑战之一,是必须为每个新的数据源构建定制的集成。MCP 提供了一种可持续、可复用的架构,用于为模型管理和提供上下文。它与模型无关、与服务器无关,并且是完全开源的。
MCP 是一系列旨在标准化应用集成的 API 规范中的最新演进。过去我们有 OpenAPI 用于 RESTful 服务、GraphQL 用于数据查询、gRPC 用于微服务通信。MCP 不仅继承了这些旧规范的结构化严谨性,还将其引入生成式 AI 环境,使得代理更容易接入不同系统而无需定制连接器。从很多方面来看,MCP 的目标就是为 AI 代理做 HTTP 为网页所做的事情。正如 HTTP 标准化了浏览器与网站之间的通信,MCP 旨在标准化 AI 代理与其周围数据世界的交互方式。
MCP 与其他代理协议的对比
代理协议领域正在迅速扩展,已有十多个新兴标准在争夺定义代理如何交互的权利。来自 LlamaIndex 的 Laurie Voss 将它们大致分为两类:一类是关注代理之间对话的 inter-agent 协议,另一类是像 MCP 这样的 面向上下文的协议,它们关注的是如何向 LLMs 提供结构化上下文。
其他流行的协议包括 Google 的 A2A(Agent to Agent)、Cisco 和 IBM 的 ACP(Agent Communication Protocol),以及 Agora,它们旨在实现代理之间的协商、联盟构建,甚至是去中心化身份系统。相比之下,MCP 采取了更务实的路径,重点在于代理如何访问工具和数据,而不专注于代理之间如何交谈(尽管 MCP 将来也可能以不同方式支持这一功能)。
目前,MCP 的独特之处在于其广泛的吸引力和发展势头。就像 React 在前端框架早期那样,MCP 起初解决的是一个小众问题,如今已成为实践中最被采用和最具可扩展性的代理协议之一。
峰会回顾:MCP 的优先事项正在演进
本次峰会邀请了来自 Anthropic、Okta、OpenAI、AWS、GitHub 等多个组织的贡献者演讲。议题涵盖了从核心协议增强到真实世界的实现,并概述了 MCP 的近期与长期发展重点。这些演讲反映出一个趋势的转变 —— 从早期的试验性工具调用,转向以 MCP 为基础构建可信赖、可扩展和模块化的 AI 系统。
多位演讲者还展望了 MCP 的未来 —— 它不仅仅是协议的 “管道”,而是 AI 原生 Web 的基础。就像 JavaScript 让用户能够点击和与网页交互一样,MCP 可以让代理代表我们执行这些操作。例如,在电商场景中,用户无需再手动浏览网站购物,只需告诉代理登录、搜索商品、加入购物车并完成结账即可。
这不仅仅是猜测和炒作;PayPal 在本次峰会上展示了他们的新代理工具包和 MCP 服务器,正是实现这种代理式购物体验的关键。有了 MCP 提供的安全可靠的工具和数据源访问,代理将不只是 “读懂” 网页,而是真正可以在网页上 “行动”。如今,MCP 已经是一个势头强劲的强大标准,未来,它有望成为整个 Web 上 AI 增强用户交互的通用标准。
MCP 项目更新:传输、引导与结构化工具
MCP 核心贡献者 Jerome Swannack 分享了过去 6 个月协议规范的一些更新。本轮变更的主要目标包括:
-
通过新增 Streamable HTTP 支持远程 MCP;
-
通过新增 Elicitation 和 Tool Output Schemas 支持更丰富的代理交互模型。
由于 MCP 是开源的,像 Streamable HTTP 这样的变更已经可以供开发者实现。而 Elicitation 和 Tool Output Schemas 目前尚未发布,仍处于草案阶段,可能会进一步演进。
Streamable HTTP(已发布,2025 年 3 月 26 日):这是一次重要的技术更新,引入了 Streamable HTTP 作为新的传输机制。它取代了服务器发送事件(server-sent events - SSE),提供了更具扩展性的双向通信模型,支持 chunked 传输编码和基于单个 HTTP 连接的渐进式消息传递。这使你能够在 AWS Lambda 等云基础设施上部署 MCP 服务器,同时支持企业网络限制,无需长连接或轮询。
Elicitation(未发布,草案阶段):Elicitation 允许服务器定义其希望从客户端获取的上下文结构 schema。换句话说,服务器可以描述它所需的数据以及预期的输入类型。这带来了几个意义:对于服务器构建者,可以构建更复杂的代理交互;对于客户端构建者,可以构建能根据这些 schema 动态变化的 UI。不过,Elicitation 不应被用于提取用户的敏感或个人身份信息。开发者应遵循最佳实践,确保引导提示的安全性和适当性,尤其是在 MCP 持续成熟的过程中。这也与我们稍后要讨论的安全问题有关。
Tool Output Schemas(未发布,未来计划):这一概念允许客户端和 LLM 提前知道工具的输出结构。Tool Output Schemas 让开发者能够描述工具的预期返回值。这解决了直接调用工具的一大限制 —— 上下文窗口的低效使用。上下文窗口是在使用 LLMs 时最关键的资源之一,而直接调用工具会返回原始内容,这些内容会被完全推入 LLM 的上下文。Tool Output Schemas 可以让 MCP 服务器提供结构化数据,从而更好地利用 token 和上下文窗口。目前官方尚未提供该功能的文档,但 MCP 团队已在审查中。
以上这些更新和未来计划将推动 MCP 成为一个更加模块化、有类型支持、面向生产环境的代理协议。
未充分利用的强大功能:采样和根
虽然采样和根并非 MCP 规范的新内容,但在主题演讲中被重点提及。这两个基本功能目前被忽视且探索不足,但能显著促进代理之间更丰富、更安全的交互。
采样 — 服务器可请求客户端生成内容:采样允许 MCP 服务器请求客户端侧的 LLM 生成内容。这增强了协议的双向特性,服务器不仅响应请求,还能主动提示并让客户端模型生成回复。这使客户端能完全控制成本、安全性以及 MCP 服务器使用的模型。所以当使用带有预配置模型的外部 MCP 服务器时,你无需提供自己的 API 密钥或配置自己的模型订阅,因为服务器可以直接提示已连接客户端的模型,从而实现更复杂和互动的代理行为。
根 — 资源访问范围限制:根的设计是让客户端告知服务器关注的相关资源和工作区范围。这对设置服务器操作范围非常有用。需要注意的是,根是 “信息性而非严格强制性的”,意味着它们不定义 MCP 服务器或代理的权限或授权。换句话说,不能仅依赖根来阻止服务器或代理执行某些工具或写操作。权限仍应在客户端侧通过用户审批机制进行管理。此外,开发者仍需确保所使用的服务器能尊重根设置的边界,并遵循最佳实践。
代理身份验证:OAuth 2.1 和受保护的元数据
本节重点介绍 OAuth 2.1,这是 OAuth 2.0 的最新版本,移除了不安全的流程并整合了最佳实践。
OAuth 支持是备受期待的话题,特别是因为安全性和可扩展性被认为是阻碍 MCP 成为连接代理与工具标准的主要障碍。Aaron Parecki(OAuth 2.1 编辑者及 Okta 身份标准专家)讨论了 MCP 如何采用简洁、可扩展的 OAuth 流程,将大部分复杂性从服务器开发者身上卸载。
在此实现中,OAuth 的职责可以在 MCP 客户端和服务器之间分担。大部分身份验证流程由 MCP 客户端发起和处理,仅在最后阶段涉及服务器以接收和验证安全令牌。此分担解决了如何在众多工具之间进行身份验证的关键扩展问题,避免开发者需配置每个连接,也确保 MCP 服务器开发者不必成为 OAuth 专家。
演讲中的两个重点:
- 受保护的资源元数据:MCP 服务器可以发布一个 JSON 文件,描述其用途、端点和身份验证方法。这使客户端只需服务器 URL 即可启动 OAuth 流程,简化连接过程。了解更多:Let’s fix OAuth in MCP
- 支持 IDP 和 SSO:企业可以集成身份提供商实现集中访问管理,这对用户体验和安全都是利好。用户无需通过多个同意页面,安全团队也能监控每个连接。
通过将 OAuth 逻辑推给客户端并依赖服务器元数据,MCP 生态系统避免了重大瓶颈,使 MCP 更贴合现代 API 在生产环境中的安全方式。
附加阅读:OAuth 2 Simplified。
可组合生态系统中的安全挑战
新的发展也带来了新的攻击面。来自 Cisco 的 Arjun Sambamoorthy 列出了 MCP 领域中的几个主要威胁,包括:
威胁 | 描述 | 补救措施与最佳实践 |
---|---|---|
提示注入与工具污染 | 在 LLM 系统上下文或工具描述中注入恶意提示,导致 LLM 执行未预期的操作,如读取文件或泄露数据。 | 使用像 MCP Scan 这样的工具对工具元数据进行检查。在将描述和参数包含到提示中之前进行验证。最后,考虑对高风险工具实施用户审批。更多详情请参见下表附加阅读列表中的 OWASP 提示注入指南。 |
采样攻击 | 在 MCP 环境下,采样使 MCP 服务器有机会对 LLM 进行提示注入攻击。 | 为不受信任的服务器禁用采样,并考虑为采样请求添加人工审核机制。 |
恶意的 MCP 服务器 | 在当前的 MCP 服务器集合中,很难对每一台服务器进行审核以确保安全。恶意服务器可能会悄悄收集并将你的数据暴露给恶意行为者。 | 只连接来自受信任注册表或内部列表的 MCP 服务器。将第三方服务器在带有沙箱机制的容器中运行。 |
恶意的 MCP 安装工具 | 命令行安装程序和脚本虽然方便用于快速部署 MCP 服务器或工具,但你可能会因此安装到未经验证、已被篡改的代码。 | 在沙箱环境中安装并验证软件包签名。切勿从未验证的来源自动更新。 |
为了进一步应对这一问题,Arjun 建议建立一个受信任的 MCP 注册中心来处理所有验证(这是讨论的核心主题之一——详见下方阅读列表中的前两项),并使用这份安全检查清单。
延伸阅读:
- OWASP LLM Application Top 10
- HiddenLayer Threat Research
- MCP scan
- OWASP Prompt Injection guide
接下来:注册中心、治理与生态系统
一个集中式的 MCP 注册中心正在开发中,这是本次峰会讨论最频繁的话题之一。当前的服务器生态系统存在碎片化、信任度低和可发现性差的问题。对于开发者来说,在一个去中心化的生态中很难找到 MCP 服务器、验证其功能并安全地安装,特别是当元数据可能不完整或被伪造时。
集中式注册中心正是为了解决这些痛点,作为一个可信的真相来源,提升可发现性、确保服务器元数据的完整性,并降低安装恶意工具的风险。
MCP 注册中心的目标包括:
-
提供服务器元数据的单一可信来源(包括服务器功能、身份验证方式、安装方式和调用方式)
-
消除第三方注册中心的碎片化问题,让服务器只需在一个地方注册,无需更新互联网上的所有注册表
-
提供服务器注册流程,包括一个 CLI 工具和包含上述元数据的
server.json
文件
更广泛的期望是,这个可信注册中心可以帮助安全地扩展整个生态系统,使开发者能够更有信心地构建和分享新工具。
治理问题是 Anthropic 特别关注的议题之一。他们明确表示 MCP 应保持开放、由社区驱动,但要扩展这种治理模式仍是一个正在推进中的任务。目前他们正在寻找有开源协议治理经验的贡献者加入。这也引出了另一个要点:与会演讲者多次强调,生态系统的成长离不开开发者的贡献。需要集中力量让 MCP 成为新的 Web 标准,并从众多流行的代理协议中脱颖而出。
MCP 的实际应用:案例研究与演示
多家组织展示了 MCP 在实际中的应用:
-
PayPal - 面向智能代理购物的 MCP 服务器:展示了一个新型 agent 工具包和 MCP 服务器,能彻底改变用户的购物体验。用户无需在社交媒体上搜索、比价、结账,只需与代理对话,连接到 PayPal 的 MCP 服务器即可完成所有操作。
-
EpicAI.pro - Jarvis:MCP 的发展正在让现实版的 “Jarvis” 助手成为可能。Jarvis 是一个类 Iron Man 的智能助手,使用自然语言响应多模态输入、反应零延迟、主动预测用户需求、自动管理集成并支持多设备无缝切换。MCP 让 Jarvis 拥有 “双手”,可执行复杂任务。
-
Postman - MCP Server Generator:提供类似 “购物车” 的 API 请求体验。你可以选择不同的 API 请求放入购物篮,并下载为一个完整的 MCP 服务器。
-
Bloomberg:解决了企业级生成式 AI 开发中的关键瓶颈。Bloomberg 有近 10,000 名工程师,使用 MCP 将内部工具转化为模块化、远程优先的组件,供代理统一调用。这种方式让 AI 团队专注于构建代理,其他工程师贡献工具,支持可扩展、安全的代理工作流,完全打通了 MCP 生态的互操作性。
-
Block(Square):使用 MCP 推动 Goose——一个内部 AI 代理,帮助员工自动化工程、销售、营销等多种任务。他们构建了 60 多个 MCP 服务器,连接 Git、Snowflake、Jira、Google Workspace 等系统,使员工通过自然语言查询数据、检测欺诈、管理事件、处理流程,无需写代码。MCP 在 2 个月内帮助 Block 大规模推进了 AI 的落地。
-
AWS:展示了一个以龙与地下城为主题的 MCP 服务器,能模拟掷骰子、记录结果,并通过 Streamable HTTP 返回结果。这个轻量级示例展示了使用 AWS 工具(如 Lambda 和 Fargate)快速构建和部署 MCP 服务器的可行性。他们还介绍了开源工具包 Strands SDK,用于构建能与 MCP 服务器交互的多模态代理。
Elastic 的 MCP 服务器
你现在就可以动手尝试 Elastic 的 MCP 服务器(当前为预览版)。该 MCP 服务器已公开的工具包括:
-
list_indices:列出所有可用的 Elasticsearch 索引
-
get_mappings:获取指定索引的字段映射
-
search:使用提供的查询 DSL 执行 Elasticsearch 搜索
-
get_shards:获取所有或指定索引的分片信息
这些工具已经提供了强大的功能,展示了 Elasticsearch 在大规模搜索方面的核心优势。
-
通过
list_indices
,代理可以发现你拥有的数据; -
get_mappings
让代理理解字段结构与数据类型; -
search
则能使用完整的 Elasticsearch DSL 发起复杂查询。
仅凭这几个工具,就已经能启用企业级的搜索能力,包括复杂聚合等高级特性。
Elastic 正在探索更高级的使用场景,欢迎大家在 Discuss 论坛 或 GitHub 仓库的 issue 区提供反馈、贡献和建议。我们的社区非常活跃,已经有社区成员构建了一个 非官方 的 Kibana MCP 服务器,暴露了所有 Kibana 的 API 接口。这使你可以通过类似 Claude 桌面端的聊天界面来使用 Kibana 的强大功能,例如创建可视化仪表板。完整仓库地址请参见原文链接(注意:该项目为社区维护,并非 Elastic 官方产品)。
结语
MCP 开发者峰会明确展现了 MCP 正在重新定义 AI 代理之间以及与数据世界之间的交互方式。不论你是在连接企业数据,还是构建完全自治的代理系统,MCP 都提供了一个标准化、可组合的集成方式,正逐步扩展至大规模生产环境。从传输协议、安全机制到注册中心与治理,MCP 的生态系统正在快速成熟。MCP 将继续保持开放和社区驱动的模式,今天的开发者有机会亲自参与其未来的发展。
原文:The current state of MCP (Model Context Protocol) - Elasticsearch Labs