mcpField
C
Closeread Verify

Closeread Verify

本地服务
github.com/FreeGuy-AI安全020 周前更新

关于 Closeread Verify

Closeread Verify 是面向 Agent 和开发团队的确定性依赖审计 MCP 服务。它依据锁文件中的实际安装版本核对 OSV.dev 通告,区分直接与传递依赖,并给出优先级判定和具体修复建议。

主要功能

  1. 01审计锁文件中的安装版本
  2. 02区分直接与传递依赖
  3. 03突出高危直接生产依赖问题
  4. 04对照 OSV.dev 核验通告
  5. 05支持五类软件包生态

适用场景

  1. 01发布前审计依赖
  2. 02检查公开仓库中的易受攻击版本
  3. 03判断问题属于直接还是传递依赖

MCP 相关

MCP 服务向客户端提供 `audit_project`、`audit_dependencies` 和 `audit_repo`。它返回经过核验的依赖判定,供 Agent 直接采取行动,而非要求其解读原始扫描结果。

配置

本地服务的配置在各客户端中通用,复制后粘贴到客户端的 MCP 配置文件即可。

mcp.json · 通用配置
{
"mcpServers": {
"freeguy-ai-closeread-verify": {
"command": "uvx",
"args": [
"closeread-verify"
]
}
}
}
启动命令uvx closeread-verify

本地服务需要在你的电脑上安装运行环境(如 Node.js 18+)。各客户端的配置文件位置不同,请参考客户端文档。

安装包
pypicloseread-verify0.1.2

工具

还没有获取到工具列表

本地服务需要在你的电脑上运行后才能读取工具,维护者暂未提供工具列表。

详细介绍

closeread-verify

PyPI Python License: MIT MCP

任何 AI Agent 都能调用的、经过验证的依赖审计结论。

免费扫描器会给你一堆原始 CVE。closeread-verify 给你的是判断:根据你实际安装的版本核验过的结论、最重要的一项发现,以及精确的修复方案。它以 MCP 服务的形式运行,因此任何 Agent(Claude Code、Cursor,或你自己的 Agent)都可以在发布代码前调用它,得到经过核验的答案,而不是一堆杂乱信息。

为什么选它,而不是 npm audit

原始扫描器和 Agent 本身都能列出一堆 CVE,但它们无法凭空得出 审计结论。closeread-verify 围绕一项关键原则构建,这正是实际审计与扫描之间的区别:

  • 它报告已安装的版本,而不是声明的最低版本。 清单中的 ^4.17.0 并不代表你实际发布的版本。工具会从锁文件中解析出真正锁定的版本并检查 该版本,因此不会对你已经修复的脱字符版本范围误报,也不会漏掉仅扫描清单时可能放过的易受攻击锁定版本。
  • 它会区分直接依赖和传递依赖。 你声明并负责维护的依赖(需要由你升级),会与向下追溯五层继承的依赖分开。大多数扫描器会把它们混成一份无法区分的列表,而这个工具会明确指出各自的类型。
  • 它会突出最重要的一项发现。 你得到的不是 200 条记录,而是一个 lead:严重程度最高的 直接生产环境 问题,并附上精确的修复方案。如果发现的问题都只是传递依赖或仅存在于开发环境,lead 会如实返回 null,而不是捏造一个头条。
  • 结果是确定且可重新核验的。 流程中不使用 LLM。同一份锁文件输入,会得到同一份结论。公告会与 OSV.dev 上的信息进行核实。结论会附带自身的依据,方便审查者重新运行核验。

经过验证的产物才是产品,而不是原始扫描结果。

安装

pip install closeread-verify

需要 Python 3.11+。无需 API 密钥、账号或源代码访问权限。输入锁文件,输出审计结论。

在 Agent 工作流中试用

examples/agent_loop.py 是一个可运行的 Agent 示例,它将 closeread-verify 用作发布前的检查关卡:遇到真实的 Flask CVE 时阻止发布,应用指定的修复,重新检查,然后发布。通过 stdio 运行真实 MCP,使用真实的 OSV 公告,无需 API 密钥。

python examples/agent_loop.py

将其用作 MCP 服务

closeread-verify 是用于启动服务的 stdio 命令:

closeread-verify
客户端配置

将其添加到 MCP 客户端。适用于 Claude Code / Cursor 风格的配置(mcp.json / claude_desktop_config.json):

