

# Membaca sumber daya dari AgentCore gateway
<a name="gateway-using-mcp-resources-read"></a>

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:
+  `${GatewayEndpoint}`— URL gateway, seperti yang disediakan dalam respons [CreateGateway](https://docs.aws.amazon.com/bedrock-agentcore-control/latest/APIReference/API_CreateGateway.html)API.
+  `${Authorization header}`[- Kredensi otorisasi dari penyedia identitas saat Anda mengatur otorisasi masuk.](gateway-inbound-auth.md)
+  `${RequestBody}`— Payload JSON dari badan permintaan, sebagaimana ditentukan dalam [Reading resources](https://modelcontextprotocol.io/specification/2025-06-18/server/resources#reading-resources) dalam [Model Context Protocol (MCP](https://modelcontextprotocol.io/docs/getting-started/intro)). Sertakan `resources/read` sebagai `method` dan `uri` sertakan sumber daya.

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

**catatan**  
`resources/read`Operasi 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**  
`uri`Parameter 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
<a name="gateway-using-mcp-resources-read-examples"></a>

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

**Example**  

1. Permintaan curl berikut menunjukkan contoh permintaan untuk membaca sumber daya dengan URI `config://app-settings` melalui gateway dengan ID`mygateway-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"
       }
   }'
   ```

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

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())
   ```

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

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
<a name="gateway-using-mcp-resources-read-errors"></a>

`resources/read`Operasi 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](https://modelcontextprotocol.io/specification/2025-06-18/server/resources) dalam dokumentasi [Model Context Protocol (MCP)](https://modelcontextprotocol.io/docs/getting-started/intro).