

# Lire une ressource depuis une AgentCore passerelle
<a name="gateway-using-mcp-resources-read"></a>

Pour lire une ressource spécifique, envoyez une requête POST au point de terminaison MCP de la passerelle et spécifiez `resources/read` comme méthode dans le corps de la demande et l'URI de la ressource :

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

${RequestBody}
```

Remplacez les valeurs suivantes :
+  `${GatewayEndpoint}`— L'URL de la passerelle, telle que fournie dans la réponse de l'[CreateGateway](https://docs.aws.amazon.com/bedrock-agentcore-control/latest/APIReference/API_CreateGateway.html)API.
+  `${Authorization header}`— Les informations d'autorisation fournies par le fournisseur d'identité lorsque vous configurez l'[autorisation entrante](gateway-inbound-auth.md).
+  `${RequestBody}`— La charge utile JSON du corps de la requête, telle que spécifiée dans [la section Reading resources](https://modelcontextprotocol.io/specification/2025-06-18/server/resources#reading-resources) in the [Model Context Protocol (MCP](https://modelcontextprotocol.io/docs/getting-started/intro)). Inclure `resources/read` comme `method` et inclure le `uri` de la ressource.

La réponse renvoie un `contents` tableau dans lequel chaque entrée inclut le `uri``mimeType`, et `text` (pour le contenu texte) ou `blob` (le contenu binaire codé en base64).

**Note**  
L'`resources/read`opération transmet la demande en direct au serveur MCP en aval. L'URI de ressource est l'URI brut tel que renvoyé par `resources/list` (pas de préfixe cible).

**Note**  
Lorsque plusieurs cibles exposent le même URI de ressource, la passerelle achemine la demande vers la cible ayant la `resourcePriority` valeur la plus faible.

**Important**  
Le `uri` paramètre est transmis à la cible du serveur MCP en aval sans désinfection. Un URI de ressource fourni par l'utilisateur peut contenir un point de terminaison d'URL malveillant destiné à des attaques SSRF ou à une tentative de lecture des chemins de systèmes de fichiers locaux (par exemple,). `file:///etc/passwd` Validez les URI des ressources par rapport à une liste autorisée de schémas et de modèles d'URI attendus avant d'appeler. `resources/read` Utilisez uniquement les URI renvoyés par `resources/list` des cibles de serveurs MCP fiables.

## Exemples de code pour lire une ressource
<a name="gateway-using-mcp-resources-read-examples"></a>

Pour voir des exemples de lecture d'une ressource depuis la passerelle, sélectionnez l'une des méthodes suivantes :

**Example**  

1. La requête curl suivante montre un exemple de demande pour lire une ressource avec un URI `config://app-settings` via une passerelle avec l'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. REMARQUE : La prise en charge des ressources du SDK Strands peut varier. Utilisez l'approche client MCP ci-dessus pour une `resources/read` mise en œuvre la plus fiable possible.

   ```
   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. REMARQUE : La prise en charge des ressources de l'adaptateur LangGraph MCP peut varier. Utilisez l'approche client MCP ci-dessus pour une `resources/read` mise en œuvre la plus fiable possible.

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

## Erreurs
<a name="gateway-using-mcp-resources-read-errors"></a>

L'`resources/read`opération peut renvoyer les types d'erreurs suivants :
+ Erreurs renvoyées dans le cadre du code d'état HTTP :  
 **AuthenticationError**   
La demande a échoué en raison d'informations d'authentification non valides.  
 **Code d'état HTTP** : 401  
 **AuthorizationError**   
L'appelant n'est pas autorisé à lire la ressource.  
 **Code d'état HTTP** : 403  
 **ResourceNotFoundError**   
L'URI de ressource spécifié n'existe pas ou n'est exposé par aucune cible.  
 **Code d'état HTTP** : 404  
 **ValidationError**   
L'URI fourni est mal formé ou absent.  
 **Code d'état HTTP** : 400  
 **InternalServerError**   
Une erreur interne du serveur s’est produite.  
 **Code d'état HTTP** : 500
+ Erreurs MCP. Pour plus d'informations sur ces types d'erreurs, consultez les [ressources](https://modelcontextprotocol.io/specification/2025-06-18/server/resources) de la documentation [MCP (Model Context Protocol)](https://modelcontextprotocol.io/docs/getting-started/intro).