RP-Digital-Innovations/context-snipe

GitHub: RP-Digital-Innovations/context-snipe

一个纯 Rust 编写的 MCP 服务器,通过读取项目 lockfile 并与 OSV.dev 交叉比对,为 AI 编程工具提供精准的依赖漏洞上下文。

Stars: 0 | Forks: 0

context-snipe

你的 AI 编程助手并不了解你的依赖项。
它只是在猜测。而这个工具能解决这个问题。

[![CI](https://static.pigsec.cn/wp-content/uploads/repos/2026/06/ebfd3ef95e024622.svg)](https://github.com/RP-Digital-Innovations/context-snipe/actions/workflows/ci.yml) [![License: MIT](https://img.shields.io/badge/license-MIT-blue.svg)](LICENSE) [![GitHub release](https://img.shields.io/github/v/release/RP-Digital-Innovations/context-snipe)](https://github.com/RP-Digital-Innovations/context-snipe/releases/latest) [![MCP](https://img.shields.io/badge/MCP-compatible-blueviolet)](https://modelcontextprotocol.io)

一个约 1 MB 的纯 Rust 二进制程序,它能读取你的 lockfile,将每个包与 OSV.dev 进行交叉比对,并通过 Model Context Protocol 向你的 AI 提供一份简短、排序且精准的漏洞报告。

**兼容:** Claude Desktop · Cursor · Windsurf · VS Code · Zed · 任何 MCP 客户端
``` $ context-snipe scan . context-snipe — vulnerability scan Project: ./my-api Scanned: 412 entries (388 unique packages) from Cargo.lock, package-lock.json FOUND 3 advisories affecting 2 of 388 package(s): lodash 4.17.11 [npm] [CRIT] CVE-2019-10744 Prototype Pollution in lodash [HIGH] CVE-2021-23337 Command Injection in lodash minimatch 3.0.4 [npm] [HIGH] CVE-2022-3517 minimatch ReDoS vulnerability Source: OSV.dev — packages actually in your resolved dependency tree. ``` ## 问题所在 你问 Cursor 或 Claude:*“我的项目有安全问题吗?”* 它不知道你的包。它也不知道你的版本。它基于通用知识而非你实际的 `package-lock.json` 幻觉出一个答案。 你的扫描器(Dependabot、Snyk 等)向你发送了 200 条警告,其中大多数并不适用于你实际发布的内容。你花了 45 分钟在 Google 上搜索与你代码无关的 CVE。 **context-snipe 弥补了这两个缺陷。** 它读取你的*已解析* lockfile(不是你的 `package.json`——而是你实际安装的包),仅针对你拥有的内容向 OSV.dev 发起查询,去除冗余噪音,按真实的 CVSS 严重程度进行排序,并为你的 AI 提供一份干净、准确且易于推理的简报。 ## 30秒安装 **macOS / Linux** —— 一行命令,自动为你选择合适的二进制文件: ``` curl -fsSL https://raw.githubusercontent.com/RP-Digital-Innovations/context-snipe/main/install.sh | sh ``` **Windows** (PowerShell): ``` irm https://raw.githubusercontent.com/RP-Digital-Innovations/context-snipe/main/install.ps1 | iex ```
手动下载 从[最新发布版本](https://github.com/RP-Digital-Innovations/context-snipe/releases/latest)中获取适合你平台的二进制文件: | 平台 | 资源文件 | |----------|-------| | macOS (Apple Silicon) | `context-snipe-aarch64-apple-darwin` | | macOS (Intel) | `context-snipe-x86_64-apple-darwin` | | Linux x86_64 | `context-snipe-x86_64-linux` | | Linux ARM64 | `context-snipe-aarch64-linux` | | Windows x86_64 | `context-snipe-x86_64-pc-windows.exe` | 运行 `chmod +x` 赋予执行权限,并将其移动到你的 PATH 中。
**验证:** ``` context-snipe --version ``` ## 添加到你的 AI 工具(60秒) ### Claude Desktop 添加到 `~/Library/Application Support/Claude/claude_desktop_config.json` (macOS) 或 `%APPDATA%\Claude\claude_desktop_config.json` (Windows): ``` { "mcpServers": { "context-snipe": { "command": "context-snipe", "args": ["serve"] } } } ``` ### Cursor 添加到 `~/.cursor/mcp.json`: ``` { "mcpServers": { "context-snipe": { "command": "context-snipe", "args": ["serve"] } } } ``` ### Windsurf 添加到 `~/.codeium/windsurf/mcp_config.json`: ``` { "mcpServers": { "context-snipe": { "command": "context-snipe", "args": ["serve"] } } } ``` **重启你的编辑器。** 然后问你的 AI:*“检查这个项目是否有易受攻击的依赖项。”* ## 你的 AI 现在能做什么 | MCP 工具 | 功能说明 | |----------|-------------| | `scan_dependencies` | 列出项目中每个已解析的包(名称、版本、生态系统) | | `check_vulnerabilities` | 将你的包与 OSV.dev 进行交叉比对——仅返回影响你实际已安装内容的公告 | 你的 AI 从猜测变为确切知晓。只需一次工具调用。 ## 支持的生态系统 | 生态系统 | 已解析的 lockfile(首选) | 备用方案 | |-----------|-------------------------------|---------| | **Rust** | `Cargo.lock` | — | | **npm** | `pnpm-lock.yaml`, `yarn.lock`, `package-lock.json` v1–v3 | `package.json` | | **Python** | `poetry.lock`, `uv.lock` | `requirements.txt` (锁定为 `==`) | | **Go** | `go.sum` | `go.mod` | ## 横向对比 | | context-snipe | Dependabot | Snyk | socket.dev | |--|:--:|:--:|:--:|:--:| | MCP 原生 —— AI 直接获取结果 | ✅ | ❌ | ❌ | ❌ | | 读取已解析的 lockfile(不仅仅是 manifest) | ✅ | ✅ | ✅ | ✅ | | 100% 本地运行 —— 数据绝不离开你的机器 | ✅ | ❌ | ❌ | ❌ | | 无需账号、无需注册、无需 API key | ✅ | ❌ | ❌ | ❌ | | 二进制文件大小 | ~1 MB | N/A | 200 MB+ | N/A | | 免费且开源 | ✅ | ✅ | 部分免费 | 部分免费 | ## CLI 用法 ``` context-snipe scan [PATH] # vulnerability report (defaults to current dir) context-snipe deps [PATH] # list the full resolved dependency tree context-snipe serve # start the MCP server over stdio context-snipe --help ``` ## 关于诚实的说明 context-snipe 会告诉你哪些存在漏洞的包**出现在你已解析的依赖树中**。它不执行调用图可达性分析。存在并不代表可利用——易受攻击的函数在你的代码中可能并不可达。该工具按设计会在其自身的输出中说明这一点。 没有任何一个能在几秒内运行完成的工具可以确切地告诉你某个 CVE 绝对不可利用。我们不会假装并非如此。 ## 工作原理 - **MCP 引擎** —— 手写的基于 stdio 的 JSON-RPC 2.0。包含 `initialize`、`tools/list`、`tools/call`、`ping`。stdout 作为协议通道;所有诊断信息输出到 stderr。 - **Lockfile 解析器** —— 针对 Cargo 使用 TOML,针对 npm 使用 JSON,针对 pnpm/yarn 使用自定义解析器,针对 requirements.txt 和 Go modules 使用逐行解析器。 - **OSV 客户端** —— 一次 `querybatch` 调用即可将整个依赖树过滤出包含安全公告的包,随后针对每个匹配项通过专门的 `query` 获取详细信息。根据向量字符串计算 CVSS v3.x 基础分数。共享同一 CVE 的重复公告会被合并。 - **基于 rustls 的 TLS** —— 纯 Rust 实现,无需 OpenSSL,不依赖系统加密库。在 Windows、macOS 和 musl Linux 上的运行效果完全一致。 ## 从源码构建 ``` cargo build --release # 二进制文件位于:target/release/context-snipe ``` 需要稳定版的 Rust。发布配置会静态链接 CRT —— 该二进制文件是完全自包含的。 ## 路线图 - [ ] GitHub App —— 在 pull request 中发布 CVE diff(展示一个 PR *引入*了什么) - [ ] 策略层 —— 针对不同严重程度配置可自定义的 CI 失败阈值 - [ ] 更多生态系统 —— Ruby (Gemfile.lock)、PHP (composer.lock)、Java (pom.xml) ## 许可证 MIT —— 永久免费。无遥测。无账号。无云端依赖。

网站 · 发布版本 · 问题反馈

RP Digital Innovations 构建
标签:AI编程辅助, CISA项目, Homebrew安装, MCP服务, Python安全, Rust, SOC Prime, 依赖安全扫描, 可视化界面, 开发工具, 网络流量审计, 通知系统