Skip to main content
Glama
kunwarvivekpratapsingh

alarm-management MCP Server

多MCP企业运营副驾驶

面向工厂运营人员的副驾驶。它通过专用MCP服务器调用告警管理API、从运营文档语料库中检索相关段落,并将两者融合为一条带引用和可视化执行轨迹的可靠答案,从而回答自然语言问题。

git clone <repository-url> && cd senior-copilot-mcp-rag-assignment
cp .env.example .env
docker compose up --build

然后打开 http://localhost:5173 并提出验收问题。无需API密钥——堆栈默认使用一个无需LLM即可运行相同工作流的确定性提供程序。如需生成散文,请设置 LLM_PROVIDER=anthropicANTHROPIC_API_KEY


1 · 选定用例

多MCP企业运营副驾驶。 该副驾驶可发现并协调跨两个MCP服务器的工具,而非硬编码集成,并在一个工作流中将结构化数据与非结构化文档证据相结合。

强制验收场景:

调查过去90天内锅炉给水泵101反复出现的高严重性告警,识别可能的促成因素,检索相关操作规程,并提供带源证据的建议措施。

该场景作为自动化测试运行(tests/e2e/test_acceptance_scenario.py),它通过真实HTTP接口断言:五个步骤均已执行,步骤2接收了步骤1生成的资产ID,检索范围已按步骤1解析的资产名称缩小,并且答案中包含 [tool: …][source: …] 标记。

关于源系统的说明

简报中描述的告警管理API并非一个正在运行的服务——所提供的Postman集合就是其规范。因此,它也在此构建为 services/alarm-simulator/:15个端点、Bearer认证、跟踪头、错误信封以及确定性的种子数据,确保所提供的集合中的每个链接断言都返回非空结果。make contract 对该模拟器运行所有三个集合;CI在每次推送时执行相同操作。

2 · 主要功能

  • 针对实时告警数据和运营文档的自然语言聊天

  • 跨两个MCP服务器的运行时工具发现——无硬编码工具列表

  • 多步工具链,其中一个工具的输出成为下一个工具的输入

  • 混合文档检索(BM25 + 稠密向量,通过倒数排序融合)并带有内联引用

  • 一条结合了结构化工具结果和非结构化文档证据的答案

  • 完整执行轨迹:哪个服务器、哪个工具、什么参数、耗时多久、什么结果

  • 任何写入操作前需明确人工确认,在工具契约中强制执行

  • 在工具故障、超时、无效模式、检索为空、模型拒绝或缺少API密钥等情况下的优雅降级

3 · 技术栈

层级

选择

后端/编排

Python 3.11, FastAPI, SSE

MCP

官方MCP Python SDK——两个候选构建的服务器,17个工具

源系统

FastAPI + SQLAlchemy + SQLite模拟器,按照Postman契约构建

LLM

通过 anthropic SDK 的 claude-opus-5,后可切换的 LLMProvider 协议

检索

Chroma(嵌入式)+ rank-bm25,通过倒数排序融合

前端

React 18 + TypeScript (Vite),镜像中的 nginx

打包

Docker Compose(5个服务),GitHub Actions CI

质量

pytest(269个测试,89%覆盖率),ruff(含安全规则),mypy,newman契约检查

4 · 架构概要

五个服务。GUI通过REST和SSE与FastAPI编排器通信。编排器针对从两个MCP服务器运行时发现的工具注册表规划一系列步骤,解析每个步骤的参数(包括先前步骤产生的值),将文档检索作为其中一个步骤运行,并组合成一条带引用的答案。

Browser ──HTTP/SSE──▶ backend ──MCP──▶ mcp-alarm-management ──HTTPS+bearer──▶ alarm-simulator
                         │      └────▶ mcp-github-issues    ──────────────▶ GitHub (mocked)
                         └─embedded──▶ Chroma index over rag/documents

