1. MCP Elicitations 核心机制解析
1.1 结构化信息请求:告别猜测,精准获取上下文
MCP (Model Context Protocol) Elicitations 的核心机制在于其能够使 MCP 服务器在对话过程中,主动向用户提出结构化的、明确的问题,以获取完成任务所需的精确上下文信息。 这一机制的出现,旨在解决传统 AI 助手在与开发者协作时,因信息不足或理解偏差而导致的「猜测」问题。例如,AI 助手可能错误地假设开发者使用的是 PostgreSQL 数据库,而实际上开发者使用的是 MongoDB;或者 AI 助手生成了 REST 端点,而开发者需要的是 GraphQL 。这些情况的发生,往往是因为大型语言模型 (LLM) 无法直接向用户提问以澄清模糊点,或者用户的输入被误解。MCP Elicitations 通过赋予 MCP 服务器在对话中途发起结构化询问的能力,使得 AI 助手不再需要依赖猜测,而是可以直接向用户询问其数据库类型、认证方法或 API 结构等关键信息。这种方式改变了 MCP 客户端收集上下文的方式,通过结构化的提示,消除了因猜测而导致返回给客户端的上下文信息「几乎正确但又不完全正确」的问题,从而显著提升了 AI 辅助编程的准确性和效率 。
1.2 JSON Schema 的关键作用:定义、验证与标准化
JSON Schema 在 MCP Elicitations 中扮演着至关重要的角色,它为结构化信息请求提供了定义、验证和标准化的基础。 当 MCP 服务器需要向用户请求特定信息时,它会发送一个包含 requestedSchema
的 elicitation 请求。这个 requestedSchema
就是一个 JSON Schema 对象,它详细定义了所请求信息的结构、数据类型、格式以及验证规则 。例如,一个请求联系信息的 elicitation,其 requestedSchema
可能会指定需要用户提供 name
(字符串类型) 和 email
(字符串类型,并符合 email 格式) 两个字段,并且这两个字段都是必填项 。JSON Schema 的强大之处在于其能够精确描述复杂的数据结构,支持多种数据类型(如字符串、数字、布尔值),定义字段是否必需,以及提供内置的格式验证(如 email
, uri
, date
, date-time
)和枚举值(用于多选一的情况)。这种标准化的定义方式,不仅使得 MCP 客户端能够根据 schema 渲染出相应的用户界面组件来收集信息,还能在用户输入时进行实时验证,确保数据的有效性和合规性,从而减少了后续处理错误的可能性。
1.3 交互流程:请求、响应与状态管理
MCP Elicitations 的交互流程设计得简洁而高效,确保了在获取额外上下文信息的同时,能够保持当前工作流的状态,避免因信息询问而中断用户的操作。 整个过程始于 MCP 服务器识别到对更多上下文信息的需求。此时,服务器会向 MCP 客户端发送一个结构化的 elicitation 请求,该请求包含了提示信息 (message
) 和请求的数据模式 (requestedSchema
) 。MCP 客户端在收到请求后,负责将其渲染为用户界面上的提示,例如在 Visual Studio Code 中,这可能表现为一个原生的对话框,类似于命令面板的风格。用户随后可以与这个提示进行交互,根据 requestedSchema
的要求提供信息。对于每一个 elicitation 请求,用户通常有三种响应方式:接受并提供信息 (Accept)、拒绝提供信息 (Decline),或者取消整个交互过程 (Cancel) 。用户的响应会被 MCP 客户端收集并传递回服务器。关键在于,整个 elicitation 过程是在当前对话的上下文中进行的,这意味着服务器在收到用户响应后,可以无缝地继续之前的任务,而无需用户重新解释或重复之前的步骤。这种设计保证了交互的流畅性和上下文的一致性。
2. Visual Studio Code 中的 MCP Elicitations 实现
2.1 原生集成:无缝融入开发者工作流
Visual Studio Code (VS Code) 在其最新的 Insiders 版本中,已经原生支持了 MCP Elicitations 规范,这使得开发者可以在自己熟悉的集成开发环境 (IDE) 中,无缝体验到这种新型的上下文获取机制。 这种原生集成意味着 MCP Elicitations 不再是作为一个独立的插件或工具存在,而是深度融入到 VS Code 的底层功能和用户界面中。当连接的 MCP 服务器需要额外信息时,VS Code 能够直接处理来自服务器的 elicitation 请求,并以一种与 IDE 整体风格一致的方式呈现给用户。这种集成方式避免了在不同工具间切换的麻烦,也减少了学习新交互模式的需要。开发者可以继续专注于他们的编码任务,而 elicitation 的提示会自然地出现在工作流程中,就像 IDE 本身在询问一些必要的信息来完成某项操作一样。这种无缝融入对于提升开发效率和用户体验至关重要,因为它确保了 AI 辅助功能能够以一种不突兀、不打断思路的方式为开发者提供服务。
2.2 用户界面呈现:Command Palette 风格的交互体验
在 Visual Studio Code 中,MCP Elicitations 的用户界面呈现方式借鉴了其广受欢迎且用户熟悉的 Command Palette (命令面板) 风格。 当 MCP 服务器发起一个 elicitation 请求时,VS Code 会弹出一个原生的 UI 提示,这个提示的交互方式与开发者日常使用的命令面板非常相似 。这意味着开发者不需要学习一套全新的交互模式,而是可以凭借已有的使用习惯来快速响应 elicitation。例如,提示信息会清晰地告知用户需要提供什么信息,而输入框或选择器则会根据 requestedSchema
的定义来呈现。如果 schema 要求一个字符串,就会显示文本输入框;如果要求一个枚举值,可能会显示下拉菜单。这种设计选择不仅降低了用户的学习曲线,也使得 elicitation 的交互过程更加高效和自然。对于经常依赖命令面板执行操作的开发者来说,这种 UI 呈现方式感觉就像是编辑器本身在请求更多信息,从而使得与 AI 模型的交互更加顺畅和直观。
2.3 配置与启动:在 VS Code Insiders 中实践 MCP 服务器
为了在 Visual Studio Code Insiders 版本中实践 MCP Elicitations,开发者需要配置并启动一个支持 elicitation 功能的 MCP 服务器。 Den Delimarsky 的文章中提供了一个基于 “Everything MCP server” 的示例,通过一个 pull request 为其添加了 elicitation 支持 。要开始测试,首先需要克隆这个 fork 的仓库,并在其 src/everything
目录下运行 npm run build
来构建服务器。接下来,在 VS Code 中,通过快捷键 Ctrl
(或 macOS 上的 Cmd
) + Shift
+ P
打开命令面板,输入 “Add MCP server” 并选择相应的命令。在弹出的界面中,需要指定服务器的类型为 stdio
,命令为 npm
,并在参数中填入 start
, --prefix
, 以及 src/everything
文件夹的路径 。例如,配置可能如下所示:
{
"servers": {
"test-elicitations": {
"type": "stdio",
"command": "npm",
"args": [
"start",
"--prefix",
"/path/to/src/everything"
]
}
},
"inputs": []
}
配置完成后,可以直接从设置文件中启动这个 MCP 服务器。一旦服务器运行起来,就可以通过特定的方式(例如在 VS Code 中使用 #
前缀)触发 elicitation 工具,服务器便会向用户发起结构化的信息请求,例如询问用户最喜欢的颜色、一个1到100之间的数字,或者偏好的宠物类型 。这个示例虽然简单,但它清晰地展示了 elicitation 的整个流程,从服务器配置、启动到实际交互。
3. MCP Elicitations 与传统聊天模式的对比分析
MCP Elicitations 与传统聊天模式在多个关键方面存在显著差异,这些差异使得 MCP Elicitations 在特定场景下,尤其是在需要精确、结构化信息输入的开发者工作流中,展现出明显优势。
特性 (Feature) | MCP Elicitations | 传统聊天模式 (Traditional Chat Mode) |
---|---|---|
数据收集方式 (Data Collection) | 结构化数据收集 (Structured data collection),通过 JSON Schema 定义精确信息需求 | 自由格式对话 (Free-form conversation),依赖自然语言理解提取信息 |
上下文保持 (Context Preservation) | 高,信息请求嵌入当前工作流,不中断或丢失上下文 | 较低,多轮对话可能导致上下文稀释或偏移,需要反复陈述背景信息 |
输入验证 (Input Validation) | 内置强大验证,基于 JSON Schema 进行客户端实时验证,有效预防错误 | 验证能力有限,依赖自然语言处理,错误判断可能不精确,易遗漏错误或产生误判 |
用户体验 (User Experience) | 原生集成与自然交互,客户端以原生 UI (如表单) 呈现请求,交互更直接高效 | 可能存在隔阂感,通常在独立聊天界面进行,对于结构化信息输入可能不够直观便捷 |
Table 1: MCP Elicitations 与传统聊天模式对比
3.1 结构化数据收集 vs. 自由格式对话
MCP Elicitations 与传统聊天模式在数据收集方式上存在显著差异,前者强调结构化数据收集,而后者则依赖于自由格式的对话。 在传统聊天模式中,AI 助手通常通过自然语言与用户进行开放式交流来获取信息。这种方式虽然灵活,但也容易产生歧义、误解或信息不完整的情况。用户可能以多种方式表达同一意图,或者提供的信息格式不符合 AI 的期望,导致 AI 需要进行复杂的解析和推断,甚至可能需要进行多轮澄清对话,效率较低且容易出错。相比之下,MCP Elicitations 通过 JSON Schema 来定义所需信息的精确结构和格式 。当 MCP 服务器需要特定信息时,它会发送一个包含 requestedSchema
的请求,明确指定需要用户提供哪些字段、这些字段的数据类型是什么(例如字符串、数字、布尔值)、是否有特定的格式要求(例如电子邮件、URI、日期时间),以及哪些字段是必填的。客户端则根据这个 Schema 渲染相应的输入控件,引导用户提供符合规范的数据。这种方式确保了收集到的数据是结构化、标准化且易于验证的,极大地减少了歧义和错误,提高了信息获取的准确性和效率。
3.2 上下文保持与工作流连续性
MCP Elicitations 相较于传统聊天模式,在保持上下文和工作流连续性方面表现出明显优势。 在传统的聊天交互中,当 AI 需要澄清或获取更多信息时,通常会中断当前的对话流,转向一个新的问答环节。这种中断可能会使用户脱离原先的任务焦点,甚至忘记之前的上下文,尤其是在处理复杂任务时。MCP Elicitations 的设计目标之一就是避免这种中断。当服务器发起一个 Elicitation 请求时,这个请求是嵌入在当前交互流程中的,它不会导致工作流的状态丢失或重置 。用户可以在当前上下文中直接回应提示,提供所需信息后,服务器可以立即基于这些新信息继续之前的操作。这种机制确保了交互的连贯性和高效性,使得 AI 助手更像是一个能够无缝融入用户工作流的智能伙伴,而不是一个需要不断切换上下文的独立工具。例如,在代码生成过程中,如果 AI 需要确认某个参数,通过 Elicitation 弹出的提示会直接覆盖在代码编辑器上,用户在输入信息后,AI 可以立即继续生成代码,整个过程流畅自然。
3.3 输入验证与错误预防机制
MCP Elicitations 通过引入基于 JSON Schema 的输入验证机制,在错误预防方面优于传统的自由格式聊天。 在传统聊天中,用户输入的信息是自由文本,AI 系统需要尝试理解并提取其中的关键信息。如果用户提供的信息格式不正确、不完整或存在歧义,AI 可能无法正确解析,或者在后续处理中产生错误,这通常需要额外的交互轮次来进行纠正。MCP Elicitations 通过在客户端利用 requestedSchema
对用户输入进行即时验证,有效地预防了这类错误的发生 。JSON Schema 定义了每个字段的数据类型(如字符串、数字)、格式(如电子邮件、URI)、是否必填以及可能的枚举值等约束。当用户在 Elicitation 提示中输入信息时,客户端可以根据这些规则进行校验。例如,如果 Schema 要求一个 email
格式的字符串,而用户输入了不符合电子邮件格式的文本,客户端可以立即提示错误,要求用户更正,而无需将无效数据发送到服务器。这种客户端验证不仅减少了服务器端的处理负担,更重要的是能够在用户输入阶段就捕获并纠正错误,从而提高了交互的效率和准确性,避免了因错误数据导致的后续问题。
3.4 用户体验:原生集成与自然交互
MCP Elicitations 在用户体验方面相较于传统聊天模式,通过原生集成和更自然的交互方式带来了显著提升。 传统聊天机器人通常以一个独立的聊天窗口或面板的形式出现,用户与 AI 的交互感觉像是在与一个外部实体进行对话。虽然这种模式在某些场景下是合适的,但在需要精确信息输入或与特定应用深度集成的场景中,频繁切换焦点和进行自由文本对话可能会显得不够高效和自然。MCP Elicitations 则强调将信息请求无缝集成到宿主应用程序的用户界面中。例如,在 Visual Studio Code 中,Elicitation 提示以原生的 Command Palette 风格呈现,感觉就像是编辑器本身在请求信息 。这种集成方式使得交互更加直接和专注,用户无需离开当前的工作环境。对于需要提供具体细节(如数据库类型、文件路径、API 端点)的场景,这种结构化的、表单式的提示比自由格式的聊天更为高效和不易出错。用户可以直接在清晰的指引下输入或选择所需信息,而不是试图通过自然语言来描述一个具体的参数。这种设计使得 AI 工具感觉更像是一个了解用户工作流程并能精准协助的伙伴,而非仅仅是一个对话界面。
4. MCP Elicitations 的实际应用案例
4.1 Everything MCP 服务器示例:收集用户偏好
Den Delimarsky 在其文章中提供了一个基于 “Everything MCP server” 的简单示例,用以演示 MCP Elicitations 的实际运作方式 。 这个示例虽然被作者称为 “silly demo”,但它清晰地展示了 Elicitation 的核心机制。通过向 “Everything server” 提交一个 Pull Request 来添加 Elicitation 支持,开发者可以构建并运行这个修改后的服务器。在 Visual Studio Code 中配置并启动该服务器后,用户可以通过特定的命令(例如,在聊天视图中使用 #
前缀触发 startElicitation
工具)来激活 Elicitation 流程。服务器随后会向客户端发送一个 Elicitation 请求,其中包含一个消息(例如 “Please provide your preferences”)和一个 requestedSchema
。这个 Schema 定义了需要收集的用户偏好信息,例如:最喜欢的颜色(字符串类型)、一个1到100之间的数字(数字类型,可能带有最小值和最大值约束)、以及偏好的宠物类型(可能是包含特定选项的枚举类型)。VS Code 客户端接收到这个请求后,会将其渲染为一个结构化的提示对话框,用户可以在其中输入或选择自己的偏好。用户提交后,这些信息会以结构化的 JSON 格式返回给服务器。这个示例虽然简单,但它有效地说明了 Elicitation 如何通过结构化的方式从用户那里收集特定的、非敏感的信息,为更复杂的应用场景奠定了基础。
4.2 更广泛的潜在应用场景:数据库类型、文件路径、API端点等
MCP Elicitations 的实际应用潜力远不止于收集简单的用户偏好。其核心价值在于能够为 MCP 服务器提供一种标准化的方式来动态获取执行任务所需的特定上下文信息,从而在各种复杂的开发场景中提高 AI 助手的准确性和实用性。 Den Delimarsky 的文章明确指出,在真实场景中,MCP 服务器可以利用 Elicitations 请求诸如数据库类型(例如,让用户在 MySQL、PostgreSQL、MongoDB 等之间选择)、文件路径(例如,请求用户指定一个配置文件或代码文件的路径)、API 端点(例如,请求用户提供一个需要调用的 REST API 的 URL)等关键信息 。例如,一个代码生成工具在创建与数据库交互的代码时,可以通过 Elicitation 询问用户目标数据库的类型和连接参数,而不是盲目猜测或依赖可能过时的配置文件。同样,一个自动化测试工具可能需要用户指定测试用例文件的路径,或者一个 API 集成工具可能需要用户提供 API 的认证凭据和端点地址。通过将这些信息请求结构化并集成到工作流中,MCP Elicitations 使得 AI 工具能够更智能地适应不同的开发环境和用户需求,减少错误假设,并提供更精准的协助。这种能力对于构建真正实用和高效的 AI 驱动开发工具至关重要。
5. MCP Elicitations 的安全考量
5.1 当前限制:禁止请求敏感信息
在 MCP Elicitations 的当前实现中,一个至关重要的安全考量是明确禁止 MCP 服务器通过此机制请求敏感信息。 Den Delimarsky 在其文章中强调,由于他深度参与了 MCP 的安全工作,因此特别指出了这一限制:MCP 服务器绝不能通过当前的 Elicitation 实现来请求密码、API 密钥或其他敏感数据 。这一限制是基于对用户数据安全和隐私保护的审慎考虑。Elicitation 机制本身设计用于获取结构化的、非敏感的上下文信息,以帮助 AI 模型更好地理解任务需求。如果允许通过这种标准化的、可能由不同开发者实现的通用界面来请求敏感凭证,将会引入显著的安全风险。恶意或存在漏洞的 MCP 服务器可能会滥用此功能来诱骗用户泄露敏感信息。因此,在当前的规范和实践层面,Elicitation 被严格限制在非敏感数据的收集上。开发者在使用 Elicitations 时,必须遵守这一原则,确保其服务器不会尝试通过 elicitation/create
请求来获取任何形式的敏感凭证或个人身份信息 (PII)。
5.2 未来安全机制:带外凭证与授权请求(OAuth等)
尽管当前的 MCP Elicitations 实现禁止请求敏感信息,但社区已经认识到在某些场景下,AI 工具确实需要安全地获取用户凭证或授权才能访问受保护的资源。 为了满足这一需求,同时确保安全性,相关工作正在进行中,旨在引入更安全的机制来处理凭证和授权请求。Den Delimarsky 的文章提到,Wils Dawson 和 Nate Barbettini 来自 Arcade.dev 的团队正在致力于开发一种安全的、带外 (out-of-band) 的凭证或授权请求方式 。这种机制很可能涉及到使用成熟的授权框架,如 OAuth 2.0 或 OpenID Connect。通过带外请求,敏感凭证的交换不会直接通过 MCP Elicitation 通道进行,而是可能引导用户到一个安全的授权服务器进行认证和授权,然后通过回调或令牌的方式将授权结果传递给 MCP 服务器。这种方式可以将敏感信息的处理与通用的 Elicitation 流程分离开来,利用 OAuth 等协议提供的安全特性(如令牌有效期、范围限制、客户端验证等)来保护用户数据。社区鼓励开发者关注相关的 Pull Request 并提供反馈,以共同塑造这一重要安全功能的未来。
5.3 社区参与与反馈:共同构建安全生态
MCP Elicitations 作为一个新兴的技术,其安全性的构建和完善离不开社区的积极参与和反馈。 Den Delimarsky 在文章中特别提到了由 Wils Dawson 和 Nate Barbettini 领导的关于安全凭证请求的工作,并鼓励读者查看相关的 Pull Request 并提供反馈 。这体现了 MCP 协议发展过程中的开放性和协作性。安全并非一蹴而就,而是需要通过持续的审查、讨论和实践来不断强化。开发者在使用和实现 MCP Elicitations 时,应密切关注官方规范的最新更新和安全建议。同时,如果发现潜在的安全漏洞或有改进安全性的建议,积极参与社区讨论,向规范维护者或相关工具的开发团队提供反馈至关重要。这种集体智慧有助于识别和修复安全问题,推动 MCP 生态系统向更安全、更可靠的方向发展。通过社区的共同努力,可以确保 MCP Elicitations 在提供强大功能的同时,也能有效保护用户的数据和隐私,赢得开发者的信任。
6. MCP Elicitations 的未来发展趋势
6.1 迈向更智能、更具上下文感知能力的AI工具
MCP Elicitations 的引入预示着 AI 辅助开发工具将朝着更智能、更具上下文感知能力的方向发展。 Den Delimarsky 在其文章的 “Looking ahead” 部分指出,随着越来越多的 MCP 服务器采用 Elicitation 模式,我们可以期待 AI 工具能够更深入地理解开发者的具体需求和所处的工作环境 。传统的 AI 助手往往因为缺乏足够的上下文而做出不准确的假设,导致生成的代码或建议与实际情况不符。Elicitations 通过提供一种标准化的方式来主动获取缺失的上下文信息,使得 AI 模型能够基于更完整、更准确的数据进行推理和操作。这意味着未来的 AI 工具将能够更精准地理解项目特定的配置(如数据库类型、API 规范)、开发者的个人偏好(如编码风格、常用库)以及当前任务的细微要求。这种增强的上下文感知能力将使 AI 助手不再仅仅是执行指令的工具,而是能够更像一个理解项目背景和开发者意图的智能伙伴,从而提供更相关、更个性化的辅助。
6.2 从聊天机器人到真正的协作伙伴
MCP Elicitations 的出现是推动 AI 开发工具从简单的聊天机器人向真正的协作伙伴转变的关键一步。 当前许多 AI 编码助手主要以聊天界面的形式存在,用户通过自然语言描述需求,AI 则尝试生成代码或回答问题。虽然这种模式有一定价值,但在复杂任务和深度集成场景中,其局限性也日益显现。Elicitations 通过引入结构化的信息请求和原生 UI 集成,使得 AI 与开发者的交互更加直接、高效和自然,更像是一种「并肩作战」的合作关系 。AI 不再仅仅是被动地等待指令,而是能够主动地、有策略地询问关键信息,以确保其输出的准确性和相关性。这种交互模式的转变,使得 AI 工具能够更深入地融入开发工作流,理解任务的复杂性,并在关键时刻提供精准的协助,而不是仅仅进行表面的对话。正如 Den Delimarsky 所展望的,未来的 AI 工具将更少地像聊天机器人,而更像知识渊博的结对编程伙伴,能够与开发者进行更深层次的协作,共同解决复杂的编程问题。
6.3 开发者生态与规范演进
MCP Elicitations 的未来发展与开发者生态的繁荣和 MCP 规范的持续演进紧密相关。 Den Delimarsky 提到,MCP Elicitations 仍处于早期阶段,但其影响是显著的 。这意味着随着更多开发者开始采用和构建支持 Elicitations 的 MCP 服务器和客户端,将会涌现出更多创新的应用场景和最佳实践。规范的制定者需要密切关注社区的反馈和实际应用中的挑战,不断迭代和完善 Elicitation 的协议细节、安全模型和互操作性标准。例如,对于敏感信息的处理、更复杂的交互模式(如多步骤 Elicitation)、以及与其他 MCP 功能(如 Tools 和 Resources)的协同工作等方面,都可能需要进一步的规范和指导。一个活跃的开发者社区能够通过贡献代码、分享经验、报告问题等方式,共同推动 MCP Elicitations 技术的成熟和普及。同时,清晰的文档、易用的 SDK 和丰富的示例对于降低开发门槛、促进生态发展也至关重要。只有通过规范的持续演进和开发者社区的积极参与,MCP Elicitations 才能充分发挥其潜力,成为下一代 AI 辅助开发工具的核心组件。
7. 结论:MCP Elicitations 的价值与影响
MCP Elicitations 的引入,标志着 AI 辅助开发工具在交互模式和上下文理解能力上的一次重要飞跃。 其核心价值在于通过结构化的信息请求机制,有效地解决了传统 AI 工具因猜测或上下文不足而导致输出不准确的问题。通过允许 MCP 服务器在交互过程中主动、精准地向用户询问所需信息,Elicitations 显著提升了 AI 助手的实用性和可靠性。在 Visual Studio Code 等 IDE 中的原生集成,进一步优化了用户体验,使得信息获取过程流畅且自然,无缝融入开发者现有的工作流。
与传统聊天模式相比,MCP Elicitations 在结构化数据收集、上下文保持、输入验证和用户体验方面均展现出明显优势。它不仅能够确保收集到格式正确、符合预期的数据,还能在询问过程中保持工作流的连续性,并通过客户端验证有效预防输入错误。这种机制使得 AI 工具更像一个能够理解具体需求并提供精准协助的智能伙伴,而非仅仅是一个进行自由格式对话的聊天机器人。
尽管当前 Elicitations 在安全方面存在限制,禁止请求敏感信息,但社区已经在积极探索更安全的带外凭证和授权机制(如 OAuth)来弥补这一不足。这体现了 MCP 协议在安全性和功能性之间寻求平衡的审慎态度。