View a markdown version of this page

Membaca sumber daya dari AgentCore gateway - Batu Dasar Amazon AgentCore

Terjemahan disediakan oleh mesin penerjemah. Jika konten terjemahan yang diberikan bertentangan dengan versi bahasa Inggris aslinya, utamakan versi bahasa Inggris.

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 dalam badan permintaan dan URI sumber daya:

contoh
2025-11-25 and earlier
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

Pada versi2026-07-28, setiap permintaan membawa MCP-Protocol-Version header, header Mcp-Method dan Mcp-Name request-metadata, dan bidang _meta versi di badan. Karenaresources/read, Mcp-Name adalah sumber dayauri.

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: resources/read Mcp-Name: ${ResourceUri} ${RequestBody}
catatan

Gateway hanya menerima versi protokol MCP yang tercantum di supportedVersions bidang protocolConfiguration.mcp konfigurasinya. Untuk menggunakan versi2026-07-28, pastikan gateway Anda menyer supportedVersions takannya. Anda dapat mengubah versi yang didukung dengan UpdateGateway API.

Ganti nilai-nilai berikut:

  • ${GatewayEndpoint}— URL gateway, seperti yang disediakan dalam tanggapan CreateGateway API.

  • ${Authorization header}— KredenSIAL otorisasi dari penyedia identitas saat Anda mengatur otorisasi masuk.

  • ${McpProtocolVersion}— Versi protokol MCP untuk permintaan, seperti2025-11-25. Versi harus salah satu yang didukung gateway Anda.

  • ${ResourceUri}— URI sumber daya, cocok dengan uri di badan permintaan.

  • ${RequestBody}— Payload JSON dari badan permintaan, seperti yang ditentukan dalam Membaca sumber daya di Model Context Protocol (MCP). Sertakan resources/read sebagai method dan ser uri takan sumber daya. Pada versi2026-07-28, sertakan juga bidang _meta versi diparams.

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 memproksi permintaan langsung ke server MCP hilir. URI sumber daya adalah URI mentah seperti yang dikembalikan oleh resources/list (tanpa awalan target).

catatan

Ketika 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 izin skema dan pola URI yang diharapkan sebelum memanggil. resources/read Hanya gunakan URI yang dikembalikan 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 (2025-11-25 and earlier)

Permintaan curl berikut menunjukkan contoh permintaan untuk membaca sumber daya dengan URI config://app-settings melalui gateway dengan IDmygateway-abcdefghij. Atur MCP-Protocol-Version header ke versi yang didukung gateway Anda.

curl -X POST \ https://mygateway-abcdefghij.gateway.bedrock-agentcore.us-west-2.amazonaws.com/mcp \ -H "Accept: application/json, text/event-stream" \ -H "Content-Type: application/json" \ -H "Authorization: Bearer YOUR_ACCESS_TOKEN" \ -H "MCP-Protocol-Version: 2025-11-25" \ -d '{ "jsonrpc": "2.0", "id": "read-resource-request", "method": "resources/read", "params": { "uri": "config://app-settings" } }'
curl (2026-07-28)

Pada versi2026-07-28, sertakan Mcp-Method header dan Mcp-Name request-metadata dan bidang _meta versi di badan. Untukresources/read, Mcp-Name adalah sumber dayauri, dan MCP-Protocol-Version header harus cocok_meta.io.modelcontextprotocol/protocolVersion. Gateway Anda supportedVersions harus disertakan2026-07-28.

curl -X POST \ https://mygateway-abcdefghij.gateway.bedrock-agentcore.us-west-2.amazonaws.com/mcp \ -H "Accept: application/json, text/event-stream" \ -H "Content-Type: application/json" \ -H "Authorization: Bearer YOUR_ACCESS_TOKEN" \ -H "MCP-Protocol-Version: 2026-07-28" \ -H "Mcp-Method: resources/read" \ -H "Mcp-Name: config://app-settings" \ -d '{ "jsonrpc": "2.0", "id": "read-resource-request", "method": "resources/read", "params": { "uri": "config://app-settings", "_meta": { "io.modelcontextprotocol/protocolVersion": "2026-07-28", "io.modelcontextprotocol/clientInfo": { "name": "my-agent", "version": "1.0.0" }, "io.modelcontextprotocol/clientCapabilities": {} } } }'
Python requests package (2025-11-25 and earlier)

Atur MCP-Protocol-Version header ke versi yang didukung gateway Anda.

import requests import json def read_resource(gateway_url, access_token, resource_uri): headers = { "Content-Type": "application/json", "Authorization": f"Bearer {access_token}", "MCP-Protocol-Version": "2025-11-25" } 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))
Python requests package (2026-07-28)

Pada versi2026-07-28, sertakan Mcp-Method header dan Mcp-Name request-metadata dan bidang _meta versi di badan. Untukresources/read, Mcp-Name adalah sumber dayauri, dan MCP-Protocol-Version header harus cocok_meta.io.modelcontextprotocol/protocolVersion. Gateway Anda supportedVersions harus disertakan2026-07-28.

import requests import json def read_resource(gateway_url, access_token, resource_uri): headers = { "Content-Type": "application/json", "Authorization": f"Bearer {access_token}", "MCP-Protocol-Version": "2026-07-28", "Mcp-Method": "resources/read", "Mcp-Name": resource_uri } payload = { "jsonrpc": "2.0", "id": "read-resource-request", "method": "resources/read", "params": { "uri": resource_uri, "_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 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
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

CATATAN: Dukungan sumber daya Strands SDK mungkin berbeda. Gunakan pendekatan Klien MCP yang ditunjukkan sebelumnya 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

CATATAN: LangGraph Dukungan sumber daya adaptor MCP mungkin berbeda. Gunakan pendekatan Klien MCP yang ditunjukkan sebelumnya 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 kredentif otentikasi 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).