关于 Critical Infrastructure Interdependency MCP Server
Critical Infrastructure Interdependency MCP Server 分析能源、电信、水务、网络、交通和金融网络中的故障传播。它结合基础设施与灾害数据,支持网络韧性评估和恢复规划。
主要功能
- 01构建跨行业基础设施网络
- 02模拟故障级联传播
- 03识别关键基础设施节点
- 04评估网络物理攻击路径
- 05分析地理灾害暴露风险
- 06估算恢复时间线
适用场景
- 01模拟灾害对基础设施的影响
- 02确定优先保护的设施
- 03追踪网络漏洞到物理风险的路径
- 04规划故障后的恢复工作
MCP 相关
它通过远程 MCP 端点提供八种专用工具,使兼容 MCP 的 AI Agent 能运行基础设施和级联分析。
配置
远程服务无需本地安装。选择你使用的客户端,复制配置或使用一键安装。
https://ryanclinton--critical-infrastructure-interdependency-mcp.apify.actor/mcpclaude mcp add --transport http critical-infrastructure-interdependency https://ryanclinton--critical-infrastructure-interdependency-mcp.apify.actor/mcp{"mcpServers":{"critical-infrastructure-interdependency":{"type":"http","url":"https://ryanclinton--critical-infrastructure-interdependency-mcp.apify.actor/mcp"}}}在 Cursor 中打开{"servers":{"critical-infrastructure-interdependency":{"type":"http","url":"https://ryanclinton--critical-infrastructure-interdependency-mcp.apify.actor/mcp"}}}在 VS Code 中打开{"mcpServers":{"critical-infrastructure-interdependency":{"type":"http","url":"https://ryanclinton--critical-infrastructure-interdependency-mcp.apify.actor/mcp"}}}{"mcpServers":{"critical-infrastructure-interdependency":{"serverUrl":"https://ryanclinton--critical-infrastructure-interdependency-mcp.apify.actor/mcp"}}}命令在终端中运行;JSON 粘贴到对应客户端的 MCP 配置后重启。需要授权的服务会在首次连接时提示登录。
工具
详细介绍
关键基础设施互依 MCP 服务
快速开始
添加到你的 MCP 客户端(Claude Desktop、Cursor、Windsurf):
{
"mcpServers": {
"critical-infrastructure-interdependency-mcp": {
"url": "https://ryanclinton--critical-infrastructure-interdependency-mcp.apify.actor/mcp"
}
}
}
面向 AI Agent 的关键基础设施级联分析——此 MCP 服务可绘制能源、电信、水务、网络安全、交通和金融网络之间的跨行业互依关系,并模拟故障如何在这些网络中传播。将任何兼容 MCP 的 AI Agent 连接到 8 个专用工具,这些工具基于来自 14 个实时数据源的真实数据运行 6 种数学算法。
该服务基于 OpenStreetMap 基础设施数据、DNS 记录、漏洞数据库以及地震/天气/灾害信息源,构建一个 6 层多重超图,然后应用 BTW 沙堆级联模拟、Voronoi 地理共址风险、关键路径法恢复时间估算和超拉普拉斯代数连通性索引,生成可付诸行动的韧性情报。除 API 令牌外,无需任何设置——通过 Model Context Protocol /mcp 端点连接即可。
可以访问哪些数据?
| 数据点 | 来源 | 覆盖范围 |
|---|---|---|
| 📍 物理基础设施节点 | OSM POI Search | 全球 OpenStreetMap(机场、变电站、水厂、数据中心) |
| 🌐 DNS 记录和 IP 拓扑 | DNS Record Lookup | 任意域名——A、MX、NS、CNAME 记录 |
| 🛰️ 互联网主机暴露情况 | Censys Search | 完整 IPv4 扫描数据,包括开放端口和横幅信息 |
| 🔒 SSL 证书链 | crt.sh Search | 任意域名的证书透明度日志 |
| 💻 网站技术指纹 | Website Tech Stack Detector | 任意 URL 的 CMS、框架、CDN、托管信息 |
| 🌍 IP 地理位置 | IP Geolocation Lookup | 全球 IP 到坐标的解析,用于网络拓扑分析 |
| ⚠️ CVE 漏洞 | NVD CVE Search | 完整 NVD 数据库,含 CVSS 评分 |
| 🚨 正在被积极利用的漏洞 | CISA KEV Catalog | 已知遭利用漏洞及修复期限 |
| 🌋 地震事件 | USGS Earthquake Search | 全球地震目录,含震级和坐标 |
| 🌩️ 天气预警 | NOAA Weather Alerts | 美国国家气象局发布的有效预警 |
| 🏚️ 美国灾害声明 | FEMA Disaster Search | 按州划分的总统灾害声明 |
| 🌊 洪水预警 | UK Flood Monitoring | 英格兰和威尔士环境署洪水数据 |
| 🌏 全球灾害预警 | GDACS | 联合国相关机构发布的全球实时灾害通知 |
| 📌 地理编码 | Nominatim | OpenStreetMap 地理编码器——支持任意城市、州或国家 |
为什么使用 Critical Infrastructure Interdependency MCP Server?
基础设施韧性分析传统上需要专业 GIS 软件、专有漏洞数据库和自定义模拟代码,而这些代码需要数周才能编写完成。咨询公司对单次区域基础设施评估的收费高达 50,000–200,000 美元。应急管理机构开展的桌面演练则完全无法涵盖级联效应的定量动态。
此 MCP 服务可自动完成整个流程——从发现原始基础设施,到模拟级联效应,再到估算恢复时间——只需在一次 AI Agent 对话中即可完成。分析人员只需调用一次工具,就能模拟 4 级飓风对德克萨斯州电网的影响,找出故障后会导致金融服务发生级联故障的三个变电站,并使用关键路径法估算恢复时间,整个过程无需离开 AI 助手。
- 计划任务 — 每周运行韧性快照,跟踪基础设施变化对代数连通度的影响
- API 访问 — 通过集成 Apify 的 Python、JavaScript 或任何 HTTP 客户端,以编程方式触发评估
- 代理轮换 — 底层数据采集 Actor 使用 Apify 内置的代理基础设施,可靠地开展大规模发现
- 监控 — 基础设施发生变化后,韧性指数低于阈值时接收 Slack 或电子邮件提醒
- 集成 — 将结果连接到 Zapier、Make、Google Sheets,或通过 Webhook 将结构化发现结果直接推送到 GRC 平台
功能
- 6 层多路复用超图构建 — 根据真实的 OSM POI 数据、DNS 记录和地理编码坐标,构建覆盖能源、电信、水务、网络安全、交通和金融领域的 InfraNode/InfraEdge 网络
- 硬编码的领域依赖权重 — 层间边编码经验耦合强度:电信到能源为 0.9、金融到网络安全为 0.9、网络安全到电信为 0.95、水务到能源为 0.85
- BTW 沙堆级联模拟 — 实现 Bak-Tang-Wiesenfeld 自组织临界模型:当任一节点的负载 z_i 超过阈值 z_c = 1.0 时,该节点就会发生崩塌,并按 z_neighbor += z_i / degree(i) 将负载重新分配给邻居,同时跟踪雪崩规模分布和幂律指数
- SOC 检测 — 测量临界指数,并标记表现出自组织临界行为的系统;在这类系统中,小扰动可能引发大规模崩溃
- 图积网络物理耦合 — 构建网络攻击图(AG)与物理依赖图(PG)的张量积,以识别从 CVE 漏洞级联到物理基础设施损害的攻击链
- Voronoi 地理共址风险 — 将区域划分为 Voronoi 单元,叠加地震、洪水、天气和灾害数据,并按以下公式计算每个单元的风险:存在的领域数 × 灾害概率 ×(1 − Shannon 熵多样性)
- CPM 恢复时间线估算 — 在遵循领域恢复顺序(能源 → 水务 → 电信 → 交通 → 网络安全 → 金融)的依赖 DAG 上执行正向和反向遍历,并采用默认恢复时长(能源:72h,水务:48h,电信:24h),生成关键路径和总时差为零的瓶颈节点
- 超拉普拉斯代数连通度 — 计算所有 6 层超拉普拉斯矩阵的 lambda_2(Fiedler 值);根据 Fiedler 向量将韧性划分为 CRITICAL / LOW / MODERATE / HIGH / VERY_HIGH
- 多指标关键节点识别 — 按综合评分对节点评分:级联影响占 40% + 移除节点后的代数连通度下降占 30% + 度中心性占 30%
- Haversine 距离计算 — 使用精确的球面几何计算地理邻近边和影响区域(距区域中心的半径,单位为 km)
- 并行 Actor 编排 — 通过
runActorsParallel并发运行最多 14 个底层 Actor,将每次工具调用的总耗时从 20 多分钟缩短至 3–5 分钟 - 支出限额执行 — 每次工具调用都会在运行前检查
Actor.charge()事件限额,达到单次运行预算时会正常停止 - 基于关键词的领域分类 — 使用覆盖 6 个领域的 60 多个基础设施关键词(例如“变电站”“数据中心”“渡槽”“清算所”)对 OSM POI 节点进行分类
关键基础设施相互依赖性分析的使用场景
应急管理与灾害准备
州和联邦应急管理人员使用 model_natural_disaster_impact,在地震、洪水或飓风发生前模拟其对区域基础设施的影响。该工具将真实的 USGS 地震数据和 NOAA 天气警报与 OSM 基础设施网络相结合,从直接受影响的节点开始运行 BTW 级联模拟,并通过 CPM 估算总恢复时间,从而生成结构化简报,量化受影响网络的百分比,并识别恢复任务中的瓶颈。
关键基础设施保护与投资优先级排序
设施安全官员和基础设施投资分析师使用 identify_critical_nodes,根据综合关键性评分对某个区域内的每个节点进行排序。无需对所有设施采取同等保护措施,多指标评分(级联影响、代数连通度下降、度中心性)可以识别出失效后会对整个跨领域网络造成最大破坏的 5–10 个节点,从而有针对性地投资加固。
ICS/OT 安全的网络物理威胁建模
ICS 安全团队和 APT 红队使用 assess_cyber_physical_attack,绘制 SCADA 系统、ICS 软件或暴露于互联网的控制系统中的漏洞如何导致物理基础设施受损。图产品攻击面模型会从 NVD CVE 和 CISA KEV 条目出发,追踪经由 Censys 发现的暴露主机通向物理依赖节点的最大权重利用链,找出最容易被利用的网络入口点和最脆弱的物理资产。
基础设施韧性审计与法规合规
受 NERC CIP、TSA 管道安全指令或 DORA 要求约束的公用事业、通信和金融机构,使用 generate_resilience_assessment 生成完整的定量韧性报告。该评估将全部 6 种算法——超图构建、级联模拟、网络物理耦合、地理共址风险、CPM 恢复时间估算和 supra-Laplacian 代数连通性——整合到单一结构化输出中,其中包含调查结果、建议和系统韧性指数。
保险承保与灾害风险建模
保险和再保险公司的灾害风险建模人员使用 compute_geographic_correlation,识别多个基础设施行业聚集在同一灾害区域内的地理区域。结合香农熵多样性指数的 Voronoi 镶嵌法揭示了传统财产巨灾模型容易遗漏的共址风险——位于 FEMA 洪水区、邻近变电站的数据中心,其风险状况与孤立资产有本质区别。
事件后的恢复规划
故障事件发生后,事件指挥人员和基础设施恢复团队使用 estimate_recovery_timeline 确定恢复全面运行的关键路径。CPM 正向/反向遍历会考虑物理依赖关系(电力和通信恢复之前,金融系统无法恢复),并识别时差为零的瓶颈节点;一旦这些节点延迟,就会决定总恢复时间。
如何使用此 MCP 服务进行基础设施分析
-
将服务连接到你的 AI Agent——将 MCP 端点 URL 添加到客户端配置中。对于 Claude Desktop,请将下方“如何连接”部分中的 JSON 代码块粘贴到
claude_desktop_config.json。配置中无需 API 密钥,服务会处理身份验证。 -
从一个区域开始——在与 Agent 的对话中,让它调用
build_infrastructure_network,并提供城市、州或国家/地区名称,例如“Houston, Texas”或“Netherlands”。也可以提供已知的基础设施域名,以丰富网络层数据。 -
运行分析工具——让 Agent 针对同一区域调用
simulate_cascade_failure、compute_geographic_correlation、identify_critical_nodes或model_natural_disaster_impact。每个工具都会重新构建网络,或接受先前调用build_infrastructure_network的输出。 -
查看结构化结果——每个工具都会返回 JSON 报告,其中包含网络统计数据、排序后的发现、行业细分和地理坐标。让 Agent 总结发现、生成风险简报或导出结构化数据。
如何连接此 MCP 服务
Claude Desktop
{
"mcpServers": {
"critical-infrastructure-interdependency": {
"url": "https://critical-infrastructure-interdependency-mcp.apify.actor/mcp"
}
}
}
Cursor
{
"mcpServers": {
"critical-infrastructure-interdependency": {
"url": "https://critical-infrastructure-interdependency-mcp.apify.actor/mcp"
}
}
}
Windsurf / Codeium
{
"mcpServers": {
"critical-infrastructure-interdependency": {
"url": "https://critical-infrastructure-interdependency-mcp.apify.actor/mcp"
}
}
}
MCP 工具参考
| 工具 | 描述 | 典型费用 |
|---|---|---|
build_infrastructure_network | 根据 OSM POI、DNS、技术栈、地理编码和 IP 地理定位数据,构建 6 层多路超图。返回超邻接矩阵和各层统计信息。 | $150–200 |
simulate_cascade_failure | 使用可配置的触发节点或行业运行 BTW 沙堆级联模拟。返回雪崩规模分布、临界指数和 SOC 标志。 | $150–250 |
assess_cyber_physical_attack | 通过 CVE/KEV/Censys 攻击图与物理依赖图的图积,对网络到物理攻击面进行建模。返回漏洞利用链和最易受攻击的资产。 | $200–350 |
compute_geographic_correlation | 进行叠加多灾害数据(地震、洪水、天气、灾害)的 Voronoi 镶嵌。返回按相关性风险评分排序的高风险网格。 | $150–300 |
estimate_recovery_timeline | 对依赖 DAG 进行 CPM 正向/反向计算。返回总恢复时长、关键路径节点、行业恢复顺序和零时差瓶颈。 | $150–200 |
identify_critical_nodes | 根据综合评分对节点排名:级联影响(40%)+ 代数连通度下降(30%)+ 度中心性(30%)。返回排名前 N 的节点及说明理由。 | $150–250 |
model_natural_disaster_impact | 完整流程:针对指定灾害类型和影响半径,执行灾害数据分析、基础设施网络构建、级联模拟和 CPM 恢复计算。 | $200–400 |
generate_resilience_assessment | 运行全部 6 种算法并覆盖全部 14 个数据源,进行全面审计。返回系统韧性指数、发现结果和优先级建议。 | $300–400 |
工具输入参数
| 工具 | 参数 | 类型 | 必填 | 默认值 | 描述 |
|---|---|---|---|---|---|
| 所有工具 | region | string | 是 | — | 城市、州或国家/地区名称(例如,“Houston, Texas”) |
build_infrastructure_network | domains | string[] | 否 | — | 用于网络层丰富的基础设施域名 |
build_infrastructure_network | sectors | string[] | 否 | 全部 6 个 | 重点行业:能源、电信、水务、网络安全、交通、金融 |
build_infrastructure_network | radius_km | number | 否 | 100 | 从区域中心开始的搜索半径,单位为千米 |
simulate_cascade_failure | trigger_nodes | string[] | 否 | — | 要触发的特定节点 ID(来自 build_infrastructure_network) |
simulate_cascade_failure | trigger_sector | string | 否 | — | 触发该行业中关键性最高的 3 个节点 |
simulate_cascade_failure | max_cascade_steps | number | 否 | 50 | 级联传播的最大迭代次数 |
assess_cyber_physical_attack | domains | string[] | 是 | — | 要扫描网络攻击面的目标域名或 IP |
assess_cyber_physical_attack | cve_keywords | string | 否 | "SCADA ICS critical infrastructure" | 用于查询漏洞的 CVE 搜索关键词 |
compute_geographic_correlation | include_earthquakes | boolean | 否 | true | 是否包含 USGS 地震叠加层 |
compute_geographic_correlation | include_weather | boolean | 否 | true | 是否包含 NOAA 天气预警叠加层 |
compute_geographic_correlation | include_floods | boolean | 否 | true | 是否包含 FEMA/UK Flood/GDACS 叠加层 |
compute_geographic_correlation | days_lookback | number | 否 | 30 | 要纳入的历史灾害数据天数 |
estimate_recovery_timeline | failed_node_ids | string[] | 否 | 所有节点 | 级联输出中的特定故障节点 ID |
estimate_recovery_timeline | failed_sectors | string[] | 否 | — | 假设这些行业中的所有节点均已故障 |
estimate_recovery_timeline | scenario | string | 否 | — | 用于输出上下文的场景描述 |
identify_critical_nodes | top_n | number | 否 | 10 | 要返回的关键节点数量 |
model_natural_disaster_impact | disaster_type | string | 否 | "all" | 地震、洪水、飓风、野火或“all” |
model_natural_disaster_impact | impact_radius_km | number | 否 | 100 | 灾害影响区半径,单位为千米 |
generate_resilience_assessment | domains | string[] | 否 | — | 网络层的基础设施域名 |
generate_resilience_assessment | cve_keywords | string | 否 | "SCADA ICS critical infrastructure" | CVE 搜索关键词 |
输出示例
以下是 model_natural_disaster_impact 针对大型城市区域生成的代表性输出:
{
"region": "Houston, Texas",
"disasterType": "earthquake",
"impactZone": {
"center": { "lat": 29.7604, "lon": -95.3698 },
"radiusKm": 100,
"directlyImpactedNodes": 34,
"cascadeAdditionalNodes": 18,
"totalAffectedNodes": 52,
"totalNetworkNodes": 67,
"percentageAffected": 78
},
"cascadeAnalysis": {
"totalAvalanches": 12,
"maxAvalancheSize": 19,
"isSelfOrganizedCritical": true,
"affectedSectors": ["energy", "water", "telecom", "transport", "financial"]
},
"recoveryEstimate": {
"totalRecoveryHours": 218.4,
"totalRecoveryDays": 9.1,
"criticalPathLength": 8,
"sectorRecoveryOrder": [
{ "sector": "energy", "startHour": 0, "endHour": 68.2 },
{ "sector": "water", "startHour": 0, "endHour": 51.7 },
{ "sector": "telecom", "startHour": 68.2, "endHour": 89.5 },
{ "sector": "transport", "startHour": 68.2, "endHour": 97.1 },
{ "sector": "cyber", "startHour": 89.5, "endHour": 101.8 },
{ "sector": "financial", "startHour": 101.8,"endHour": 110.3 }
],
"bottleneckNodes": ["node-4", "node-11", "node-23"]
},
"geographicRisk": {
"highRiskCells": 7,
"maxCorrelationRisk": 3.84
},
"hazardData": {
"earthquakes": 14,
"weatherAlerts": 6,
"femaDisasters": 9,
"gdacsAlerts": 3,
"floodWarnings": 5
}
}
identify_critical_nodes 的代表性输出:
{
"region": "Rotterdam, Netherlands",
"networkSize": { "nodes": 71, "edges": 184 },
"resilienceIndex": {
"algebraicConnectivity": 0.12,
"resilience": "LOW",
"networkPartitionRisk": 0.73
},
"criticalNodes": [
{
"nodeId": "node-3",
"nodeName": "Pernis Oil Refinery Power Substation",
"sector": "energy",
"criticalityScore": 0.891,
"reasons": ["Triggers avalanche size 23 in BTW cascade", "Removal reduces lambda_2 by 0.047", "Degree centrality 0.31 across all layers"]
},
{
"nodeId": "node-17",
"nodeName": "Rotterdam Port Fiber Exchange",
"sector": "telecom",
"criticalityScore": 0.764,
"reasons": ["Cascade impact to 4 sectors", "Inter-layer hub: telecom/cyber/financial", "Zero slack in CPM recovery path"]
}
],
"sectorBreakdown": [
{ "sector": "energy", "criticalCount": 4, "avgCriticality": 0.781 },
{ "sector": "telecom", "criticalCount": 3, "avgCriticality": 0.694 },
{ "sector": "water", "criticalCount": 2, "avgCriticality": 0.612 },
{ "sector": "cyber", "criticalCount": 1, "avgCriticality": 0.587 },
{ "sector": "transport", "criticalCount": 2, "avgCriticality": 0.541 },
{ "sector": "financial", "criticalCount": 1, "avgCriticality": 0.498 }
]
}
输出字段
| 字段 | 类型 | 描述 |
|---|---|---|
region | string | 输入的区域名称 |
network.totalNodes | number | 所有 6 个层中的基础设施节点总数 |
network.totalEdges | number | 层内边与层间边的总数 |
network.interLayerEdges | number | 超邻接矩阵中的跨行业依赖边 |
network.layers | object | 每个行业的节点数、边数和密度 |
nodes[].id | string | 唯一节点标识符(例如,“node-14”) |
nodes[].name | string | 来自 OSM 或地理编码器的基础设施名称 |
nodes[].sector | string | 行业:能源 / 电信 / 水务 / 网络安全 / 交通 / 金融 |
nodes[].criticality | number | 通过综合评分得出的节点关键性,范围为 0–1 |
nodes[].lat | number | 纬度坐标 |
nodes[].lon | number | 经度坐标 |
simulation.isSelfOrganizedCritical | boolean | 如果雪崩规模符合幂律,则为 True |
simulation.criticalityExponent | number | 雪崩规模分布的幂律指数 |
simulation.maxAvalancheSize | number | 所有触发事件中观测到的最大级联规模 |
avalanches[].affectedSectors | string[] | 此级联事件波及的行业 |
attackSurface.productGraphNodes | number | 网络安全 × 物理乘积图中的节点数 |
attackSurface.attackSurfaceArea | number | 综合攻击面指标 |
criticalPaths[].exploitChain | string[] | 构成攻击路径的有序 CVE / 主机 ID |
criticalPaths[].physicalCascade | string[] | 下游受影响的物理节点 ID |
criticalPaths[].combinedRisk | number | 网络安全与物理风险的综合评分 |
geoCorrelation.highRiskCells | number | 相关性风险高于阈值 1.0 的 Voronoi 单元格数 |
geoCorrelation.maxCorrelationRisk | number | 所有单元格中的最高风险值 |
recovery.totalRecoveryHours | number | 通过 CPM 估算的总恢复时间 |
recovery.criticalPath | string[] | 决定总恢复时间的零时差节点 ID |
recovery.bottleneckNodes | string[] | 延迟时会延长总恢复时间的节点 |
recovery.sectorRecoveryOrder | object[] | 恢复顺序中每个行业的开始 / 结束小时数 |
resilienceIndex.algebraicConnectivity | number | 超拉普拉斯矩阵的 Lambda_2 Fiedler 值 |
resilienceIndex.resilience | string | CRITICAL / LOW / MODERATE / HIGH / VERY_HIGH |
resilienceIndex.networkPartitionRisk | number | 网络在压力下发生分裂的类概率评分 |
findings | string[] | 根据综合分析自动生成的警告和建议 |
关键基础设施分析的费用是多少?
此 MCP 服务采用按事件付费模式——按工具调用次数计费。平台计算费用已包含在内。
| 场景 | 工具 | 每次调用费用 | 典型月费 |
|---|---|---|---|
| 区域快速快照 | identify_critical_nodes | ~$0.04 | $0.04 |
| 灾害影响模拟 | model_natural_disaster_impact | ~$0.04 | $0.04 |
| 全面韧性审计 | generate_resilience_assessment | ~$0.04 | $0.04 |
| 每周监控(1 个区域) | 任意单个工具 × 4 | ~$0.04 | $0.16 |
| 多区域项目(10 个区域) | generate_resilience_assessment × 10 | ~$0.04 | $0.40 |
每次工具调用仅收取一笔平台事件费用。底层 Actor(OSM、USGS、NVD 等)在数据收集期间会消耗 Apify 计算积分——$0.04 的事件费用用于支付 MCP 服务的编排层费用,而底层 Actor 运行则会从你的平台积分余额中扣除。
你可以为每次运行设置最高支出限额以控制费用。达到预算后,服务会正常停止。Apify 免费计划每月包含 $5 的平台积分——足以免费进行数十次分析工具调用。
使用 API 分析关键基础设施
Python
from apify_client import ApifyClient
client = ApifyClient("YOUR_API_TOKEN")
run = client.actor("ryanclinton/critical-infrastructure-interdependency-mcp").call(run_input={})
print(f"MCP server running at: https://critical-infrastructure-interdependency-mcp.apify.actor/mcp")
print(f"Actor run ID: {run['id']}")
print(f"Status: {run['status']}")
JavaScript
import { ApifyClient } from "apify-client";
const client = new ApifyClient({ token: "YOUR_API_TOKEN" });
const run = await client.actor("ryanclinton/critical-infrastructure-interdependency-mcp").call({});
console.log(`MCP server running at: https://critical-infrastructure-interdependency-mcp.apify.actor/mcp`);
console.log(`Actor run ID: ${run.id}`);
console.log(`Status: ${run.status}`);
cURL
# Start the MCP server actor run
curl -X POST "https://api.apify.com/v2/acts/ryanclinton~critical-infrastructure-interdependency-mcp/runs?token=YOUR_API_TOKEN" \
-H "Content-Type: application/json" \
-d '{}'
# The MCP endpoint becomes available at:
# https://critical-infrastructure-interdependency-mcp.apify.actor/mcp
# Use this URL in your MCP client configuration
通过 HTTP 直接调用 MCP 工具
curl -X POST "https://critical-infrastructure-interdependency-mcp.apify.actor/mcp" \
-H "Content-Type: application/json" \
-d '{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "identify_critical_nodes",
"arguments": {
"region": "Houston, Texas",
"top_n": 10
}
}
}'
此 MCP 服务的工作原理
阶段 1:基础设施发现与多层超图构建
buildMultiplexHypergraph 函数在每次工具调用中从最多 5 个来源采集数据——OSM POI、Nominatim 地理编码器、DNS 查询、技术栈指纹和 IP 地理定位;然后使用包含 60 多个词条的关键词词典,将每个节点归入 6 个行业之一(例如,“substation” → 能源,“data center” → 网络空间,“aqueduct” → 水务)。当球面距离低于邻近阈值时,同层边会连接同一行业内的节点。层间边根据基础设施系统文献中的经验耦合权重,编码 12 种硬编码的行业依赖关系(例如,电信到能源的权重为 0.9,金融到网络空间的权重为 0.9)。结果是一个 MultiplexHypergraph,其中包含完整的超邻接矩阵,可供下游算法使用。
阶段 2:通过 BTW 沙堆模型模拟级联
simulateCascadeFailure 函数实现了 Bak-Tang-Wiesenfeld 自组织临界性模型。每个 InfraNode 都带有一个负载值(初始化为 0.3–0.8)和一个临界倾覆阈值 z_c = 1.0。当触发节点或行业发生故障时,负载会重新分配给邻居,计算方式为 z_neighbor += z_i / degree(i)。这一过程会迭代执行,最多进行 max_cascade_steps 步。该函数会跟踪雪崩事件,对雪崩规模序列拟合幂律分布,并标记临界指数表明存在真实自组织临界行为的系统——这意味着基础设施自然演化到了始终存在大规模崩溃可能性的状态。
阶段 3:通过图积实现网络空间与物理空间耦合
computeCyberPhysicalCoupling 函数构建两个图——来自 NVD CVE、CISA KEV 条目、Censys 发现的主机和 SSL 证书数据的网络攻击图(AG),以及来自 OSM 基础设施节点的物理依赖图(PG)。该函数构建二者的张量积 AG × PG,其中每个积节点 (a, p) 表示利用漏洞 a 攻陷物理资产 p。沿该积图的最大权重路径表示利用链,其从网络入侵级联到物理基础设施损害的概率最高。输出会识别 mostExploitableCyber(CVE 入口点)和 mostVulnerablePhysical(从网络攻击面最容易触及的物理资产)。
阶段 4:通过 Voronoi 镶嵌评估地理共址风险
computeGeographicCorrelation 函数将区域划分为 Voronoi 单元,并将每个地理区域分配给最近的基础设施节点,作为单元中心。对于每个单元,该函数叠加 USGS(地震)、NOAA(天气)、FEMA/GDACS(灾害)和 UK Flood Monitoring 的灾害数据。单元风险的计算方式为:sectors_present × hazard_probability × (1 − diversity_index),其中 diversity_index = Shannon_entropy(sector_counts) / log(n_sectors)。在高风险区域内,如果一个单元共址了 4 个行业且行业多样性较低,其得分会高于同一风险区域内行业分布多样化的集群——这同时反映了地理集中风险和行业冗余的缺失。
阶段 5:CPM 恢复时间线与超拉普拉斯韧性指数
estimateRecoveryTimeline 构建一个按依赖关系排序的 DAG,其中行业恢复必须遵循能源 → 水务 → 电信 → 交通 → 网络空间 → 金融的顺序。该函数运行标准 CPM 正向计算(ES(j) = max(ES(i) + duration(i)))和反向计算(LF(i) = min(LF(j) − duration(j))),识别组成关键路径的零时差节点。另一方面,computeResilienceIndex 会计算完整多层网络的超拉普拉斯矩阵,并近似求出 lambda_2(代数连通度/Fiedler 值)。lambda_2 接近零表示网络接近断连;该函数还会执行单节点移除敏感性分析,以识别移除哪个节点会导致连通度下降幅度最大。
获得最佳结果的提示
-
先运行
build_infrastructure_network,再运行其他工具。 构建网络的步骤与单独运行工具的成本相同,但会缓存地理信息和行业分类,让后续调用更快、更一致。 -
使用
generate_resilience_assessment生成合规报告。 只需调用这一个工具,就会运行全部 6 种算法和全部 14 个数据源,生成适合提交给监管机构的发现和建议。其成本大致相当于调用 2–3 个单独的工具。 -
评估网络物理风险时,提供基础设施域名。 如果未提供域名,
assess_cyber_physical_attack和build_infrastructure_network会跳过 DNS、技术栈、Censys 和 SSL 证书层。即使只提供 2–3 个已知域名(公用事业 SCADA 门户、ISP NOC 网站、金融交易所域名),也能大幅丰富网络层。 -
规划场景时,使用
trigger_sector,而不是trigger_nodes。 指定trigger_sector: "energy"会自动选择 3 个关键性最高的能源节点作为故障触发点,比随意指定节点 ID 更贴近实际,而且无需事先调用build_infrastructure_network。 -
将
compute_geographic_correlation与estimate_recovery_timeline结合用于保险业务。 地理位置共址分析能够揭示相关损失情景;CPM 恢复估算则可将其转化为业务中断时长。两者结合后,便能提供保险公司设计参数化保障所需的两项输入。 -
对于大型区域,将
radius_km降至 50。 默认的 100 km 半径可能会返回 50 个以上的基础设施节点,从而延长级联模拟和产品图计算的时间。缩小半径可生成更密集、更有意义的网络,适用于城市分析。 -
将
isSelfOrganizedCritical: true视为早期预警信号并加以监控。 在 BTW 模拟中呈现 SOC 行为的网络都处于脆弱状态。请立即标记此发现,并使用identify_critical_nodes确定应优先加固哪些节点。
与其他 Apify actors 结合使用
| Actor | 组合方式 |
|---|---|
| Website Tech Stack Detector | 在运行网络物理攻击评估前,使用已知基础设施域名的技术指纹,丰富 build_infrastructure_network 的网络层 |
| WHOIS Domain Lookup | 识别基础设施域名背后的注册组织,将企业所有权结构映射到金融行业层 |
| Company Deep Research | 在运行 identify_critical_nodes 后,对排名靠前的关键节点所属组织开展深入研究,以评估企业韧性和所有权集中度 |
| Cyber Attack Surface Report | 针对 assess_cyber_physical_attack 识别出的网络入口点开展专项攻击面评估,获取详细的修复指导 |
| B2B Lead Qualifier | 在韧性被标记为 CRITICAL 或 LOW 的区域中,识别基础设施咨询和安全供应商,以便有针对性地拓展业务 |
| Website Change Monitor | 跟踪基础设施运营商网站和 SCADA 供应商页面的变更,这些变更可能表明出现了新的 CVE 或系统更新,从而影响网络层 |
| Multi-Review Analyzer | 分析高风险区域公用事业供应商的客户评价,发现与基础设施脆弱性相关的服务质量信号 |
局限性
- OSM 基础设施的覆盖范围因地区而异,差异显著。 发达地区(西欧、北美)的 OSM 基础设施标记较为密集;发展中地区返回的网络可能较为稀疏,无法充分反映实际物理复杂性。
- BTW 沙堆的负载以随机值(0.3–0.8)初始化。 要获取真实的基础设施负载分布,需要 SCADA 遥测数据。该模型能够准确捕捉拓扑级联动态,但无法精确模拟潮流物理特性。
- 行业分类依赖基于名称的关键词匹配。 “Crown Castle Tower”会被正确分类为电信设施;未命名的 OSM 节点(“node-47”)则默认归为网络安全设施。名称不规范的节点可能会被误分类。
- 网络安全层需要明确提供域名输入。 如果未提供域名,网络安全层仅会收录可通过 DNS 观测到的基础设施。隔离网络或未列出的控制系统不会显示。
- 地理灾害叠加层使用当前和近期历史数据。 USGS、NOAA 和 FEMA API 返回当前的活跃事件和近期的灾害申报,而非工程级概率灾害图(PSHA、FEMA P-58)。
- 各行业的恢复时长采用统计默认值(能源:72 小时,供水:48 小时,电信:24 小时)。实际恢复时间取决于损坏程度、抢修人员是否充足以及供应链等因素,这些因素未纳入此模型。
- 大型网络的超拉普拉斯矩阵特征值计算为近似值。 实现采用幂迭代而非完整特征分解;对于 lambda_2,该方法收敛准确,但对于高度对称的图,结果可能与精确求解器有所差异。
- 服务器必须处于待机模式才能接受 MCP 连接。 服务器闲置后,冷启动延迟约为 30–60 秒。同一会话中的后续工具调用会立即响应。
集成
- Zapier — 新的 USGS 地震警报触发时,自动运行
model_natural_disaster_impact,并将结构化的恢复预估结果发送到应急行动 Slack 频道 - Make — 为受监测地区安排每周运行
generate_resilience_assessment,并将结果写入 Airtable 以跟踪趋势 - Google Sheets — 将
identify_critical_nodes的输出导出到共享电子表格,供基础设施保护投资委员会审阅 - Apify API — 将 MCP 服务 URL 集成到任何支持 Model Context Protocol 的 AI Agent 框架(LangChain、LlamaIndex、AutoGen)中
- Webhooks — 当受监测地区的
resilienceIndex.resilience降至 CRITICAL 或 LOW 时,向 GRC 平台发送 Webhook - LangChain / LlamaIndex — 在多 Agent 流水线中将此服务用作工具,由一个 Agent 负责基础设施分析,另一个 Agent 起草法规合规报告或高管简报
故障排查
某个区域返回的网络为空或内容极少。 这通常意味着该区域的 OpenStreetMap 覆盖稀疏。请尝试使用更大、更知名的城市或州名,而不是小镇或农村地区。即使 OSM 数据稀少,在 domains 参数中添加明确的域名也能丰富网络。
assess_cyber_physical_attack 返回的产品图节点为零。 此工具要求在 domains 参数中至少提供一个域名。如果没有域名,网络攻击图就没有节点,导致图乘积为空。请提供至少 2–3 个相关基础设施域名(公用事业运营商网站、交易所基础设施、ISP NOC 门户),以获得有意义的结果。
工具调用在 120 秒后超时。 各个底层 Actor 的超时时间为 120 秒;如果超时,它们会返回空数组。最常见的原因是 osmPoi 在非常大的区域中超时。请将 radius_km 减至 50,或指定范围更集中的城市级区域,以缩小 OSM 查询范围。
generate_resilience_assessment 的发现列表为空。 如果 6 种算法全部运行完毕,但均未触发警告阈值(韧性为 MODERATE 或更高、没有 SOC 行为、没有关键路径瓶颈),那么发现数组就会为空;这本身也是有意义的结果,表明网络的韧性相对较强。
小型网络的代数连通度报告为 0.0。 节点少于 3 个的网络会产生退化的拉普拉斯矩阵。这通常是因为 OSM 未返回该区域的 POI 数据。请确认该区域的 OSM 覆盖情况,或提供更大的地理范围。
负责任地使用
- 此服务仅访问来自 OpenStreetMap、USGS、NOAA、FEMA、GDACS、NVD、CISA 及其他开放政府来源的公开基础设施数据。
- DNS 查询、Censys 查询和技术栈检测均为被动且非侵入式操作——除标准 DNS 解析外,不会向目标基础设施发送数据包。
- 请勿使用基础设施映射结果来策划针对关键系统的攻击。此工具旨在用于防御性韧性分析、灾害应急准备和法规遵从。
- 请注意,在你所在的司法管辖区,详细的基础设施地图和漏洞评估可能受到 CISA 或行业特定监管框架下的信息共享限制。
- 有关负责任地使用基础设施数据的指南,请参阅 Apify 的指南。
常见问题
此 MCP 服务如何进行关键基础设施相互依赖性分析? 该服务根据真实基础设施数据(OpenStreetMap POI、DNS 记录、IP 地理定位)构建一个 6 层多重超图,并应用 6 种数学算法:BTW 沙堆级联模拟、图乘积网络物理耦合、Voronoi 地理共址风险、CPM 恢复时间估算、超拉普拉斯代数连通度,以及多指标关键节点识别。每次工具调用都会并行调度 5–14 个底层 Apify Actor,先收集最新实时数据,再运行算法。
模型涵盖哪些基础设施行业? 共 6 个行业:能源、电信、水务、网络、交通和金融。层间依赖边表示经验耦合权重——例如,电信对能源的耦合权重为 0.9,金融对网络的耦合权重为 0.9。这些权重用于超邻接矩阵和级联传播计算。
此服务使用多少个数据源?
共使用 14 个实时数据源:OSM POI Search、Nominatim 地理编码器、DNS Record Lookup、Censys Search、crt.sh SSL 证书、Website Tech Stack Detector、IP Geolocation、NVD CVE Search、CISA KEV Catalog、USGS Earthquake Search、NOAA Weather Alerts、FEMA Disaster Search、UK Flood Monitoring 和 GDACS 全球灾害警报。并非每次工具调用都会查询所有数据源——较轻量的工具只使用其中一部分,以降低成本。
什么是自组织临界性?它为何对基础设施至关重要?
BTW(Bak-Tang-Wiesenfeld)沙堆模型表明,复杂系统会自然演化到一种临界状态,在这种状态下,各种规模的雪崩都会发生。当 isSelfOrganizedCritical 为 true 时,基础设施网络的级联规模分布遵循幂律——这意味着大规模停电并非罕见的异常事件,而是在统计上不可避免。这是一种结构性警示,而不仅仅是某个场景的结果。
恢复时间线估算有多准确? CPM 恢复估算采用各行业默认的恢复时长作为基准(能源:72h,供水:48h,电信:24h,交通:36h,网络安全:12h,金融:8h),并根据节点级随机变化进行缩放。这些基准根据 FEMA 和 NERC 发布的恢复统计数据校准,并非针对特定工程场景的损害模型。请将输出视为用于规划的数量级估算,而不是精确的工程预测。
此 MCP 服务会主动扫描或探测基础设施吗? 不会。所有数据收集都是被动的。OSM 和 Nominatim 使用公共地理数据库。DNS 查询使用标准解析(不进行区域传送或主动探测)。Censys 数据来自其公开的互联网扫描数据库。技术栈检测使用标准 HTTP GET 请求。不会向目标系统发送自定义数据包、进行端口扫描或尝试身份验证。
这与 Dragos 或 Claroty 等商业基础设施风险平台有何不同? Dragos 和 Claroty 是 OT/ICS 安全平台,需要在运营技术网络内部部署传感器,才能进行实时监控和资产发现。此 MCP 服务是一个公开的数据情报层,完全依赖外部数据源(OSM、NVD、USGS 等)运行。它无需访问网络或部署 Agent,即可提供区域宏观层面的级联和韧性分析,从而补充 OT 安全工具。
我可以将其用于 NERC CIP 或 DORA 合规文档吗?
generate_resilience_assessment 工具会生成包含发现结果和建议的结构化 JSON 输出,可纳入监管文档。不过,该工具的输出基于公开数据和近似模型——在作为监管合规证据提交之前,应由合格工程师审核。它最适合用于梳理分析内容和发现差距,而不应作为主要的合规证明。
典型的工具调用需要多长时间?
较轻量的工具(identify_critical_nodes、simulate_cascade_failure)通常会在 3–5 分钟内完成。更全面的工具(generate_resilience_assessment、涉及多个领域的 assess_cyber_physical_attack)运行时会并行调用更多底层 actor,可能需要 8–15 分钟。每次底层 actor 调用的超时时间为 120 秒。
我可以安排此 MCP 服务每周生成韧性快照吗?
可以。你可以通过 Apify 平台内置的调度器,或通过 cron 驱动的 API 调用,按计划触发 actor 运行。针对受监控区域,每周运行 identify_critical_nodes 或 generate_resilience_assessment,即可持续跟踪基础设施变化(新的 OSM 数据、新的 CVE、季节性灾害模式)如何影响韧性指数。
以这种方式分析基础设施数据合法吗?
合法。所有使用的数据源都是公开的——OpenStreetMap、USGS、NOAA、FEMA、GDACS 和 NVD 都是明确面向公众使用的政府或开放数据服务。Censys 和 crt.sh 提供数据用于安全研究。不会访问任何私人或机密基础设施数据。如需了解数据收集实践的更多背景信息,请参阅 Apify 关于网络抓取合法性的指南。
如果某个地区的 OpenStreetMap 基础设施数据很少,会发生什么?
服务仍会运行,但会构建规模较小的网络。算法会平稳适应规模变化——即使是一个包含 5 个节点的网络,也能生成级联模拟结果、地理相关性网格和恢复时间线,只是统计显著性较低。在输入中提供 domains,即使在 OSM 覆盖稀疏的地区,也能丰富网络。
帮助我们改进
如果遇到问题,可以在 Apify 账户中启用运行共享,帮助我们更快地调试:
- 前往 账户设置 > 隐私
- 启用 与公开的 Actor 创建者共享运行记录
这样一来,出错时我们就能查看运行详情,从而更快地修复问题。只有 Actor 开发者可以看到你的数据,数据不会公开。
支持
发现错误或有功能需求?请在此 Actor 页面上的 问题选项卡中提交问题。如需定制解决方案或企业集成(例如添加专有基础设施数据源、自定义行业定义或与 SCADA 遥测数据流集成),请通过 Apify 平台联系我们。
评论
一个开放协议,规定了 AI 应用如何以统一方式连接外部工具与数据源。客户端负责与模型对话,MCP 服务负责提供工具、资源和提示模板,两者通过标准消息通信,同一个服务可以被不同客户端复用。