View a markdown version of this page

MCP 服务器的目标 - Amazon Bedrock AgentCore

MCP 服务器的目标

MCP 服务器为您在 Bedro AgentCore ck 中与模型和代理的交互提供本地工具、数据访问或自定义函数。在 Bedrock 中 AgentCore,您可以在创建网关时将预配置的 MCP 服务器定义为目标。

MCP 服务器托管代理可以发现和使用的工具、提示和资源。在 Bedrock 中 AgentCore,您可以使用网关将目标与这些功能关联起来,并将它们连接到代理运行时。您可以通过执行协议握手和索引可用功能的 SynchronizeGatewayTargets API 与外部 MCP 服务器连接。有关安装和使用 MCP 服务器的更多信息,请参阅 Amazon Bedro AgentCore ck MCP 服务器:使用编码助手进行 Vibe 编码

主要考虑因素和限制

上市模式

ListingMode 可以将 MCP 服务器目标设置为 “动态” 或 “默认”。

  • 在动态模式下,当用户调用 MCP 操作时,客户端会发现 MCP 服务器的功能。Gateway 通过将请求转发到 MCP 服务器来检索服务器功能。当前,动态模式无法与语义搜索或出站三足 OAuth (3LO) 互操作。

  • 除非更改,否则列表模式将设置为默认。在默认模式下,客户端通过 SynchronizeGatewayTargets API 提供的同步操作发现 MCP 服务器功能。

隐式同步

对于处于 DEFAULT 模式下的目标, CreateGatewayTarget UpdateGatewayTarget 操作会自动触发能力发现和索引。调用任一操作时,Gateway 都会使用 MCP 的tools/list功能获取可用工具,提示使用prompts/list,使用resources/list和的资源resources/templates/list,并将返回的功能添加到统一目录中。

显式同步

默认模式下目标的能力目录可以通过调用 API 来手动刷新。SynchronizeGatewayTargets调用时,它会更新网关的可用功能列表。当 MCP 服务器的工具、提示、资源定义发生变化时,您应该随时调用 API。

在集成 MCP 服务器时,同步是维护精确能力目录的关键机制。在目标创建和更新过程中,隐式同步会自动发生,Gateway 会立即从 MCP 服务器中发现工具、提示和资源并将其编入索引,以确保语义搜索和统一列表的功能可用。显式同步通过 SynchronizeGatewayTargets API 按需执行,允许在 MCP 服务器独立修改其功能时发现 MCP 功能目录。

什么时候打电话 SynchronizeGatewayTargets

每当 MCP 服务器目标的列表模式设置为 DEFAULT 时,请在添加、删除或修改工具、提示或资源之后使用 SynchronizeGatewayTargets API。由于 Gateway 会预先计算用于语义搜索的矢量嵌入并维护标准化功能目录,因此必须进行同步才能确保您的用户能够发现和调用最新的可用工具、提示和资源。

如何调用 API

向 /gateways/ {gatewayIdentifier} 发出 PUT 请求/与请求正文中的目标 ID 同步。API 会立即返回 202 响应并异步处理同步。监控目标状态 GetGatewayTarget 以跟踪同步进度,因为大型功能集的操作可能需要几分钟。

授权策略

支持以下类型的授权策略。

  • 无授权-网关在没有预配置授权的情况下调用 MCP 服务器。不建议使用这种方法。

  • OAuth — 网关同时支持双方 OAuth(客户端凭证授予类型)和三方 OAuth(授权码授予类型)。您可以在 Amazon Bedrock Ident AgentCore ity 中将授权提供商配置为相同的账户和区域,以便网关调用 MCP 服务器。

  • IAM(AWS 签名版本 4(Sig V4))— 网关使用带有网关服务角色证书的 Sigv4 来签署向 MCP 服务器发出的请求。您可以IamCredentialProvider使用 Sigv4 签名所需的服务名称和可选区域(默认为网关区域)来配置。

  • API 密钥 — 网关使用 API 密钥凭据提供程序向 MCP 服务器进行身份验证。您可以在 Amazon Bedrock Ident AgentCore ity 中将 API 密钥提供程序配置为与网关相同的账户和区域。

重要

IAM (Sigv4) 出站授权要求 MCP 服务器托管在原生支持 IAM 身份验证的 AWS 服务后面。网关使用 Sigv4 对出站请求进行签名,但不修改目标上的身份验证配置。目标服务必须能够验证 Sigv4 签名。

以下 AWS 服务原生支持 IAM 身份验证,并且与 MCP 服务器目标的 IAM 出站授权兼容:

