RP-Digital-Innovations/context-snipe
GitHub: RP-Digital-Innovations/context-snipe
一个纯 Rust 编写的 MCP 服务器,通过读取项目 lockfile 并与 OSV.dev 交叉比对,为 AI 编程工具提供精准的依赖漏洞上下文。
Stars: 0 | Forks: 0
context-snipe
你的 AI 编程助手并不了解你的依赖项。
它只是在猜测。而这个工具能解决这个问题。
[](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)
一个约 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 —— 永久免费。无遥测。无账号。无云端依赖。
标签:AI编程辅助, CISA项目, Homebrew安装, MCP服务, Python安全, Rust, SOC Prime, 依赖安全扫描, 可视化界面, 开发工具, 网络流量审计, 通知系统