Krishna89287/mcp-security-scanner
GitHub: Krishna89287/mcp-security-scanner
一款扫描 MCP 服务器配置文件以检测命令执行暴露、缺失认证、无限制文件/网络访问及硬编码密钥等安全风险的 CI 友好型工具。
Stars: 0 | Forks: 0
# mcp-security-scanner
[](https://python.org)
[](LICENSE)
[](https://github.com/Krishna89287/mcp-security-scanner/actions)
Model Context Protocol 服务器在 2026 年随处可见,其中很大一部分存在完全暴露的风险:一个运行 shell 命令的工具、一个没有路径限制的文件读取器、没有任何身份验证,以及配置文件中直接暴露的 API 密钥。其中任何一个问题,都会把机器的控制权直接交给一个遭到 prompt 注入的 agent。
该项目会扫描 MCP 服务器配置,并告诉你(在你将其暴露给 agent 之前)确切的风险所在以及修复方法。它根据严重程度对每项发现进行分级,并在遇到严重或高风险问题时让构建失败,从而让你可以在 CI 中对其进行卡点拦截。
## 运行效果
```
$ make demo
FAIL ops-helper score=0/100
counts: {"critical": 2, "high": 2, "medium": 1, "low": 0}
HIGH MCP-AUTH-001: The server has no authentication configured.
CRITICAL MCP-EXEC-001 [run_command]: Tool exposes shell command execution.
HIGH MCP-FILE-001 [read_file]: Filesystem tool has no path allowlist, a path traversal risk.
MEDIUM MCP-NET-001 [fetch]: Network tool allows unrestricted egress.
CRITICAL MCP-SECRET-001: A hardcoded secret is present in env var 'OPENAI_API_KEY'.
```
该配置得分为 0(满分 100)。它运行 shell 命令、读取任意文件、向任意主机发起调用、没有身份验证,并且泄露了密钥。这里的每一个问题,都是目前生产环境 MCP 服务器中真实存在的模式。
## 流程
```
flowchart TD
A[MCP server config JSON] --> B[Parse and validate]
B --> C[Run rules]
C --> D{Shell or code exec?}
C --> E{Auth missing?}
C --> F{File or network unrestricted?}
C --> G{Secret in config?}
D --> H[Findings with severity]
E --> H
F --> H
G --> H
H --> I[Score out of 100]
H --> J{Any critical or high?}
J -->|yes| K[FAIL, non-zero exit for CI]
J -->|no| L[PASS]
```
## 快速开始
```
git clone https://github.com/Krishna89287/mcp-security-scanner
cd mcp-security-scanner
pip install -r requirements-dev.txt
make demo # scan a deliberately risky config
make test # full test suite
```
扫描你自己的配置:
```
mcp-security-scanner server.json # human-readable report, exits non-zero on fail
mcp-security-scanner server.json --json # full report as JSON
```
配置文件如下所示:
```
{
"name": "files-server",
"auth": {"type": "token"},
"tools": [
{"name": "read_file", "capabilities": ["filesystem_read"], "path_allowlist": ["/data"]},
{"name": "fetch", "capabilities": ["network"], "allowed_hosts": ["api.internal"]}
],
"env": {}
}
```
## 检查规则
| 规则 | 严重程度 | 捕获内容 |
| -------------- | -------- | ---------------------------------------------------- |
| MCP-EXEC-001/2 | 严重 | 暴露的 shell 或任意代码执行 |
| MCP-SECRET-001 | 严重 | 配置中硬编码的 API 密钥或 token |
| MCP-AUTH-001 | 高 | 工具前方缺乏身份验证 |
| MCP-FILE-001 | 高 | 没有路径允许列表的文件系统工具 |
| MCP-SCOPE-001 | 高 | 被授予了通配符能力的工具 |
| MCP-NET-001 | 中 | 具有不受限制出口网络访问能力的工具 |
分数从 100 分开始,每发现一项问题都会根据严重程度进行扣除。只有当不存在任何严重和高风险问题时,服务器才算通过,这是 agent 能够调用它之前必须达到的标准。由于 CLI 在失败时会以非零状态退出,你可以直接将其放入流水线中。添加规则只需在
[`rules.py`](src/mcp_security_scanner/rules.py) 中编写一个函数。
**技术栈:** Python · Pydantic · MCP · DevSecOps
由 [Krishna Gove](https://github.com/Krishna89287) 开发,在慕尼黑从事 AI 和云基础设施工作。
标签:LNA, MCP, Python, StruQ, 云安全监控, 无后门, 逆向工具, 配置检查, 静态分析