OtherF/cisco-xdr-mcp

GitHub: OtherF/cisco-xdr-mcp

为 Cisco XDR 提供只读 MCP 服务器,通过 38 个工具帮助安全人员通过 AI 助手查询事件、丰富威胁情报并进行取证分析。

Stars: 0 | Forks: 0

# cisco-xdr-mcp 用于 [Cisco XDR](https://www.cisco.com/site/us/en/products/security/xdr/index.html) API 的只读 MCP 服务器。为网络安全工程师、SOC 分析师和事件响应人员构建,他们希望通过 AI 助手调查事件、丰富可观测数据并查询威胁情报。 **7 个 API 范围共 38 个工具。只读操作 — 此服务器无法修改、创建或删除任何内容。** ## 前置条件 - Python 3.10+ - Cisco XDR API 客户端(客户端 ID + 客户端密码) - 在您的 Cisco XDR 组织中[创建 API 凭据](https://docs.xdr.security.cisco.com/Content/Administration/api-clients.htm) - Claude Desktop(或其他兼容 MCP 的客户端) ## 安装 ``` # 克隆仓库 git clone https://github.com/OtherF/cisco-xdr-mcp.git cd cisco-xdr-mcp # 创建并激活虚拟环境 python -m venv .venv source .venv/bin/activate # Windows: .venv\Scripts\activate # 安装包 pip install -e ".[dev]" ``` ## 配置 复制示例环境文件并填写您的凭据: ``` cp .env.example .env ``` | 变量 | 必需 | 说明 | |---|---|---| | `CISCO_XDR_CLIENT_ID` | 是 | OAuth 2.0 客户端 ID | | `CISCO_XDR_CLIENT_PASSWORD` | 是 | OAuth 2.0 客户端密码 | | `CISCO_XDR_REGION` | 否 | `us`(默认)、`eu` 或 `apjc` | **区域端点:** | 区域 | 平台 URL | |---|---| | US | `https://visibility.amp.cisco.com` | | EU | `https://visibility.eu.amp.cisco.com` | | APJC | `https://visibility.apjc.amp.cisco.com` | ## Claude Desktop 设置 ### 原生(macOS / Windows) 添加到您的 Claude Desktop 配置(Windows 上为 `%APPDATA%\Claude\claude_desktop_config.json`,macOS 上为 `~/Library/Application Support/Claude/claude_desktop_config.json`): ``` { "mcpServers": { "cisco-xdr": { "command": "cisco-xdr-mcp", "env": { "CISCO_XDR_CLIENT_ID": "client-...", "CISCO_XDR_CLIENT_PASSWORD": "...", "CISCO_XDR_REGION": "us" } } } } ``` ### WSL(服务器在 WSL 中运行,Claude Desktop 在 Windows 上运行) 环境变量无法通过 `env` 块从 Claude Desktop 传递到 WSL。请改用 `.env` 文件: ``` # 在 WSL 中,进入项目目录 cp .env.example .env # 编辑 .env 并填写凭据 ``` 然后添加到您的 Claude Desktop 配置(Windows 上为 `%APPDATA%\Claude\claude_desktop_config.json`): ``` { "mcpServers": { "cisco-xdr": { "command": "wsl.exe", "args": [ "--", "bash", "-c", "cd /path/to/cisco-xdr-mcp && source .venv/bin/activate && exec python -m cisco_xdr_mcp" ] } } } ``` 服务器在启动时调用 `load_dotenv()` 并自动从 `.env` 文件读取凭据。 ### 通过 SSH 的远程服务器(服务器在远程 Linux 主机上运行) 在远程主机上安装包,然后通过 SSH 使用密钥认证从 Claude Desktop 连接: ``` { "mcpServers": { "cisco-xdr": { "command": "ssh", "args": [ "-o", "StrictHostKeyChecking=accept-new", "-i", "/path/to/ssh-key", "user@remote-host", "CISCO_XDR_CLIENT_ID='client-...' CISCO_XDR_CLIENT_PASSWORD='...' CISCO_XDR_REGION='us' cisco-xdr-mcp" ] } } } ``` 或从远程主机上的源代码运行: ``` { "mcpServers": { "cisco-xdr": { "command": "ssh", "args": [ "-o", "StrictHostKeyChecking=accept-new", "-i", "/path/to/ssh-key", "user@remote-host", "CISCO_XDR_CLIENT_ID='client-...' CISCO_XDR_CLIENT_PASSWORD='...' CISCO_XDR_REGION='us' /path/to/cisco-xdr-mcp/.venv/bin/python -m cisco_xdr_mcp" ] } } } ``` 注意: - SSH 密钥认证可避免交互式密码提示 — MCP 客户端需要此功能。 - `StrictHostKeyChecking=accept-new` 在首次连接时自动接受;验证主机指纹后可改为 `yes`。 - 凭据是内联环境变量 — 不会存储在远程主机上。 - 必须在远程主机上安装包:从克隆的副本运行 `pip install -e .`。 ## 可用工具 许多工具使用路由参数将相关端点合并到单个工具中,减少提示令牌开销,同时保留完整的 API 覆盖范围。 ### 事件(5 个工具) | 工具 | 说明 | |---|---| | `xdr_search_incidents` | 按状态、受理人、类别、置信度和时间范围搜索事件 | | `xdr_get_incident` | 获取特定事件的完整详情 | | `xdr_get_incident_detail` | 按 `detail_type` 获取事件子资源:observables、indicators、targets、entities、graph、summary、linked_incidents、recommendations、report、export、status | | `xdr_get_incident_events` | 获取按时间顺序排列的事件时间线(可选 `notable` 筛选) | | `xdr_count_incidents` | 统计匹配筛选条件的事件数量,无需获取完整记录 | ### 调查(4 个工具) | 工具 | 说明 | |---|---| | `xdr_search_investigations` | 搜索分析师驱动的 XDR 调查 | | `xdr_get_investigation` | 获取特定调查的完整详情 | | `xdr_get_investigation_detail` | 按 `detail_type` 获取调查子资源:summary、entities、graph、indicators、targets、observables、status | | `xdr_get_investigation_events` | 获取调查的事件时间线 | ### 全球威胁情报(6 个工具) | 工具 | 说明 | |---|---| | `xdr_search_global_intel` | 按 `entity_type` 搜索任何 CTIA 实体:indicator、sighting、actor、attack_pattern、campaign、malware、vulnerability、relationship、coa、tool | | `xdr_get_observable_intel` | 按 `lookup_type` 丰富可观测数据:verdict、judgements、sightings、sighting_incidents、indicators | | `xdr_get_observable_relationships` | 获取可观测数据的 STIX 关系(关联的活动、攻击者、恶意软件) | | `xdr_get_global_entity` | 按类型和 ID 获取任何情报实体 | | `xdr_get_attack_pattern_by_mitre_id` | 按 ID 查找 MITRE ATT&CK 技术(例如 T1059) | | `xdr_get_entity_history` | 获取实体的按时间顺序排列的事件历史(设备轨迹) | ### 私有情报(9 个工具) | 工具 | 说明 | |---|---| | `xdr_search_private_indicators` | 搜索您组织的私有威胁指标 | | `xdr_get_private_verdict` | 获取可观测数据的私有裁决 | | `xdr_search_private_assets` | 搜索私有资产记录(主机、设备、端点) | | `xdr_search_private_target_records` | 搜索带有风险分数的目标记录 | | `xdr_get_private_observable_sightings` | 获取可观测数据的私有 sightings | | `xdr_search_private_sightings` | 搜索您组织的私有 sightings | | `xdr_search_private_judgements` | 搜索您组织的私有威胁判断 | | `xdr_search_private_entity` | 按 `entity_type` 搜索私有 STIX 实体:actor、campaign、malware、attack_pattern、vulnerability、relationship、coa、tool | | `xdr_get_private_entity` | 按类型和 ID 获取私有 STIX 实体 | ### 案例手册(4 个工具) | 工具 | 说明 | |---|---| | `xdr_search_casebooks` | 搜索用于组织调查笔记和可观测数据的案例手册 | | `xdr_get_casebook` | 获取特定案例手册的完整详情 | | `xdr_get_casebook_observables` | 获取案例手册中收集的所有可观测数据 | | `xdr_get_casebook_summary` | 获取案例手册摘要及关联事件 | ### 仪表板(2 个工具) | 工具 | 说明 | |---|---| | `xdr_list_dashboard_tiles` | 列出所有可用的仪表板图块及其元数据 | | `xdr_get_tile_data` | 获取特定仪表板图块的数据 | ### 手册和任务(8 个工具) | 工具 | 说明 | |---|---| | `xdr_list_playbooks` | 列出所有事件响应手册 | | `xdr_get_playbook` | 获取手册详情,包括阶段和程序 | | `xdr_get_incident_playbook_status` | 获取事件的手册执行状态 | | `xdr_get_playbook_action_logs` | 获取已执行手册步骤的日志 | | `xdr_get_playbook_phases` | 获取手册的阶段及其状态 | | `xdr_get_incident_tasks` | 获取分配给事件的所有手册任务 | | `xdr_list_tasks` | 列出所有事件的任务(按状态、受理人、事件筛选) | | `xdr_get_task` | 按 ID 获取特定任务的详情 | ## 开发 ``` # 运行所有测试 pytest # 运行特定测试文件 pytest tests/test_incidents.py # Lint 并自动修复 ruff check --fix src/ tests/ ruff format src/ tests/ # 类型检查 mypy src/ # 使用 MCP Inspector 进行交互式工具测试 npx @modelcontextprotocol/inspector cisco-xdr-mcp ``` ## 架构 ``` auth.py TokenManager OAuth 2.0 client credentials, asyncio.Lock | client.py APIClient Authenticated HTTP, error formatting, size guard | server.py FastMCP + lifespan Region validation, credential loading, context | tools/*.py @mcp.tool funcs One function per API operation ``` - **身份验证**:OAuth 2.0 客户端凭据(HTTP Basic Auth),针对 `{platform_url}/iroh/oauth2/token`。令牌被缓存并自动刷新,提前刷新时间为 60 秒。 - **输入验证**:所有工具输入都经过 Pydantic v2 模型验证。ID 路径参数经过 URL 编码并验证,拒绝路径遍历字符。 - **SSRF 防护**:所有 API 基础 URL 来自硬编码的区域映射 — 不允许用户配置 URL 覆盖。 - **响应大小保护**:超过 2 MB 的响应会被拒绝并返回详细错误信息。 ## 安全 有关如何报告漏洞,请参阅 [SECURITY.md](SECURITY.md)。 ## API 参考 CiscoDR API 文档:https://developer.cisco.com/docs/cisco-xdr/ ## 许可证 MIT — 参见 [LICENSE](LICENSE)。
标签:AI助手, AMSI绕过, API, API集成, CIDR输入, Cisco XDR, Claude Desktop, DAST, EDR, IOC, MCP, OAuth 2.0, Python, SOAR, 只读工具, 可观测性, 威胁情报, 威胁检测, 安全运营, 开发者工具, 恶意软件分析, 扫描框架, 无后门, 网络安全, 脆弱性评估, 自动化分析, 跨站脚本, 逆向工具, 隐私保护