内容
<div align="center">
<h1>上下文嗅探</h1>
<p><strong>您的人工智能编码助手不知道您的依赖。<br/>它正在猜测。 这解决了这个问题。</strong></p>
[](https://github.com/RP-Digital-Innovations/context-snipe/actions/workflows/ci.yml)
[](LICENSE)
[](https://github.com/RP-Digital-Innovations/context-snipe/releases/latest)
[](https://modelcontextprotocol.io)
<p>一个 ~1 MB 纯 Rust 二进制文件,它读取您的锁定文件,交叉引用每个包与 OSV.dev,并为您的人工智能提供一份简短、有序、准确的漏洞报告 — 通过模型上下文协议。</p>
**适用于:** Claude Desktop · Cursor · Windsurf · VS Code · Zed · 任何 MCP 客户端
---
</div>
```
$ context-snipe scan .
context-snipe — 漏洞扫描
项目:./my-api
扫描:412 条目(388 个唯一包)来自 Cargo.lock, package-lock.json
发现 3 条建议,影响 2 个包:
lodash 4.17.11 [npm]
[严重] CVE-2019-10744 原型污染漏洞
[高] CVE-2021-23337 命令注入漏洞
minimatch 3.0.4 [npm]
[高] CVE-2022-3517 minimatch ReDoS 漏洞
来源:OSV.dev — 实际在您的已解析依赖树中的包。
```
---
## 问题
您询问 Cursor 或 Claude: *"我的项目是否存在安全问题? "*
它不知道您的包。它不知道您的版本。它根据一般知识进行猜测 — 而不是您的实际 `package-lock.json`。
您的扫描器(Dependabot、Snyk 等)向您发出 200 个警告,但大多数与您实际发布的代码无关。您花费 45 分钟搜索与您的代码无关的 CVE。
**context-snipe 解决了这两个问题。** 它读取您的已解析锁定文件(不是您的 `package.json` — 您实际安装的包),仅向 OSV.dev 查询您拥有的内容,消除噪音,按实际 CVSS 严重性排序,并为您的人工智能提供一份干净、准确的简报。
---
## 30 秒安装
**macOS / Linux** — 一行命令,为您的平台选择正确的二进制文件:
```bash
curl -fsSL https://raw.githubusercontent.com/RP-Digital-Innovations/context-snipe/main/install.sh | sh
```
**Windows** (PowerShell):
```powershell
irm https://raw.githubusercontent.com/RP-Digital-Innovations/context-snipe/main/install.ps1 | iex
```
**Rust 用户** — 从 [crates.io](https://crates.io/crates/context-snipe):
```bash
cargo install context-snipe # 从源代码构建
cargo binstall context-snipe # 或获取预构建的二进制文件,无需编译
```
<details>
<summary>手动下载</summary>
从 [最新版本](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` |
将其设为可执行并移动到您的 PATH 中。
</details>
**验证:**
```bash
context-snipe --version
```
---
## 添加到您的 AI 工具(60 秒)
### Claude Desktop
添加到 `~/Library/Application Support/Claude/claude_desktop_config.json` (macOS)或 `%APPDATA%\Claude\claude_desktop_config.json` (Windows):
```json
{
"mcpServers": {
"context-snipe": {
"command": "context-snipe",
"args": ["serve"]
}
}
}
```
### Cursor
添加到 `~/.cursor/mcp.json`:
```json
{
"mcpServers": {
"context-snipe": {
"command": "context-snipe",
"args": ["serve"]
}
}
}
```
### Windsurf
添加到 `~/.codeium/windsurf/mcp_config.json`:
```json
{
"mcpServers": {
"context-snipe": {
"command": "context-snipe",
"args": ["serve"]
}
}
}
```
**重启您的编辑器。** 然后询问您的 AI: *"检查此项目是否存在漏洞依赖。*
---
## 您的 AI 现在可以执行的操作
| MCP 工具 | 功能 |
|----------|-------------|
| `scan_dependencies` | 列出项目中的每个已解析包(名称、版本、生态系统) |
| `check_vulnerabilities` | 将您的包与 OSV.dev 进行交叉引用 — 返回仅影响您实际安装的建议 |
您的 AI 从猜测变为了解。在一次工具调用中。
---
## 支持的生态系统
| 生态系统 | 已解析锁定文件(首选) | 备用 |
|-----------|-------------------------------|---------|
| **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 直接获取结果 | ✅ | ❌ | ❌ | ❌ |
| 读取已解析锁定文件(而非清单) | ✅ | ✅ | ✅ | ✅ |
| 100% 本地 — 无需离开您的机器 | ✅ | ❌ | ❌ | ❌ |
| 无需账户、无需注册、无需 API 密钥 | ✅ | ❌ | ❌ | ❌ |
| 二进制文件大小 | ~1 MB | N/A | 200 MB+ | N/A |
| 免费、开源 | ✅ | ✅ | 部分 | 部分 |
---
## CLI 使用
```bash
context-snipe scan [PATH] # 漏洞报告(默认为当前目录)
context-snipe deps [PATH] # 列出完整的已解析依赖树
context-snipe serve # 在 stdio 上启动 MCP 服务器
context-snipe --help
```
---
## 诚实声明
context-snipe 告诉您哪些漏洞包 **存在于您的已解析依赖树中**。它不执行调用图可达性分析。存在并不证明可利用性 — 漏洞函数可能在您的代码中不可达。该工具出于设计原因在自己的输出中说明这一点。
没有一个在几秒钟内运行的工具可以确定 CVE 是否绝对不可利用。我们不会假装相反。
---
## 工作原理
- **MCP 引擎** — 手动 JSON-RPC 2.0 via stdio。 `initialize`, `tools/list`, `tools/call`, `ping`. stdout 是协议通道;所有诊断信息都输出到 stderr。
- **锁定文件解析器** — TOML 用于 Cargo,JSON 用于 npm,自定义解析器用于 pnpm/yarn,行解析器用于 requirements.txt 和 Go 模块。
- **OSV 客户端** — 一个 `querybatch` 调用过滤整个树到具有建议的包,然后每个命中的聚焦 `query` 拉取详细信息。CVSS v3.x 基本分数从矢量字符串计算。共享 CVE 的重复建议合并。
- **通过 rustls 进行 TLS** — 纯 Rust,无 OpenSSL,无系统加密依赖。在 Windows、macOS 和 musl Linux 上工作相同。
---
## 从源代码构建
```bash
cargo build --release
# 二进制文件位于:target/release/context-snipe
```
需要稳定的 Rust。发布配置文件静态链接 CRT — 二进制文件完全自包含。
---
## 路线图
- [ ] GitHub 应用 — 在拉取请求上发布 CVE 差异(显示 PR *引入* 了什么)
- [ ] 策略层 — 每严重程度的可配置 CI 失败阈值
- [ ] 更多生态系统 — Ruby(Gemfile.lock),PHP(composer.lock),Java(pom.xml)
---
## 贡献
欢迎 PR。代码库大约 1,000 行 Rust,分布在:
```
src/
main.rs — CLI 入口,模式路由
mcp.rs — JSON-RPC / MCP 服务器
deps.rs — 锁定文件解析器
osv.rs — OSV.dev 客户端 + CVSS 评分
scan.rs — 协调 + 报告格式化
http.rs — ureq + rustls HTTP 代理
```
好的起始问题:添加新的锁定文件格式,改进 CVSS 显示,添加输出格式(JSON,SARIF)。
---
## 许可证
MIT — 永久免费。无遥测。无账户。无云。
<div align="center">
<br/>
<a href="https://context-snipe.rpdi.us">网站</a> · <a href="https://github.com/RP-Digital-Innovations/context-snipe/releases">版本</a> · <a href="https://github.com/RP-Digital-Innovations/context-snipe/issues">问题</a>
<br/><br/>
由 <a href="https://rpdi.us">RP Digital Innovations</a> 构建
</div>