只有MCP服务器持有其背后系统的凭证。副驾驶从不直接调用告警管理API,因此语言模型没有通往Bearer令牌的代码路径——它无法读取、请求该令牌,也无法通过提示注入被诱导泄露它。

架构图

5 · MCP服务器和工具

两个候选构建的服务器。完整契约——包括输入/输出模式、认证行为、错误行为、超时以及真实示例请求和响应——位于 docs/mcp-tool-catalog.md,该文件由实时的 list_tools() 调用生成并在CI中检查,因此不会与代码脱节。

alarm-management — 14个工具

工具

用途

search_assets

将自由文本设备名称解析为资产记录。从此处开始。

get_asset_metadata

单个资产的完整属性和当前告警计数

get_alarms

经过筛选、分页、排序的告警列表

get_alarm_by_id

单个告警的详细信息

get_alarm_summary

聚合计数和KPI,分组显示

get_alarm_trends

分时段的时间序列

get_alarm_correlation

哪些告警同时触发,附带支持度/置信度/提升度

get_flood_analysis

告警率超过操作员处理能力的时段

get_rationalization_candidates

值得重新调整或抑制的告警

get_priority_score

单个告警的加权优先级

get_operator_recommendations

推荐措施及资产和历史上下文

generate_calculation

准备对某个范围进行命名计算

execute_calculation

运行已准备的计算

get_kpi_definitions

每个KPI的含义及其计算方式

github-issues — 3个工具

工具

用途

search_issues

只读重复检查

draft_issue

纯函数——编写标题、正文和标签。不写入任何内容。

create_issue

除非 confirmed: true,否则以 CONFIRMATION_REQUIRED 拒绝

单独运行一个

python -m alarm_mcp                      # stdio, for a local MCP client
python -m alarm_mcp --transport http     # streamable HTTP, as in compose
python scripts/mcp_smoke.py              # chain two tools, no GUI and no LLM

6 · RAG语料库和摄入

10个Markdown文档(操作规程、故障排除指南、标准、安全说明、供应商公告)→ 49个按标题对齐的块 → 嵌入的Chroma索引。

python -m rag.ingestion.cli --docs ./rag/documents --reset

检索融合了BM25和稠密向量,并按早期工具调用解析的资产进行过滤,对于弱匹配报告 low_confidence 而非粉饰。一个语料库文档包含一个实时提示注入载荷,因此信任边界是经过测试而非仅声称的。

完整设计——分块、元数据、融合、引用构建、置信度、注入防御、刷新:docs/rag-design.md

7 · 配置

每个值都是一个环境变量。.env.example 用安全占位符记录了每个键;未提交任何秘密,运行演示也不需要任何秘密

默认值

效果

LLM_PROVIDER

rule_based

anthropic 用于生成散文;如果密钥不存在则回退

ANTHROPIC_API_KEY

replace-me

仅在 LLM_PROVIDER=anthropic 时需要

ALARM_API_TOKEN

demo-token

Bearer令牌,仅由MCP服务器持有

EMBEDDING_MODEL

hashing

或带有 rag-transformers 扩展的 sentence-transformers 模型

RETRIEVAL_MIN_SCORE

0.35

低于此值,答案将说明未找到相关规程

GITHUB_MOCK

true

内存中的问题后端;无需凭证,无需网络

完整参考(含类型、默认值和使用服务):docs/lld.md §9。

8 · 构建和运行

make 是标准方式,也是CI使用的。在没有 make 的Windows上,tasks.ps1 提供相同的目标名称。

任务

make

PowerShell

安装(可编辑,含开发工具)

make install

. asks.ps1 install

代码检查(ruff,含安全规则)

make lint

. asks.ps1 lint

类型检查(mypy)

make typecheck

. asks.ps1 typecheck

启动堆栈

make up

. asks.ps1 up

停止堆栈并移除卷

make down

. asks.ps1 down

构建RAG索引

make ingest

. asks.ps1 ingest

