gautamvarmadatla/mcpsafetywarden

GitHub: gautamvarmadatla/mcpsafetywarden

MCP Safety Warden 是一个 MCP 安全代理服务器,在 Agent 与 MCP Server 之间提供行为分析、安全扫描、风险门控和安全执行能力,保护 AI Agent 免受恶意工具调用的威胁。

Stars: 6 | Forks: 1

MCP Safety Warden

MCP safety warden 是一个代理服务器,它可以封装任何 MCP server,并为其工具添加行为分析、安全扫描、风险门控和安全执行功能。 [![PyPI](https://img.shields.io/pypi/v/mcpsafetywarden)](https://pypi.org/project/mcpsafetywarden/) [![Python](https://img.shields.io/pypi/pyversions/mcpsafetywarden)](https://pypi.org/project/mcpsafetywarden/) [![PyPI Downloads](https://img.shields.io/pypi/dm/mcpsafetywarden)](https://pypi.org/project/mcpsafetywarden/) [![License](https://img.shields.io/badge/license-Apache%202.0-blue)](LICENSE) [![CI](https://static.pigsec.cn/wp-content/uploads/repos/2026/05/3cfa94677e071135.svg)](https://github.com/gautamvarmadatla/mcpsafetywarden/actions/workflows/ci.yml) [![CodeQL](https://static.pigsec.cn/wp-content/uploads/repos/2026/05/b04f13ad8f071136.svg)](https://github.com/gautamvarmadatla/mcpsafetywarden/actions/workflows/codeql.yml) [![MCP Registry](https://img.shields.io/badge/MCP%20Registry-listed-blue)](https://registry.modelcontextprotocol.io/v0.1/servers/io.github.gautamvarmadatla%2Fmcpsafetywarden) [![Docker Pulls](https://img.shields.io/badge/dynamic/json?url=https%3A%2F%2Fhub.docker.com%2Fv2%2Frepositories%2Fgautamdatla1999%2Fmcpsafetywarden%2F&query=%24.pull_count&label=docker%20pulls&color=blue&cacheSeconds=300)](https://hub.docker.com/r/gautamdatla1999/mcpsafetywarden) [![OpenSSF Scorecard](https://api.scorecard.dev/projects/github.com/gautamvarmadatla/mcpsafetywarden/badge)](https://scorecard.dev/viewer/?uri=github.com/gautamvarmadatla/mcpsafetywarden) [![OpenSSF Best Practices](https://www.bestpractices.dev/projects/12730/badge)](https://www.bestpractices.dev/projects/12730) [![GitHub Stars](https://img.shields.io/github/stars/gautamvarmadatla/mcpsafetywarden?style=social)](https://github.com/gautamvarmadatla/mcpsafetywarden) ## 目录 - [概述](#overview) - [前置条件](#prerequisites) - [安装](#installation) - [配置](#configuration) - [MCP 集成](#mcp-integration) - [CLI 参考](#cli-reference) - [辅助集成](#auxiliary-security-tool-integrations) - [开发](#development) - [测试](#testing) - [延伸阅读](#further-reading) ## 概述 作为代理使用,为任何 MCP server 添加安全门控,或者将其指向您不拥有的服务器,在不进行任何工具调用的情况下运行完整的安全审计。

Two operating modes
Fig 1. Two operating modes: proxy and audit

**行为分析**:效果分类、重试安全性、破坏性。基于 LLM(Anthropic, OpenAI, Gemini, Ollama)并带有基于规则的回退机制。在每次代理调用后更新观测统计数据(延迟 p50/p95、失败率、输出大小)。 **安全扫描**:mcpsafety+ 五阶段流水线(Recon, Planner, Hacker, Auditor, Supervisor)。Cisco AI Defense (AST/YARA)。Snyk(元数据分析)。Kali 和 Burp Suite 集成通过真实的网络数据和 HTTP 层探测来丰富流水线。来自 GitHub 的源代码扫描,包含熵、AST、污点流分析和恶意替换检测。

3e457b83-6980-49fc-b812-350ab94f5633
Fig 2. mcpsafety+ five-stage pipeline, triggered when you run a full security audit on any MCP server

**安全执行**:参数扫描(20 多种攻击类别,LLM 二次扫描)。双层输出注入扫描。带有替代方案和逐工具策略的风险门控。在每次调用时进行漂移检测和独立检查。

fb949e62-5a3e-4a5c-be14-3523ef92295e
Fig 3. Safe execution pipeline: the five checks every proxied tool call passes through

**CLI**:24 个子命令,交互式风险菜单,每个命令均支持 `--json` 标志,以及用于 CI 的 `--yes` 标志。 **检测内容** - **提示注入**:试图劫持 agent 的工具输出:角色劫持、越狱、伪造系统提示、指令覆盖。检测 11 种混淆技术,包括 Unicode 相似字符、零宽字符和 base64 编码的 payload。 - **恶意工具元数据**:包含注入字符串、硬编码机密、可疑下载 URL、工具冒充(shadowing)、直接金融执行、系统服务修改和不受信任的外部依赖的描述。由 19 项 Snyk 检查提供支持。 - **参数注入**:在每次工具调用转发之前检查 20 多种攻击类别:针对云元数据端点(AWS, GCP, Azure, Alibaba)的 SSRF、路径遍历、凭证文件访问(.aws, .ssh, .kube, .env)、命令注入、SQL/NoSQL/LDAP/XPath 注入、XXE、模板注入(SSTI)、CRLF、空字节、反序列化 payload(Java, Python pickle, PHP, .NET)、Windows UNC/ADS 攻击,以及上述所有内容的 base64 混淆变体。 - **源代码风险**:获取服务器的 GitHub 源代码并运行 6 个分析层:用于硬编码机密的熵扫描、AST 污点流跟踪(参数到危险 sink)、描述与实现不匹配、Bandit 和 Semgrep SAST,以及 LLM 跨函数推理。支持 Python 和 TypeScript/JavaScript。 - **恶意替换与漂移**:在首次扫描时存储服务器源代码的 SHA-256 哈希,并在其发生更改时发出警报。通过每次调用的漂移防护,实时捕获描述交换、schema 更改和工具移除。 - **行为异常**:按效果分类、破坏性和 7 个风险标签对每个工具进行分类:凭证暴露、任意执行、数据渗出、文件系统访问、横向移动、权限提升和提示注入面。 - **组合攻击**:分析工具集的链式风险:IDOR 链、读写对、身份验证流程利用、先写后执行序列,以及跨多个工具的数据累积 + 渗出路径。 - **网络和主机风险**:当注册了 Kali Linux MCP 时:开放端口、运行服务、通过 nmap 进行 OS 指纹识别。当注册了 Burp Suite MCP 时:HTTP 层主动探测和通过带外回调实现的盲 SSRF。 - **输出中的凭证暴露**:在存储前对工具响应中的机密进行脱敏。被标记为注入的响应将被隔离,并且永远不会返回给调用 agent——存储在运行 ID 下以供取证审查。 - **CVE 研究和 Arxiv 发现**:mcpsafety+ Auditor 阶段将发现的能力与已知漏洞和最新安全研究进行交叉比对。 ## 前置条件 - Python 3.10 或更高版本 - 至少一个被封装以供代理的 MCP server (stdio, SSE, 或 streamable_http) - **推荐:LLM API 密钥** (Anthropic, OpenAI, 或 Gemini) 如果没有密钥,封装器将仅在纯规则模式下运行:置信度较低的工具分类、仅正则的注入扫描、风险门控中无替代方案、无 mcpsafety+ 流水线。对于完全本地的设置,请运行 [Ollama](https://ollama.com),设置 `OLLAMA_MODEL`,并显式传递 `--provider ollama`(Ollama 不会被自动检测)。 ## 安装 ``` pip install mcpsafetywarden ``` 安装所有可选附加组件: ``` pip install "mcpsafetywarden[all]" ``` 或特定的附加组件: ``` pip install "mcpsafetywarden[anthropic,snyk]" ``` 从源代码安装: ``` git clone https://github.com/gautamvarmadatla/mcpsafetywarden cd mcpsafetywarden pip install . ``` SQLite 数据库将在首次运行时于平台用户数据目录中自动创建(Linux 上为 `~/.local/share/mcpsafetywarden/`,macOS 上为 `~/Library/Application Support/mcpsafetywarden/`,Windows 上为 `%APPDATA%\mcpsafetywarden\`)。可使用 `MCP_DB_PATH` 进行覆盖。 **凭证保护(自动生效,无需任何操作)** 传递给 `register_server` 或 `onboard_server` 的机密值(Bearer token、`headers` 或 `env` 中的 API 密钥)会在任何内容触及模型上下文之前被自动检测并替换为不透明的 `cref_` 标识符。真实的凭证会被加密存储在数据库中,并在连接时静默解析。模型、对话历史和日志只能看到 `cref_`。 **可选:对存储的凭证进行静态加密** ``` pip install cryptography python -c "from cryptography.fernet import Fernet; print(Fernet.generate_key().decode())" ``` 在启动服务器之前,将打印出的密钥设置为 `MCP_DB_ENCRYPTION_KEY`。这将对服务器凭证和 `cref_` 值进行静态加密。 ## 配置 所有配置均通过环境变量完成。 | 变量 | 默认值 | 用途 | |---|---|---| | `MCP_TRANSPORT` | `stdio` | 传输模式:`stdio`、`sse` 或 `streamable_http` | | `MCP_HOST` | `127.0.0.1` | HTTP 传输的绑定地址 | | `MCP_PORT` | `8000` | HTTP 传输的绑定端口 | | `MCP_AUTH_TOKEN` | (未设置) | HTTP 传输认证的 Bearer token | | `MCP_DB_ENCRYPTION_KEY` | (未设置) | 用于在静态下加密存储凭证的 Fernet 密钥 | | `ANTHROPIC_API_KEY` | (未设置) | 启用 Anthropic 作为 LLM 提供商 | | `OPENAI_API_KEY` | (未设置) | 启用 OpenAI 作为 LLM 提供商 | | `GEMINI_API_KEY` 或 `GOOGLE_API_KEY` | (未设置) | 启用 Gemini 作为 LLM 提供商(首选 `GEMINI_API_KEY`) | | `OLLAMA_MODEL` | (未设置) | Ollama 的模型名称(例如 `llama3.1`) | | `OLLAMA_BASE_URL` | `http://localhost:11434/v1` | Ollama API 基础 URL | | `SNYK_TOKEN` | (未设置) | 启用 Snyk E001 提示注入检测 | | `MCP_SCANNER_API_KEY` | (未设置) | Cisco AI Defense 云 ML 引擎密钥 | | `MCP_SCANNER_LLM_API_KEY` | (未设置) | 用于 Cisco 内部 AST 分析的 LLM 密钥 | | `MCP_DB_PATH` | (未设置) | 覆盖 SQLite 数据库文件路径 | | `MCP_GRAPH_POLICY` | `warn` | `safe_tool_call` 中的图表强制执行:`off`(禁用)、`warn`(将风险上下文附加到响应)、`block`(除非 `approved=True`,否则硬性阻止关键/高波及范围工具) | | `GITHUB_TOKEN` | (未设置) | 用于源代码扫描的 GitHub 个人访问令牌(将速率限制从 60 提升至 5,000 请求/小时) | **安全提示:** 切勿提交 API 密钥或加密密钥。封装器在生成 stdio 服务器之前,会从子进程环境中剥离其自身的机密。 ## MCP 集成 ### 使用 Claude Desktop 连接 将封装器添加到 `claude_desktop_config.json`: ``` { "mcpServers": { "mcpsafetywarden": { "command": "mcpsafetywarden-server", "args": [], "env": { "ANTHROPIC_API_KEY": "sk-ant-...", "MCP_DB_ENCRYPTION_KEY": "" } }, "filesystem": { "command": "npx", "args": ["-y", "@modelcontextprotocol/server-filesystem", "/Users/yourname/Documents"] } } } ``` 在使用前向封装器注册每个服务器: ``` mcpsafetywarden register filesystem --transport stdio \ --command npx \ --args '["-y", "@modelcontextprotocol/server-filesystem", "/Users/yourname/Documents"]' ``` 有关所有工具调用都必须通过封装器的强制网关设置,请参阅 [docs/DEPLOYMENT.md](docs/DEPLOYMENT.md)。 ### 可用的 MCP 工具 有关完整的工具参考,请参阅 [docs/TOOLS.md](docs/TOOLS.md)。 | 工具 | 功能 | |---|---| | `onboard_server` | 在一次调用中完成注册 + 检查 + 安全扫描 | | `register_server` | 注册服务器;可选自动检查 | | `inspect_server` | 刷新工具列表和配置 | | `check_server_drift` | 根据存储的基线检测 schema 和工具列表漂移 | | `list_servers` | 列出所有已注册的服务器 | | `list_server_tools` | 列出服务器上带有摘要配置的工具 | | `preflight_tool_call` | 不执行的风险评估 | | `safe_tool_call` | 带有风险门控和替代方案的执行 | | `get_tool_profile` | 包含观测统计数据的完整行为配置 | | `get_retry_policy` | 重试和超时建议 | | `suggest_safer_alternative` | LLM 排序的更安全替代品 | | `run_replay_test` | 幂等性测试(调用工具两次) | | `security_scan_server` | 实时安全审计 (mcpsafety+, Cisco, Snyk) | | `scan_all_servers` | 跨所有已注册服务器的 mcpsafety+ 流水线 | | `get_security_scan` | 最新存储的扫描报告 | | `set_tool_policy` | 针对工具的永久允许/阻止策略 | | `get_run_history` | 工具的近期执行历史 | | `ping_server` | 带有延迟的可达性检查 | | `discover_servers` | 扫描文件系统以查找 MCP 客户端配置并提取服务器条目 | | `onboard_discovered_servers` | 批量注册发现的服务器 | | `get_risk_graph` | 构建或查询清单风险图(服务器、工具、发现、agent 客户端) | | `explain_tool_risk` | 梳理工具的风险路径:波及范围、组合风险、MITRE 标签、操作 | | `explain_client_risk` | 分析同一 agent 客户端下所有服务器的跨服务器风险 | | `analyze_cve_blast_radius` | 报告影响同一客户端下多个服务器的 CVE | | `export_graph` | 将风险图导出为 JSON 或 Mermaid 图表 | ## CLI 参考 涵盖所有 25 个 MCP 工具的 24 个子命令。每个命令均支持用于机器可读输出的 `--json`,以及用于跳过确认提示的 `--yes` / `-y`。 有关包含标志和示例的完整参考,请参阅 [docs/CLI.md](docs/CLI.md)。 ## 辅助安全工具集成 Kali Linux MCP、Burp Suite MCP 和 Snyk 一旦注册,各自便会自动集成。Kali 通过真实的 nmap/traceroute 数据丰富 Recon 阶段和 `ping_server`。Burp 添加原始 HTTP 探测、带外回调和代理证据。Snyk 分析工具元数据中的注入字符串、工具 shadowing、硬编码机密以及其他 16 项检查。 有关设置说明,请参阅 [docs/INTEGRATIONS.md](docs/INTEGRATIONS.md)。 ## 开发 以可编辑模式安装: ``` pip install -e ".[all]" ``` 运行服务器并观察日志: ``` mcpsafetywarden-server 2>server.log ``` 每个模块均使用 `logging.getLogger(__name__)`。服务器本身不调用 `logging.basicConfig`——请在导入前于您的入口点配置日志记录。 ## 测试 ``` pytest tests/ -v ``` 设置 LLM API 密钥以包含 LLM 辅助测试;如果没有,它们将被自动跳过。有关分类、注入扫描、风险门控和策略执行的逐步验证,请参阅 [docs/TESTING.md](docs/TESTING.md)。 ## 延伸阅读 | 文档 | 内容 | |---|---| | [docs/TOOLS.md](docs/TOOLS.md) | 全部 25 个 MCP 工具的完整参考 | | [docs/CLI.md](docs/CLI.md) | CLI 子命令、标志和示例 | | [docs/INTEGRATIONS.md](docs/INTEGRATIONS.md) | Kali、Burp Suite 和 Snyk 设置 | | [docs/DEPLOYMENT.md](docs/DEPLOYMENT.md) | stdio、HTTP、容器和网关部署 | | [docs/TROUBLESHOOTING.md](docs/TROUBLESHOOTING.md) | 常见错误和修复 | | [docs/SECURITY.md](docs/SECURITY.md) | 机密、认证、隔离和扫描详细信息 | | [docs/TESTING.md](docs/TESTING.md) | 各项功能的验证步骤 | | [docs/COMPARISON.md](docs/COMPARISON.md) | 与相关工具的比较 | | [docs/ROADMAP.md](docs/ROADMAP.md) | 计划中的功能 | ## 贡献 有关代码标准和拉取请求指南,请参阅 [CONTRIBUTING.md](CONTRIBUTING.md)。 ## 许可证 Apache License 2.0。有关详细信息,请参阅 [LICENSE](LICENSE)。
标签:AI风险缓解, API安全, CISA项目, Docker, JSON输出, LNA, MCP安全, PyPI, Python, Streamlit, 动态防护, 大语言模型安全, 安全沙箱, 安全网关, 安全防御评估, 工具安全扫描, 无后门, 机密管理, 网络安全, 访问控制, 请求拦截, 逆向工具, 隐私保护, 零日漏洞检测, 风险控制