[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"$f1f55sj2wxn9m5":3},{"code":4,"message":5,"data":6,"timestamp":25},10000,"success",{"full_name":7,"position":8,"description":9,"language":10,"stars":11,"forks":12,"stars_gained":11,"age_days":13,"hn_threads":14,"one_liner":15,"summary_md":16,"topic":17,"github_topics":20,"license":21,"homepage":22,"updated_at":23,"history":24},"YoyoLin008\u002Fmcreplay",15,"McReplay（麦回放）— Structural snapshots, change reports, and local MCP replay for McDonald's China integrations.","Python",190,10,0,[],"把一次麦当劳中国 MCP 查询变成去掉真实值、可比对、可本地回放的结构样本，用于回归测试。","如果你在维护针对麦当劳中国 MCP 的解析器或适配器，McReplay 提供了一条具体路径：把一次真实响应冻结成结构样本，之后比对变化，并通过 stdio MCP 在本地回放，让回归测试不依赖线上服务。它的适用范围很窄，这正是价值所在；采用前先确认工具覆盖面和导入格式。\n\n## 解决什么问题\n\n原本解析器能跑，某天字段类型变了、活动字段消失了，或者文本返回为空，适配器就悄悄返回空结果。排查时只能再查一次线上服务，再凭记忆猜昨天和今天哪里不同。McReplay 把这一步改成：接收一次完整的 `CallToolResult`，删掉字符串、数字、布尔值等原值，保留字段结构和 MCP 协议标记，再把两个结构包比较，输出可定位的变化报告。最终得到的是可复现的测试产物，而不是一次性的手工对照。\n\n## 有什么不同\n\n核心机制是选择性去值和结构化差异比较。响应先经过校验，值被替换为占位符，字段结构与协议标记保留；`compare` 报告工具被删除、新增必填参数、字段消失、类型或封装变化，并分为破坏性、待复核和信息三类。另一条 `replay` 路径通过官方 Python MCP SDK 以 stdio 启动本地 MCP 服务，把已记录的样本送给适配器。\n\n实际好处是适合 CI 的反馈：离线命令、明确的退出码（0 无变化、2 有破坏性风险、3 仅需人工复核、1 输入或执行失败）以及独立 HTML 报告 [演示报告](https:\u002F\u002Fgithub.com\u002FYoyoLin008\u002Fmcreplay\u002Fblob\u002Fmain\u002Fdocs\u002Fdemo-report.png)。代价是保真度换安全：值被替换意味着回放验证的是结构和解析，无法覆盖依赖真实值的业务逻辑。README 把范围限定在三个只读工具——`now-time-info`、`campaign-calendar`、`list-nutrition-foods`——所以它不是通用的 MCP mock 工具。作者称三项工具已于 2026-10-24 完成官方查询与本地回放验证 [实测记录](https:\u002F\u002Fgithub.com\u002FYoyoLin008\u002Fmcreplay\u002Fblob\u002Fmain\u002Fdocs\u002FLIVE_VERIFICATION.md)，这属于项目自述，并非独立验证。\n\n## 谁值得试\n\n适合：维护麦当劳 MCP Skill、解析器或演示应用的个人开发者，尤其是已经被一次结构或字段变化弄坏过，希望先保存样本、再比对、最后改适配器的人；也适合想基于记录结构搭一个小型 CI 检查的人。不适合：需要测试依赖真实值的行为、要给任意第三方 MCP 服务做 mock，或在 Windows 上开发的人——文档写明运行环境是 Python 3.11+，Linux 或 macOS。只想先看一眼的话，用合成样本的离线 `mcreplay demo` 即可，不需要官方凭证。\n\n## 使用条件与边界\n\nPython 3.11+ 以及 Linux 或 macOS 是硬性前提。本地回放要求客户端配置指向虚拟环境内的绝对路径；接收服务要求父目录已存在、输出文件尚不存在，一次接收进程只写一个新文件，要新观察就得换路径并重启。从官方服务接收还需要能访问 `https:\u002F\u002Fmcp.mcd.cn`、使用 Streamable HTTP 和 Bearer Token，并且客户端要支持导入 `SKILL.md` 技能目录；环境变量展开方式因客户端而异，得按对应客户端文档配置 [配置示例](https:\u002F\u002Fgithub.com\u002FYoyoLin008\u002Fmcreplay\u002Fblob\u002Fmain\u002Fmcp-config.example.json)。\n\n持续维护比安装更关键：输入输出放在本地 `private\u002F` 目录，每次导入使用新的输出文件名，凭证放在客户端的安全配置里而不是项目文件里 [本地数据说明](https:\u002F\u002Fgithub.com\u002FYoyoLin008\u002Fmcreplay\u002Fblob\u002Fmain\u002FSECURITY.md)。比较规则有明确的适用范围 [比较规则](https:\u002F\u002Fgithub.com\u002FYoyoLin008\u002Fmcreplay\u002Fblob\u002Fmain\u002Fdocs\u002Flimitations.md)，导入格式与字段含义另有专门文档 [集成文档](https:\u002F\u002Fgithub.com\u002FYoyoLin008\u002Fmcreplay\u002Fblob\u002Fmain\u002FMCP_INTEGRATION.md#本地导入格式)。多客户端行为没有统一承诺，README 是按单个客户端来描述配置的。\n\n## HotRepo 点评\n\nHotRepo 从 2026-10-24 开始追踪该项目，只记录到一个快照：2026-10-25 的 python 新项目榜上有 190 个总 star、第 15 名。这只是单日观察，不是每日增长序列，因此还不能判断热度能否持续。范围窄对一个开发者的工作流来说是自洽的，但在投入时间前，请先读比较规则的适用范围，并确认那三个已记录工具覆盖了你适配器实际解析的响应。",{"slug":18,"name":19},"developer-tools","开发工具",[],"NOASSERTION",null,"2026-10-25T06:46:30Z",[],1792919794]