Skip to main content
Glama

MCP CloudOps 演示

一个免费、公开、适合作品集的 模型上下文协议(MCP) 演示,展示 AI 客户端如何在不要求真实 Azure 订阅、API 密钥或生产凭据的情况下,发现并使用 CloudOps 能力。

该服务器公开了由确定性伪造的 Azure 风格基础设施数据支持的 工具、资源和提示。它设计为易于克隆、本地运行、使用 MCP Inspector 检查、容器化,以及后续扩展为真实的 Azure 或 GitHub 集成。

安全性: 此仓库默认从不连接真实基础设施。即使是重启能力也是模拟的。

本演示展示了什么

普通聊天机器人只知道其对话上下文中的内容。而支持 MCP 的客户端还可以发现 MCP 服务器公开的结构化能力。

在此演示中,客户端可以:

  • 发现生产环境和预发布环境的服务器;

  • 检查服务器健康状态和资源利用率;

  • 关联事件、部署和日志;

  • 将基础设施清单作为 MCP 资源读取;

  • 使用可复用的突发事件调查提示;

  • 在获得明确确认后请求模拟操作。

Related MCP server: incident-commander-mcp

架构

flowchart LR
    U[User] --> C[MCP-compatible AI client]
    C <-->|MCP over stdio| S[MCP CloudOps Demo Server]

    S --> T[Tools]
    S --> R[Resources]
    S --> P[Prompts]

    T --> D[(Fake Azure-style JSON data)]
    R --> D
    P --> C

    T --> T1[list_servers]
    T --> T2[get_server_health]
    T --> T3[get_recent_deployments]
    T --> T4[get_open_incidents]
    T --> T5[search_logs]
    T --> T6[restart_demo_service]

更大的图表可在 docs/architecture.md 中查看。

使用的 MCP 原语

工具

工具

用途

list_servers

列出演示服务器,可按环境筛选

get_server_health

检查状态、CPU、内存、服务和区域

get_recent_deployments

查看最近的部署

get_open_incidents

获取当前未解决的事件

search_logs

筛选确定性的演示日志

restart_demo_service

模拟重启,需明确确认

资源

URI

用途

infra://inventory/all

完整演示清单

infra://inventory/production

仅生产环境清单

ops://incidents/open

当前未解决的事件

提示

提示

用途

investigate_incident(service)

结构化突发事件调查工作流

daily_cloudops_summary(environment)

简洁的健康摘要工作流

演示场景

假设用户询问:

哪些生产服务器不健康或资源压力过大?

MCP 客户端可以发现并调用 list_servers(environment="prod"),看到 api-prod-02 处于降级状态且 CPU 使用率高,然后决定调用 get_server_health 或检查事件和日志。

后续问题可能是:

调查影响 payments-api 的问题,并告诉我它是否与部署有关。

客户端可以组合多种 MCP 能力:

User request
   |
   v
get_open_incidents("payments-api")
   |
   v
list_servers("prod")
   |
   v
get_server_health("api-prod-02")
   |
   v
get_recent_deployments(service="payments-api")
   |
   v
search_logs(service="payments-api")
   |
   v
AI correlates evidence and explains the likely cause

这就是 MCP 的核心价值主张:模型可以使用标准化的外部能力,而不是将每个集成硬编码到聊天应用程序中。

仓库结构

mcp-cloudops-demo/
├── .github/
│   └── workflows/
│       └── ci.yml
├── docs/
│   └── architecture.md
├── examples/
│   └── prompts.md
├── src/
│   └── mcp_cloudops/
│       ├── data/
│       │   ├── deployments.json
│       │   ├── incidents.json
│       │   ├── logs.json
│       │   └── servers.json
│       ├── prompts/
│       │   └── cloudops.py
│       ├── resources/
│       │   └── cloudops.py
│       ├── tools/
│       │   └── cloudops.py
│       ├── web/
│       │   ├── app.py
│       │   ├── scenario.py
│       │   └── static/
│       │       ├── index.html
│       │       ├── styles.css
│       │       └── app.js
│       ├── server.py
│       └── store.py
├── tests/
│   ├── test_data_relationships.py
│   └── test_store.py
├── Dockerfile
├── docker-compose.yml
├── LICENSE
├── pyproject.toml
└── README.md

