Listar os recursos disponíveis em um AgentCore gateway
Para listar todos os recursos disponíveis fornecidos por um AgentCore gateway, faça uma solicitação POST para o endpoint MCP do gateway e especifique resources/list como método no corpo da solicitação:
POST /mcp HTTP/1.1
Host: ${GatewayEndpoint}
Content-Type: application/json
Authorization: ${Authorization header}
${RequestBody}
Substitua os valores a seguir:
-
${GatewayEndpoint}— O URL do gateway, conforme fornecido na resposta da CreateGatewayAPI.
-
${Authorization header}— As credenciais de autorização do provedor de identidade quando você configura a autorização de entrada.
-
${RequestBody}— A carga JSON do corpo da solicitação, conforme especificado em Listar recursos no Model Context Protocol (MCP). Incluir resources/list como method o.
A resposta retorna uma lista dos recursos disponíveis com seus URIs, nomes, descrições e tipos de MIME.
Diferentemente das ferramentas e dos prompts, os URIs de recursos são retornados sem um prefixo de nome de destino. O URI original do servidor MCP é retornado no estado em que se encontra.
Quando vários destinos expõem o mesmo URI de recurso, o gateway retorna o recurso do destino com o menor resourcePriority valor.
Os URIs de recursos são fornecidos pelo destino do servidor MCP downstream e não são validados ou higienizados pelo gateway. Um servidor MCP malicioso ou comprometido pode retornar URIs apontando para endpoints internos (SSRF) ou caminhos locais do sistema de arquivos (por exemplo,). file:///etc/passwd Valide e limpe os URIs de recursos antes de segui-los e não busque ou renderize automaticamente os URIs de destinos não confiáveis do servidor MCP.
Exemplos de código para listar recursos
Para ver exemplos de listagem de recursos disponíveis no gateway, selecione um dos seguintes métodos:
exemplo
- Python requests package
-
-
import requests
import json
def list_resources(gateway_url, access_token):
headers = {
"Content-Type": "application/json",
"Authorization": f"Bearer {access_token}"
}
payload = {
"jsonrpc": "2.0",
"id": "list-resources-request",
"method": "resources/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
resources = list_resources(gateway_url, access_token)
print(json.dumps(resources, indent=2))
- MCP Client
-
-
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 resources
print("Listing resources...")
cursor = True
resources = []
while cursor:
next_cursor = cursor
if isinstance(cursor, bool):
next_cursor = None
list_resources_response = await session.list_resources(next_cursor)
resources.extend(list_resources_response.resources)
cursor = list_resources_response.nextCursor
if resources:
for resource in resources:
print(f"{resource.uri} - {resource.name} ({resource.mimeType})")
print(f"Total resources: {len(resources)}")
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())
- Strands MCP Client
-
-
# NOTE: Strands SDK resource support may vary. Use the MCP Client approach
# above for the most reliable resources/list implementation.
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 run_agent(mcp_url: str, access_token: str):
mcp_client = MCPClient(lambda: create_streamable_http_transport(mcp_url, access_token))
with mcp_client:
result = mcp_client.list_resources_sync()
print(f"Found the following resources: {[r.uri for r in result.resources]}")
run_agent(<MCP URL>, <Access token>)
- LangGraph MCP Client
-
-
# NOTE: LangGraph MCP adapter resource support may vary. Use the MCP Client
# approach above for the most reliable resources/list implementation.
import asyncio
from mcp import ClientSession
from mcp.client.streamable_http import streamablehttp_client
async def list_resources(url, token):
headers = {"Authorization": f"Bearer {token}"}
async with streamablehttp_client(url=url, headers=headers) as (
read_stream, write_stream, callA
):
async with ClientSession(read_stream, write_stream) as session:
await session.initialize()
response = await session.list_resources()
for resource in response.resources:
print(f"{resource.uri} - {resource.name}")
asyncio.run(list_resources("https://${GatewayEndpoint}/mcp", "${AccessToken}"))