一个模型上下文协议(MCP)服务器,通过结构化的自然语言工具提供对Cisco ACI API的完整CRUD访问。该服务器从可配置的urls.json文件中暴露所有相关的ACI端点,并动态构建用于读取(GET)和写入(POST)操作的工具。
基于FastMCP框架,完全兼容LangGraph、Claude、ChatGPT和VS Code Copilot,用于AI辅助的基础设施操作。
GET和POST(CRUD就绪,可选PUT、DELETE).env和结构化日志ACI_MCP/
├── aci_mcp/
│ ├── main.py # MCP服务器
│ └── urls.json # 按类别分组的端点
├── .env # 你的密钥(APIC_URL, USERNAME, PASSWORD)
├── README.md # 本文件
🧪 环境变量
在项目的根目录创建一个 .env 文件:
env
复制
编辑
APIC_URL=https://sandboxapicdc.cisco.com
USERNAME=admin
PASSWORD=!v3G@!4@Y
URLS_PATH=aci_mcp/urls.json
🚀 如何运行
🧑💻 在VS Code(Copilot / LangGraph)中:
在您的MCP客户端配置中使用以下JSON条目:
json
复制
编辑
"aci": {
"type": "stdio",
"command": "wsl",
"args": [
"env",
"APIC_URL=https://sandboxapicdc.cisco.com",
"USERNAME=admin",
"PASSWORD=!v3G@!4@Y",
"URLS_PATH=/home/johncapobianco/ACI_MCP/aci_mcp/urls.json",
"python3",
"/home/johncapobianco/ACI_MCP/aci_mcp/main.py"
]
}
这将在WSL中启动MCP服务器,使用stdin/stdout进行工具发现和调用。
🤖 在Claude或其他A2A兼容代理中:
Claude兼容助手可以使用此基于STDIO的服务器通过模型上下文协议自动发现工具。
📦 暴露的工具
分组工具(例如BGP、L3、L2):每个组一个工具,具有动态端点选择
未分组工具:每个端点都有自己的工具:
GET工具(例如tenants_get)
POST工具(例如tenants_post)
🧠 示例提示
我的网络中有多少租户?
创建名为MCP_Tenant的租户
获取所有IP地址
显示BGP对等体和路由反射器
获取网络的健康状态
向/api/node/mo/uni/tn-NewTenant.json发布状态“created”
📄 示例POST负载
json
复制
编辑
{
"fvTenant": {
"attributes": {
"name": "MCP_Tenant",
"rn": "tn-MCP_Tenant",
"status": "created"
}
}
}
确保您包括“status”: “created”和正确的rn(例如,tn-<name>),以便APIC接受POST。
📘 扩展它
您可以轻松扩展此服务器:
在urls.json中添加更多组
[
{
"Group": "L3",
"Endpoints": [
{
"URL": "/api/node/class/l3extOut.json",
"Name": "三层外部"
},
{
"URL": "/api/node/class/l3extDomP.json",
"Name": "三层域"
},
{
"URL": "/api/node/class/ipv4Addr.json",
"Name": "IPv4地址"
},
{
以下省略...
}
]
},
{
"Group": "L2",
"Endpoints": [
{
"URL": "/api/node/class/l2extOut.json",
"Name": "二层外部"
},
{
"URL": "/api/node/class/fvnsEncapBlk.json",
"Name": "VLAN封装块"
},
{
以下省略...
}
]
},
{
"Group": "Fabric",
"Endpoints": [
{
"URL": "/api/node/class/fabricNode.json",
"Name": "网络节点"
},
{
"URL": "/api/node/class/fabricPod.json",
"Name": "网络模块"
},
{
以下省略...
}
]
},
{
"Group": "Access Policies",
"Endpoints": [
{
"URL": "/api/node/class/infraSpineP.json",
"Name": "脊柱交换机策略"
},
{
"URL": "/api/node/class/infraAccBndlGrp.json",
"Name": "接入捆绑组"
},
{
以下省略...
}
]
},
{
"Group": "Contracts",
"Endpoints": [
{
"URL": "/api/node/class/vzBrCP.json",
"Name": "合同"
},
{
"URL": "/api/node/class/vzEntry.json",
"Name": "vz条目"
},
{
以下省略...
}
]
},
{
"Group": "BGP",
"Endpoints": [
{
"URL": "/api/node/class/bgpRRNodePEp.json",
"Name": "BGP路由反射器"
},
{
"URL": "/api/node/class/bgpDom.json",
"Name": "BGP域"
},
{
以下省略...
}
]
},
{
"Group": "Interfaces",
"Endpoints": [
{
"URL": "/api/node/class/infraPortS.json",
"Name": "接口策略"
},
{
"URL": "/api/node/class/pkiFabricNodeSSLCertificate.json",
"Name": "网络节点SSL证书"
},
{
以下省略...
}
]
},
{
"Group": "Access Control",
"Endpoints": [
{
"URL": "/api/node/class/actrlEntity.json",
"Name": "访问控制实体"
},
{
"URL": "/api/node/class/actrlInst.json",
"Name": "访问控制实例"
},
{
以下省略...
}
]
},
{
"Group": "Compute",
"Endpoints": [
{
"URL": "/api/node/class/compCtrlr.json",
"Name": "计算控制器"
},
{
"URL": "/api/node/class/compDom.json",
"Name": "计算域"
},
{
以下省略...
}
]
},
{
"Group": "CDP",
"Endpoints": [
{
"URL": "/api/node/class/cdpAdjEp.json",
"Name": "CDP邻接端点"
},
{
"URL": "/api/node/class/cdpEntity.json",
"Name": "CDP实体"
},
{
以下省略...
}
]
},
{
"Group": "Equipment",
"Endpoints": [
{
"URL": "/api/node/class/eqptBSlot.json",
"Name": "设备板槽"
},
{
"URL": "/api/node/class/eqptBoard.json",
"Name": "设备板"
},
{
以下省略...
}
]
},
{
"Group": "LLDP",
"Endpoints": [
{
"URL": "/api/node/class/lldpAdjEp.json",
"Name": "LLDP邻接端点"
},
{
"URL": "/api/node/class/lldpEntity.json",
"Name": "LLDP实体"
},
{
以下省略...
}
]
},
{
"Group": "VPC",
"Endpoints": [
{
"URL": "/api/node/class/vpcDom.json",
"Name": "VPC域"
},
{
"URL": "/api/node/class/vpcEntity.json",
"Name": "VPC实体"
},
{
以下省略...
}
]
},
{
"URL": "/api/node/class/fvTenant.json",
"Name": "租户"
},
{
"URL": "/api/node/mo/uni.json",
"Name": "在根处创建租户"
},
{
"URL": "/api/node/class/fvAEPg.json",
"Name": "端点组"
},
{
"URL": "/api/node/class/fvBD.json",
"Name": "桥接域"
},
{
"URL": "/api/node/class/fvCtx.json",
"Name": "上下文"
},
{
"URL": "/api/node/class/fvAp.json",
"Name": "应用配置文件"
},
{
"URL": "/api/node/class/topSystem.json",
"Name": ""
},
{
"URL": "/api/node/class/fvSubnet.json",
"Name": ""
},
{
"URL": "/api/node/class/fvCEp.json",
"Name": "子网"
},
{
"URL": "/api/node/class/infraNodeP.json",
"Name": "叶交换机配置文件"
},
{
"URL": "/api/node/class/infraAttEntityP.json",
"Name": "可连接接入实体配置文件"
},
{
"URL": "/api/node/class/physDomP.json",
"Name": "物理域"
},
{
"URL": "/api/node/class/qosClass.json",
"Name": "服务质量类"
},
{
"URL": "/api/node/class/faultSummary.json",
"Name": "故障摘要"
},
{
"URL": "/api/node/class/fvIp.json",
"Name": "IP地址"
},
{
"URL": "/api/node/class/licenseEntitlement.json",
"Name": "许可权限"
},
{
"URL": "/api/node/class/infraProfile.json",
"Name": "接口配置文件"
},
{
"URL": "/api/node/class/aaaUser.json",
"Name": "用户"
},
{
"URL": "/api/node/class/aaaDomain.json",
"Name": "安全域"
},
{
"URL": "/api/node/mo/topology/health.json",
"Name": "健康"
},
{
"URL": "/api/node/class/topSystem.json?query-target=subtree&target-subtree-class=firmwareCtrlrRunning",
"Name": "控制器固件运行"
},
{
"URL": "/api/node/mo/topology/pod-1/node-1/av.json?query-target=children&target-subtree-class=infraWiNode",
"Name": "有线节点(InfraWiredNodes)"
},
{
"URL": "/api/node/class/vnsMDev.json",
"Name": "设备包"
},
{
"URL": "/api/node/class/arpAdjEp.json",
"Name": "ARP邻接端点"
},
{
"URL": "/api/node/class/arpDb.json",
"Name": "ARP数据库"
},
{
"URL": "/api/node/class/arpDom.json",
"Name": "ARP域"
},
{
"URL": "/api/node/class/arpEntity.json",
"Name": "ARP实体"
},
{
"URL": "/api/node/class/arpInst.json",
"Name": "ARP实例"
},
{
"URL": "/api/node/class/fcEntity.json",
"Name": "光纤通道实体"
},
{
"URL": "/api/node/class/firmwareCardRunning.json",
"Name": "卡固件运行"
},
{
"URL": "/api/node/class/firmwareRunning.json",
"Name": "固件运行"
},
{
"URL": "/api/node/class/fvEpPCont.json",
"Name": "端点配置文件容器"
},
{
"URL": "/api/node/class/fvLocale.json",
"Name": "区域"
},
{
"URL": "/api/node/class/fvRsBDToOut.json",
"Name": "桥接域到外部"
},
{
"URL": "/api/node/class/fvRsBd.json",
"Name": "EPG桥接域链接"
},
{
"URL": "/api/node/class/fvRsCons.json",
"Name": "合同消费者"
},
{
"URL": "/api/node/class/fvRsCtx.json",
"Name": "上下文源关系"
},
{
"URL": "/api/node/class/fvRsDomAtt.json",
"Name": "域附件"
},
{
"URL": "/api/node/class/fvRsPathAtt.json",
"Name": "路径附件"
},
{
"URL": "/api/node/class/fvRsProv.json",
"Name": "合同提供商"
},
{
"URL": "/api/node/class/fvRtBd.json",
"Name": "桥接域目标关系"
},
{
"URL": "/api/node/class/fvRtCtx.json",
"Name": "上下文目标关系"
},
{
"URL": "/api/node/class/infraFuncP.json",
"Name": "功能策略"
},
{
"URL": "/api/node/class/infraRsAttEntP.json",
"Name": "可连接接入实体配置文件源关系"
},
{
"URL": "/api/node/class/infraRsSpAccGrp.json",
"Name": "脊柱接入策略组"
},
{
"URL": "/api/node/class/infraWiNode.json",
"Name": "有线节点(拓扑)"
},
{
"URL": "/api/node/class/ipNexthopP.json",
"Name": "静态路由下一跳策略"
},
{
"URL": "/api/node/class/ipRouteP.json",
"Name": "路由策略"
},
{
"URL": "/api/node/class/lacpEntity.json",
"Name": "LACP实体"
},
{
"URL": "/api/node/class/lacpInst.json",
"Name": "LACP实例"
},
{
"URL": "/api/node/class/vmmCtrlrP.json",
"Name": "虚拟机管理程序控制器配置文件"
},
{
"URL": "/api/node/class/vmmDomP.json",
"Name": "虚拟机管理程序域配置文件"
},
{
"URL": "/api/node/class/vmmProvP.json",
"Name": "虚拟机管理程序提供商配置文件"
},
{
"URL": "/api/node/class/vmmUsrAccP.json",
"Name": "虚拟机管理程序用户配置文件"
}
]