【MCP协议】服务端特性:日志协议

107 阅读2分钟

模型上下文协议(MCP)为服务器提供了一种标准化方式,用于向客户端发送结构化日志消息。客户端可通过设置最低日志级别来控制日志详细程度,服务器发送的通知包含严重级别、可选的记录器名称以及任意可JSON序列化的数据。

用户交互模型

具体实现可自由选择最适合其应用场景的日志展示方式——该协议本身并不限定特定的交互模式。

实现建议:

  • 桌面端建议采用可折叠的日志面板
  • 移动端可集成系统通知中心
  • 建议保留原始日志的上下文关联
  • 关键错误应提供可视化告警

能力声明

支持日志通知的服务器必须声明logging能力项:

{
  "capabilities": {
    "logging": {}
  }
}

日志级别

本协议遵循RFC 5424标准定义的syslog严重级别体系:

LevelDescriptionExample Use Case
debugDetailed debugging informationFunction entry/exit points
infoGeneral informational messagesOperation progress updates
noticeNormal but significant eventsConfiguration changes
warningWarning conditionsDeprecated feature usage
errorError conditionsOperation failures
criticalCritical conditionsSystem component failures
alertAction must be taken immediatelyData corruption detected
emergencySystem is unusableComplete 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
      }
    }
  }
}

消息交互流程

mcp_log.png

错误处理

服务器应针对以下常见错误返回标准JSON-RPC错误码:

  • 无效日志级别:-32602(参数无效)
  • 配置错误:-32603(内部错误)

实现建议

  1. 服务端应当:
  • 对日志消息进行速率限制
  • 在data字段中包含相关上下文信息
  • 使用一致的记录器名称
  • 移除敏感信息
  1. 客户端可以:
  • 在用户界面中展示日志消息
  • 实现日志过滤/搜索功能
  • 可视化显示严重级别
  • 持久化存储日志消息

安全规范

  1. 日志消息严禁包含:
  • 凭据或密钥
  • 个人身份信息
  • 可能协助攻击的内部系统细节
  1. 实现方应当:
  • 限制消息发送频率
  • 验证所有数据字段
  • 控制日志访问权限
  • 监控敏感内容