MCP冒烟测试

make smoke

. asks.ps1 smoke

重新生成文档

make docs

. asks.ps1 docs

端口:GUI 5173,后端 8080,模拟器 8000(已暴露以便Postman集合可对其运行),MCP服务器 9000 / 9001(内部)。

如果其中某个端口已被占用,请在 .env 中覆盖主机端——容器端口从不改变。将 VITE_API_BASE_URL 设置为匹配后端端口,因为Vite在构建时将其内联到GUI中:

BACKEND_HOST_PORT=8090 VITE_API_BASE_URL=http://localhost:8090 docker compose up --build

不使用Docker:make install,然后在四个独立终端中运行四个Python服务——uvicorn alarm_simulator.main:app --port 8000python -m alarm_mcp --transport httppython -m github_mcp --transport httpmake ingestuvicorn copilot_backend.api.app:app --port 8080——并在 apps/frontend 中运行 npm run dev

9 · 测试

任务

make

PowerShell

全部测试(无需运行服务)

make test

. asks.ps1 test

仅单元测试

make test-unit

. asks.ps1 test-unit

集成测试(MCP客户端 ↔ 真实服务器)

make test-integration

. asks.ps1 test-integration

端到端验收场景

make test-e2e

. asks.ps1 test-e2e

覆盖率报告

make coverage

. asks.ps1 coverage

针对Postman的API契约测试

make contract

. asks.ps1 contract

make contract 需要newman (npm install -g newman) 和一个正在运行的模拟器。

269 个测试,全部通过,89% 的行覆盖率 — 详细说明见 docs/coverage.md。覆盖范围:

区域

示例

模拟器合约

每个端点的形状、过滤器、分页、认证、追踪头、错误信封

分析

关联、洪水检测、合理化、优先级评分、KPI 公式

连接器

请求构建、认证注入、4xx/5xx → 类型化异常、仅对 5xx 重试

MCP 服务器

发现、模式验证、认证头、错误映射、追踪传播

MCP 客户端

连接性、无效参数在网络前被拒绝、未知工具、部分失败、降级服务器

RAG

摄取、分块、元数据、过滤、引用、低置信度、提示注入

编排

链式调用、同一工作流中的 RAG、跳过的依赖项、修剪的幻觉工具、冲突证据、写入审批

LLM 提供商

计划类型化、缓存断点放置、移除的采样参数、stop_reason == "refusal"

端到端

通过 HTTP 的验收场景,包括“响应中任何地方都不出现秘密”

LLM 在所有地方都被模拟,包括端到端,因此测试套件快速、免费且可重复。有关含义,请参见 docs/known-limitations.md

10 · 示例交互