{
  "mcpServers": {
    "closeread-verify": {
      "command": "closeread-verify"
    }
  }
}

如果你将它安装在特定环境中,请改为指定该环境中的解释器:

{
  "mcpServers": {
    "closeread-verify": {
      "command": "python",
      "args": ["-m", "closeread.mcp_server"]
    }
  }
}

三个工具

工具输入使用场景
audit_projectfiles:{filename: content} 映射你有一个实际的代码检出。请同时传入清单 和 锁文件(例如 package.json + package-lock.json),以便还原直接依赖与传递依赖的区分。允许使用 server/package.json 这样的子目录前缀。
audit_dependencieslockfile_content:str,filename:str你只有单个清单或锁文件,并希望一次性获得审计结论。
audit_repogithub_url:str你有一个公开仓库 URL。该工具会浅克隆仓库并运行相同的审计。如果克隆失败,会返回错误,绝不会捏造结果。

文件名至关重要:它决定内容将交由哪个生态系统解析器处理。支持的锁文件包括 package-lock.json、yarn.lock、 pnpm-lock.yaml、requirements.txt、poetry.lock、Pipfile.lock、 Gemfile.lock、composer.lock 和 Cargo.lock。

示例

对固定了 flask==0.12.0 的 requirements.txt 调用 audit_dependencies:

{
  "source": "lockfile:requirements.txt",
  "lead": {
    "summary": "[email protected] affected by GHSA-562c-5r94-xh97",
    "severity": "high",
    "is_direct": true,
    "dependency_kind": "prod",
    "location": "requirements.txt:1",
    "fix": "Update flask to a patched version (see references).",
    "confidence": 0.9
  },
  "findings": {
    "issues": [],
    "direct": [
      {
        "kind": "dependency",
        "package": "flask",
        "severity": "high",
        "is_direct": true,
        "versions": ["0.12.0"],
        "advisories": ["GHSA-562c-5r94-xh97", "GHSA-5wv5-4vpf-pj6m", "GHSA-m2qf-hxjv-5gpq"],
        "locations": ["requirements.txt:1"],
        "recommendation": "Update flask to a patched version (see references)."
      }
    ],
    "transitive": []
  },
  "counts": { "product_critical": 3, "issues": 0, "direct": 1, "transitive": 0 },
  "verification": {
    "basis": "each version is the INSTALLED version resolved from the lockfile, not the declared floor; advisories confirmed via OSV; result is deterministic and re-checkable",
    "scanner": "closeread SCA (deterministic, no LLM)",
    "advisory_source": "OSV.dev",
    "as_of": "2026-06-08T12:00:00+00:00"
  }
}

Agent 无需解读扫描结果。它得到的是可执行的判定:升级 flask,这是对应的行,这就是原因。

面向 Agent 时代的已验证审计原语

Agent 正开始自主编写、审查和发布代码。在 Agent 发起 PR 或批准部署之前,它需要得到一个简单且可核验的问题的答案:我依赖的组件中,是否有任何已知存在漏洞,且漏洞版本正是我实际固定的版本?这是否是我需要修复的问题? closeread-verify 就是这个原语。一次 MCP 调用,一个确定性的判定,无需让大模型介入,也就不会凭空捏造不存在的 CVE,或漏掉确实存在的 CVE。

坦诚说明范围

  • 生态系统: npm/yarn/pnpm、pip/poetry/pipenv、RubyGems、Packagist (Composer)、crates.io(Cargo)。
  • 确定性: 不使用大模型;除查询 OSV.dev 安全公告外,不进行网络访问。
  • 仅限锁文件: 它会读取清单和锁文件,不需要、不会请求,也不会传输你的源代码。
  • 它不是什么: 这是免费且确定性的依赖审计层级。它不是全面的代码审查,不是 SAST 引擎,也不是许可证或架构审计。它只做一件事:对你的依赖给出经过验证的判定。

许可证

MIT。由 Free Guy 构建。

评论

支持 Markdown

第一次接触 MCP?

从协议是什么,到在客户端里装上第一个服务,这几条回答覆盖了大多数入门问题。

一个开放协议,规定了 AI 应用如何以统一方式连接外部工具与数据源。客户端负责与模型对话,MCP 服务负责提供工具、资源和提示模板,两者通过标准消息通信,同一个服务可以被不同客户端复用。