Elenca le risorse disponibili in un AgentCore gateway
Per elencare tutte le risorse disponibili fornite da un AgentCore gateway, effettuate una richiesta POST all'endpoint MCP del gateway e specificate resources/list come metodo nel corpo della richiesta:
POST /mcp HTTP/1.1
Host: ${GatewayEndpoint}
Content-Type: application/json
Authorization: ${Authorization header}
${RequestBody}
Sostituisci i valori seguenti:
-
${GatewayEndpoint}— L'URL del gateway, come fornito nella risposta dell'CreateGatewayAPI.
-
${Authorization header}— Le credenziali di autorizzazione fornite dal provider di identità quando si configura l'autorizzazione in entrata.
-
${RequestBody}— Il payload JSON del corpo della richiesta, come specificato in Listing resources in the Model Context Protocol (MCP). Includi comeresources/list. method
La risposta restituisce un elenco di risorse disponibili con i relativi URI, nomi, descrizioni e tipi MIME.
A differenza degli strumenti e dei prompt, gli URI delle risorse vengono restituiti senza un prefisso del nome di destinazione. L'URI originale del server MCP viene restituito così com'è.
Quando più destinazioni espongono lo stesso URI di risorsa, il gateway restituisce la risorsa dalla destinazione con il valore più basso. resourcePriority
Gli URI delle risorse vengono forniti dalla destinazione del server MCP a valle e non vengono convalidati o disinfettati dal gateway. Un server MCP dannoso o compromesso può restituire URI che puntano a endpoint interni (SSRF) o percorsi di file system locali (ad esempio,). file:///etc/passwd Convalida e disinfetta gli URI delle risorse prima di seguirli e non recupera o renderizza automaticamente gli URI da destinazioni di server MCP non affidabili.
Esempi di codice per elencare le risorse
Per visualizzare esempi di elenco delle risorse disponibili nel gateway, selezionate uno dei seguenti metodi:
Esempio
- 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}"))