内容
# SAP 安全笔记 MCP 服务器
通过模型上下文协议(MCP)询问有关 SAP 安全笔记元数据的相关问题 — 补丁日发布、CVSS 分数、CVE、受影响的组件以及被积极利用的状态。
**服务器 URL:** `https://notes.syntaai.com/mcp`
## 功能
- **10 个工具** — 补丁日摘要、笔记/CVE 查询、组件暴露检查、被利用状态、月份比较(所有仅可读)
- **4 个资源** — 目录信息、最新的补丁日摘要、组件列表、优先级定义
- **4 个提示** — 每月补丁简报、暴露检查、补丁积压优先级排序、CVE 调查
- **无需身份验证 — 公共只读数据。**
- **stdio 传输** — 使用 Claude Desktop 或任何 MCP 客户端在本地运行
## 示例交互
### 示例 1:补丁日摘要
**用户:** "七月份的 SAP 补丁日发布了什么?"
**发生的情况:**
- 返回 2026-07 的优先级计数、HotNews 列表及 CVSS 分数、受影响的顶级组件以及新的和更新的笔记
**使用的工具:** `get_patch_day_summary`
---
### 示例 2:主动利用
**用户提示:** "目前有哪些 SAP 漏洞被积极利用?"
**发生的情况:**
- 将目录中的 CVE 与 CISA 已知利用漏洞(KEV)快照进行交叉引用,并返回具有 KEV 日期匹配的结果
- 如果没有匹配的结果,则会诚实地报告,并说明这意味着什么
**使用的工具:** `get_exploited_notes`
---
### 示例 3:组件暴露
**用户提示:** "我的堆栈是:SAP S/4HANA 2023、SAP_BASIS 758、BC-JAS-WEB — 哪些漏洞适用于我?"
**发生的情况:**
- 每个项目被分类:应用程序组件(`BC-JAS-WEB`)、软件组件(可选版本,如 `SAP_BASIS 758`),或产品/堆栈名称(`SAP S/4HANA 2023`)
- 软件组件主要与 SAP 公布的受影响组件/版本列表进行匹配;一个策划的映射填充了没有公布列表的笔记
- 返回按来源分组的匹配笔记,以及一个诚实的 "未评估" 分类桶
**使用的工具:** `check_component_exposure`
## 工具参考
### 补丁日与搜索
| 工具 | 描述 | 注释 |
|------|-------------|-------------|
| `get_patch_day_summary` | 优先级计数、HotNews 列表、顶级组件、新旧笔记 | 只读 |
| `search_notes` | 标题/组件的关键词搜索,优先级、CVSS、月份过滤,CVSS 排名 | 只读 |
| `compare_patch_months` | 两个月份之间的笔记计数、严重性混合、HotNews 差异 | 只读 |
| `get_catalog_info` | 目录版本、笔记计数、覆盖窗口、数据源 | 只读 |
### 查询
| 工具 | 描述 | 注释 |
|------|-------------|-------------|
| `get_note_details` | 单个笔记编号的完整元数据记录 | 只读 |
| `lookup_cve` | 处理 CVE ID 的 SAP 笔记 | 只读 |
| `get_notes_by_component` | 组件的笔记,精确和前缀匹配 | 只读 |
### 风险视图
| 工具 | 描述 | 注释 |
|------|-------------|-------------|
| `get_hot_news` | 所有 HotNews 笔记,按 CVSS 排名 | 只读 |
| `get_exploited_notes` | 具有 CISA-KEV 列表 CVE 的笔记,附带 KEV 日期 | 只读 |
| `check_component_exposure` | 将粘贴的列表(应用程序组件、软件组件 — 可选版本 — 或产品名称)与目录进行匹配 | 只读 |
## 数据源与诚实
- **规范数据源:SAP 公开的补丁日页面。** 从 v2.1 开始,目录主要从 SAP 公开的无需登录的安全补丁日页面 (`support.sap.com/.../security-notes-news/<month>-<year>.html`) 构建,而不是私有导出。
- **仅公开元数据。** 目录中不包含 SAP 笔记正文或修正说明 — 仅包含 SAP 已经公开的内容:笔记编号、标题、CVSS 分数/向量、CVE ID、优先级、受影响的软件组件及其发布的版本列表、日期和公开的笔记 URL。
- **覆盖窗口已声明,不做暗示。** 当前目录:2026 年 1 月 – 2026 年 7 月(`get_catalog_info` 始终告诉您确切信息)。
- **零证据规则。** 目录中没有并不意味着没有漏洞。每个工具在每个未找到的答案中都这么说,任何工具都不会伪造笔记、CVE、分数、日期或版本。
- **利用数据** 来自公共 CISA KEV 源;快照版本和获取日期记录在目录中以供重现。
- **公共证据日期策略。** 仅当有公共证据证明时,才会发布确切的发布日期:页面自己的声明补丁日日期或与 CVE 公共 NVD `published` 日期相匹配的日期。所有其他内容以 `null` 发布,保留 `release_month`(笔记在公共月份页面上的存在是月份的证据)。
- **版本列表是确切且逐字的。** `affected[].versions` 保持 SAP 发布的内容 — 没有数字强制转换,没有范围扩展,没有规范化(`758`、`75A`、`2008_1_700`、`10.0` 都是真实的、未修改的格式)。如果 SAP 发布了格式解析器无法干净解析的内容(拼写错误、以 `< X.Y.Z` 阈值代替离散列表、包含空格的组件名称),则在 `versions_unparsed` 中保持原样 — 从不部分猜测。
- **匹配行为和来源标签。** `check_component_exposure` 接受应用程序组件(遗留每个笔记的标头字段,例如 `BC-MID-RFC` — 不由页面发布,因此对于仅从页面添加的笔记为 `null`,绝不会伪造)、软件组件(系统 → 状态,例如 `SAP_BASIS`,可选版本如 `SAP_BASIS 758`)和产品名称(维护计划,例如“SAP S/4HANA 2023”)。对于软件组件,匹配是**两层来源**:PRIMARY 是与 SAP 自己的已发布受影响组件列表的直接精确匹配(`match_type: published_affected_list`);FALLBACK 是策划的、文档记录的映射(`data/component_mapping.yaml`)到应用程序组件前缀,仅用于没有已发布列表的笔记(`match_type: mapped_software_component`)。每个匹配项都说明它是什么。当给定版本时,每个匹配的笔记也获得一个精确字符串匹配层级(1 已确认 / 2 已列出但版本不匹配 / 3 未评估)— 绝不推断范围或“足够接近”。产品通过相同的软件组件链解析;产品名称中的发布年份仅回显。哪个支持包级别修复了一个笔记始终需要完整的 SAP 笔记。
- **每月更新** 在 SAP 补丁日星期二:`scripts/monthly_update.py <page-url>` 获取并缓存新页面,从每个缓存页面重建目录,重新运行 KEV,验证模式并运行 CI 网关,要求每个应用程序组件都有明确的映射处置,然后才认为构建已准备好提交。
- **欢迎社区更正** — 对 `data/notes_catalog.json` 或 `data/component_mapping.yaml` 打开一个 PR。
## 快速入门
### claude.ai(托管)
添加一个自定义连接器,网址(无需登录):
```
https://notes.syntaai.com/mcp
```
### Claude Desktop(本地,stdio)
```json
{
"mcpServers": {
"sap-security-notes": {
"command": "/path/to/venv/bin/python",
"args": ["/path/to/sap-security-notes-mcp/server.py"],
"env": { "MCP_TRANSPORT": "stdio" }
}
}
}
```
## 部署
```bash
git clone https://github.com/SYNTAAI/sap-security-notes-mcp
cd sap-security-notes-mcp
python3 -m venv venv && source venv/bin/activate
pip install -r requirements.txt
# 本地_stdio
MCP_TRANSPORT=stdio python server.py
# HTTP(托管服务器的运行方式 — 无身份验证,目录是公共只读数据)
MCP_NO_AUTH=1 PORT=8003 python server.py
# 使用 OAuth 的 HTTP(可选,如果您自行托管并想要登录门户)
PORT=8003 SYNTAAI_ISSUER_URL=https://your-host python server.py
```
添加新月份,一旦其补丁日页面上线:
```bash
pip install -r requirements-dev.txt
python scripts/monthly_update.py \
https://support.sap.com/en/my-support/knowledge-base/security-notes-news/<month>-<year>.html
pytest
```
这会获取并缓存页面,从 `data/pages/` 中的每个缓存页面重建目录,以及一个新的 KEV 拉取,验证模式并运行 CI 处置门控(如果 `data/component_mapping.yaml` 中没有新的应用程序组件的映射决策,则会大声失败)。
从所有缓存页面一次性历史重建(用于从 v2.1 中的原始 xlsx 导出目录迁移):
```bash
python scripts/backfill_from_pages.py --offline
```
## 许可证
[Apache 2.0](LICENSE) — 另请参见 [PRIVACY.md](PRIVACY.md) 和 [TERMS.md](TERMS.md)。
---
想知道这些笔记中哪些实际上在您的 SAP 系统中实施,以及当前暴露了什么?那就是 Syntasec 所做的 — [syntaai.com](https://syntaai.com)。