_meta 按请求控制日志详细程度,服务器发送包含严重性级别、可选 logger 名称和任意 JSON 可序列化数据的通知。
用户交互模型
实现可以自由地通过任何适合其需求的界面模式暴露日志——协议本身不强制规定任何特定的用户交互模型。能力
发出日志消息通知的服务器**必须(MUST)**声明logging 能力:
日志级别
协议遵循 RFC 5424中指定的标准 syslog 严重性级别:请求日志消息
每请求日志级别
要接收特定请求的日志消息,在请求的_meta 中包含 io.modelcontextprotocol/logLevel。服务器**不得(MUST NOT)**为不包含此字段的请求发出 notifications/message。
当该字段存在时,服务器**可以(MAY)在该请求的响应流上、在最终响应之前,发送等于或高于所请求级别的 notifications/message 通知。notifications/message 是请求范围的:服务器不得(MUST NOT)**在 subscriptions/listen 流上,或在除了承载设置日志级别的那个请求的响应的流之外的任何流上投递它。
协议消息
日志消息通知
服务器使用notifications/message 通知发送日志消息:
错误处理
如果请求的_meta 中携带的 io.modelcontextprotocol/logLevel 值不是一个已识别的日志级别,服务器**应当(SHOULD)**以一个标准的 JSON-RPC 错误拒绝该请求:
- 无效的日志级别:
-32602(Invalid params) - 内部错误:
-32603(Internal error)
实现考量
-
服务器应当(SHOULD):
- 对日志消息进行速率限制
- 在 data 字段中包含相关上下文
- 使用一致的 logger 名称
- 移除敏感信息
-
客户端可以(MAY):
- 在 UI 中呈现日志消息
- 实现日志过滤/搜索
- 以视觉方式显示严重性
- 持久化日志消息
安全
-
日志消息**不得(MUST NOT)**包含:
- 凭据或密钥
- 个人可识别信息
- 可能助长攻击的内部系统细节
-
实现应当(SHOULD):
- 对消息进行速率限制
- 校验所有 data 字段
- 控制日志访问
- 监控敏感内容