

本文属于机器翻译版本。若本译文内容与英语原文存在差异，则一律以英文原文为准。

# 从您的 AgentCore 网关接收日志消息
<a name="gateway-mcp-logging"></a>

在工具执行期间，MCP 服务器目标可以使用该`notifications/message`方法向客户端发送日志消息。这些消息可以实时了解服务器正在做什么，对调试、审计和监控工具行为很有用。 AgentCore Gateway 将这些来自 MCP 服务器目标的日志通知作为 Server-Sent 事件 (SSE) 区块转发到您的客户端。

## 先决条件
<a name="gateway-mcp-logging-prereqs"></a>

要从您的网关接收日志消息，请执行以下操作：
+  **启用响应流 **-在打开的连接期间，日志消息作为 SSE 区块传输。`streamingConfiguration.enableResponseStreaming`在网关`true`中设置为`protocolConfiguration.mcp`。
+  **MCP 服务器目标类型 **-日志消息源自 MCP 服务器目标。
+  **客户端发送标`Accept`头 **-客户端必须发送，`Accept: application/json, text/event-stream`这样网关才能返回流式传输 (SSE) 响应。

## 日志级别
<a name="gateway-mcp-logging-levels"></a>

MCP 按严重性增加的顺序定义了以下日志级别：


| 级别 | 说明 | 
| --- | --- | 
|  `debug`  | 故障排除的详细诊断信息。 | 
|  `info`  | 有关正常操作的一般信息性消息。 | 
|  `notice`  | 正常但重要的事件。 | 
|  `warning`  | 无法阻止操作的潜在危害情况。 | 
|  `error`  | 阻止特定操作的错误情况。 | 
|  `critical`  | 需要立即关注的危急情况。 | 
|  `alert`  | 必须立即采取行动。 | 
|  `emergency`  | 系统无法使用。 | 

## 日志消息的工作原理
<a name="gateway-mcp-logging-how"></a>

当 MCP 服务器目标`notifications/message`在工具执行期间发出时，网关会将其作为 SSE 事件转发给客户端。每条日志消息包括：
+  `level`— 消息的严重性级别。
+  `logger`— 标识源组件的可选名称。
+  `data`— 日志内容（字符串或结构化对象）。

日志消息是信息性的，不需要客户端的响应。它们与其他 SSE 事件（例如进度通知和最终工具结果）一起交付。

## 代码示例
<a name="gateway-mcp-logging-examples"></a>

**Example**  
调用工具并在 SSE 流中接收日志消息。将标`MCP-Protocol-Version`头设置为网关支持的版本。  

```
curl -N -X POST \
  https://mygateway-abcdefghij.gateway.bedrock-agentcore.us-west-2.amazonaws.com/mcp \
  -H "Content-Type: application/json" \
  -H "Accept: application/json, text/event-stream" \
  -H "Authorization: Bearer YOUR_ACCESS_TOKEN" \
  -H "MCP-Protocol-Version: 2025-11-25" \
  -d '{
    "jsonrpc": "2.0",
    "id": "tool-call-1",
    "method": "tools/call",
    "params": {
      "name": "deployService",
      "arguments": {
        "serviceName": "my-api",
        "environment": "staging"
      }
    }
}'
```
网关返回一个 SSE 流，其中包含日志消息，然后是最终结果：  

```
event: message
data: {"jsonrpc":"2.0","method":"notifications/message","params":{"level":"info","logger":"deploy-service","data":"Starting deployment of my-api to staging"}}

event: message
data: {"jsonrpc":"2.0","method":"notifications/message","params":{"level":"info","logger":"deploy-service","data":"Building container image..."}}

event: message
data: {"jsonrpc":"2.0","method":"notifications/message","params":{"level":"warning","logger":"deploy-service","data":"Deprecated configuration detected in service manifest"}}

event: message
data: {"jsonrpc":"2.0","method":"notifications/message","params":{"level":"info","logger":"deploy-service","data":"Deployment complete"}}

event: message
data: {"jsonrpc":"2.0","id":"tool-call-1","result":{"content":[{"type":"text","text":"Successfully deployed my-api to staging environment."}]}}
```
在版本上`2026-07-28`，客户端通过设置`_meta`（该`logging/setLevel`操作在此版本`io.modelcontextprotocol/logLevel`中已停用）来选择为每个请求输入日志消息。服务器的发送量`notifications/message`仅达到或高于请求的级别。还包括`Mcp-Method`和`Mcp-Name`请求元数据标头以及`_meta`版本字段。标`MCP-Protocol-Version`题必须匹配`_meta.io.modelcontextprotocol/protocolVersion`。您的网关`supportedVersions`必须包括`2026-07-28`。  

