

本文属于机器翻译版本。若本译文内容与英语原文存在差异，则一律以英文原文为准。

# 使用自然语言查询在 AgentCore 网关中搜索工具
<a name="gateway-using-mcp-semantic-search"></a>

如果您在创建网关时启用了语义搜索，则可以通过自然语言查询调用该`x_amz_bedrock_agentcore_search`工具在网关中搜索工具。当你有许多工具并且需要为你的用例找到最合适的工具时，语义搜索特别有用。要了解如何在网关[创建期间启用语义搜索，请参阅创建 Amazon Bedrock AgentCore 网关。](gateway-create.md)

## 支持 AWS 语义搜索区域
<a name="gateway-using-mcp-semantic-search-regions"></a>

以下 AWS 区域支持语义搜索：


| 区域名称 | Region | 
| --- | --- | 
| 美国东部（弗吉尼亚州北部） | us-east-1 | 
| 美国东部（俄亥俄州） | us-east-2 | 
| 美国西部（俄勒冈州） | us-west-2 | 
| 亚太地区（海得拉巴） | ap-south-2 | 
| 亚太地区（孟买） | ap-south-1 | 
| 亚太地区（首尔） | ap-northeast-2 | 
| 亚太地区（新加坡） | ap-southeast-1 | 
| 亚太地区（悉尼） | ap-southeast-2 | 
| 亚太地区（东京） | ap-northeast-1 | 
| 加拿大（中部） | ca-central-1 | 
| 欧洲地区（法兰克福） | eu-central-1 | 
| 欧洲地区（爱尔兰） | eu-west-1 | 
| 欧洲地区（伦敦） | eu-west-2 | 
| 欧洲地区（米兰） | eu-south-1 | 
| 欧洲地区（巴黎） | eu-west-3 | 
| 欧洲（西班牙） | eu-south-2 | 
| 欧洲地区（斯德哥尔摩） | eu-north-1 | 
| 南美洲（圣保罗） | sa-east-1 | 

要使用此工具搜索 AgentCore 工具，请使用该`tools/call`方法向网关的 MCP 端点发出以下 POST 请求：

**Example**  

```
POST /mcp HTTP/1.1
Host: ${GatewayEndpoint}
Accept: application/json, text/event-stream
Content-Type: application/json
Authorization: ${Authorization header}
MCP-Protocol-Version: ${McpProtocolVersion}

{
  "jsonrpc": "2.0",
  "id": "${RequestName}",
  "method": "tools/call",
  "params": {
    "name": "x_amz_bedrock_agentcore_search",
    "arguments": {
      "query": ${Query}
    }
  }
}
```
在版本上`2026-07-28`，每个请求都带有`MCP-Protocol-Version`标头、`Mcp-Method`和`Mcp-Name`请求元数据标头以及正`_meta`文中的版本字段。  

```
POST /mcp HTTP/1.1
Host: ${GatewayEndpoint}
Accept: application/json, text/event-stream
Content-Type: application/json
Authorization: ${Authorization header}
MCP-Protocol-Version: 2026-07-28
Mcp-Method: tools/call
Mcp-Name: x_amz_bedrock_agentcore_search

{
  "jsonrpc": "2.0",
  "id": "${RequestName}",
  "method": "tools/call",
  "params": {
    "name": "x_amz_bedrock_agentcore_search",
    "arguments": {
      "query": ${Query}
    },
    "_meta": {
      "io.modelcontextprotocol/protocolVersion": "2026-07-28",
      "io.modelcontextprotocol/clientInfo": {
        "name": "my-agent",
        "version": "1.0.0"
      },
      "io.modelcontextprotocol/clientCapabilities": {}
    }
  }
}
```

