_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 流,也 MUST NOT 投递到承载设置了日志级别的请求响应之外的任何其他流。
协议消息
日志消息通知
服务器使用notifications/message 通知发送日志消息:
错误处理
如果请求_meta 中携带的 io.modelcontextprotocol/logLevel 值不是可识别的日志级别,服务器 SHOULD 使用标准 JSON-RPC 错误拒绝该请求:
- 无效日志级别:
-32602(Invalid params) - 内部错误:
-32603(Internal error)
实现注意事项
-
服务器 SHOULD:
- 对日志消息进行速率限制
- 在 data 字段中包含相关上下文
- 使用一致的 logger 名称
- 移除敏感信息
-
客户端 MAY:
- 在 UI 中展示日志消息
- 实现日志筛选/搜索
- 以可视方式显示严重性
- 持久化日志消息
安全
-
日志消息 MUST NOT 包含:
- 凭据或密钥
- 个人身份识别信息
- 可能帮助攻击的内部系统细节
-
实现 SHOULD:
- 对消息进行速率限制
- 验证所有数据字段
- 控制日志访问
- 监控敏感内容