模型上下文协议(MCP)为服务器提供了一种标准化方式,用于向客户端发送结构化日志消息。客户端可通过设置最低日志级别来控制日志详细程度,服务器发送的通知包含严重级别、可选的记录器名称以及任意可JSON序列化的数据。
用户交互模型
具体实现可自由选择最适合其应用场景的日志展示方式——该协议本身并不限定特定的交互模式。
实现建议:
- 桌面端建议采用可折叠的日志面板
- 移动端可集成系统通知中心
- 建议保留原始日志的上下文关联
- 关键错误应提供可视化告警
能力声明
支持日志通知的服务器必须声明logging能力项:
{
"capabilities": {
"logging": {}
}
}
日志级别
本协议遵循RFC 5424标准定义的syslog严重级别体系:
| Level | Description | Example Use Case |
|---|---|---|
| debug | Detailed debugging information | Function entry/exit points |
| info | General informational messages | Operation progress updates |
| notice | Normal but significant events | Configuration changes |
| warning | Warning conditions | Deprecated feature usage |
| error | Error conditions | Operation failures |
| critical | Critical conditions | System component failures |
| alert | Action must be taken immediately | Data corruption detected |
| emergency | System is unusable | Complete system failure |
协议消息
日志级别设置
客户端可通过logging/setLevel请求配置最低日志级别:
设置请求:
{
"jsonrpc": "2.0",
"id": 1,
"method": "logging/setLevel",
"params": {
"level": "info"
}
}
日志消息通知
服务端通过notifications/message推送日志消息:
通知示例:
{
"jsonrpc": "2.0",
"method": "notifications/message",
"params": {
"level": "error",
"logger": "database",
"data": {
"error": "Connection failed",
"details": {
"host": "localhost",
"port": 5432
}
}
}
}
消息交互流程
错误处理
服务器应针对以下常见错误返回标准JSON-RPC错误码:
- 无效日志级别:-32602(参数无效)
- 配置错误:-32603(内部错误)
实现建议
- 服务端应当:
- 对日志消息进行速率限制
- 在data字段中包含相关上下文信息
- 使用一致的记录器名称
- 移除敏感信息
- 客户端可以:
- 在用户界面中展示日志消息
- 实现日志过滤/搜索功能
- 可视化显示严重级别
- 持久化存储日志消息
安全规范
- 日志消息严禁包含:
- 凭据或密钥
- 个人身份信息
- 可能协助攻击的内部系统细节
- 实现方应当:
- 限制消息发送频率
- 验证所有数据字段
- 控制日志访问权限
- 监控敏感内容