通过动态工具发现,使用基于 MCP 服务器的插件 的声明式代理可以在运行时直接从 MCP 服务器解析其可用工具,而不是局限于发布时在代理插件清单中捕获的工具列表。 此功能允许用户近乎实时地访问 MCP 服务器的最新功能,而无需等待代理重新打包、重新验证和重新发布。
注意
动态工具发现包括返回交互式 UI 小组件 (MCP 应用) 的工具。 代理在没有额外配置的情况下呈现这些小组件。
注意
本文介绍插件的动态工具发现,其中 MCP 服务器是通过声明式代理的插件清单注册的。 将 MCP 服务器注册为 代理连接器 使用不同的清单, agentConnectors 即 Microsoft 365 应用清单中的节点。 对于代理连接器,动态工具发现需要应用清单版本 1.29 或更高版本 以及 允许它的主机。 有关详细信息,请参阅 将 MCP 服务器注册为代理连接器。
动态工具发现与固定工具有何不同
使用 固定工具,代理开发人员可选择 MCP 服务器公开的工具、在插件清单中声明它们,并将其作为代理包的一部分提供。 对工具表面的任何更改(例如添加新工具、删除已弃用的工具、重命名参数或优化描述)都需要代理开发人员更新清单、重新提交代理,并在用户看到更改之前对其进行重新验证和重新发布。
通过 动态工具发现,代理不再携带固定的工具列表。 平台在运行时从 MCP 服务器获取当前工具定义,将它们与最后一个已知集进行比较,验证更改并应用它们,以便代理在服务器功能的最新视图上运行。
下表总结了差别之处。
| 方面 | 已固定工具 | 动态工具发现 |
|---|---|---|
| 工具定义源 | 与代理一起打包的插件清单 | 运行时提取的 MCP 服务器 |
| 解析刀具定义时 | 在代理发布时 | 在运行时,每个会话 |
| 添加或删除工具 | 需要更新清单、重新提交代理并重新发布 | MCP 服务器公开更改且运行时验证通过后自动反映 |
| 更新工具的架构或说明 | 需要重新发布代理 | 运行时拾取 |
| 用户特定的工具图面 (例如,按 SKU、角色或权利) | 不支持。 每个用户都会看到相同的清单定义的工具列表。 | 支持。 MCP 服务器可以返回为登录用户定制的工具列表。 |
| 是时候推出新的工具功能了 | 以代理重新发布周期为上限的天到周 | 近实时,仅对 MCP 服务器部署和运行时验证进行限制 |
| 是时候停用已弃用的工具了 | 天到几周 | 近实时 |
| 对工具定义的信任和安全检查 | 在商店验证期间发布时执行 | 发布时代理级验证 加上 运行时负责任的 AI (RAI) 和交叉提示注入攻击 (XPIA) 在激活之前对每个新发现或修改的工具进行验证 |
插件清单差异
插件清单通过运行时的 RemoteMCPServer 配置来表达发现模式。
使用 固定工具,列出数组中的 functions 工具和运行时的 run_for_functions 属性。 将其定义存储在运行时的 mcp_tool_description 属性中:
{
"functions": [
{ "name": "search_repositories" },
{ "name": "search_users" }
],
"runtimes": [
{
"type": "RemoteMCPServer",
"spec": {
"url": "https://api.contoso.com/mcp",
"mcp_tool_description": {
"file": "mcp-tools.json"
}
},
"run_for_functions": [
"search_repositories",
"search_users"
]
}
]
}
使用 动态工具发现时, functions 数组为空,运行时的 run_for_functions 属性设置为 ["*"],因此代理在运行时解析服务器的所有工具:
{
"functions": [],
"runtimes": [
{
"type": "RemoteMCPServer",
"spec": {
"url": "https://api.contoso.com/mcp"
},
"run_for_functions": [
"*"
]
}
]
}
有关详细信息,请参阅 MCP 服务器规范对象。
使用代理工具包配置固定工具
默认情况下, Microsoft 365 代理工具包 为动态工具发现配置新的 MCP 插件。 若要固定一组固定的、经过管理的工具 - 例如,仅公开服务器工具的子集,或在两次发布之间保持工具表面不变 - 请在 Agents Toolkit 中选择工具。 然后,在更新清单并重新发布代理之前,工具图面不会更改。
要固定一组特定的工具:
打开 .vscode/mcp.json 文件。 在文件编辑器中选择 “开始” 按钮。
如果系统提示进行身份验证,请选择 “允许进行 身份验证”。
在文件编辑器中选择“ 攻击力:从 MCP 获取操作 ”按钮,然后选择“ ai-plugin.json”。
选择代理要使用的工具。
选择工具后,Agents Toolkit 将使用固定工具更新 ai-plugin.json ,如 插件清单差异中所示。 Agents Toolkit 将工具定义存储在运行时的 mcp_tool_description 属性中,可以内联存储在数组中 tools ,也可以作为对包含它们的 的 file 引用。 定义与 MCP 服务器的方法返回的 tools/list 格式匹配。
管理员的透明度、治理和审核
当发现 工具时 ,动态工具发现从发布时到运行时发生变化。 MCP 服务器开发人员仍创作和拥有工具定义。 为了保持管理员所依赖的透明度、治理和合规性保证,平台通过 Microsoft 365 管理中心 (MAC) 和 Microsoft Purview 提供控制和审核信号。
通过动态发现将代理与固定工具区分开来
管理员可以从 Microsoft 365 管理中心的代理详细信息视图确定其租户中的哪些代理使用动态工具发现。 在代理详细信息视图的“ 数据 & 工具 ”选项卡中, “工具 ”部分下的信息横幅指示代理使用其工具可以在运行时更改的 MCP 服务器。
代理和连接器目录列表视图本身保持不变。 发现机制显示在每个代理的详细信息页面上,而不是目录级列表中。
禁用使用动态工具发现的代理
动态工具发现功能本身没有单独的租户级或代理级切换。 相反,管理员使用 Microsoft 365 管理中心中的现有代理级控件:
- 如果管理员不希望使用动态工具发现的特定代理在其租户中可用,他们可以通过目前用于任何声明性代理的相同代理管理控件来禁用或阻止该代理。
- 在更广泛推出之前,使用相同的控件(包括将代理分配给特定用户或组)来暂存使用动态工具发现的代理的可用性。
这种方法意味着动态工具发现不会为管理员引入新的策略面来学习。 无论代理使用固定工具还是动态工具发现,代理启用、作用域和禁用的工作方式相同。 代理详细信息视图告诉管理员代理使用哪种发现机制,以便他们可以就是否允许它做出明智的决定。
Microsoft Purview 中的审核日志
与使用动态工具发现的代理的交互将记录在工作负载下的 Copilot Microsoft Purview 审核日志中,以及与任何其他声明性代理的交互。 管理员可以通过在 Purview 审核搜索中筛选Workload = Copilot来查找这些记录,并且可以使用 中的字段CopilotEventData标识TargetAgentName特定代理。
如何保持现有的信任和安全保障
动态工具发现不会绕过目前适用于 MCP 插件的信任和安全模型。 它使用运行时验证层扩展模型:
- ISV (3P) 应用 继续依赖于现有的扩展性治理堆栈:发布者证明和 M365 认证、租户和 ISV 服务合同和使用条款,以及在发布时执行的存储验证。
- 业务线 (LOB) 应用继续依赖于租户现有的第一方和内部应用的内部载入和合规性过程。
- 运行时验证:在为最终用户激活该工具之前,RAI 和 XPIA 分类器会筛选每个新发现或修改的工具。 该过程阻止验证失败的工具更改。
这些流程共同保证了客户在发布时所依赖的保证在运行时工具的发展而继续保持不变。