View a markdown version of this page

Eine Ressource von einem AgentCore Gateway lesen - Amazon Grundgestein AgentCore

Eine Ressource von einem AgentCore Gateway lesen

Um eine bestimmte Ressource zu lesen, stellen Sie eine POST-Anfrage an den MCP-Endpunkt des Gateways und geben Sie resources/read als Methode im Anforderungstext und den URI der Ressource an:

POST /mcp HTTP/1.1 Host: ${GatewayEndpoint} Content-Type: application/json Authorization: ${Authorization header} ${RequestBody}

Ersetzen Sie die folgenden Werte:

  • ${GatewayEndpoint}— Die URL des Gateways, wie sie in der Antwort der CreateGatewayAPI angegeben ist.

  • ${Authorization header}— Die Autorisierungsdaten des Identitätsanbieters, wenn Sie die eingehende Autorisierung einrichten.

  • ${RequestBody}— Die JSON-Payload des Anforderungstexts, wie unter Ressourcen im Model Context Protocol (MCP) lesen beschrieben. resources/readInclude as the method und include the uri der Ressource.

Die Antwort gibt ein contents Array zurück, in dem jeder Eintraguri,mimeType, und entweder text (für Textinhalt) oder blob (Base64-codierter Binärinhalt) enthält.

Anmerkung

Der resources/read Vorgang leitet die Anfrage live an den Downstream-MCP-Server weiter. Der Ressourcen-URI ist der Roh-URI, wie er von zurückgegeben wurde resources/list (kein Zielpräfix).

Anmerkung

Wenn mehrere Ziele dieselbe Ressourcen-URI verfügbar machen, leitet das Gateway die Anfrage an das Ziel mit dem niedrigsten resourcePriority Wert weiter.

Wichtig

Der uri Parameter wird ohne Bereinigung an das Downstream-MCP-Serverziel weitergegeben. Ein vom Benutzer bereitgestellter Ressourcen-URI könnte einen bösartigen URL-Endpunkt enthalten, der für SSRF-Angriffe oder den Versuch bestimmt ist, lokale Dateisystempfade zu lesen (z. B.). file:///etc/passwd Überprüfen Sie vor dem Aufruf die Ressourcen-URIs anhand einer Zulassungsliste erwarteter URI-Schemata und -Muster. resources/read Verwenden Sie nur URIs, die resources/list von vertrauenswürdigen MCP-Serverzielen zurückgegeben wurden.

Codebeispiele zum Lesen einer Ressource

Um Beispiele für das Lesen einer Ressource vom Gateway zu sehen, wählen Sie eine der folgenden Methoden aus:

Beispiel
curl
  1. Die folgende Curl-Anfrage zeigt eine Beispielanforderung zum Lesen einer Ressource mit URI config://app-settings über ein Gateway mit der IDmygateway-abcdefghij.

    curl -X POST \ https://mygateway-abcdefghij.gateway.bedrock-agentcore.us-west-2.amazonaws.com/mcp \ -H "Content-Type: application/json" \ -H "Authorization: Bearer YOUR_ACCESS_TOKEN" \ -d '{ "jsonrpc": "2.0", "id": "read-resource-request", "method": "resources/read", "params": { "uri": "config://app-settings" } }'
Python requests package
  1. import requests import json def read_resource(gateway_url, access_token, resource_uri): headers = { "Content-Type": "application/json", "Authorization": f"Bearer {access_token}" } payload = { "jsonrpc": "2.0", "id": "read-resource-request", "method": "resources/read", "params": { "uri": resource_uri } } 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 result = read_resource( gateway_url, access_token, "config://app-settings" # Replace with the resource URI from resources/list ) print(json.dumps(result, indent=2))
MCP Client
  1. from mcp import ClientSession from mcp.client.streamable_http import streamablehttp_client from pydantic import AnyUrl import asyncio async def execute_mcp( url, token, resource_uri, 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. Read specific resource print(f"Reading resource: {resource_uri}") resource_response = await session.read_resource(uri=AnyUrl(resource_uri)) for content in resource_response.contents: print(f"URI: {content.uri}, MIME: {content.mimeType}") if hasattr(content, 'text') and content.text: print(f"Text: {content.text}") elif hasattr(content, 'blob') and content.blob: print(f"Blob (base64): {content.blob[:100]}...") return resource_response async def main(): url = "https://${GatewayEndpoint}/mcp" token = "your_bearer_token_here" resource_uri = "config://app-settings" await execute_mcp( url=url, token=token, resource_uri=resource_uri ) if __name__ == "__main__": asyncio.run(main())
Strands MCP Client
  1. HINWEIS: Die Unterstützung von Strands SDK-Ressourcen kann variieren. Verwenden Sie den oben genannten MCP-Client-Ansatz für die zuverlässigste resources/read Implementierung.

    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.read_resource_sync(uri="config://app-settings") print(result) run_agent(<MCP URL>, <Access token>)
LangGraph MCP Client
  1. HINWEIS: Die Ressourcenunterstützung für LangGraph MCP-Adapter kann variieren. Verwenden Sie den oben genannten MCP-Client-Ansatz für die resources/read zuverlässigste Implementierung.

    import asyncio from mcp import ClientSession from mcp.client.streamable_http import streamablehttp_client from pydantic import AnyUrl async def read_resource(url, token, resource_uri): 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.read_resource(uri=AnyUrl(resource_uri)) for content in response.contents: if hasattr(content, 'text') and content.text: print(f"{content.uri}: {content.text}") elif hasattr(content, 'blob') and content.blob: print(f"{content.uri}: <blob, {len(content.blob)} chars base64>") asyncio.run(read_resource( "https://${GatewayEndpoint}/mcp", "${AccessToken}", "config://app-settings" ))

Fehler

Der resources/read Vorgang kann die folgenden Fehlertypen zurückgeben:

  • Fehler, die als Teil des HTTP-Statuscodes zurückgegeben wurden:

    AuthenticationError

    Die Anfrage ist aufgrund ungültiger Anmeldeinformationen fehlgeschlagen.

    HTTP-Statuscode: 401

    AuthorizationError

    Der Anrufer hat keine Berechtigung, die Ressource zu lesen.

    HTTP-Statuscode: 403

    ResourceNotFoundError

    Der angegebene Ressourcen-URI existiert nicht oder wird von keinem Ziel verfügbar gemacht.

    HTTP-Statuscode: 404

    ValidationError

    Die angegebene URI ist falsch formatiert oder fehlt.

    HTTP-Statuscode: 400

    InternalServerError

    Es ist ein interner Serverfehler aufgetreten.

    HTTP-Statuscode: 500

  • MCP-Fehler. Weitere Informationen zu diesen Fehlertypen finden Sie unter Ressourcen in der Dokumentation zum Model Context Protocol (MCP).