View a markdown version of this page

Leer un recurso desde una AgentCore puerta de enlace - Amazon Bedrock AgentCore

Leer un recurso desde una AgentCore puerta de enlace

Para leer un recurso específico, realice una solicitud POST al punto final MCP de la puerta de enlace y especifique resources/read el método en el cuerpo de la solicitud y el URI del recurso:

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

Reemplace los siguientes valores:

  • ${GatewayEndpoint}— La URL de la puerta de enlace, tal como se proporciona en la respuesta de la CreateGatewayAPI.

  • ${Authorization header}— Las credenciales de autorización del proveedor de identidad al configurar la autorización entrante.

  • ${RequestBody}— La carga útil JSON del cuerpo de la solicitud, tal como se especifica en los recursos de lectura del Model Context Protocol (MCP). resources/readIncluya como method e incluya el uri del recurso.

La respuesta devuelve una contents matriz en la que cada entrada incluye urimimeType, y text (para contenido de texto) o blob (contenido binario codificado en base64).

nota

La resources/read operación envía la solicitud en directo al servidor MCP descendente. El URI del recurso es el URI sin procesar devuelto por resources/list (sin prefijo de destino).

nota

Cuando varios destinos muestran el mismo URI de recurso, la puerta de enlace enruta la solicitud al objetivo con el resourcePriority valor más bajo.

importante

El uri parámetro se transfiere al servidor MCP de destino descendente sin necesidad de desinfectarlo. El URI de un recurso proporcionado por el usuario podría contener un extremo URL malicioso destinado a atacar a la SSRF o a intentar leer las rutas de los sistemas de archivos locales (por ejemplo,). file:///etc/passwd Valide los URI de los recursos comparándolos con una lista permitida de esquemas y patrones de URI esperados antes de realizar la llamada. resources/read Utilice únicamente los URI devueltos por servidores MCP resources/list de destino confiables.

Ejemplos de código para leer un recurso

Para ver ejemplos de lectura de un recurso desde la puerta de enlace, seleccione uno de los siguientes métodos:

ejemplo
curl
  1. La siguiente solicitud curl muestra un ejemplo de solicitud para leer un recurso con un URI config://app-settings a través de una puerta de enlace con el 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. NOTA: La compatibilidad con los recursos del SDK de Strands puede variar. Utilice el enfoque de cliente MCP mencionado anteriormente para obtener la resources/read implementación más confiable.

    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. NOTA: El soporte de recursos LangGraph del adaptador MCP puede variar. Utilice el enfoque de cliente MCP mencionado anteriormente para obtener la implementación más confiableresources/read.

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

Errores

La resources/read operación puede devolver los siguientes tipos de errores:

  • Errores devueltos como parte del código de estado HTTP:

    AuthenticationError

    La solicitud falló debido a que las credenciales de autenticación no son válidas.

    Código de estado HTTP: 401

    AuthorizationError

    La persona que llama no tiene permiso para leer el recurso.

    Código de estado HTTP: 403

    ResourceNotFoundError

    El URI del recurso especificado no existe o ningún objetivo lo expone.

    Código de estado HTTP: 404

    ValidationError

    El URI proporcionado tiene un formato incorrecto o falta.

    Código de estado HTTP: 400

    InternalServerError

    Se ha producido un error interno del servidor.

    Código de estado HTTP: 500

  • Errores de MCP. Para obtener más información sobre estos tipos de errores, consulte los recursos de la documentación del Model Context Protocol (MCP).