环境要求

  • Python 3.11 或更高版本

  • pip、uv 或其他 Python 包管理器

  • 可选:Docker

  • 可选:兼容 MCP 的客户端或 MCP Inspector

使用 Python 快速开始

克隆仓库并创建虚拟环境:

git clone https://github.com/BozyBonifacio/mcp-cloudops-demo.git
cd mcp-cloudops-demo
python -m venv .venv

激活它。

Linux/macOS:

source .venv/bin/activate

Windows PowerShell:

.\.venv\Scripts\Activate.ps1

安装项目:

python -m pip install -e '.[dev]'

通过 stdio 运行 MCP 服务器:

mcp-cloudops-demo

进程会等待 MCP 客户端通过 stdin/stdout 通信。这是预期行为。

详细的 Windows 运行指南

在 PowerShell 中:

git clone https://github.com/BozyBonifacio/mcp-cloudops-demo.git
cd mcp-cloudops-demo
python -m venv .venv
.\.venv\Scripts\Activate.ps1
python -m pip install --upgrade pip
python -m pip install -e ".[dev]"
mcp-cloudops-demo

如果 PowerShell 阻止激活虚拟环境,请仅为当前终端会话允许脚本:

Set-ExecutionPolicy -Scope Process -ExecutionPolicy Bypass
.\.venv\Scripts\Activate.ps1

当 mcp-cloudops-demo 启动后看起来处于空闲状态,这是预期行为。此演示通过 stdio 使用 MCP,等待 MCP 客户端连接,而不是打开网页。按 Ctrl+C 停止它。

基于浏览器的作品集演示

演示该项目最简单的方式是使用内置的浏览器 UI。它 不需要付费的 LLM API 密钥,并且充当真实的 MCP 客户端:FastAPI 后端通过 stdio 启动本地 MCP 服务器,发现其能力,调用 MCP 工具,并将结果返回给浏览器。

安装项目后启动它:

mcp-cloudops-web

然后打开:

http://localhost:8000

页面包括:

  • 操作员风格的聊天界面;

  • 建议的 CloudOps 调查提示;

  • 运行时 MCP 能力发现;

  • MCP 跟踪,显示每次工具调用及其参数;

  • 确定性的突发事件调查工作流,无需外部 AI 服务;

  • 模拟重启的现有安全行为。

推荐的首个提示是:

调查影响 payments-api 的未解决事件,并告诉我可能的原因。

浏览器后端将使用 MCP 调用多个工具,如 get_open_incidents、list_servers、get_recent_deployments 和 search_logs,然后显示结论和 MCP 调用跟踪。

为什么是确定性聊天? 浏览器演示有意不要求 OpenAI、Azure OpenAI、Anthropic 或其他付费模型 API。一个小型意图路由器识别包含的演示场景,而 MCP 仍负责能力发现和工具执行。你可以稍后将路由器替换为 LLM,而无需更改 MCP 服务器契约。

浏览器演示架构

Browser
   |
   | HTTP /api/chat
   v
FastAPI browser backend
   |
   | MCP over stdio
   v
MCP CloudOps Server
   |
   +--> Tools
   +--> Resources
   +--> Prompts
   |
   v
Fake Azure-style JSON data

使用 Docker 运行浏览器演示

构建并启动容器:

docker compose up --build

然后打开:

http://localhost:8000

使用 Ctrl+C 停止它,然后可选地移除容器:

docker compose down

使用 MCP Inspector 测试

官方 Python MCP SDK 在安装 CLI 附加组件时包含开发工具。

如果你的环境中有 MCP CLI,请运行:

mcp dev src/mcp_cloudops/server.py

然后打开终端中打印的 Inspector URL。探索 工具、资源 和 提示 选项卡。

