

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

# 列出 AgentCore 网关中的可用工具
<a name="gateway-using-mcp-list"></a>

要列出 AgentCore 网关提供的所有可用工具，请向网关的 MCP 端点发出 POST 请求，并在请求正文中指定`tools/list`为方法：

**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}

${RequestBody}
```
在版本上`2026-07-28`，每个请求都带有`MCP-Protocol-Version`标头、`Mcp-Method`请求元数据标头和正`_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/list

${RequestBody}
```

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

替换以下值：
+  `${GatewayEndpoint}`— 网关的 URL，如 [ CreateGateway ](https://docs.amazonaws.cn/bedrock-agentcore-control/latest/APIReference/API_CreateGateway.html) API 的响应中所提供。
+  `${Authorization header}`— 设置[入站授权时身份提供商提供的授权凭证](gateway-inbound-auth.md)。
+  `${McpProtocolVersion}`— 请求的 MCP 协议版本，例如`2025-11-25`。该版本必须是您的网关支持的版本。
+  `${RequestBody}`— 请求正文的 JSON 负载，如[模型上下文协议 (MCP) [https://modelcontextprotocol.io/specification/2025-06-18/server/tools#listing-tools](https://modelcontextprotocol.io/specification/2025-06-18/server/tools#listing-tools) 中的](https://modelcontextprotocol.io/docs/getting-started/intro)清单工具中所述。包括`tools/list`作为`method`. 在版本中`2026-07-28`，还要包括`_meta`版本字段`params`。

**注意**  
有关可选支持的参数列表`tools/list`，请参阅[模型上下文协议文档[工具](https://modelcontextprotocol.io/specification/2025-06-18/server/tools)中请求正文中的`params`对象](https://modelcontextprotocol.io/specification/2025-06-18)。在页面顶部的搜索栏旁边，您可以选择要查看其文档的 MCP 版本。确保该版本是亚马逊 Bedrock [ AgentCore ](gateway-using.md) 支持的版本。

响应返回可用工具的列表，包括其名称、描述和参数架构。

## 清单工具的代码示例
<a name="gateway-using-mcp-list-examples"></a>

要查看列出网关中可用工具的示例，请选择以下方法之一：

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

```
import requests
import json

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

    payload = {
        "jsonrpc": "2.0",
        "id": "list-tools-request",
        "method": "tools/list"
    }

    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
tools = list_tools(gateway_url, access_token)
print(json.dumps(tools, indent=2))
```
在版本上`2026-07-28`，添加`MCP-Protocol-Version`和`Mcp-Method`标头，并在请求正文中包含`_meta`版本字段。您的网关`supportedVersions`必须包括`2026-07-28`。  

```
import requests
import json

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

    payload = {
        "jsonrpc": "2.0",
        "id": "list-tools-request",
        "method": "tools/list",
        "params": {
            "_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
tools = list_tools(gateway_url, access_token)
print(json.dumps(tools, indent=2))
```

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

async def execute_mcp(
    url,
    token,
    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. List available tools
            print("Listing tools...")
            cursor = True
            tools = []
            while cursor:
                next_cursor = cursor
                if type(cursor) == bool:
                    next_cursor = None
                list_tools_response = await session.list_tools(next_cursor)
                tools.extend(list_tools_response.tools)
                cursor = list_tools_response.nextCursor

            tool_names = []
            if tools:
                for tool in tools:
                    tool_names.append(tool.name)
            tool_names_string = "\n".join(tool_names)
            print(
                f"List MCP tools. # of tools - {len(tools)}"
                f"List of tools - \n{tool_names_string}\n"
            )

async def main():
    url = "https://${GatewayEndpoint}/mcp"
    token = "your_bearer_token_here"

    # Optional additional headers
    additional_headers = {
        "Content-Type": "application/json",
    }

    await execute_mcp(
        url=url,
        token=token,
        headers=additional_headers
    )

# Run the async function
if __name__ == "__main__":
    asyncio.run(main())
```

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

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]}")

run_agent(<MCP URL>, <Access token>)
```

```
import asyncio

from langchain_mcp_adapters.client import MultiServerMCPClient

def list_tools(
    url,
    headers
):
    mcp_client = MultiServerMCPClient(
        {
            "agent": {
                "transport": "streamable_http",
                "url": url,
                "headers": headers,
            }
        }
    )
    tools = asyncio.run(mcp_client.get_tools())
    tool_details = []
    tool_names = []
    for tool in tools:
        tool_names.append(f"{tool.name}")
        tool_detail = f"{tool.name} - {tool.description} \n"

        tool_properties = tool.args_schema.get('properties', {})
        properties = []
        for property_name, tool_property in tool_properties.items():
            properties.append(f"{property_name} - {tool_property.get('description', None)} \n")
        tool_details.append(f"{tool_detail}{"\n".join(properties)}")

    tool_details_string = "\n".join(tool_details)
    tool_names_string = "\n".join(tool_names)
    print(
        f"Langchain: List MCP tools. # of tools - {len(tools)}\n",
        f"Langchain: List of tool names - \n{tool_names_string}\n"
        f"Langchain: Details of tools - \n{tool_details_string}\n"
    )
```

**注意**  
如果在网关上启用了搜索，则搜索工具`x_amz_bedrock_agentcore_search`将在响应中首先列出。