rijul170/qualys-mcp
GitHub: rijul170/qualys-mcp
基于 MCP 协议的 Qualys 全功能管理服务器,将近 400 个 API 工具以分层安全模型暴露给 AI 客户端使用。
Stars: 0 | Forks: 0
# Qualys MCP
每个 Qualys 控制台对应一个进程(您有多少个订阅就可以运行多少个)。基于
[FastMCP](https://github.com/jlowin/fastmcp) 构建,使用一个能够支持所有
三大 Qualys API 系列的客户端,具有严格的只读 / 写入 / 破坏性安全模型,并且
凭据永远不会接触聊天或明文。
## 核心亮点
- **覆盖广泛** — 59 个自动发现的功能模块,涵盖整个
门户:VMDR、PC、WAS、Cloud Agent、Container Security、TotalCloud/CloudView、
Patch Management、CSAM/GAV、EASM、FIM、EDR、PCRS 以及管理。
- **~400 个工具** — `list_hosts`、`list_host_detections`、`launch_scan`、
`search_was_findings`、`list_knowledgebase`、`get_cs_image_vulnerabilities`,
以及数百个其他工具,每个均与有文档说明的 Qualys API 操作 1:1 映射。
- **三种 API 体系,一个客户端** — 经典的 "FO" XML API、QPS REST
API,以及经过 JWT 认证的 Gateway,全部在 `self._fo` /
`self._qps` / `self._gateway` 背后进行处理。
- **安全分层承载重任** — 每个工具都标注了只读、写入
或破坏性。破坏性工具(删除 / 清除 / 停用)**甚至不会被注册**,
除非您按控制台逐个选择启用,并且仍然需要提供每次调用的
确认 token。
- **延迟认证** — 导入或构造时不进行任何网络调用;`--check` 完全
在离线状态下运行,无需凭据。
- **保密信息保持机密** — 在 Windows 上,凭据仅存在于 DPAPI 加密的
数据块中;在任何操作系统上,您都可以通过环境变量提供它们。绝对不会向
代码仓库写入任何内容。
## 三种 API 体系
| 体系 | 基础路径 | 认证 | Payload |
|---|---|---|---|
| 经典 "FO" | `/api/2.0/fo/`, `/msp/` | Basic + `X-Requested-With` header | form → XML |
| QPS REST | `/qps/rest/` | Basic | XML `` / JSON |
| Gateway | `gateway..apps.qualys.com` | Bearer JWT (来自 `/auth`) | JSON |
## 架构
```
qualys_mcp/
server.py FastMCP server; lazy auth; --check offline validation
registry.py auto-discovers modules/*.py
client.py one client, three API regimes (FO / QPS / Gateway-JWT)
config.py per-console config + platform (POD) -> URL map
common/ auth (HTTP mw), errors, logging, rate_limit, utils, xml
modules/ base.py + one file per feature module (the bulk of the surface)
```
添加一项功能只需将文件放入 `qualys_mcp/modules/` 目录中 — 参见
[docs/MODULE_BUILD_GUIDE.md](docs/MODULE_BUILD_GUIDE.md)。
## 快速开始
### 1. 安装
```
python -m venv .venv
# Windows: .\.venv\Scripts\pip install -e .
# macOS/Linux: ./.venv/bin/pip install -e .
```
### 2. 离线完整性检查(无需凭据)
```
python -m qualys_mcp --check
```
列出每个发现的模块及其工具数量并退出 — 这是一个很好的初步
冒烟测试。
### 3. 提供凭据
您需要一个 Qualys **API 用户**以及您的平台/POD 代码(例如 `US1`、`US2`、
`EU1`;可以在您的控制台 URL 或 **Help → About** 下找到)。
**任何操作系统 — 环境变量:**
```
export QUALYS_USERNAME='api-user'
export QUALYS_PASSWORD='api-pass'
export QUALYS_PLATFORM='US2' # or set QUALYS_API_URL / QUALYS_GATEWAY_URL
python -m qualys_mcp --transport streamable-http --host 127.0.0.1 --port 8781 --console-label consulting
```
**Windows — DPAPI 加密的数据块(推荐用于持久化部署):**
```
# 每个 console 加密一次;该 blob 是用户范围的,并存储在 .secrets/ 下
.\encrypt-qualys-creds.ps1 -Console consulting -Platform US2
.\encrypt-qualys-creds.ps1 -Console cloud -Platform US2
# 通过 Launch 为每个 console 启动一个实例,分别对应 (:8781, :8782)
.\start-qualys-mcp.ps1
# ... 只有在你确实需要 active 时,才将它们作为 destructive tools 引入 console:
.\start-qualys-mcp.ps1 -EnableDestructive cloud
# 可选:通过 Scheduled Task watchdog 保持两者在 reboots 后依然 alive
.\register-qualys-mcp-task.ps1
```
有关每个 `QUALYS_*` 设置,请参见 [.env.example](.env.example)。
### 4. 将您的 MCP 客户端指向它
包含一个可直接用于 Claude Code 的 [`.mcp.json`](.mcp.json):
```
{
"mcpServers": {
"qualys-consulting": { "type": "http", "url": "http://localhost:8781/mcp" },
"qualys-cloud": { "type": "http", "url": "http://localhost:8782/mcp" }
}
}
```
`scripts/register_mcp_clients.py` 展示了如何将相同的本地 HTTP
服务器同时注册到多个 MCP 客户端中。
## 安全模型
- 工具被标注为 **只读**、**写入** 或 **破坏性**。
- 破坏性工具(删除、清除、停用、卸载)**不会被注册**,
除非控制台以 `QUALYS_ENABLE_DESTRUCTIVE=true` 运行。
- 即使启用了此功能,每个破坏性工具在执行操作之前也需要提供匹配的 `confirm=`
参数 — 因此,绝不可能因为单个 prompt 而意外执行破坏性调用。
阅读 [docs/SAFETY_AUDIT.md](docs/SAFETY_AUDIT.md) 了解完整的分层信息。
## 模块与工具清单
- 从 `qualys_mcp/modules/` 自动发现的 **59 个模块**。
- 默认注册了 **~360 个工具**;启用 `QUALYS_ENABLE_DESTRUCTIVE=true` 后为
**~400 个**(额外的约 40 个是受保护的破坏性
工具,否则它们将保持隐藏状态)。
- 分布在三种 API 体系中,少数模块跨越了其中两种。
完整的模块明细表(注册表名称、API 系列、工具数量、一句话描述)位于 [docs/MODULE_INDEX.md](docs/MODULE_INDEX.md) 中,而完整的
endpoint → 工具 → 操作分解位于
[docs/ENDPOINTS_TOOLS_ACTIONS.md](docs/ENDPOINTS_TOOLS_ACTIONS.md) 中。
## 配置参考
| 变量 | 用途 |
|---|---|
| `QUALYS_USERNAME` / `QUALYS_PASSWORD` | API 用户凭据 |
| `QUALYS_PLATFORM` | POD 代码(`US1`…`KSA1`) — 自动填充 API + Gateway URL |
| `QUALYS_API_URL` / `QUALYS_GATEWAY_URL` | 针对未列出 POD 的显式覆盖 |
| `QUALYS_CONSOLE_LABEL` | 在日志和服务器名称中为控制台命名 |
| `QUALYS_ENABLE_DESTRUCTIVE` | `true` 以注册破坏性层级 |
| `QUALYS_MCP_MODULES` | 以逗号分隔的白名单,用于将控制台限定为其已授权的模块 |
| `QUALYS_MCP_API_KEY` | 用于 HTTP 传输的可选共享密钥 |
## 开发
```
pip install -e ".[dev]"
python -m qualys_mcp --check # offline validation
pytest # unit tests (no network)
ruff check . # lint
```
欢迎贡献 — 请参见 [CONTRIBUTING.md](CONTRIBUTING.md)。
## 免责声明
这是一个独立的社区项目。它**不附属于 Qualys, Inc.,也未得到其
认可或支持。** "Qualys" 和产品名称是
其各自所有者的商标。请根据您的 Qualys 许可证和 API 条款,针对您自己的订阅使用本软件。本软件按
“原样”提供(参见 [LICENSE](LICENSE));您需对您在
您的环境中运行的内容负责 — 特别是破坏性层级。
## Star 历史
## 许可证
[MIT](LICENSE) © 2026 Rijul Sharma
标签:DevSecOps, GPT, MCP, Python, Qualys, 上游代理, 安全管理, 无后门, 漏洞管理, 逆向工具