如果 mcp 未作为 CLI 命令安装,请安装 SDK CLI 附加组件:

python -m pip install 'mcp[cli]'

推荐的 MCP Inspector 演练

启动 Inspector 后,使用此序列演示多个 MCP 能力如何协同完成一次调查:

  1. 使用 environment = prod 调用 list_servers。

  2. 使用 server_name = api-prod-02 调用 get_server_health。

  3. 调用 get_open_incidents 并调查 payments-api。

  4. 为 payments-api 调用 get_recent_deployments。

  5. 为受影响的服务器/服务调用 search_logs 并检查 ERROR 事件。

list_servers("prod")
        |
        v
get_server_health("api-prod-02")
        |
        v
get_open_incidents("payments-api")
        |
        v
get_recent_deployments(service="payments-api")
        |
        v
search_logs(service="payments-api")
        |
        v
AI correlates the evidence

推荐的实时演示提示

调查影响 payments-api 的未解决事件。确定受影响的服务器、其健康状态、最近的部署是否与事件相关、日志显示了什么,以及最可能的原因。

要解释的关键点是:MCP 服务器公开标准化的能力,兼容 MCP 的主机可以发现并组合这些能力,而不是依赖一个硬编码的聊天机器人工作流。

Windows MCP 客户端配置

在 Windows 上使用虚拟环境时,建议使用其 Python 可执行文件的绝对路径。例如,如果仓库位于 C:\github\mcp-cloudops-demo:

{
  "mcpServers": {
    "cloudops-demo": {
      "command": "C:\\github\\mcp-cloudops-demo\\.venv\\Scripts\\python.exe",
      "args": ["-m", "mcp_cloudops.server"]
    }
  }
}

将示例路径替换为你实际的克隆位置。这可以避免意外启动不包含项目依赖的其他 Python 安装。

故障排除

如果 mcp-cloudops-demo 无法识别,请激活 .venv 并重新安装项目:

.\.venv\Scripts\Activate.ps1
python -m pip install -e ".[dev]"

你还可以尝试:

python -m mcp_cloudops.server

如果 mcp 无法识别:

python -m pip install "mcp[cli]"
mcp dev src/mcp_cloudops/server.py

如果你遇到 ModuleNotFoundError: mcp_cloudops,请确保你位于仓库根目录,重新安装可编辑包,并验证导入:

python -m pip install -e ".[dev]"
python -c "import mcp_cloudops; print('mcp_cloudops import OK')"

运行测试

pytest

运行代码检查:

ruff check src tests

使用 Docker 运行

Docker 镜像现在默认启动浏览器 UI。

docker build -t mcp-cloudops-demo .
docker run --rm -p 8000:8000 mcp-cloudops-demo

打开 http://localhost:8000。

或者使用 Docker Compose:

docker compose up --build

要在镜像内运行原始的 stdio MCP 服务器:

docker run --rm -i --entrypoint mcp-cloudops-demo mcp-cloudops-demo

示例客户端配置

MCP 主机通常只需要启动 stdio 服务器的命令。确切的配置格式取决于你的客户端。

一个典型的本地配置在概念上如下所示:

{
  "mcpServers": {
    "cloudops-demo": {
      "command": "python",
      "args": ["-m", "mcp_cloudops.server"]
    }
  }
}

如果包安装到虚拟环境中,请将主机指向该环境的 Python 可执行文件,或使用已安装的 mcp-cloudops-demo 命令。

建议的提示

试试:

  • 哪些生产服务器不健康或资源压力过大?

  • 调查影响 payments-api 的未解决事件。

  • 最近的部署是否与当前生产问题相关?

  • 显示 api-prod-02 的 ERROR 日志并解释可能的原因。

  • 对 payments-api 使用 investigate_incident 提示。

  • 读取 infra://inventory/production 并总结容量风险。

  • 模拟重启 api-prod-02,但先请求我的确认。

更多示例请参见 examples/prompts.md。

为什么使用伪造数据?

