Krishna89287/mcp-security-scanner

GitHub: Krishna89287/mcp-security-scanner

一款扫描 MCP 服务器配置文件以检测命令执行暴露、缺失认证、无限制文件/网络访问及硬编码密钥等安全风险的 CI 友好型工具。

Stars: 0 | Forks: 0

# mcp-security-scanner [![Python](https://img.shields.io/badge/python-3.10+-blue?style=flat-square)](https://python.org) [![License](https://img.shields.io/badge/license-MIT-green?style=flat-square)](LICENSE) [![CI](https://img.shields.io/github/actions/workflow/status/Krishna89287/mcp-security-scanner/ci.yml?style=flat-square)](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, 云安全监控, 无后门, 逆向工具, 配置检查, 静态分析