跳到主内容

MCP 服务器日志与监控:协议内日志已弃用,现在该怎么做

100%
MCP 服务器日志与监控:协议内日志已弃用,现在该怎么做

MCP 服务器日志与监控:一句话结论

MCP 规范 2026-07-28 版(SEP-2577)已把协议内日志机制 notifications/message 列入弃用——新项目的正确姿势是:stdio 传输写 stderr,HTTP 传输上 OpenTelemetry,协议内日志只剩过渡期兼容价值。

规则变了:别再往协议里塞日志

很多教程还在教「实现 logging 能力 + setLevel 」,这在 2025 年没错,但官方调试文档现在明确标注:协议内日志按规范版本 2026-07-28 弃用,新实现应改走 stderr(stdio)或 OpenTelemetry(所有传输)。客户端侧则通过请求 _meta 里的 io.modelcontextprotocol/logLevel 选择性接收——服务端对没带这个字段的请求必须不发日志通知。

迁移成本不高:stdio 服务端把 Python logging 配到 stderr 即可,宿主应用会自动捕获:

import logging
from mcp.server import MCPServer

logger = logging.getLogger(__name__)

mcp = MCPServer("reports")

@mcp.tool()
async def fetch_report(report_id: str) -> str:
    """Fetch a report by id."""
    logger.info("Fetching report %s", report_id)
    return f"Report {report_id} is ready."
stdio 服务端有一条铁律:日志只能写 stderr,绝不能写 stdout——stdout 是协议消息专用通道,混入任何非协议内容都会让客户端解析失败。这是 stdio 服务端最高频的死因。

两种传输,两套监控方案

传输日志去向排查工具
stdiostderr(宿主自动捕获)客户端日志面板 + MCP Inspector
Streamable HTTPstderr 无人捕获,需自建聚合或 OpenTelemetrycurl 、浏览器 DevTools Network 面板看 SSE 流

HTTP 传输下 stderr 不再被客户端捕获,这是很多人监控缺位的根源:要么自己上日志聚合,要么直接接 OpenTelemetry 输出结构化 trace 。传输选型的背景见 stdio 与 Streamable HTTP 对比。

该记什么:五类关键事件

无论走哪条通道,服务端至少记录这五类:

  • 启动步骤:配置加载、依赖初始化、监听端口——启动失败占连接问题的大头。
  • 资源访问:哪个 URI 被谁读了。
  • 工具执行:工具名、参数摘要、耗时、结果状态。
  • 错误条件:异常类型 + 上下文,别只记 message 丢堆栈。
  • 性能指标:慢工具的延迟分布,P95 比 average 有用。

连接失败排查清单

监控之外,以下高频问题值得做成 checklist:

  • 路径问题:宿主启动的 stdio 服务端工作目录可能是未定义的(如 macOS 的 /),配置和 .env 里一律用绝对路径。
  • 环境变量:stdio 子进程只继承有限的环境变量子集,需要 override 就在配置的 env 字段里显式给。
  • 协议版本:每个请求的 _meta 必须带 io.modelcontextprotocol/protocolVersion 和 clientCapabilities,缺了报 -32602;需要客户端声明而未声明的能力(如 elicitation)报 -32021 。
  • 先隔离再排查:用 MCP Inspector 单独连服务端验证,Inspector 仍是排障第一站,配套三层测试法见 MCP 服务器怎么测试。

日常连接类问题的完整手册在 MCP 调试常见问题。

常见问题

协议内日志还能用吗?
过渡期内可用(带 deprecation 标记),规范计划在 2027-07-28 当天或之后的第一个版本里移除。新项目直接走 stderr/OTel,存量项目开始迁移,别再新增依赖。

OpenTelemetry 要接吗,还是 print 就够?
个人小工具 print 到 stderr 够用; anything 部署给团队或生产用,直接上 OTel——结构化 trace 能把工具耗时、错误率和调用链一次看全,后补的成本远高于一开始就接。

进度通知(progress)也弃用了吗?
没有。弃用的是 notifications/message 日志机制;notifications/progress 用于长任务进度上报,仍是现行规范的一部分,注意别混淆。

这篇有帮助吗?
云上的幻象
云上的幻象查看主页

七彩云博客,分享 WordPress 建站实战与 AI 工具测评,覆盖服务器运维、站长工具、软件资源与电商运营干货,专注原创实用的主题插件、网站加速与安全优化教程。

906文章4评论

相关文章

评论 (0)

欢迎你,新朋友,感谢参与互动!文明发言,理性交流 · 首次评论将在审核后展示