```
curl -N -X POST \
  https://mygateway-abcdefghij.gateway.bedrock-agentcore.us-west-2.amazonaws.com/mcp \
  -H "Content-Type: application/json" \
  -H "Accept: application/json, text/event-stream" \
  -H "Authorization: Bearer YOUR_ACCESS_TOKEN" \
  -H "MCP-Protocol-Version: 2026-07-28" \
  -H "Mcp-Method: tools/call" \
  -H "Mcp-Name: deployService" \
  -d '{
    "jsonrpc": "2.0",
    "id": "tool-call-1",
    "method": "tools/call",
    "params": {
      "name": "deployService",
      "arguments": {
        "serviceName": "my-api",
        "environment": "staging"
      },
      "_meta": {
        "io.modelcontextprotocol/protocolVersion": "2026-07-28",
        "io.modelcontextprotocol/clientInfo": {
          "name": "my-agent",
          "version": "1.0.0"
        },
        "io.modelcontextprotocol/clientCapabilities": {},
        "io.modelcontextprotocol/logLevel": "info"
      }
    }
}'
```
网关返回一个 SSE 流，其中包含日志消息，然后是最终结果：  

```
event: message
data: {"jsonrpc":"2.0","method":"notifications/message","params":{"level":"info","logger":"deploy-service","data":"Starting deployment of my-api to staging"}}

event: message
data: {"jsonrpc":"2.0","method":"notifications/message","params":{"level":"info","logger":"deploy-service","data":"Building container image..."}}

event: message
data: {"jsonrpc":"2.0","method":"notifications/message","params":{"level":"warning","logger":"deploy-service","data":"Deprecated configuration detected in service manifest"}}

event: message
data: {"jsonrpc":"2.0","method":"notifications/message","params":{"level":"info","logger":"deploy-service","data":"Deployment complete"}}

event: message
data: {"jsonrpc":"2.0","id":"tool-call-1","result":{"content":[{"type":"text","text":"Successfully deployed my-api to staging environment."}]}}
```
将标`MCP-Protocol-Version`头设置为网关支持的版本。  

```
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": "application/json, text/event-stream",
    "Authorization": "Bearer YOUR_ACCESS_TOKEN",
    "MCP-Protocol-Version": "2025-11-25"
}

# Call tool (streaming response)
response = requests.post(gateway_url, headers=headers, json={
    "jsonrpc": "2.0",
    "id": "tool-call-1",
    "method": "tools/call",
    "params": {
        "name": "deployService",
        "arguments": {"serviceName": "my-api", "environment": "staging"}
    }
}, stream=True)

# Process SSE events
client = sseclient.SSEClient(response)
for event in client.events():
    data = json.loads(event.data)
    if data.get("method") == "notifications/message":
        params = data["params"]
        print(f"[{params['level'].upper()}] {params.get('logger', '')}: {params['data']}")
    elif "result" in data:
        print(f"Tool result: {data['result']}")
        break
```
在版本上`2026-07-28`，通过设置`io.modelcontextprotocol/logLevel`来选择接收日志消息`_meta`（该`logging/setLevel`操作在此版本中已停用）。还要添加`MCP-Protocol-Version``Mcp-Method`、和`Mcp-Name`标题以及`_meta`版本字段。您的网关`supportedVersions`必须包括`2026-07-28`。  

```
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": "application/json, text/event-stream",
    "Authorization": "Bearer YOUR_ACCESS_TOKEN",
    "MCP-Protocol-Version": "2026-07-28",
    "Mcp-Method": "tools/call",
    "Mcp-Name": "deployService"
}

# Call tool (streaming response)
response = requests.post(gateway_url, headers=headers, json={
    "jsonrpc": "2.0",
    "id": "tool-call-1",
    "method": "tools/call",
    "params": {
        "name": "deployService",
        "arguments": {"serviceName": "my-api", "environment": "staging"},
        "_meta": {
            "io.modelcontextprotocol/protocolVersion": "2026-07-28",
            "io.modelcontextprotocol/clientInfo": {"name": "my-agent", "version": "1.0.0"},
            "io.modelcontextprotocol/clientCapabilities": {},
            "io.modelcontextprotocol/logLevel": "info"
        }
    }
}, stream=True)

# Process SSE events
client = sseclient.SSEClient(response)
for event in client.events():
    data = json.loads(event.data)
    if data.get("method") == "notifications/message":
        params = data["params"]
        print(f"[{params['level'].upper()}] {params.get('logger', '')}: {params['data']}")
    elif "result" in data:
        print(f"Tool result: {data['result']}")
        break
```

```
from mcp import ClientSession
from mcp.client.streamable_http import streamablehttp_client
import asyncio

async def log_handler(level, logger, data):
    """Handle log messages from the server."""
    print(f"[{level.upper()}] {logger or 'server'}: {data}")

async def use_logging(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,
            logging_handler=log_handler
        ) as session:
            await session.initialize()

            # Call tool - log messages handled by callback
            result = await session.call_tool(
                name="deployService",
                arguments={"serviceName": "my-api", "environment": "staging"}
            )
            print(f"Tool result: {result}")
            return result

asyncio.run(use_logging(
    url="https://mygateway-abcdefghij.gateway.bedrock-agentcore.us-west-2.amazonaws.com/mcp",
    token="YOUR_ACCESS_TOKEN"
))
```

```
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 log messages automatically
with mcp_client:
    agent = Agent(tools=mcp_client.list_tools_sync())
    response = agent("Deploy my-api to staging")
    print(response)
```