关于 Errata
Errata 是面向开发者的 MCP 服务,用于查找受覆盖的 PyPI 和 npm 包中的过时代码写法。修正方案经过沙箱验证,并区分已确认版本与待核实线索,但不会编辑代码。
主要功能
- 01检查 PyPI 和 npm 包版本
- 02搜索错误信息和回溯
- 03返回经沙箱验证的修正方案
- 04区分已确认修复与待核实线索
- 05提交条目反馈
适用场景
- 01检查某个包版本是否有已知修正
- 02搜索错误信息以查找匹配修复
- 03在修改代码前审阅修正方案
MCP 相关
向 MCP 客户端提供三个工具:检查包版本、搜索错误和提交修正反馈。它会报告修复信息,但不会修改代码。
配置
本地服务的配置在各客户端中通用,复制后粘贴到客户端的 MCP 配置文件即可。
npx -y @formachines/errata-mcpERRATA_BASE_URLBase URL of the Errata site (default https://formachines.ai)ERRATA_TIMEOUT_MSTimeout of one request to the base, in milliseconds (default 8000)ERRATA_NO_TELEMETRYSet to 1 to stop sending search misses (error type and scrubbed message) when search_error finds nothing本地服务需要在你的电脑上安装运行环境(如 Node.js 18+)。各客户端的配置文件位置不同,请参考客户端文档。
工具
3收录的工具列表 · 更新于 今天
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
| package | string | 是 | |
| version | any | 否 | 已安装的准确版本;如果只知道版本范围,则填写范围 |
| ecosystem | enum | 是 | pypi | npm |
详细介绍
@formachines/errata-mcp
适用于 Errata 的 MCP 服务:列出 AI 模型为 PyPI 和 npm 库编写过时代码的情况,每项都附带在沙盒中验证过的修复方案。提供 3 个工具;使用 stdio;无需 API 密钥。
安装
Claude Code:
claude mcp add errata -- npx -y @formachines/errata-mcp
适用于任何使用 JSON 配置的客户端(Claude Desktop、Cursor、Windsurf、VS Code……):
{
"mcpServers": {
"errata": { "command": "npx", "args": ["-y", "@formachines/errata-mcp"] }
}
}
需要 Node 20 或更高版本。注册表名称:ai.formachines/errata。
工具
| 工具 | 输入 | 答案 status |
|---|---|---|
check_package | ecosystem(pypi/npm)、package、version(精确版本或范围;可省略) | found · unconfirmed_version · not_affected · no_coverage · technical_error |
search_error | text:错误行、回溯信息或条目 ID | found · candidates · no_match · technical_error |
report | id、verdict(confirm/dispute)、note(≤ 500 个字符) | received · merged · withdrawn · unknown_entry · invalid · rejected · technical_error |
答案中的每个条目都包含 verdict(apply / lead / none)、grade(verified / possible / not_affected / unknown)、reason、wrong、right、detect、error、fails_on、verified_on、url。
示例:使用实时数据源检查 check_package {"ecosystem":"pypi","package":"click","version":"8.5.0"}:
{"status":"found","package":"pypi/click","installed":"8.5.0","entries":[{"id":"pypi/click/8.5.0/0001","verdict":"apply","grade":"verified","reason":"checked on click 8.5.0; installed 8.5.0; proof.auto_apply true","symbol":"click.Parameter","wrong":"parameter = click.Parameter([\"--x\"])","right":"parameter = click.Option([\"--x\"])","detect":["click.Parameter"],"error":"Can't instantiate abstract class Parameter with abstract methods _parse_decls, add_to_parser","fails_on":"8.5.0","verified_on":["8.5.0"],"url":"https://formachines.ai/errata/pypi/click/0001-click-parameter/"}]}
同一软件包使用未经检查的版本 "version":"8.6.0" 时:
status: "unconfirmed_version",verdict 为 lead,reason 为 已安装的 8.6.0 比已检查的版本(8.5.0)更新;已检查的单个版本并不代表一个范围。
规则
服务、CLI、技能和网站均遵循同一条规则(印在每个页面页脚、llms.txt 和 JSON agent_rule 中):只有当已安装版本是该条目检查过的版本(versions.checked_on:fails_on 及每次重新检查的版本),且 proof.auto_apply 为 true 时,才自行应用修正。比已检查版本更新、介于 works_on 和 fails_on 之间,或未知的版本属于 lead;works_on 或更旧的版本属于 none。
已合并和已撤回的条目绝不会被提供:答案会在 not_offered 下列出这些条目,并附上当前包含已合并条目的条目。report 会在发送前拒绝这些条目。无法访问数据源时会返回带有 isError: true 的 technical_error,绝不会返回 no_coverage。
环境
| 变量 | 默认值 |
|---|---|
ERRATA_BASE_URL | https://formachines.ai |
ERRATA_FEEDBACK_URL | <base>/v1/feedback |
ERRATA_TIMEOUT_MS | 每次请求 8000 |
ERRATA_CACHE_TTL_S | 600(进程内缓存:每十分钟缓存一个索引和一份变更日志) |
ERRATA_LOG_LEVEL | warn(日志写入 stderr;绝不记录 search_error 的文本) |
ERRATA_NO_TELEMETRY | 未设置;设为 1(或 DO_NOT_TRACK=1)可停止下方所述的搜索未命中报告 |
请求会携带 User-Agent formachines-errata-mcp/<version>,因此网站会单独统计 MCP 流量。
搜索未命中(自 0.1.2 起)。 当 search_error 未找到任何结果时,服务会向 POST https://formachines.ai/v1/miss 发送来源(mcp)、异常类型,以及其消息(已清除路径、数字、IP 地址、十六进制字符串、UUID、电子邮件地址、类似令牌的字符串和带引号的值,但普通名称除外('numpy' 会保留,'my secret' 会变成 <str>)),最多 200 个字符。带点号的类型只保留最后一部分(acme.errors.BillingError → BillingError)。不会发送代码、项目名称或回溯信息中的其他行;如果文本中没有 SomeError: … 行,则不会发送任何内容。该请求会在后台发送(答案不会等待发送完成;网络错误会被忽略),且只会在搜索未命中时发送。接收端会再次清理内容,不保留 IP 地址,并根据列表决定后续覆盖哪些错误。将 ERRATA_NO_TELEMETRY=1 可关闭此功能。
开销
于 2026-11-02 对 formachines.ai 进行测量:首次调用 check_package 会产生 3 个请求(索引 5.9 kB、变更日志 31 kB、软件包 JSON 5–12 kB);接下来十分钟内的调用只请求软件包 JSON(若已缓存则无需请求)。
search_error 会产生一个 31 kB 的错误索引请求。大小为未压缩状态;自 2026-11-02 起,网站以 gzip 格式发送 JSON,实际传输量约为上述大小的五分之一。答复很精简:click 为 0.6 kB,typescript(两条条目)为 1.9 kB,匹配到的错误为 0.9 kB。
服务不作出的承诺
- 并非全面扫描。 基础数据涵盖几十个软件包;
no_coverage表示没有修正,并不代表代码是最新的。 - 不证明版本范围。 检查一个版本不代表涵盖某个版本范围;更新的版本标记为
lead。 - 不是应用工具。 服务绝不会修改代码;
apply表示基础数据允许直接应用修复。 - 报告不会公开。
report会将内容发送到隔离区,在任何变更发生前于沙箱中重新检查;其他 Agent 永远不会看到备注。 - 无离线模式。 没有网络时,每个工具都会返回
technical_error。
自行检查
npx -y @modelcontextprotocol/inspector --cli npx -y @formachines/errata-mcp --method tools/list
开发
npm install
npm test
npm run typecheck
npm pack
src/core 与 errata-cli 共享,并在两者中保持一致。测试针对 test/fixtures/site 中的 formachines.ai/errata 快照(2026-11-02)运行;npm test 会通过 SDK 客户端,以 stdio 启动构建后的服务,并运行七个验收用例;scripts/inspect-live.sh 则使用 MCP Inspector 针对实时基础数据重复这些测试。server.json 遵循注册表架构 2025-12-11。
MIT 许可证。数据采用 CC BY 4.0 许可(formachines.ai/errata)。
评论
一个开放协议,规定了 AI 应用如何以统一方式连接外部工具与数据源。客户端负责与模型对话,MCP 服务负责提供工具、资源和提示模板,两者通过标准消息通信,同一个服务可以被不同客户端复用。