View a markdown version of this page

Membaca sumber daya dari AgentCore gateway - Batuan Dasar Amazon AgentCore

Membaca sumber daya dari AgentCore gateway

Untuk membaca sumber daya tertentu, buat permintaan POST ke titik akhir MCP gateway dan tentukan resources/read sebagai metode di badan permintaan dan URI sumber daya:

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

Ganti nilai-nilai berikut:

Respons mengembalikan contents array di mana setiap entri menyertakanuri,mimeType, dan baik text (untuk konten teks) atau blob (konten biner yang dikodekan base64).

catatan

resources/readOperasi proksi permintaan langsung ke server MCP hilir. URI sumber daya adalah URI mentah seperti yang dikembalikan oleh resources/list (tidak ada awalan target).

catatan

Saat beberapa target mengekspos URI sumber daya yang sama, gateway merutekan permintaan ke target dengan resourcePriority nilai terendah.

penting

uriParameter dilewatkan ke target server MCP hilir tanpa sanitasi. URI sumber daya yang disediakan pengguna dapat berisi titik akhir URL berbahaya yang ditujukan untuk serangan SSRF atau mencoba membaca jalur sistem file lokal (misalnya,). file:///etc/passwd Validasi URI sumber daya terhadap daftar yang diizinkan dari skema dan pola URI yang diharapkan sebelum menelepon. resources/read Hanya gunakan URI yang dikembalikan oleh resources/list dari target server MCP tepercaya.

Contoh kode untuk membaca sumber daya

Untuk melihat contoh membaca sumber daya dari gateway, pilih salah satu metode berikut:

contoh
curl
  1. Permintaan curl berikut menunjukkan contoh permintaan untuk membaca sumber daya dengan URI config://app-settings melalui gateway dengan 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. CATATAN: Dukungan sumber daya SDK Strands dapat bervariasi. Gunakan pendekatan Klien MCP di atas untuk resources/read implementasi yang paling andal.

    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. CATATAN: Dukungan sumber daya adaptor LangGraph MCP dapat bervariasi. Gunakan pendekatan Klien MCP di atas untuk resources/read implementasi yang paling andal.

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

Kesalahan

resources/readOperasi dapat mengembalikan jenis kesalahan berikut:

  • Kesalahan dikembalikan sebagai bagian dari kode status HTTP:

    AuthenticationError

    Permintaan gagal karena kredensil otentikasi yang tidak valid.

    Kode Status HTTP: 401

    AuthorizationError

    Penelepon tidak memiliki izin untuk membaca sumber daya.

    Kode Status HTTP: 403

    ResourceNotFoundError

    URI sumber daya yang ditentukan tidak ada atau tidak diekspos oleh target apa pun.

    Kode Status HTTP: 404

    ValidationError

    URI yang disediakan cacat atau hilang.

    Kode Status HTTP: 400

    InternalServerError

    Terjadi kesalahan server internal.

    Kode Status HTTP: 500

  • Kesalahan MCP. Untuk informasi selengkapnya tentang jenis kesalahan ini, lihat Sumber daya dalam dokumentasi Model Context Protocol (MCP).