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 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:
Respons mengembalikan contents array di mana setiap entri menyertakanuri,mimeType, dan baik text (untuk konten teks) atau blob (konten biner yang dikodekan base64).
resources/readOperasi proksi permintaan langsung ke server MCP hilir. URI sumber daya adalah URI mentah seperti yang dikembalikan oleh resources/list (tidak ada awalan target).
Saat beberapa target mengekspos URI sumber daya yang sama, gateway merutekan permintaan ke target dengan resourcePriority nilai terendah.
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 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
Untuk melihat contoh membaca sumber daya dari gateway, pilih salah satu metode berikut:
contoh
- curl
-
-
Permintaan curl berikut menunjukkan contoh permintaan untuk membaca sumber daya dengan URI config://app-settings melalui gateway dengan 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
-
-
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
-
-
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 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>)
- LangGraph MCP Client
-
-
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
resources/readOperasi 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 dalam dokumentasi Model Context Protocol (MCP).