公开的 MCP 演示应该让任何人都能运行,而无需暴露机密或产生云支出。JSON 夹具提供:

  • 零基础设施成本;

  • 演示的确定性行为;

  • 安全的公开源代码管理;

  • 可重复的自动化测试;

  • MCP 能力与最终真实数据源之间的清晰边界。

将演示扩展到真实 Azure

最简单的升级路径是保留面向 MCP 的函数,并将 load_json() 替换为适配器层。

例如:

MCP Tool
   |
   v
CloudOps service interface
   |
   +--> DemoJsonProvider
   |
   +--> AzureProvider
          |
          +--> Azure Resource Graph
          +--> Azure Monitor
          +--> Log Analytics
          +--> Azure DevOps / GitHub

潜在的真实集成包括:

  • Azure Resource Graph 用于虚拟机/资源清单;

  • Azure Monitor 用于指标;

  • Log Analytics 用于 KQL 查询;

  • Azure Update Manager 用于补丁状态;

  • GitHub 用于提交、拉取请求和 Actions 运行;

  • Azure DevOps 用于管道和部署历史。

对于公开的作品集版本,建议使用只读权限,并使用环境变量或托管标识,而不是将凭据存储在仓库中。

示例:未来的多服务器场景

该项目的更强第二版可以演示 AI 客户端关联多个 MCP 服务器上的数据:

Developer
  |
  | "Why did the deployment fail?"
  v
AI / MCP Host
  |
  +--> GitHub MCP server ------> commit / pull request
  |
  +--> Azure MCP server -------> deployment status
  |
  +--> Observability MCP ------> application logs
  |
  v
Correlated incident explanation

这展示了协议的价值:每个领域可以独立公开能力,而主机提供对话编排。

安全注意事项

此仓库有意遵循多种安全演示模式:

  • 不提交任何机密;

  • 不需要云凭据;

  • 操作数据是虚构的;

  • 写类操作是模拟的;

  • 模拟重启需要显式的 confirmed=true 参数;

  • GitHub Actions 使用只读的仓库内容权限;

  • 测试验证夹具关系,确保演示保持连贯。

如果你将伪造的提供程序替换为真实基础设施,请在公开可变工具之前添加身份验证、授权、审计日志、最小权限访问、输入验证和确认控制。

CI

包含的 GitHub Actions 工作流在推送和拉取请求时运行,并验证:

  • Python 3.11;

  • Python 3.12;

  • Ruff 代码检查;

  • Pytest 测试。

有用的 MCP 参考

许可证

MIT。参见 LICENSE。

作品集要点

演示此仓库时,强调以下几点:

  1. AI 主机与 MCP 服务器是分离的。

  2. 服务器公开能力,而不是嵌入聊天机器人逻辑。

  3. 工具是操作/查询,资源是可寻址的上下文,提示是可复用的工作流。

  4. 同一个 MCP 服务器可以被不同的兼容主机使用。

  5. 伪造数据提供程序可以在不重新设计 MCP 接口的情况下被替换。

  6. 可变操作应比只读操作具有更强的授权和确认控制。


作为一个教育性 CloudOps 示例构建。默认数据集中的所有基础设施名称、事件、部署和指标均为虚构。

Related MCP Connectors

Related MCP Servers

  • A
    license
    C
    quality
    D
    maintenance
    MCP server for Microsoft Sentinel. Enables access to Sentinel logs, incidents, analytics, and Entra ID data via a modular, queryable interface. Strictly non-production. Designed for use with Claude and other LLMs.
    49
    18
    MIT
  • F
    license
    A
    quality
    D
    maintenance
    AI-powered incident management MCP server that enables investigation, root cause analysis, and response actions for production incidents using mocked data for demo purposes.
    8
    -
  • A
    license
    A
    quality
    B
    maintenance
    CloudOps MCP is a read-only Model Context Protocol server that exposes normalized operational infrastructure context (logs, metrics, deployments, health) to AI agents through a small set of typed, bounded tools.
    6
    MIT