不进行本机验证 Sigv4 签名的服务(例如 Application Load Balancer 或直接 Amazon EC2 终端节点)与 IAM 出站授权不兼容。如果您的 MCP 服务器托管在其中一项服务之后,请改用 OAuth 或 API 密钥授权。

MCP 服务器目标的配置注意事项

必须配置以下内容。

  1. MCP 服务器必须具有工具功能。提示和资源功能是可选的,当服务器发布提示和资源时,它们会自动同步。

  2. 支持的 MCP 协议版本为-2025-06-18、2025-03-26 和 2025-11-25

  3. 对于服务器提供的 URL/endpoint 内容,应对 URL 进行编码。网关将使用相同的 URL 来调用服务器。

提示

如果您的 MCP 服务器托管在 R AgentCore untime 上,请在网关上启用 MCP 会话,或者在目标网关中添加Mcp-Session-Id为允许的请求和响应标头。metadataConfiguration这样可以避免每次请求都与 MCP 服务器重复初始化,从而降低后续工具调用的延迟。

使用授权码流程连接到 OAuth-protected MCP 服务器

为了支持具有 MCP 服务器目标的授权码授予类型(三方 OAuth),Amazon Bedrock AgentCore Gateway 提供了两种创建目标的方法。

创建 MCP 服务器目标期间的隐式同步

使用此方法,管理员用户使用响应中返回的授权 URL 在CreateGatewayTargetUpdateGatewayTarget、或SynchronizeGatewayTargets操作期间完成授权代码流。这允许 Amazon Bedrock AgentCore Gateway 预先发现和缓存 MCP 服务器的工具。

注意

您无法删除、更新或同步处于待授权状态(CREATE_PENDING_AUTHUPDATE_PENDING_AUTH、或SYNCHRONIZE_PENDING_AUTH)的目标。等待授权完成或失败,然后再对目标执行进一步的操作。

在创建 MCP 服务器目标期间预先提供架构

使用这种方法,管理员用户可以在使用该mcpToolSchema字段进行UpdateGatewayTarget操作时CreateGatewayTarget直接提供工具架构,而不是 Amazon Bedrock AgentCore Gateway 从 MCP 服务器动态获取它们。Amazon Bedrock AgentCore Gateway 会解析提供的架构并缓存工具定义。

注意

您无法同步配置了静态工具架构 (mcpToolSchema) 的目标。通过UpdateGatewayTarget调用移除静态架构以启用动态工具同步。

URL 会话绑定

OAuth 2.0 授权网址会话绑定可验证发起 OAuth 授权请求的用户是否与授予同意的用户相同。用户完成同意后,浏览器会重定向回目标上配置的带有唯一会话 URI 的返回 URL。然后,应用程序负责调用 CompleteResourceTokenAuthAPI,同时显示用户的身份和会话 URI。Amazon Bedrock Ident AgentCore ity 会验证启动流程的用户是否与在使用授权码交换访问令牌之前完成流程的用户相同。

这样可以防止出现用户意外共享授权网址而其他人完成同意的情况,这会将访问令牌授予错误的一方。授权 URL 和会话 URI 的有效期仅为 10 分钟,进一步限制了滥用的窗口。会话绑定适用于目标创建期间(隐式同步)和工具调用期间。

注意

通过 AWS 管理控制台执行目标操作(创建、更新或同步)和授权时,CompleteResourceTokenAuth调用是代表资源所有者进行的,授权后无需执行任何进一步的操作。

配置权限

用于创建、更新或同步 MCP 服务器目标的 IAM 角色应具有以下示例所示的权限。

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "bedrock-agentcore:CreateGateway", "bedrock-agentcore:GetGateway", "bedrock-agentcore:CreateGatewayTarget", "bedrock-agentcore:GetGatewayTarget", "bedrock-agentcore:SynchronizeGatewayTargets", "bedrock-agentcore:UpdateGatewayTarget" ], "Resource": "arn:aws:bedrock-agentcore:*:*:*gateway*" }, { "Effect": "Allow", "Action": [ "bedrock-agentcore:CreateWorkloadIdentity", "bedrock-agentcore:GetWorkloadAccessToken", "bedrock-agentcore:GetWorkloadAccessTokenForUserId", "bedrock-agentcore:GetResourceOauth2Token", "bedrock-agentcore:GetResourceApiKey", "bedrock-agentcore:CompleteResourceTokenAuth", "secretsmanager:GetSecretValue" ], "Resource": "*" }, { "Effect": "Allow", "Action": [ "kms:EnableKeyRotation", "kms:Decrypt", "kms:Encrypt", "kms:GenerateDataKey*", "kms:ReEncrypt*", "kms:CreateAlias", "kms:DisableKey", "kms:*" ], "Resource": "arn:aws:kms:*:123456789012:key/*" } ] }