View a markdown version of this page

Lea un recurso desde una AgentCore puerta de enlace - Base amazónica AgentCore

Las traducciones son generadas a través de traducción automática. En caso de conflicto entre la traducción y la version original de inglés, prevalecerá la version en inglés.

Lea un recurso desde una AgentCore puerta de enlace

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

ejemplo
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

En la versión2026-07-28, cada solicitud incluye en el MCP-Protocol-Version cuerpo el encabezado, los encabezados Mcp-Name de los metadatos de la solicitud Mcp-Method y los campos de _meta versión. Porqueresources/read, Mcp-Name es el recurso. uri

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}
nota

La puerta de enlace solo acepta las versiones del protocolo MCP que figuran en el supportedVersions campo de su protocolConfiguration.mcp configuración. Para usar la versión2026-07-28, asegúrese de que la puerta de enlace la supportedVersions incluya. Puedes cambiar las versiones compatibles con la UpdateGateway API.

Reemplace los siguientes valores:

  • ${GatewayEndpoint}— La URL de la puerta de enlace, tal como se indica en la respuesta de la CreateGateway API.

  • ${Authorization header}— Las credenciales de autorización del proveedor de identidad al configurar la autorización Configure la autorización de entrada para su puerta de enlace entrante.

  • ${McpProtocolVersion}— La versión del protocolo MCP de la solicitud, por ejemplo. 2025-11-25 La versión debe ser compatible con su puerta de enlace.

  • ${ResourceUri}— El URI del recurso, que coincide con uri el del cuerpo de la solicitud.

  • ${RequestBody}— La carga útil JSON del cuerpo de la solicitud, tal como se especifica en Leer los recursos en el protocolo de contexto modelo (MCP). resources/readIncluya como recurso method e incluya el uri del recurso. En la versión2026-07-28, incluya también los campos de la _meta versión enparams.

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 tiempo real 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 exponen el mismo URI de recurso, la puerta de enlace dirige la solicitud al destino con el resourcePriority valor más bajo.

importante

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

Ejemplos de código para leer un recurso

Para ver ejemplos de cómo leer un recurso desde la puerta de enlace, seleccione uno de los siguientes métodos:

ejemplo
curl (2025-11-25 and earlier)

La siguiente solicitud de 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. Configura el MCP-Protocol-Version encabezado en una versión compatible con tu puerta de enlace.

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)

En cuanto a la versión2026-07-28, incluye los encabezados Mcp-Method y Mcp-Name los metadatos de la solicitud y los campos de _meta versión en el cuerpo. Porqueresources/read, Mcp-Name es el recurso y uri el MCP-Protocol-Version encabezado debe coincidir. _meta.io.modelcontextprotocol/protocolVersion Su puerta de enlace supportedVersions debe incluir2026-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)

Configure el MCP-Protocol-Version encabezado en una versión compatible con su puerta de enlace.

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)

En cuanto a la versión2026-07-28, incluye los encabezados Mcp-Method y Mcp-Name los metadatos de la solicitud y los campos de _meta versión en el cuerpo. Porqueresources/read, Mcp-Name es el recurso y uri el MCP-Protocol-Version encabezado debe coincidir. _meta.io.modelcontextprotocol/protocolVersion Su puerta de enlace supportedVersions debe incluir2026-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

NOTA: El soporte de recursos del SDK de Strands puede variar. Utilice el enfoque del cliente MCP mostrado anteriormente para obtener la implementación más confiableresources/read.

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

NOTA: La compatibilidad con los recursos del adaptador LangGraph MCP puede variar. Utilice el enfoque del cliente MCP mostrado 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:

  • Se devolvieron errores 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 está mal formado 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 la documentación de Resources in the Model Context Protocol (MCP).