重复报警(验收场景)。 五个步骤:解析资产 → 汇总其高严重性报警 → 关联共现对 → 查找合理化候选 → 检索规程,按刚解析的资产过滤。答案报告 Discharge Pressure Low 后跟 Suction Strainer DP High 共 31 次(提升度 2.29,平均滞后 393 秒) [tool: alarm-management/get_alarm_correlation],并将其与来自 [source: OP-BFP-101#…] 的隔离和检查步骤配对。

操作员响应效率。 generate_calculationexecute_calculation(在 calculation_id 上链式调用)→ 确认延迟趋势 → 来自 STD-OPRESP 的适用标准。

升级。 活动报警 → 最高报警的优先级评分 → 带有相关报警上下文的推荐操作 → 匹配的报警哲学部分。

提交问题。 报警摘要 → 重复检查 → draft_issuecreate_issueconfirmation.required 停止运行;GUI 显示确切参数,仅在批准后继续。无论 UI 做什么,MCP 服务器都会拒绝。

一个没有支持文档的问题。 检索报告 low_confidence;答案明确说明未找到相关规程,而不是用一般知识替代。

11 · 仓库布局

apps/backend/          FastAPI orchestrator, MCP client, LLM providers
apps/frontend/         React + TypeScript GUI
mcp-servers/           alarm-management (14 tools), github-issues (3 tools)
services/              alarm-simulator — the candidate-built source system
connectors/alarm_api/  Reusable HTTP client, deliberately separate from the MCP server
packages/schemas/      Shared Pydantic tool contracts
rag/                   documents, ingestion, retrieval, tests
tests/                 unit, integration, e2e
docs/                  architecture, HLD, LLD, tool catalog, RAG design, decisions, limits
postman/               The supplied collections — the Alarm API specification

与提交指南 §3 中结构有两个记录的偏差:

  • services/alarm-simulator/ — 简要说明单独要求一个由候选人构建的后端,这不是预命名文件夹之一。将模拟器(被集成的系统)与 connectors/(访问它的客户端)分开,比将两者合并在一起更清晰。

  • docs/hld.mddocs/lld.md — 与必需的 docs/architecture.md 一起添加,后者仍然是入口点。

指南允许在明确记录的情况下使用等效结构。由于强制目录名称是连字符分隔的,因此不是有效的 Python 包名称,每个目录都包含一个正确命名的包(mcp-servers/alarm-management/alarm_mcp/),映射到 pyproject.toml 中的顶级导入。

12 · 假设

  1. 报警管理 API 不存在,因此 Postman 集合被视为其规范,模拟器被构建为完全满足它们。在集合未说明的地方(例如,仅出现在链式集合中的过滤器),集合的断言是权威。

  2. 报警 ID、资产 ID 和时间戳是可重现的。 种子是固定的,因此演示、测试和 Postman 运行都看到相同的数据。

  3. 关联意味着在同一资产上的滞后窗口内共现。 统计显著性测试超出了合成数据的范围。

  4. 一个租户,一个站点资产。 没有租户标识符贯穿检索或工具授权。

  5. GUI 到后端的跳转是未认证的,这对于本地演示是可接受的,并在限制中明确指出。

  6. docker compose up 是受支持的路径。 手动路径在 §8 中有记录,但 CI 执行的是 compose 文件。

13 · 已知限制和未来改进

诚实的范围边界,每个都说明了如果有更多时间会如何不同处理: docs/known-limitations.md。接下来要做的事情,按我执行的顺序: docs/future-improvements.md

14 · 演示

截图

通过 make screenshots 从运行堆栈捕获,因此可以重新生成而不会过时: docs/screenshots/

执行时间线

写入确认

执行时间线 — 每一步及其服务器、工具、持续时间和状态

写入确认create_issue 被门控,显示确切参数

工具发现

RAG 证据

工具发现 — 跨两个服务器的 17 个工具及其 JSON 模式

RAG 证据 — 检索到的段落及其章节和分数

还捕获了:空状态带引用芯片的答案

视频

链接: 待添加 — 参见 docs/demo.md 了解录制的演练脚本。

它涵盖了端到端的验收场景、带模式检查的工具发现、执行时间线、解析为证据的引用芯片、写入确认门控,然后是失败路径 — 模拟器在会话中途停止以显示重试、降级答案和诚实的空白。

许可证

MIT — 参见 LICENSE

-
license - not tested
-
quality - not tested
B
maintenance

Maintenance

Maintainers
Response time
Release cycle
Releases (12mo)
Commit activity

Resources

Unclaimed servers have limited discoverability.

Looking for Admin?

If you are the server author, to access and configure the admin panel.

Related MCP Connectors

  • AI research on companies and industries — one MCP tool per research domain.

  • Real SEC, 13F, insider, congress & macro data your AI agent can cite. Hosted MCP, 24 tools.

  • An AI concierge that turns static forms into adaptive AI conversations. From any MCP client.

View all MCP Connectors

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/kunwarvivekpratapsingh/senior-copilot-mcp-rag-assignment'

If you have feedback or need assistance with the MCP directory API, please join our Discord server