关于 Patch Tuesday
Patch Tuesday 是一个 Python MCP 服务,用于查询来自公开 MSRC 数据源的 Microsoft 安全更新。它支持按发布批次和产品进行分诊,并提供 CVE、KB、利用情况、EPSS 与 CISA KEV 信息,面向安全及 IT 团队。
主要功能
- 01查询每月 MSRC 发布
- 02按产品、严重性和 CWE 筛选
- 03关联 KB 文章与 CVE
- 04补充 EPSS 和 CISA KEV 信息
- 05查看缓解措施和已知问题
- 06将分诊结果导出为 Markdown 或 CSV
适用场景
- 01汇总某月的 Microsoft 补丁
- 02确定漏洞修复优先级
- 03确认 KB 是否需要重启
- 04准备补丁分诊简报
MCP 相关
通过 `msrc_search` 工具向 MCP 客户端提供 Microsoft 安全更新查询。它读取公开的 MSRC 数据,无需 API 密钥。
配置
远程服务无需本地安装。选择你使用的客户端,复制配置或使用一键安装。
https://patch-tuesday-mcp.agreeabledesert-d0b8e491.eastus2.azurecontainerapps.io/mcpclaude mcp add --transport http patch-tuesday https://patch-tuesday-mcp.agreeabledesert-d0b8e491.eastus2.azurecontainerapps.io/mcp{"mcpServers":{"patch-tuesday":{"type":"http","url":"https://patch-tuesday-mcp.agreeabledesert-d0b8e491.eastus2.azurecontainerapps.io/mcp"}}}在 Cursor 中打开{"servers":{"patch-tuesday":{"type":"http","url":"https://patch-tuesday-mcp.agreeabledesert-d0b8e491.eastus2.azurecontainerapps.io/mcp"}}}在 VS Code 中打开{"mcpServers":{"patch-tuesday":{"type":"http","url":"https://patch-tuesday-mcp.agreeabledesert-d0b8e491.eastus2.azurecontainerapps.io/mcp"}}}{"mcpServers":{"patch-tuesday":{"serverUrl":"https://patch-tuesday-mcp.agreeabledesert-d0b8e491.eastus2.azurecontainerapps.io/mcp"}}}命令在终端中运行;JSON 粘贴到对应客户端的 MCP 配置后重启。需要授权的服务会在首次连接时提示登录。
工具
详细介绍
免责声明:这是一个独立构建的项目,并非 Microsoft 官方工具或服务。
Patch Tuesday MCP Server
mcp-name: io.github.jonnybottles/patch-tuesday
向你的 AI 助手询问 Microsoft 安全更新。这个基于 Python 的 MCP(Model Context Protocol)服务将 Claude、Copilot 和 ChatGPT 等 AI 助手连接到 MSRC Security Update Guide——这是 Microsoft 发布的所有 CVE 补丁的权威来源——让你可以用自然语言查询 Patch Tuesday 发布内容,包括 CVE、KB 文章、严重性评级、CVSS 评分、受影响的产品以及是否已在实际攻击中利用。
功能介绍
Patch Tuesday MCP Server 将 Microsoft 官方的 CVRF 安全更新 API 与你的 AI 助手连接起来,让你可以:
- 获取每月汇总 - “本月的补丁星期二修复了什么?”
- 查找正在遭利用的漏洞 - “哪些漏洞正在野外遭到利用?”
- 查询任意 CVE - “告诉我 CVE-2026-41108 的相关信息”(KB、受影响产品、CVSS、描述)
- 将 KB 映射到 CVE - “KB5094123 修复了哪些漏洞?”
- 按产品筛选 - “本月有哪些严重级别的 CVE 影响 Windows Server 2022?”
- 追踪零日漏洞 - “4 月是否修复了任何已公开披露的漏洞?”
- 查看已确认遭利用的漏洞 - “本月的哪些 CVE 在 CISA KEV 列表中?”——附带联邦修复截止日期
- 按遭利用概率排序 - “显示 EPSS 高于 50% 的 CVE”——每日更新的 FIRST.org 漏洞利用预测评分
- 查找无需点击、可从互联网访问的严重漏洞 - “哪些严重级别的 CVE 可通过网络访问,且无需权限或用户交互?”——根据解析出的 CVSS 攻击向量、权限和用户交互字段进行筛选
- 直接跳转至权威来源 - 每个 CVE 详情都附带可直接打开的 MSRC、NVD、EPSS 和(如有列出)CISA KEV 参考链接
- 避免使用过时补丁 - “KB5087538 是否已被更新版本取代?”——沿着 Microsoft 的取代关系链接进行追踪
- 尚无补丁时获取缓解措施 - “CVE-2026-47291 是否有缓解措施或解决方法?”——提供 Microsoft 的缓解措施、解决方法以及不予修复的指导
- 发现一段时间内的趋势 - “过去 6 个月发布了多少个 HTTP.sys CVE?”(
months_back=6,或使用start_month/end_month)——汇总已发布月份中的匹配项,并按月统计 - 按 Microsoft 自己的利用预测筛选 - “Microsoft 将本月哪些 CVE 评为‘更有可能遭到利用’?”(
exploitation_likely=True) - 发现被勒索软件利用的 CVE - “本月哪些 CVE 被用于已知的勒索软件活动?”(
ransomware=True;添加include_kev_details=True可获取包含必要操作的完整 CISA 条目) - 规划部署,而不只是确定优先级 - “KB5094123 是否需要重启?哪个版本号包含修复?”(
include_kb_details=True会添加每个 KB 的 URL、修复版本号、取代关系和重启要求) - 了解 Microsoft 指出的更新问题 - “部署 KB5094126 之前,有什么已知问题吗?”(
include_known_issues=True会添加 Microsoft 确认的每个 KB 的已知问题,包括症状、解决方法和解决问题的更新;尽可能从其公开支持页面获取,主要针对 Windows 更新;如果 Microsoft 未发布任何问题,响应会明确说明) - 了解更新更改了什么,而不只是修复了什么 - “KB5099536 除了安全修复之外,实际还包含什么内容?”(
include_update_summary=True会添加 KB 支持页面中的摘要和改进要点——MSRC 安全数据不包含的更改说明内容;通过与查询已知问题相同的页面获取) - 按弱点类别筛选月份 - “显示本月的释放后使用 CVE”(
cwe="CWE-416"或cwe="use after free") - 查看版本目录 - “有哪些月度版本可用?它们上次修订是什么时候?”(
list_months=True) - 导出分诊简报 - “将本月的严重级别 CVE 制作为 Markdown 报告”或“……制作成 CSV”——生成按优先级排列的执行摘要和表格,或便于电子表格处理的导出文件(
format="markdown"/format="csv") - 强制刷新并检查数据新鲜度 - “重新拉取本月的最新数据”(
force_refresh=True)会绕过进程内缓存;include_freshness=True会报告 MSRC 文档以及 EPSS/KEV 补充数据的缓存时间和 TTL - 确定补丁优先级 - 结果按紧急程度从高到低排序:KEV/已遭利用,然后是 EPSS、严重程度,最后是 CVSS
非常适合每月分诊 Microsoft 安全更新的安全分析师、系统管理员和 IT 专业人员——无需点击浏览安全更新指南门户。 数据来自官方公开的 MSRC CVRF v3 API。无需身份验证或 API 密钥。
为什么选择此服务?
这是唯一一个以补丁星期二发布本身为建模对象的 MCP 服务。 很多 MCP 服务都能查询 CVE——通用漏洞聚合器会将已知的 CVE ID 分发到 NVD、OSV 和威胁情报源。它们回答的是 “告诉我 CVE-X 的相关信息”。但它们不了解每月的 Microsoft 发布、KB 文章或产品系列,因此从结构上就无法回答 Microsoft 用户每月第二个星期二真正会问的问题:
| 你实际会问的问题 | 通用 CVE 查询服务 | patch-tuesday-mcp |
|---|---|---|
| “总结本月的补丁星期二” | ❌ 不知道发布的概念 | ✅ 一次调用即可汇总并提供统计数据 |
| “本月哪些严重 CVE 会影响 Windows Server 2022?” | ❌ 无法按 Microsoft 产品筛选 | ✅ 支持按产品和产品系列筛选 |
| “KB5094123 修复了哪些漏洞?” | ❌ 不了解 KB | ✅ 支持 KB ↔ CVE 映射 |
| “目前有哪些漏洞正在被野外利用?” | ⚠️ 仅支持逐个查询 CVE,且需要你事先知道 CVE | ✅ 可筛选整个月的数据 |
| “我应该优先修补什么?” | ❌ | ✅ 按紧急程度排序:已遭利用/KEV → EPSS → 严重性 → CVSS |
| “哪些严重漏洞无需用户交互即可从互联网访问?” | ⚠️ 仅支持逐个查询 CVSS | ✅ 可按已解析的 CVSS 攻击向量、权限和用户交互筛选当月数据 |
| “告诉我 CVE-X 的相关信息” | ✅(通常包含更多生态系统数据) | ✅ MSRC 详细信息:KB、版本、取代关系、已解析的 CVSS,以及 MSRC/NVD/EPSS/KEV 链接 |
在底层,区别在于数据源:此服务会解析完整的 MSRC CVRF 月度文档——ProductTree、各产品的严重性威胁、可利用性评估和 KB 修复链,这些信息从不由逐个 CVE 查询的 API 提供。正因如此,才能回答以发布为核心的问题。
它还特别做好了以下方面:
- 无需 API 密钥,也无需账户——MSRC API 是公开的;只需运行一条
uvx命令即可完成设置 - 一个工具,而非三十个——通过单一的整合工具
msrc_search,让 AI 客户端的上下文保持精简,并可靠地选择工具 - 专为月度工作流打造——对发布进行分类、向团队汇报、确定修补优先级,然后继续处理其他事务
即刻试用——托管端点(无需安装)
可免费使用远程实例:
https://patch-tuesday-mcp.agreeabledesert-d0b8e491.eastus2.azurecontainerapps.io/mcp
无需账户或 API 密钥。该端点提供的数据与本地安装相同——如果需要高频使用或保证可用性,请在本地运行(见下文)或自行托管。系统仅记录最少量的匿名使用数据——请参阅遥测与隐私。
要求
通用要求
- Python 3.11+
- 兼容 MCP 的客户端(Claude Desktop、Cursor、Claude Code、GitHub Copilot CLI 等)
使用 uvx(推荐)
如果你通过 uvx 安装或运行此服务,必须先安装 uv。
- uv(包含
uvx):https://github.com/astral-sh/uv
安装 uv:
# macOS / Linux
curl -LsSf https://astral.sh/uv/install.sh | sh
# Windows (PowerShell)
irm https://astral.sh/uv/install.ps1 | iex
uvx可让你运行 MCP 服务,而无需全局安装软件包。
使用 pip(替代方式)
pip install patch-tuesday-mcp
安装
从 PyPI 安装
uvx patch-tuesday-mcp
或使用 pip 安装:
pip install patch-tuesday-mcp
升级到最新版本
uvx patch-tuesday-mcp@latest
或使用 pip:
pip install --upgrade patch-tuesday-mcp
快速设置
一键设置: 点击 VS Code 徽章即可自动配置(需要安装
uv) 手动设置: 请参阅下方针对 VS Code、Cursor、Claude Code、Copilot CLI 或 Claude Desktop 的说明
功能
- msrc_search – 按关键字、CVE、KB 编号、月份、产品、严重性、CVSS 分数、是否已在实际攻击中利用或是否公开披露,搜索并筛选 Microsoft 安全更新。如果未指定月份,结果默认采用最近一个已过补丁星期二的版本——默认跳过下个月的预发布文档(仅包含早期 Chromium/带外条目),可通过
month=显式查询。结果会补充 EPSS 分数(FIRST.org 提供的 30 天攻击利用概率,可用min_epss=0.5筛选)和 CISA KEV 目录状态及联邦修复截止日期(可用kev=True筛选);两者均为公开、无需密钥的数据源。按 解析后的 CVSS v3.x 暴露字段筛选——attack_vector(N/A/L/P)、privileges_required(N/L/H)、user_interaction(N/R)和scope(U/C)——例如,筛出可通过网络访问、无需点击的严重漏洞。匹配结果会显示一个从原始向量字符串解析出的结构化cvss对象。每条 CVE 详情还包含一个可直接打开的链接 references 区块(MSRC 更新指南、NVD、EPSS API,以及 CVE 列入目录时的 CISA KEV 目录)。在 KB 查询中添加include_chain=True,即可查看 Microsoft 声明的 取代关系链(它取代了哪些 KB,从新到旧)。传入 KB 编号列表(kb=["5094123", "KB5094127", ...],最多 30 个)即可在一次调用中查询全部编号——例如,将计算机已安装更新列表作为补丁报告的上下文——并获取按 KB 分组的响应,每个 KB 均有一条结果(找到或未找到,其内容与单个 KB 查询相同);整个批次中,每份月度文档仍最多只会从上游获取一次。在任意 KB 查询(单个或批量)中添加include_known_issues=True,即可查看每项更新的 Microsoft 已确认已知问题——问题标题、症状、解决方法,以及 Microsoft 指明的修复 KB。系统会尽力从 KB 的公开支持页面抓取这些信息,并为每个 KB 明确报告状态:published、none_published(Microsoft 未发布该 KB 的已知问题数据——Windows OS 更新以外的情况通常如此)或unavailable(检索/解析失败,与“没有问题”明确区分);该结果反映的是 Microsoft 已确认会造成的问题,而不是对你所处环境的预测。在 KB 查询中添加include_update_summary=True,即可了解 更新内容——支持页面上的 Summary/Highlights 文本及其 Improvements 项目列表(有大小上限,若内容被截断则以truncated标记),并采用同样明确的三种状态;这两个支持页面区块通过一次获取提供,并共用一条缓存记录。在 CVE 查询中添加include_guidance=True,即可查看 Microsoft 提供的 缓解措施、解决方法和不予修复的公告,以及供应商修复 KB。在月度/筛选搜索中传入format="markdown"或format="csv",即可额外生成 分流简报——Markdown 格式提供优先级排序的摘要和表格,CSV 格式提供可直接用于电子表格的导出内容——两者均按相同的紧急程度排序生成。JSONvulnerabilities列表始终会包含在内。使用force_refresh=True可绕过进程内缓存,重新获取请求所需的 MSRC 文档和 EPSS/KEV 补充数据;使用include_freshness=True可添加 freshness 区块,报告 MSRC 文档和补充数据的缓存时长及 TTL。使用months_back=N(最近发布的 N 个月)或start_month/end_month,可搜索 历史时间范围,而不是单个月份——响应会汇总该范围内匹配的 CVE,并添加按月统计的 趋势数据;范围最多为 12 个月,并沿用现有的缓存/并发控制。设置include_stats=True可获取汇总计数(按严重性、影响、产品系列、是否已被利用及 KEV 分类)。与include_stats=True一起使用limit=0,可仅查看某月的统计概览。按 Microsoft 对攻击利用可能性的评估筛选时使用exploitation_likely=True(“Exploitation More Likely”/“Exploitation Detected”;匹配结果包含exploitation_assessment字段);按 已知勒索软件活动中的使用情况筛选时使用ransomware=True(数据来自 CISA KEV 目录)。按需启用更丰富的结果:include_references=True会在月份/KB/趋势列表结果中添加 MSRC/NVD/EPSS/KEV 链接区块;include_kev_details=True会以完整目录条目(截止日期、所需操作、供应商/产品、勒索软件使用情况)替换布尔型 KEV 标记;include_kb_details=True会将 KB 编号扩展为完整对象,包含每个 KB 的 URL、修复版本、取代关系、子类型和 是否需要重启状态;include_temporal=True会在 cvss 区块中添加 Microsoft 的 CVSS 时间分数。使用cwe=(ID 或名称子字符串,例如cwe="CWE-416")可按 弱点类别筛选。使用list_months=True可获取 版本目录(所有可用月份及其首次/当前发布日期——便于确认有效的month=值和查找同月修订)。所有新增字段均为可选项:默认 JSON 结构保持不变。
产品配置文件(监视列表)
将搜索范围限定为你实际运行的产品。传入 product_profile="identity-core"(内置配置文件:identity-core、endpoint、server-infrastructure),或按需提供 products=["Exchange Server", "Windows Server"] / product_families=["Windows", "Azure"]。只要漏洞符合所列的任一产品或产品系列,就会保留。所有匹配都在本地进行——配置文件内容绝不会传输给 MSRC、FIRST.org、CISA 或遥测系统。
通过将 MSRC_PROFILES_PATH 指向 JSON 文件来覆盖或扩展内置配置:
{
"my-estate": {
"families": ["Windows", "Azure"],
"products": ["Exchange Server", "Microsoft Entra"]
}
}
每个条目都可以设置 products 和/或 families(不区分大小写的部分匹配)。与内置配置同名的文件条目会替换该配置。未知的 product_profile,或缺失/无效的 MSRC_PROFILES_PATH,会返回明确的 invalid_input 错误,而不会回退到范围过宽、未限定范围的结果。
配套分诊技能
便携式 Agent 技能 patch-tuesday-triage 可教会 AI Agent 如何在月度工作流中使用 msrc_search(运行哪些搜索、按什么顺序运行、如何确定优先级)。它采用纯 Markdown 编写,可独立于此服务部署:将 skills/patch-tuesday-triage/ 复制到 Agent 的技能目录中。有关部署详情,请参阅 skills/README.md。
引导式分诊提示词
该服务注册了一个名为 monthly_triage 的 MCP 提示词。支持提示词的 MCP 客户端可以选择它,以获取完全基于 msrc_search 构建的分步分析工作流——公开披露的零日漏洞、CISA KEV、已遭利用的漏洞、网络可利用/无需身份验证/无需用户交互的严重漏洞、身份相关产品、终端/Intune,以及简报。它接受两个可选参数:product_profile(将整个工作流限定到某个监视列表)和 month(对指定版本进行分诊)。不会引入新工具——该提示词仅负责协调 msrc_search 调用。
此提示词的便携式纯文本副本位于 prompts/ 下,因此该工作流可以独立于此服务使用。
提示词示例
连接到 MCP 客户端后,你可以提出以下问题:
- 月度概览:“总结本月的 Patch Tuesday”
- 已遭利用的漏洞:“哪些 Microsoft 漏洞正在被积极利用?”
- CVE 查询:“CVE-2026-41108 是什么?哪个 KB 修复了它?”
- KB 查询:“KB5094123 修补了什么?”
- 计算机补丁报告:“这是此服务器上已安装的 KB:KB5094123、KB5094127、KB5093998——它们修复了什么?是否有任何更新已被取代?”
- 产品筛选:“显示本月影响 Exchange Server 的严重漏洞”
- 补丁优先级排序:“我应该先安装 2026 年 6 月更新中的哪些补丁?”
- CISA KEV:“本月的哪些 CVE 在 CISA KEV 列表中?”
- EPSS:“显示 EPSS 高于 50% 的 CVE”
- 暴露面筛选:“哪些严重 CVE 可通过网络访问,且无需权限或用户交互?”
- 参考链接:“提供 CVE-2026-41108 的 MSRC、NVD 和 EPSS 链接”
- 缓解措施和解决方法:“CVE-2026-41108 有哪些缓解措施或解决方法吗?”
- 分类报告:“以 Markdown 简报的形式列出本月的严重 CVE”(或“……将它们导出为 CSV”)
- 按需获取最新数据:“重新获取本月的更新,并告诉我数据有多新” (
force_refresh=True,include_freshness=True) - 历史趋势:“过去 6 个月发布了多少个 HTTP.sys RCE CVE?” (
query="HTTP.sys",months_back=6) - 取代关系:“KB5087538 是否已被更新的补丁取代?”
- 利用情况预测:“Microsoft 认为本月哪些 CVE 的‘利用可能性较高’?”
- 勒索软件:“本月的哪些 CVE 被用于已知的勒索软件攻击活动?”
- 部署规划:“KB5094123 是否需要重启?哪个版本可以修复它?”
- 部署前了解已知问题:“Microsoft 已确认 KB5094126 会导致什么问题?是否有修复或解决方法?” (
include_known_issues=True) - 更新内容:“总结 KB5099536 除安全修复之外还做了哪些更改” (
include_update_summary=True) - 弱点类别:“显示本月的释放后使用漏洞” (
cwe="CWE-416") - 发布目录:“可以查询哪些 Patch Tuesday 月份?”
- 产品关注列表:“显示本月影响我整个系统环境的严重 CVE” (
product_profile="identity-core",severity="Critical") - 引导式分类:“引导我完成本月针对身份系统环境的分类” (选择
monthly_triage提示词,并使用product_profile="identity-core")
使用方法
运行 MCP 服务
uvx patch-tuesday-mcp
或者,如果通过 pip 安装:
patch-tuesday-mcp
从 VS Code 连接
选项 1:一键安装(推荐)
点击本 README 顶部的 在 VS Code 中设置 徽章即可自动配置(需要安装 uv)。
选项 2:手动配置
VS Code 使用专用的 mcp.json 文件存储 MCP 服务,而不是 settings.json。 打开命令面板(Windows/Linux 上按 Ctrl+Shift+P,macOS 上按 Cmd+Shift+P),然后运行以下命令之一:
MCP: Open User Configuration— 编辑用户级mcp.json(适用于每个工作区)MCP: Open Workspace Folder Configuration— 编辑项目本地的.vscode/mcp.json
然后添加服务。请注意,VS Code 使用顶层 "servers" 键(其他客户端使用 "mcpServers" 键):
{
"servers": {
"patch-tuesday": {
"type": "stdio",
"command": "uvx",
"args": ["patch-tuesday-mcp"]
}
}
}
从 Claude Desktop 连接
将以下内容添加到 Claude Desktop MCP 配置中:
- macOS:
~/Library/Application Support/Claude/claude_desktop_config.json - Windows:
%APPDATA%\Claude\claude_desktop_config.json
使用 uvx(推荐)
{
"mcpServers": {
"patch-tuesday": {
"command": "uvx",
"args": ["patch-tuesday-mcp"]
}
}
}
使用已安装的软件包
{
"mcpServers": {
"patch-tuesday": {
"command": "patch-tuesday-mcp"
}
}
}
从 Cursor 连接
选项 1:一键安装(推荐)
cursor://anysphere.cursor-deeplink/mcp/install?name=patch-tuesday-mcp&config=eyJjb21tYW5kIjogInV2eCIsICJhcmdzIjogWyJwYXRjaC10dWVzZGF5LW1jcCJdfQ==
选项 2:手动配置
将以下内容添加到 Cursor MCP 配置(~/.cursor/mcp.json):
{
"mcpServers": {
"patch-tuesday": {
"command": "uvx",
"args": ["patch-tuesday-mcp"]
}
}
}
从 Claude Code 连接
claude mcp add --transport stdio patch-tuesday -- uvx patch-tuesday-mcp
从 GitHub Copilot CLI 连接
添加到 ~/.copilot/mcp-config.json:
{
"mcpServers": {
"patch-tuesday": {
"type": "stdio",
"command": "uvx",
"args": ["patch-tuesday-mcp"]
}
}
}
将 MCP 服务自托管为远程 MCP 服务
该服务还支持 HTTP 传输,可用于远程/共享部署:
MCP_TRANSPORT=http MCP_PORT=8000 patch-tuesday-mcp
# MCP endpoint: http://localhost:8000/mcp
也可以使用 Docker:
docker build -t patch-tuesday-mcp .
docker run -p 8000:8000 patch-tuesday-mcp
HTTP 模式环境变量:
| 变量 | 默认值 | 描述 |
|---|---|---|
MCP_TRANSPORT | stdio | 远程服务设置为 http |
MCP_HOST / MCP_PORT | 0.0.0.0 / 8000 | 绑定地址 |
MCP_MAX_BODY_BYTES | 262144 | 请求正文大小上限;超过此值时返回 413(0 表示禁用) |
MCP_CORS_ORIGINS | *(全部) | 以逗号分隔的浏览器来源允许列表。公开部署时请设置明确的列表(例如 https://app.example.com) |
MCP_LIMIT_CONCURRENCY | 40 | 并发进行中的连接数上限;超过此值时,uvicorn 返回 503(0 表示禁用) |
MCP_TIMEOUT_KEEP_ALIVE | 15 | 空闲的 keep-alive 连接关闭前的等待秒数 |
MCP_LOG_LEVEL | WARNING | 根日志级别(DEBUG/INFO/WARNING/ERROR/CRITICAL);日志输出到 stderr |
MCP_MSRC_MAX_RESPONSE_BYTES | 67108864 (64 MiB) | 单个 MSRC 上游响应正文的上限(流式读取,不会缓冲超过上限的内容) |
MCP_ENRICHMENT_MAX_RESPONSE_BYTES | 33554432 (32 MiB) | 单个 EPSS/KEV 上游响应正文的上限 |
MCP_KNOWN_ISSUES_MAX_RESPONSE_BYTES | 4194304 (4 MiB) | 单个 support.microsoft.com KB 页面正文的上限(已知问题/更新摘要查询) |
APPLICATIONINSIGHTS_CONNECTION_STRING | 未设置 | 选择启用使用情况遥测(需要 pip install patch-tuesday-mcp[telemetry]) |
MCP_DEPRECATION_SUNSET | 未设置 | 此部署停止提供服务的 ISO 日期(YYYY-MM-DD)。设置此项时还需同时设置 MCP_DEPRECATION_REPLACEMENT_URL,以发布迁移公告(见下文) |
MCP_DEPRECATION_REPLACEMENT_URL | 未设置 | 客户端应迁移到的 URL |
MCP_DEPRECATION_SINCE | 未设置 | 可选的弃用公告 ISO 日期(以 RFC 9745 Deprecation 日期形式发出) |
MCP_DEPRECATION_MESSAGE | 未设置 | 可选的人类可读通知文本覆盖值 |
发布弃用公告(自托管者)
如果你要停用某个部署,请仅在该部署上设置 MCP_DEPRECATION_SUNSET 和
MCP_DEPRECATION_REPLACEMENT_URL。随后,服务器会通过以下四种渠道
报告迁移信息:
- 每个
msrc_search响应(以及/health)中的deprecation块 - 响应头
Deprecation、Sunset和Link: <url>; rel="successor-version"(RFC 9745、 RFC 8594、 RFC 5829) - MCP 服务在连接时向客户端显示的
instructions msrc_search工具描述
这些内容都只是描述性信息:陈述有关该部署的事实。它们绝不会指示已连接的 Agent 说或做任何事情——向其他人的模型发出指令的工具输出,无论载荷看起来多么无害,都属于提示词注入。变量未设置时,行为逐字节保持不变;只设置这一对变量中的一个,或日期格式错误,都会被忽略。
HTTP 模式还提供 GET /health(存活状态端点),并以无状态方式运行,因此可以在负载均衡器后扩展到多个副本,无需会话亲和性。
加固公开的 HTTP 部署
HTTP 传输未经身份验证——msrc_search 只读取公开的漏洞数据,但开放的端点仍可能被滥用。在将其暴露到互联网之前:
- 在前端设置经过身份验证的入口。 在反向代理 / API 网关处终止 TLS 并要求身份验证(例如 Azure API Management、
oauth2-proxy等 OAuth2/OIDC 代理、Cloudflare Access,或你的 Ingress 控制器的身份验证功能)。此服务有意不内置身份验证,以便你在其前面接入组织标准的访问控制。 - 限制 CORS。 将
MCP_CORS_ORIGINS设置为 MCP 客户端的确切来源,而不是宽松的默认值*。 - 保持默认设置。 将
MCP_MAX_BODY_BYTES和MCP_LIMIT_CONCURRENCY保持为默认值(或进一步收紧)——它们是防止负载过大和连接耗尽的第一道防线。 - 上游读取有上限,且不会跟随重定向。 从 MSRC/EPSS/KEV 获取的响应会在流式读取时限制大小,并且永不跟随 HTTP 重定向,因此行为异常的上游不会耗尽容器内存。
本地 stdio 用法不受以上内容影响;默认传输不会运行这些中间件。
该容器可在任何能够提供 HTTP 服务的主机上运行——Azure Container Apps、Cloud Run、Fly.io 或普通 VM。
遥测与隐私
- 本地 stdio(默认):绝不收集遥测数据——不存在任何会发送数据的代码路径。
- 托管端点会将最少量的使用数据记录到 Azure Application Insights(保留 90 天):每日加盐的客户端 IP 哈希值(绝不存储原始 IP;仅在内存中短暂保留以防止滥用)、请求路径和时间戳、所用工具参数(仅参数名称——绝不记录查询文本或 CVE/KB 值;仅保留低基数的
month和severity值)、结果数量、延迟和错误类别。不使用 Cookie,不涉及账户,也不记录请求 / 响应正文。 - 自托管 HTTP 不会收集任何数据,除非你将
APPLICATIONINSIGHTS_CONNECTION_STRING设置为自己的资源——这样,同一组最少量的数据就会发送到你的实例。
开发
pip install -e ".[dev]"
pytest # offline suite (mocked feeds)
pytest --run-live # also run live smoke tests against the real MSRC / EPSS / KEV APIs
pytest --cov=patch_tuesday_mcp # coverage (CI enforces >= 90%)
ruff check src/ tests/
CI(GitHub Actions)会在 Python 3.11/3.12/3.14 上运行离线测试套件并检查覆盖率门槛,使用 ruff 进行 lint,构建容器,使用 Trivy 扫描容器,并在每次推送 / PR 时生成 SPDX SBOM。发布构建会为已发布的 wheel/sdist 证明其来源。依赖项已锁定在 uv.lock 中(Docker 构建通过 uv sync --locked 使用)。
安全
请参阅 SECURITY.md,了解受支持的版本、范围,以及如何私下报告漏洞。
许可证
MIT
评论
一个开放协议,规定了 AI 应用如何以统一方式连接外部工具与数据源。客户端负责与模型对话,MCP 服务负责提供工具、资源和提示模板,两者通过标准消息通信,同一个服务可以被不同客户端复用。