View a markdown version of this page

Menerima pemberitahuan kemajuan dari AgentCore gateway Anda - Batuan Dasar Amazon AgentCore

Menerima pemberitahuan kemajuan dari AgentCore gateway Anda

Pemberitahuan kemajuan memungkinkan target server MCP melaporkan kemajuan tambahan pada panggilan alat yang berjalan lama. Ketika panggilan alat membutuhkan waktu untuk diselesaikan, server dapat mengirim notifications/progress acara untuk menjaga klien mendapat informasi tentang status operasi. AgentCore Gateway meneruskan notifikasi ini dari target server MCP ke klien Anda sebagai potongan Server-Sent Acara (SSE).

Prasyarat

Untuk menerima pemberitahuan kemajuan dari gateway Anda:

  • Streaming respons diaktifkan - Pemberitahuan kemajuan dikirimkan sebagai potongan SSE selama koneksi terbuka. Setel streamingConfiguration.enableResponseStreaming ke true dalam gateway AndaprotocolConfiguration.mcp.

  • Jenis target server MCP - Pemberitahuan kemajuan berasal dari target server MCP.

  • Klien mengirim Accept: text/event-stream header - Klien harus meminta respons SSE untuk menerima acara streaming.

Cara kerja notifikasi kemajuan

Ketika klien membuat tools/call permintaan dengan progressToken parameter permintaan, target server MCP dapat mengirim notifications/progress peristiwa selama eksekusi. Gateway meneruskan peristiwa ini ke klien sebagai potongan SSE sebelum hasil alat akhir.

Setiap pemberitahuan kemajuan meliputi:

  • progressToken— Cocokkan token yang disediakan dalam permintaan asli.

  • progress— Nilai kemajuan saat ini (numerik).

  • total— Nilai total opsional yang menunjukkan target penyelesaian.

  • message— Deskripsi opsional yang dapat dibaca manusia tentang status saat ini.

Sampel Kode

contoh
curl
  1. Panggil alat dengan token kemajuan:

    curl -N -X POST \ https://mygateway-abcdefghij.gateway.bedrock-agentcore.us-west-2.amazonaws.com/mcp \ -H "Content-Type: application/json" \ -H "Accept: text/event-stream" \ -H "Authorization: Bearer YOUR_ACCESS_TOKEN" \ -d '{ "jsonrpc": "2.0", "id": "tool-call-1", "method": "tools/call", "params": { "name": "analyzeDataset", "arguments": { "datasetId": "ds-12345" }, "_meta": { "progressToken": "progress-1" } } }'

    Gateway mengembalikan aliran SSE dengan pemberitahuan kemajuan diikuti dengan hasil akhir:

    event: message data: {"jsonrpc":"2.0","method":"notifications/progress","params":{"progressToken":"progress-1","progress":1,"total":4,"message":"Loading dataset..."}} event: message data: {"jsonrpc":"2.0","method":"notifications/progress","params":{"progressToken":"progress-1","progress":2,"total":4,"message":"Running analysis..."}} event: message data: {"jsonrpc":"2.0","method":"notifications/progress","params":{"progressToken":"progress-1","progress":3,"total":4,"message":"Generating report..."}} event: message data: {"jsonrpc":"2.0","method":"notifications/progress","params":{"progressToken":"progress-1","progress":4,"total":4,"message":"Complete"}} event: message data: {"jsonrpc":"2.0","id":"tool-call-1","result":{"content":[{"type":"text","text":"Analysis complete. Found 3 anomalies in dataset ds-12345."}]}}
Python requests package
  1. import requests import json import sseclient gateway_url = "https://mygateway-abcdefghij.gateway.bedrock-agentcore.us-west-2.amazonaws.com/mcp" headers = { "Content-Type": "application/json", "Accept": "text/event-stream", "Authorization": "Bearer YOUR_ACCESS_TOKEN" } # Call tool with progress token (streaming response) response = requests.post(gateway_url, headers=headers, json={ "jsonrpc": "2.0", "id": "tool-call-1", "method": "tools/call", "params": { "name": "analyzeDataset", "arguments": {"datasetId": "ds-12345"}, "_meta": {"progressToken": "progress-1"} } }, stream=True) # Process SSE events client = sseclient.SSEClient(response) for event in client.events(): data = json.loads(event.data) if data.get("method") == "notifications/progress": params = data["params"] print(f"Progress: {params['progress']}/{params.get('total', '?')} - {params.get('message', '')}") elif "result" in data: print(f"Tool result: {data['result']}") break
MCP Client
  1. from mcp import ClientSession from mcp.client.streamable_http import streamablehttp_client import asyncio async def progress_handler(progress_token, progress, total, message=None): """Handle progress notifications.""" print(f"[{progress}/{total}] {message or ''}") async def use_progress(url, token): headers = {"Authorization": f"Bearer {token}"} async with streamablehttp_client(url=url, headers=headers) as ( read_stream, write_stream, _ ): async with ClientSession( read_stream, write_stream, progress_handler=progress_handler ) as session: await session.initialize() # Call tool with progress token - notifications handled by callback result = await session.call_tool( name="analyzeDataset", arguments={"datasetId": "ds-12345"} ) print(f"Tool result: {result}") return result asyncio.run(use_progress( url="https://mygateway-abcdefghij.gateway.bedrock-agentcore.us-west-2.amazonaws.com/mcp", token="YOUR_ACCESS_TOKEN" ))
Strands MCP Client
  1. from mcp.client.streamable_http import streamablehttp_client from strands import Agent from strands.tools.mcp import MCPClient mcp_url = "https://mygateway-abcdefghij.gateway.bedrock-agentcore.us-west-2.amazonaws.com/mcp" access_token = "YOUR_ACCESS_TOKEN" mcp_client = MCPClient( lambda: streamablehttp_client( mcp_url, headers={"Authorization": f"Bearer {access_token}"} ) ) # Strands handles streaming and progress notifications automatically with mcp_client: agent = Agent(tools=mcp_client.list_tools_sync()) response = agent("Analyze dataset ds-12345") print(response)