**注意**  
网关仅接受其`protocolConfiguration.mcp`配置`supportedVersions`字段中列出的 MCP 协议版本。要使用版本`2026-07-28`，请确保您的网关`supportedVersions`包含该版本。您可以使用 [ UpdateGateway ](https://docs.aws.amazon.com/bedrock-agentcore-control/latest/APIReference/API_UpdateGateway.html) API 更改支持的版本。

替换以下值：
+  `${GatewayEndpoint}`— 网关的 URL，如 [ CreateGateway ](https://docs.aws.amazon.com/bedrock-agentcore-control/latest/APIReference/API_CreateGateway.html) API 的响应中所提供。
+  `${Authorization header}`— 设置[入站授权时身份提供商提供的授权凭证](gateway-inbound-auth.md)。
+  `${McpProtocolVersion}`— 请求的 MCP 协议版本，例如`2025-11-25`。该版本必须是您的网关支持的版本。
+  `${RequestName}`— 请求的名称。
+  `${Query}`— 用于搜索工具的自然语言查询。

响应返回与查询相关的工具列表。

## 工具搜索的代码示例
<a name="gateway-using-mcp-semantic-search-examples"></a>

要查看使用自然语言查询在网关中查找工具的示例，请选择以下方法之一：

**Example**  
将标`MCP-Protocol-Version`头设置为您的网关支持的版本。  

```
import requests
import json

def search_tools(gateway_url, access_token, query):
    headers = {
        "Content-Type": "application/json",
        "Authorization": f"Bearer {access_token}",
        "MCP-Protocol-Version": "2025-11-25"
    }

    payload = {
        "jsonrpc": "2.0",
        "id": "search-tools-request",
        "method": "tools/call",
        "params": {
            "name": "x_amz_bedrock_agentcore_search",
            "arguments": {
                "query": query
            }
        }
    }

    response = requests.post(gateway_url, headers=headers, json=payload)
    return response.json()

# Example usage
gateway_url = "https://${GatewayEndpoint}/mcp" # Replace with your actual gateway endpoint
access_token = "${AccessToken}" # Replace with your actual access token
results = search_tools(gateway_url, access_token, "find order information")
print(json.dumps(results, indent=2))
```
在版本上`2026-07-28`，在正文中包括`Mcp-Method`和`Mcp-Name`请求元数据标头以及`_meta`版本字段。标`MCP-Protocol-Version`题必须匹配`_meta.io.modelcontextprotocol/protocolVersion`。您的网关`supportedVersions`必须包括`2026-07-28`。  

```
import requests
import json

def search_tools(gateway_url, access_token, query):
    headers = {
        "Content-Type": "application/json",
        "Authorization": f"Bearer {access_token}",
        "MCP-Protocol-Version": "2026-07-28",
        "Mcp-Method": "tools/call",
        "Mcp-Name": "x_amz_bedrock_agentcore_search"
    }

    payload = {
        "jsonrpc": "2.0",
        "id": "search-tools-request",
        "method": "tools/call",
        "params": {
            "name": "x_amz_bedrock_agentcore_search",
            "arguments": {
                "query": query
            },
            "_meta": {
                "io.modelcontextprotocol/protocolVersion": "2026-07-28",
                "io.modelcontextprotocol/clientInfo": {"name": "my-agent", "version": "1.0.0"},
                "io.modelcontextprotocol/clientCapabilities": {}
            }
        }
    }

    response = requests.post(gateway_url, headers=headers, json=payload)
    return response.json()

# Example usage
gateway_url = "https://${GatewayEndpoint}/mcp" # Replace with your actual gateway endpoint
access_token = "${AccessToken}" # Replace with your actual access token
results = search_tools(gateway_url, access_token, "find order information")
print(json.dumps(results, indent=2))
```

```
from mcp import ClientSession
from mcp.client.streamable_http import streamablehttp_client
import asyncio

async def execute_mcp(
    url,
    token,
    tool_params,
    headers=None
):
    default_headers = {
        "Authorization": f"Bearer {token}"
    }
    headers = {**default_headers, **(headers or {})}

    async with streamablehttp_client(
       url=url,
       headers=headers,
    ) as (
        read_stream,
        write_stream,
        callA,
    ):
        async with ClientSession(read_stream, write_stream) as session:
            # 1. Perform initialization handshake
            print("Initializing MCP...")
            _init_response = await session.initialize()
            print(f"MCP Server Initialize successful! - {_init_response}")

            # 2. Call specific tool
            print(f"Calling tool: {tool_params['name']}")
            tool_response = await session.call_tool(
                name=tool_params['name'],
                arguments=tool_params['arguments']
            )
            print(f"Tool response: {tool_response}")
            return tool_response

async def main():
    url = "https://${GatewayEndpoint}/mcp"
    token = "your_bearer_token_here"
    tool_params = {
        "name": "x_amz_bedrock_agentcore_search",
        "arguments": {
            "query": "How do I find order details?"
        }
    }
    await execute_mcp(
        url=url,
        token=token,
        tool_params=tool_params
    )


if __name__ == "__main__":
    asyncio.run(main())
```

```
from strands.tools.mcp.mcp_client import MCPClient
from mcp.client.streamable_http import streamablehttp_client

def create_streamable_http_transport(mcp_url: str, access_token: str):
    return streamablehttp_client(mcp_url, headers={"Authorization": f"Bearer {access_token}"})

def get_full_tools_list(client):
    """
    List tools w/ support for pagination
    """
    more_tools = True
    tools = []
    pagination_token = None
    while more_tools:
        tmp_tools = client.list_tools_sync(pagination_token=pagination_token)
        tools.extend(tmp_tools)
        if tmp_tools.pagination_token is None:
            more_tools = False
        else:
            more_tools = True
            pagination_token = tmp_tools.pagination_token
    return tools

def run_agent(mcp_url: str, access_token: str):
    mcp_client = MCPClient(lambda: create_streamable_http_transport(mcp_url, access_token))

    with mcp_client:
        tools = get_full_tools_list(mcp_client)
        print(f"Found the following tools: {[tool.tool_name for tool in tools]}")
        result = mcp_client.call_tool_sync(
            tool_use_id="tool-123",  # A unique ID for the tool call
            name="x_amz_bedrock_agentcore_search",  # The name of the tool to invoke
            arguments={"query": "find order information"}  # A dictionary of arguments for the tool
        )
        print(result)

url = {gatewayUrl}
token = {AccessToken}
run_agent(url, token)
```

```
import asyncio

from langchain_mcp_adapters.client import MultiServerMCPClient
from langgraph.prebuilt import create_react_agent

url = ""
headers = {}

def filter_search_tool(
):
    mcp_client = MultiServerMCPClient(
        {
            "agent": {
                "transport": "streamable_http",
                "url": url,
                "headers": headers,
            }
        }
    )
    tools = asyncio.run(mcp_client.get_tools())
    builtin_search_tool = []
    for tool in tools:
        if tool.name == "x_amz_bedrock_agentcore_search":
            builtin_search_tool.append(tool)
    return builtin_search_tool

def execute_agent(
    user_prompt,
    model_id,
    region,
    tools
):
    model = ChatBedrock(model_id=model_id, region_name=region)

    agent = create_react_agent(model, filter_search_tool())
    _response = asyncio.run(agent.ainvoke({
        "messages": user_prompt
    }))

    _response = _response.get('messages', {})[1].content
    print(
        f"Invoke Langchain Agents Response"
        f"Response - \n{_response}\n"
    )
    return _response
```