内容
# Sophos Central MCP 服务器
    [](https://github.com/rijul170/sophos-central-mcp)
[](https://github.com/rijul170/sophos-central-mcp/actions/workflows/test.yml)
[](https://www.npmjs.com/package/@rijul170/sophos-mcp)
[](https://registry.modelcontextprotocol.io/v0/servers?search=io.github.rijul170/sophos-central-mcp)
> **适用于 MSP/MSSP 团队:** 通过自然语言管理端点安全、电子邮件威胁和防火墙策略,适用于所有 Sophos 租户。询问 Claude 以调查警报、隔离主机、运行 Live Discover 查询并与 XDR 数据关联 — 无需离开您的 AI 工作流。
## 概述
一个适用于 Sophos Central API 的 Model Context Protocol (MCP) 服务器,通过 Claude 和其他兼容 MCP 的客户端启用 AI 驱动的安全运营。专为具有合作伙伴超级管理员凭证的 MSP/MSSP 环境设计,它提供跨所有客户租户的多租户管理 — 涵盖端点保护、威胁检测、Live Discover 法医、XDR 猎杀、电子邮件安全、防火墙管理等。
## 功能
- **33 个 API 域中的 334 个工具** — 全面的 Sophos Central API 覆盖
- **多租户 MSSP 支持** — 通过合作伙伴超级管理员凭证枚举和目标任意客户租户
- **端点隔离和调查** — 隔离端点、检查篡改保护、触发扫描
- **警报分类** — 列出、过滤、确认和处理 Sophos 警报跨租户
- **Live Discover SQL 查询** — 直接在托管端点上运行实时法医 SQL 查询
- **XDR 数据湖猎杀** — 使用 SQL 查询 Sophos XDR 数据湖的历史威胁猎杀
- **威胁检测** — 查询、分组和计算行为检测
- **案件管理** — 创建和管理调查案件的整个过程
- **电子邮件安全** — 隔离管理、邮箱列表、投递后消息回收
- **防火墙管理** — CRUD 操作、组管理、固件升级
- **DNS 保护** — 位置策略、自定义域名允许/阻止列表
- **SOC 剧本** — 内置 `sophos_playbook_*` 工具,用于指导 IR 和威胁猎杀工作流
- **三种传输模式** — stdio(Claude Desktop)、SSE 和 Streamable HTTP(Claude Code)
- **自动 OAuth2令牌管理** — 无需手动干预的令牌刷新
- **区域路由** — 请求自动路由到正确的区域端点(美国、欧盟、加拿大、澳大利亚、日本、巴西)
## 先决条件
- **Node.js** v18 或更高版本(需要原生 `fetch` 支持)
- **npm** v8 或更高版本
- **Sophos Central 合作伙伴超级管理员 API 凭证** — 请参阅 [配置](#配置) 以了解如何创建这些凭证
## 安装
```bash
git clone https://github.com/rijul170/sophos-central-mcp.git
cd sophos-central-mcp
npm install
npm run build
```
## 配置
### 1. 创建 `.env` 文件
```bash
cp .env.example .env
```
编辑 `.env` 文件并添加您的凭证:
```env
# 必需
SOPHOS_CLIENT_ID=您的客户端 ID
SOPHOS_CLIENT_SECRET=您的客户端密钥
# 可选 — 传输模式:stdio | sse | streamable-http (默认:stdio)
MCP_TRANSPORT=stdio
# 可选 — HTTP 传输的主机(默认:127.0.0.1)
MCP_HOST=127.0.0.1
# 可选 — HTTP 传输的端口(默认:3001)
MCP_PORT=3001
```
### 2. 在 Sophos Central 中创建 API 凭证
1. 登录到 **Sophos Central 合作伙伴仪表盘**
2. 导航到 **设置和策略** → **API 凭证管理**
3. 点击 **添加凭证**
4. 将角色设置为 **服务主体超级管理员**
5. 复制 **客户端 ID** 和 **客户端密钥** — 密钥仅显示一次
| 变量 | 必需 | 描述 |
|:---|:---:|:---|
| `SOPHOS_CLIENT_ID` | 是 | 来自 Sophos Central 的合作伙伴超级管理员客户端 ID |
| `SOPHOS_CLIENT_SECRET` | 是 | 对应的客户端密钥 |
| `MCP_TRANSPORT` | 否 | 传输模式:`stdio`、`sse` 或 `streamable-http` (默认:`stdio`) |
| `MCP_HOST` | 否 | HTTP 传输的绑定主机(默认:`127.0.0.1`) |
| `MCP_PORT` | 否 | HTTP 传输的端口(默认:`3001`) |
| `SOPHOS_MCP_READONLY` | 否 | 设置为 `true` 以仅注册读取工具 — 不会向 AI 客户端公开写入和破坏性工具 |
| `SOPHOS_MCP_ALLOW_DESTRUCTIVE` | 否 | 默认情况下会抑制破坏性工具(删除、端点隔离、Live Discover 执行、回收等)。设置为 `true` 以启用所有工具,或选择性地启用逗号分隔的工具名称列表 |
## Claude Code 集成(HTTP 模式)
HTTP 模式是 Claude Code 的推荐模式 — 它支持并发会话,并且无需在对话之间重启服务器。
**启动服务器:**
```bash
MCP_TRANSPORT=streamable-http MCP_PORT=3001 node build/index.js
```
或在您的 `.env` 中设置 `MCP_TRANSPORT=streamable-http` 并运行:
```bash
node build/index.js
```
**将以下内容添加到您的 Claude Code MCP 配置** (`.claude/settings.json` 或全局设置):
```json
{
"mcpServers": {
"sophos-mcp": {
"type": "http",
"url": "http://localhost:3001/mcp"
}
}
}
```
`/health` 端点在 `http://localhost:3001/health` 处可用于活动检查。
## Claude Desktop 集成(stdio 模式)
stdio 模式是 Claude Desktop 的标准传输模式。服务器进程由 Claude Desktop 直接管理。
**将以下内容添加到您的 Claude Desktop MCP 配置** (`claude_desktop_config.json`):
```json
{
"mcpServers": {
"sophos-mcp": {
"command": "node",
"args": ["/path/to/sophos-central-mcp/build/index.js"],
"env": {
"SOPHOS_CLIENT_ID": "您的客户端 ID",
"SOPHOS_CLIENT_SECRET": "您的客户端密钥"
}
}
}
}
```
将 `/path/to/sophos-central-mcp` 替换为您的克隆存储库的绝对路径。
## SSE 模式
SSE(服务器发送事件)模式适用于不支持 Streamable HTTP 的旧版 MCP 客户端。
```bash
MCP_TRANSPORT=sse MCP_PORT=3001 node build/index.js
```
SSE 端点在 `http://localhost:3001/sse` 处可用。
## 工具域
| 域 | 工具 | 描述 |
|:---|:---:|:---|
| 警报 | 5 | 列出、获取、确认和处理 Sophos 警报 |
| 端点 | 26 | 隔离、篡改保护、扫描、迁移、批量操作 |
| 检测 | 7 | 基于查询的行为检测搜索、分组和计数 |
| Live Discover | 11 | 对托管端点的实时法医 SQL 查询 |
| XDR | 10 | 对 Sophos XDR 数据湖的历史 SQL 猎杀 |
| 案件 | 9 | 创建、读取、更新、关闭和证据管理调查案件 |
| 合作伙伴 | 23 | 租户枚举、管理员、角色、计费、权限集 |
| 组织 | 2 | 组织类型账户的租户列表 |
| 策略 | 7 | 所有 Sophos 策略类型的完全 CRUD |
| 组 | 8 | 端点组 CRUD 和成员管理 |
| SIEM | 2 | 用于 SIEM 集成的事件和警报导出 |
| 防火墙 | 20 | 防火墙 CRUD、组管理、固件升级 |
| DNS 保护 | 15 | 位置、策略、自定义域名允许/阻止列表 |
| 电子邮件 | 31 | 隔离管理、邮箱列表、投递后消息回收 |
| 目录 | 15 | 用户和用户组完全 CRUD |
| 设置 | 16 | 篡改保护、排除、Web 控制、端点标签 |
| 允许/阻止 | 12 | SHA256 哈希、证书和路径允许/阻止列表 |
| 漏洞缓解 | 8 | 应用程序级漏洞保护排除 |
| IPS 排除 | 10 | 网络 IPS 和隔离排除管理 |
| 租户管理员 | 14 | 租户管理员 CRUD、角色分配、自定义角色 |
| 账户健康 | 4 | 健康检查报告、暂停和历史健康分数 |
| 账户管理 | 4 | 账户级设置和许可证管理 |
| 审计事件 | 2 | 用于合规性和治理的审计日志检索 |
| 业务自动化 | 3 | 自动化规则和业务逻辑配置 |
| 许可 | 2 | 许可权益和用法查询 |
| 移动设备 | 38 | 移动设备管理 — 注册、策略、设备操作 |
| 云安全 | 6 | 云工作负载保护姿势和发现 |
| 软件 | 9 | 安装程序下载、软件库存、软件包 |
| 开关 | 3 | 网络开关管理 |
| WiFi | 3 | 无线网络管理 |
| 用户活动 | 2 | 用户活动报告和会话数据 |
| 剧本 | 5 | SOC 事件响应和威胁猎杀工作流指南 |
| 认证 | 2 | OAuth2 认证和 WhoAmI 身份发现 |
## MSSP 多租户支持
服务器围绕 Sophos 合作伙伴超级管理员凭证构建,具有跨所有托管客户租户的可见性。
**工作原理:**
1. 服务器启动时,使用您的合作伙伴凭证向 Sophos Central 进行身份验证,并发现您的组织类型(合作伙伴或组织)。
2. 使用 `sophos_list_tenants` (或 `sophos_list_org_tenants` 用于组织账户)枚举所有托管租户及其 ID。
3. 将 `tenantId` 参数传递给任何租户范围的工具,以定位特定的客户环境。
4. 所有 API 调用根据租户的数据驻留自动路由到正确的区域端点(美国、欧盟、加拿大、澳大利亚、日本、巴西)。
**示例工作流:
```
1. sophos_list_tenants → 获取所有租户 ID 和名称
2. sophos_list_alerts → 传递租户 ID 以获取特定客户的警报
3. sophos_isolate_endpoint → 在该租户中隔离端点
4. sophos_live_discover_run_query → 在隔离的主机上运行法医 SQL 查询
```
## SOC 快速入门
连接服务器到 Claude 后,您可以使用自然语言驱动安全操作。示例提示:
**警报分类:**
> “列出租户 `<tenant-id>` 在过去 24 小时内的所有关键和高严重性开放警报,按类型分组。”
**端点调查:**
> “隔离租户 `<tenant-id>` 中的端点 `<hostname>`,然后运行 Live Discover SQL 查询以列出所有正在运行的进程和活动网络连接。”
**XDR 威胁猎杀:**
> “对租户 `<tenant-id>` 运行 XDR 数据湖查询,以查找过去 7 天内具有编码命令的任何 PowerShell 执行。”
**MSSP 概览:**
> “枚举所有我的托管租户,然后显示具有开放关键警报的租户列表。”
**电子邮件安全:**
> “显示租户 `<tenant-id>` 在过去 48 小时内的所有隔离消息,并释放任何标记为误报的消息。”
## 开发
```bash
# 运行热重载(无需构建步骤)
npm run dev
# 将 TypeScript 构建为 JavaScript
npm run build
# 运行构建的服务器
npm start
# 使用 MCP Inspector 交互式检查工具
npx @modelcontextprotocol/inspector node build/index.js
```
## 项目结构
```
src/
├── index.ts # 入口点 — 传输设置,注册所有 33 个模块
├── config.ts # 环境变量验证
├── auth/
│ └── auth-manager.ts # OAuth2 令牌管理,自动刷新
├── client/
│ ├── sophos-client.ts # HTTP 客户端(重试、速率限制、回退)
│ └── tenant-router.ts # 租户 → 区域 API 主机映射
├── tools/ # 33 个工具文件,共 334 个工具
│ ├── auth-tools.ts # 2 个工具
│ ├── partner-tools.ts # 23 个工具
│ ├── organization-tools.ts # 2 个工具
│ ├── endpoint-tools.ts # 26 个工具
│ ├── group-tools.ts # 8 个工具
│ ├── policy-tools.ts # 7 个工具
│ ├── alert-tools.ts # 5 个工具
│ ├── detections-tools.ts # 7 个工具
│ ├── siem-tools.ts # 2 个工具
│ ├── xdr-tools.ts # 10 个工具
│ ├── live-discover-tools.ts # 11 个工具
│ ├── firewall-tools.ts # 20 个工具
│ ├── dns-protection-tools.ts # 15 个工具
│ ├── email-tools.ts # 31 个工具
│ ├── directory-tools.ts # 15 个工具
│ ├── settings-tools.ts # 16 个工具
│ ├── allowed-blocked-tools.ts # 12 个工具
│ ├── exploit-mitigation-tools.ts # 8 个工具
│ ├── ips-exclusion-tools.ts # 10 个工具
│ ├── tenant-admin-tools.ts # 14 个工具
│ ├── account-health-tools.ts # 4 个工具
│ ├── cases-tools.ts # 9 个工具
│ ├── software-tools.ts # 9 个工具
│ ├── audit-events-tools.ts # 2 个工具
│ ├── business-automation-tools.ts # 3 个工具
│ ├── licensing-tools.ts # 2 个工具
│ ├── mobile-tools.ts # 38 个工具
│ ├── switch-tools.ts # 3 个工具
│ ├── wifi-tools.ts # 3 个工具
│ ├── cloud-security-tools.ts # 6 个工具
│ ├── user-activity-tools.ts # 2 个工具
│ ├── account-management-tools.ts # 4 个工具
│ └── playbook-tools.ts # 5 个工具
└── types/
└── sophos-types.ts # 所有 Sophos API 类型的 TypeScript 接口
```
## 安全考虑
- **只读模式** — 设置 `SOPHOS_MCP_READONLY=true` 以仅注册读取工具。写入和破坏性工具永远不会向 AI 客户端公开,无论提出什么请求。XDR 数据湖和检测查询保持可用(它们是读取分析);Live Discover 不可用(它在托管端点上执行 osquery)。
- **破坏性操作门控** — 即使启用写入功能,破坏性工具(端点隔离、删除、电子邮件回收、Live Discover 执行、固件升级、...)默认情况下会被抑制。通过 `SOPHOS_MCP_ALLOW_DESTRUCTIVE` 显式启用它们,或选择性地启用逗号分隔的工具名称列表:
```bash
# 仅启用端点隔离以进行 IR 工作流
SOPHOS_MCP_ALLOW_DESTRUCTIVE=sophos_isolate_endpoint,sophos_deisolate_endpoint
```
- **工具注释** — 每个工具都带有 MCP `readOnlyHint/` `destructiveHint` 注释,以便兼容的客户端可以应用自己的确认策略。
- **凭证处理** — API 凭证在启动时从环境变量读取,并且永远不会被日志传输或传输到 Sophos 身份验证端点。不要将 `.env` 文件提交到源控制 — `.env` 列入 `.gitignore`。
- **合作伙伴超级管理员范围** — 这些凭证对所有托管租户具有读写访问权限。以与特权服务帐户凭证相同的谨慎级别进行处理。仅限于写操作(隔离、策略更改、用户管理)。
- **只读操作** — 如果您的用例仅需要可见性(警报分类、威胁猎杀、报告),请考虑创建具有更受限角色的单独凭证。合作伙伴超级管理员仅需用于写操作(隔离、策略更改、用户管理)。
- **网络绑定** — HTTP 传输默认绑定到 `127.0.0.1`。不要公开暴露 MCP 服务器端口。如果需要远程访问,请将其放在经过身份验证的反向代理或 VPN 后面。
- **审计轨迹** — 通过此服务器进行的所有 Sophos API 调用都记录在 Sophos Central 的审计事件中,可归因于使用的 API 凭证。