Skip to main content
Glama
1182872360

Firewall Governance MCP Server

by 1182872360
README.md
# Firewall Governance MCP Server 🛡️

这是一个标准的 MCP (Model Context Protocol) 服务端,专为防火墙策略治理设计。
它集成了 CMDB 资产查询和 Panorama/Firewall 策略审计能力,支持通过任何 MCP 客户端(Claude Desktop, Cursor, Dify, etc.)直接调用。

---

## 🛠️ 工具能力 (Tools)

本服务提供以下标准的 MCP 工具:

| 工具名称 | 功能描述 | 核心输入 | 预期输出 |
| :--- | :--- | :--- | :--- |
| **`search_cmdb_asset`** | 资产查询 | `keyword`: 系统名/IP/缩写 | 包含 IP、Owner、DC、描述的资产列表 |
| **`get_firewall_object`** | 对象透视 | `ip_address`: 目标 IP | 防火墙对象详情 (Name, Zone, Tags) |
| **`search_firewall_policy`** | 策略审计 | `source_ip`: 源 IP<br>`destination_ip`: 目的 IP (可选) | 匹配的安全策略列表 (含 Action, Service, Shadow 状态) |

---

## 📋 配置说明 (Configuration)

本项目遵循标准 [12-Factor App](https://12factor.net/) 配置原则,使用环境变量管理所有敏感信息。
**注意:未配置必选变量时,工具调用将直接返回错误信息,以便 Agent 进行自我诊断。**

### 必选配置 (Firewall)
用于连接 Panorama 或 NGFW 进行策略和对象查询。

| 变量名 | 示例值 | 描述 |
| :--- | :--- | :--- |
| `FW_HOSTNAME` | `10.1.2.150` | 防火墙/Panorama 管理 IP 或域名 |
| `FW_USERNAME` | `admin` | 管理账号 |
| `FW_PASSWORD` | `Secret123!` | 管理员密码 |

### 必选配置 (CMDB)
用于查询业务系统资产信息。

| 变量名 | 示例值 | 描述 |
| :--- | :--- | :--- |
| `CMDB_SERVER` | `http://10.1.4.100` | CMDB API 地址 |
| `CMDB_APP_ID` | `c9a37...` | CMDB App ID |
| `CMDB_APP_SECRET` | `3d22e...` | CMDB App Secret |
| `CMDB_VIEW_ID` | `f0410...` | CMDB View ID (视图模型ID) |

---

## 🚀 部署指南 (Deployment)

本项目使用 [uv](https://github.com/astral-sh/uv) 进行全生命周期管理,支持多种运行模式。

### 方式一:开发调试 (Local Dev)

适用于本地开发调试或 Claude Desktop 直连。

```bash
# 进入目录
cd ai_agents/firewall_governance/firewall-mcp

# 1. 配置环境变量
export FW_HOSTNAME="10.1.2.150"
export FW_USERNAME="admin"
export FW_PASSWORD="your_password"
# ... 配置其他 CMDB 变量

# 2. 启动服务 (Stdio 模式)
uv run mcp_server.py
```

### 调试指南 (Debugging) 🐞

开发人员可以通过以下三种方式调试工具逻辑:

#### 1. 脚本直测 (最快)
底层工具脚本 (`fw_tool.py`, `cmdb_tool.py`) 都包含 `__main__` 测试入口。可以直接运行它们来验证 API 连通性。

```bash
# 需先设置环境变量
export FW_HOSTNAME=10.1.2.150 FW_PASSWORD=xxx

# 运行防火墙工具测试
uv run fw_tool.py

# 运行 CMDB 工具测试
uv run cmdb_tool.py
```

#### 2. MCP Inspector (交互式调试)
使用官方 Inspector UI 在浏览器中测试所有 MCP Tools。

```bash
# 启动 Inspector
npx @modelcontextprotocol/inspector uv run mcp_server.py
```
> 这将打开一个 Web 界面,您可以像在 Claude 中一样点击并从网页调用工具,查看完整的输入/输出/日志。

#### 3. IDE 断点调试 (VS Code / Cursor)
在项目根目录创建 `.vscode/launch.json`:

```json
{
  "version": "0.2.0",
  "configurations": [
    {
      "name": "Debug FW Tool",
      "type": "python",
      "request": "launch",
      "program": "${workspaceFolder}/firewall-mcp/fw_tool.py",
      "console": "integratedTerminal",
      "env": {
        "FW_HOSTNAME": "10.1.2.150",
        "FW_USERNAME": "admin",
        "FW_PASSWORD": "your_password"
      }
    },
    {
      "name": "Debug MCP Server",
      "type": "python",
      "request": "launch",
      "program": "${workspaceFolder}/firewall-mcp/mcp_server.py",
      "console": "integratedTerminal",
      "env": { ... }
    }
  ]
}
```

### 方式二:内网无源码分发 (uvx style) - 推荐 🌟

这是公司内网最推荐的分发方式,支持离线或无源码环境。

**1. 构建阶段 (Builder Machine)**
```bash
# 生成 .whl 包
uv pip install build
uv run -m build
# 产物在 dist/firewall_governance_mcp-0.1.0-py3-none-any.whl
```

**2. 运行阶段 (User Machine)**
用户只需拿到 `.whl` 文件,无需安装依赖,单行命令即用:

```bash
# 在运行机器上配置环境变量
export FW_HOSTNAME=10.1.2.150
export FW_PASSWORD=xxx
# ...

# 一键运行 (uv 会自动全托管环境)
uvx --from ./dist/firewall_governance_mcp-0.1.0-py3-none-any.whl firewall-mcp
```

### 方式三: Claude Desktop 集成 (Remote Git) 🌟 [推荐]

这是最推荐的集成方式。利用 `uvx` 直接从 Git 仓库拉取安装,支持自动环境隔离与依赖管理。
**前提**: 您的机器需要拥有该 Git 仓库的访问权限 (SSH Key)。

编辑配置文件 (`claude_desktop_config.json`):

```json
{
  "mcpServers": {
    "firewall-governance": {
      "command": "uvx",
      "args": [
        "--from",
        "git+ssh://git@10.1.2.68/script/ae/mcp-server.git#subdirectory=firewall-mcp",
        "firewall-mcp"
      ],
      "env": {
        "FW_HOSTNAME": "10.1.2.150",
        "FW_USERNAME": "admin",
        "FW_PASSWORD": "your_password",
        "CMDB_SERVER": "http://10.1.4.100",
        "CMDB_APP_ID": "...",
        "CMDB_APP_SECRET": "..."
      }
    }
  }
}
```

### 方式四: Claude Desktop 集成 (Local Source) [不推荐]

仅建议在开发调试时使用。需要手动 clone 代码并维护本地路径。

```json
{
  "mcpServers": {
    "firewall-governance-local": {
      "command": "uv",
      "args": [
        "run",
        "/absolute/path/to/ai_agents/firewall_governance/firewall-mcp/mcp_server.py"
      ],
      "env": {
        "FW_HOSTNAME": "10.1.2.150",
        "FW_USERNAME": "admin",
        "FW_PASSWORD": "..."
      }
    }
  }
}
```

---

## 📦 依赖列表 (Dependencies)

核心依赖如下 (详见 `pyproject.toml`):

*   **`mcp`**: 官方 Model Context Protocol SDK (实现 FastMCP 服务端)。
*   **`requests`**: 处理所有 HTTP REST API 调用 (PAN-OS, CMDB)。
*   **`python-dotenv`**: 支持从 `.env` 文件加载配置。
*   **`minzhi-sdk`**: (可选) 内部系统集成 SDK。

---

## �️ 项目结构

```text
.
├── pyproject.toml       # 项目元数据与依赖定义
├── mcp_server.py        # MCP Server 入口
├── fw_tool.py           # 防火墙交互逻辑
├── cmdb_tool.py         # CMDB 交互逻辑
└── data/                # 辅助数据
```