使用说明
MIGA-MCP智能网关架构
一个统一的智能层 骨料和保险丝 AI/ML和操作 将来自网络生态系统中真实的、已发布的MCP服务器的数据整合到一个单一的、, 一致的、基于角色的界面,用于分析、自动化和决策支持, 具有对话式Webex聊天界面。
建筑
概述
现代企业网络跨越了许多平台:思科ThousandEyes、Splunk、思科Meraki、Catalyst SD-WAN、Catalyst Center、ISE、ServiceNow、NetBox等。每个都是自己的筒仓,有自己的遥测、访问模型和方言,每个人只能回答自己的问题。从其中任何一个中获取数据从来都不是困难的部分;同时看到所有这些是。
这就是MIGA(MCP智能网关架构)所填补的空白。它建立在模型上下文协议(MCP)的基础上,这是一个开放的标准,允许系统将其数据和操作公开为任何客户都可以以相同方式调用的一套自我描述工具,而不是通过定制的、特定于供应商的API;平台的MCP服务器是提供这些工具的组件。MIGA网关不是重新实现平台集成,而是作为MCP客户端连接到每个平台的真实、已发布的MCP服务器:它通过该服务器的本地传输(无论是HTTP/SSE还是stdio)打开会话,并转发服务器自己的工具调用,而不是重新提供其逻辑。
配置驱动的注册表按角色在六个域(可观察性、安全性、自动化、配置、合规性和身份)中路由每个请求,系统中的每个服务器,包括八个平台和INFER,都作为OASF功能记录发布到AGNTCY目录,共有九个,每个都可以通过模式1.0.0的内容ID在那里进行验证检索,因此该集合可以通过功能发现。MIGA将回复标准化为与解析实体相关的单个模式,并添加了单个平台无法提供的跨平台相关性,所有这些都不需要存储任何人的遥测数据的第二个副本。
用户通过嵌入MCP客户端的Webex机器人进行对话式交互,将自然语言转换为结构化的MCP工具调用,并在聊天中以格式化的交互式响应返回结果,LLM层着陆时会收到固定的对话回复。你可以用简单的语言问一次,而不是为每个平台打开一个单独的控制台,然后手工将答案拼接在一起。
核心是INFER(推理基础设施网络融合引擎),MIGA的一项原创服务,也是进行跨平台推理的部分:相关性、根本原因分析、异常检测和风险评分。它不是摄入和持有连续的消防水带,而是对其他服务器的规范化、实体解析的输出进行推理,根据每个平台已经出现的蒸馏信号进行工作,只有在有问题需要时才提取更深入的细节。它返回的每个结论都与背后的证据相关联。
快速开始
MIGA在没有外部平台凭据的情况下端到端运行。网关和INFER运行 当地;八个外部平台(ThousandEyes、Splunk、Meraki、SD-WAN、Catalyst Center、ISE、ServiceNow、NetBox)报告在配置之前无法访问。
# Clone the repository
git clone https://github.com/keewillidevnet/miga-mcp-gateway.git && cd miga-mcp-gateway
# Launch the core stack (gateway, INFER, redis); external platforms are built separately
docker compose up -d redis gateway infer-mcp
# Check reachability of every registered server
python -m packages.cli.miga_cli status
然后打开Webex并向MIGA机器人发送消息。这些命令返回真实输出,没有 资格证书:
| 命令 | 它的作用 | 没有凭据 |
|---|---|---|
help |
功能菜单 | 完整菜单 |
gateway status |
网关健康和路由表 | 真实数据 |
network status |
每台服务器可达性 | INFER可达性;八个站台无法到达 |
risk score |
INFER复合风险 | 运行;读取0/100,直到遥测数据流动 |
correlate events |
INFER事件相关性 | 运行;在遥测数据流动之前为空 |
root cause analysis |
INFER根本原因 | 运行;在遥测数据流动之前为空 |
any anomalies? |
INFER异常检测 | 运行;在遥测数据流动之前为空 |
predict failures |
INFER预测分析 | 运行;在遥测数据流动之前为空 |
INFER命令立即返回真实的结构化输出。分数和调查结果保持不变
直到外部平台配置完毕并将遥测数据输入INFER。看
docs/BOT_DEMO.md 使用现场证据进行完整的无凭证演练。
要打开八个外部平台:复制环境模板并添加
按平台分组的凭据(cp .env.example .env),然后构建外部
docker compose引用的社区服务器映像(Meraki、ISE、NetBox、SD-WAN)来自
他们的上游回购。看 MIGRATION.md以下用例场景中的所有内容都假设
平台是这样配置的。
Webex机器人
Webex机器人是网关的对话界面:基于规则的NLP 消息进入网关工具调用(机器人通过可流式传输的http嵌入MCP客户端),以及 将回复呈现为Markdown或自适应卡片。
| 能力 | 状态 |
|---|---|
| 会话界面(NLP->网关->Webex) | ✅ 已执行 |
| MCP客户端到网关(可流式传输http) | ✅ 已实现(内部HTTP开发回退可用) |
| Webhook自注册 | ✅ 已执行(python -m packages.webex_bot.register_webhook) |
无凭证现场演示(INFER+ network_status + gateway_health) |
✅ 已实施;看见 docs/BOT_DEMO.md.通过docker compose+cloudflared隧道实时验证。 |
| 多平台实时数据 | 🔲 需要平台凭据(单独步骤) |
| 自动化/HITL批准 | 🟡 部分:机器人承认批准/拒绝,但尚未发布对该决定的保留操作。 |
Webex:INFER中的无凭据演示返回风险评分、异常检测和根本原因分析,无需外部平台凭据;在平台遥测数据流动之前,读数保持为空。
无需凭证的演示练习INFER+状态,无需外部平台凭证 以及用于webhook的临时隧道(没有常驻主机)。开发模式绕过Entra JWT。 完整的多平台操作需要凭据,这是一个单独的步骤;没有 这里宣布了全8个平台的现场直播。
运行机器人程序(无凭据)
# ===========================================================
# Run the MIGA bot with no external platform credentials
# ===========================================================
# ---- Prerequisites (do these once) ------------------------
cloudflared --version # need a tunnel tool (or: ngrok version)
# Create a Webex bot at https://developer.webex.com/my-apps (Create a Bot);
# copy its access token and its bot email (ends in @webex.bot).
git clone https://github.com/keewillidevnet/miga-mcp-gateway.git
cd miga-mcp-gateway
cp .env.example .env
# Edit .env and set exactly these two values:
# WEBEX_BOT_ACCESS_TOKEN=<your bot access token>
# WEBEX_BOT_EMAIL=<your bot's @webex.bot email>
pip install aiohttp httpx mcp # deps for the local (non-container) processes
# ---- Option A: one command (recommended) ------------------
# Brings up the stack, starts the bot, opens the tunnel, and
# registers the webhook, with preflight checks at each step.
./scripts/run_demo.sh # add --mode http if the handshake misbehaves
# When it prints READY, skip to "Try it" below.
# ---- Option B: manual, step by step (two terminals) -------
# Terminal 1 - stack + bot (leave running):
docker compose up -d redis gateway infer-mcp
# Wait for INFER to come up (a few seconds after 'up -d'), then probe:
until docker compose exec gateway curl -sf http://infer-mcp:8007/health; do sleep 2; done
# -> {"status":"ok","service":"infer_mcp"}
set -a; source .env; set +a
export MIGA_GATEWAY_URL=http://localhost:8000
export MIGA_BOT_GATEWAY_MODE=mcp
python -m packages.webex_bot.app # serves :9000; leave running
# Terminal 2 - tunnel + webhook:
cloudflared tunnel --url http://localhost:9000 > /tmp/miga-tunnel.log 2>&1 &
sleep 6
grep -o 'https://[a-z0-9-]*\.trycloudflare\.com' /tmp/miga-tunnel.log # copy the URL it prints
set -a; source .env; set +a
export WEBEX_PUBLIC_URL=<paste-the-https-URL-above>
python -m packages.webex_bot.register_webhook # expect: webhooks created
# ---- Try it (type these in Webex, not the shell) ----------
# help
# gateway status # live data immediately
# network status # live data immediately
# risk score # runs; reads 0/100 until telemetry flows
# ---- Teardown ---------------------------------------------
kill %1 # Terminal 2: stop the tunnel
# Terminal 1: Ctrl-C the bot, then:
docker compose down
平台覆盖范围
网关路由到 8个真正的外部MCP服务器 加上MIGA的原始INFER
发动机。每行实时连接的详细信息 config/server-registry.yaml.
| 平台 | 状态 | 源/端点 | 服务的角色 |
|---|---|---|---|
| 思科ThousandEyes | 官方 | api.thousandeyes.com/mcp (远程HTTP) |
可观察性 |
| Splunk | 官方 | Splunk实例 :8089/services/mcp (远程HTTP) |
可观察性、安全性 |
| Cisco Meraki | CiscoDevNet社区 | CiscoDevNet/meraki魔术mcp社区 | 可观察性、配置、安全性 |
| 思科催化剂SD-WAN | CiscoDevNet社区 | CiscoDevNet/催化剂sdwan mcp社区 (docker stdio) | 配置、自动化 |
| 思科催化剂中心 | 社区 | 里希比/催化中心mcp (stdio) | 可观察性、配置、自动化 |
| 思科ISE | 社区 | pamosima/网络mcp docker套件 (上游 自动化网络/ISE_MCP) | 身份、合规性 |
| ServiceNow | 社区 | 梯队人工智能实验室/servicenow mcp (stdio) | 自动化、可观察性 |
| NetBox | 官方(NetBox实验室) | netboxlabs/netboxmcp服务器 (只读) | 配置、合规性 |
| INFER | MIGA原件 | servers/infer_mcp |
可观察性、安全性、合规性 |
用例场景
这些场景显示了MIGA的外部平台配置了凭据。 以下是多平台结果(健康卡、相关事件、NetBox库存) 需要这些证书。有关无凭据运行的内容,请参阅上面的快速入门。
🚨 NOC/事故响应
网络工程师在凌晨2点被呼叫。他们没有登录四个不同的仪表板,而是在手机上打开Webex:
工程师:
network status
MIGA同时在Catalyst Center、Meraki、ThousandEyes和Splunk上进行粉丝活动,返回一张包含分数、热门问题和活动警报的健康卡。ThousandEyes正在标记WAN路径上的数据包丢失。
工程师:
correlate events last 30 minutes
INFER发现ThousandEyes路径损耗与Meraki VPN隧道襟翼和Catalyst Center设备错误重叠,所有这些都会影响同一分支站点。它返回一张根本原因分析卡,指出上游交换机发生故障,并建议采取措施。
工程师:
run show interface gi1/0/1 on switch-br-01
机器人展示了一个 批准卡.随叫随到的导线点击✅ 批准。该命令通过Catalyst Center执行,结果以内联方式呈现。总时间: 3分钟,从未离开Webex。
🔒 安全操作
SOC分析师打开网络安全Webex空间:
分析师:
critical security events
Splunk从SIEM返回活动检测结果,Meraki标记异常设备流量。
分析师:
risk score
INFER计算复合 78/100:最主要的因素是与Splunk警报相关的重复身份验证失败的端点。
分析师:
quarantine endpoint AA:BB:CC:DD:EE:01
批准卡发送给安全负责人。只需轻轻一点,思科ISE就会隔离设备。整个的 分流到控制回路 在Webex空间中发生,无需触摸任何控制台。
🔧 变更管理/维护窗口
变更经理:
predict failures
INFER分析了最近的遥测模式和标志,表明C楼的三个交换机具有递增的CRC错误,这表明存在级联故障风险。
变更经理:
compare network health before and after
该机器人提取了Catalyst Center的健康评分和ThousandEyes测试基线,显示这一变化将路径延迟提高了12ms,没有新的问题。
✅ 合规审计
审核员:
compliance posture
Cisco ISE返回端点状态统计数据,NetBox提供真实资源清单和更改历史记录,INFER计算与基线的偏差。审计员有 可出口证据 而无需请求访问任何平台。
🎫 闭环事件管理(ServiceNow)
INFER检测到ThousandEyes、Meraki和Catalyst Center之间存在相关的分支中断:
MIGA 机器人: 🔴 检测到相关事件: Site-A的广域网性能下降,3个平台受到影响,根本原因:上游电路CKT-00412数据包丢失。
机器人自动创建了一个附有完整RCA的ServiceNow P1事件。
工程师:
status INC0078432
机器人拉取实时工单:分配给网络运营,提供商工单打开。
工程师:
resolve INC0078432: Lumen fiber repair completed, circuit stable
MIGA用解决方案注释更新ServiceNow票证,INFER确认健康评分已恢复,事件结束。 在一个Webex线程中完成从检测到解决的完整生命周期。
🗺️ 基础架构环境和影响分析(NetBox)
INFER在上标记异常 10.1.50.1没有NetBox,这只是一个IP地址。使用NetBox:
工程师:
what is 10.1.50.1?
NetBox解决了这个问题: 核心交换机3:Catalyst 9300-48P,机架14,C栋,FCW2345L0AB系列,运行IOS-XE 17.09.04a。
工程师:
what's the blast radius?
NetBox映射了关系:3个下游访问交换机提供服务 240用户,Lumen电路CKT-00412上的上游广域网边缘。在单个用户呼叫帮助台之前,工程师现在知道这是一个影响很大的事件。
AGNTCY集成
MIGA旨在 与...一致 思科 AGNTCY 代理互联网 框架(Linux基金会)。每个能力的诚实状态:
| 能力 | 状态 | 详细信息 |
|---|---|---|
| OASF能力记录 | ✅ 实现 (实时验证) | 下每台服务器一条记录 oasf/records/*.record.json;所有9个都符合OASF 1.0.0 架构服务器(0个错误/0个警告)。 |
| 目录发布 | ✅ 实现 (实时验证) | 启动时,网关发布 9/9 记录到真正的AGNTCY目录(dir-apiserver)通过 agntcy-dir 1.3.0 SDK,每个都返回一个寻址的内容 刑事调查部;记录 通过CID撤回 在 schema_version 1.0.0.尽力而为:如果目录关闭,则回退到独立模式。 |
| 注册表驱动的路由 | ✅ 实现 | 路由完全来自 config/server-registry.yaml (启动时加载+定期重新加载);添加服务器后,无需更改代码即可启动。 |
| 目录搜索路由发现 | 🟢 实现 (选择加入;实时验证) | 与 MIGA_DISCOVERY_ROUTING=1 网关通过实时目录搜索解析每个角色的服务器(记录到 miga_registry_ref 到注册表连接)。静态注册表是默认的,也是有保证的回退。在单实例部署中,搜索会重新发现MIGA自己发布的记录;多党发现党在联邦统治下。看 DISCOVERY_VERIFY.md. |
| 身份/代理人徽章 | 🔲 计划的 | IdentityBadge 仅为脚手架;没有加密签名或验证。 |
| SLIM(v2)消息传递 | 🔲 计划的 | 如今,跨服务消息传递是Redis发布/订阅;量子安全AGNTCY SLIM是未来。 |
| 可观察性(v2) | 🔲 计划的 | 未连接OpenTetry跟踪。 |
实时验证 (网络Docker主机):网关加载9个规格→ 9月9日发布OASF 记录到
dir-apiserver+zot+postgres+reconciler(agntcy目录1.3.0 SDK), 每个返回一个CID,并在schema_version1.0.0.看VERIFY_DIRECTORY.md.
什么是真实的和承重的: 面向8个真实外部的注册表驱动网关 MCP服务器加INFER,每台服务器都有经过验证的OASF 1.0.0功能记录,现在 也发布到真正的AGNTCY目录中。
部署
有关本地发展,请参阅 快速开始.
生产环境(Kubernetes+Helm):
helm install miga ./helm/miga --namespace miga --create-namespace
(Helm chart部署网关、Webex bot和INFER。外部平台服务器包括 带外配置并通过注册表引用。)
项目结构
miga-mcp-gateway/
├── config/
│ ├── server-registry.yaml # Authoritative: how the gateway connects to each server
│ └── server-registry.schema.json # JSON schema the registry is validated against
├── oasf/
│ ├── OASF_RECORDS.md # OASF record authoring guide
│ └── records/*.record.json # One OASF capability record per registered server
├── miga_shared/
│ ├── registry.py # Registry loader (parse, validate, resolve ${ENV})
│ ├── transport.py # MCP client transport: HTTP/SSE + stdio (docker run -i)
│ ├── canonical.py # Canonical schema: events, entities, Findings (collate contract)
│ ├── resolve.py # Entity resolution: collapse one device across platforms
│ ├── adapters/ # Per-platform normalization: NetBox, Catalyst Center, ISE
│ └── ... # auth, AGNTCY, models, formatters
├── packages/
│ ├── gateway/ # Gateway MCP Server (registry-driven role routing)
│ ├── webex_bot/ # Webex Bot (intent routing + MCP Client + Adaptive Cards)
│ └── cli/ # miga-cli tool
├── servers/
│ └── infer_mcp/ # INFER fusion engine — MIGA's only original server
├── helm/miga/ # Helm chart (gateway, bot, INFER)
├── docs/ # Documentation
├── docker-compose.yml # Local cluster (core + compose servers)
└── .env.example # Environment template (every registry env var)
贡献
要添加平台,请向添加条目 config/server-registry.yaml,作者其OASF
记录在 oasf/records/,并将任何环境变量连接到 .env.example。参见
docs/CONTRIBUTING.md.
许可证
Apache 2.0。看 许可证