关于 devops-mcp
devops-mcp 是面向 DevOps 工程师的开源 MCP 服务,让 AI Agent 通过一个服务查询和管理 Kubernetes、ArgoCD、Prometheus、PagerDuty、Loki 与 Helm。工具按读取、变更和破坏性操作分级,并为后两类设置执行确认机制。
主要功能
- 01整合六类 DevOps 工具
- 02查询集群、部署与资源状态
- 03读取指标、告警和日志
- 04查看事件及值班信息
- 05变更操作默认预演
- 06破坏性操作要求确认
适用场景
- 01调查 Kubernetes Pod 重启或部署异常
- 02比较 ArgoCD 同步前后的资源状态
- 03结合 Prometheus 指标和 Loki 日志排查故障
- 04查看 PagerDuty 事件与当前值班人员
MCP 相关
该项目是 MCP 服务,向兼容 MCP 的 AI Agent 提供 Kubernetes、ArgoCD、Prometheus、PagerDuty、Loki 和 Helm 的查询及管理工具。
配置
本地服务的配置在各客户端中通用,复制后粘贴到客户端的 MCP 配置文件即可。
npx -y @notharshhaa/devops-mcpKUBECONFIGPath to Kubernetes kubeconfig fileK8S_CONTEXTKubernetes context to useARGOCD_SERVERArgoCD server URLARGOCD_TOKEN密钥ArgoCD authentication tokenPROMETHEUS_URLPrometheus server URLPROMETHEUS_BEARER_TOKEN密钥Prometheus bearer tokenPAGERDUTY_TOKEN密钥PagerDuty API tokenPAGERDUTY_USER_EMAILPagerDuty user email for mutations requiring From headerLOKI_URLLoki server URLLOKI_TOKEN密钥Loki authentication token本地服务需要在你的电脑上安装运行环境(如 Node.js 18+)。各客户端的配置文件位置不同,请参考客户端文档。
工具
21收录的工具列表 · 更新于 2 周前
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
| dry_run | boolean | 否 | 服务器端试运行(默认:true) |
| manifest | string | 是 | YAML 或 JSON 清单字符串 |
| namespace | string | 否 | 要应用到的命名空间(默认:取自清单或 "default") |
详细介绍
devops-mcp
面向 DevOps 工程师的统一 MCP 服务——可通过任何兼容 MCP 的 AI Agent 查询和管理 Kubernetes、ArgoCD、Prometheus 和 PagerDuty。
这是什么?
devops-mcp 是一个开源的 Model Context Protocol 服务,可让 AI Agent(Claude 等)实时读写你的基础设施技术栈——只需安装一次即可。
无需再把 kubectl 的输出复制粘贴到聊天窗口,你可以直接询问:
“payments 部署为什么处于 CrashLoopBackOff 状态?” “auth 应用在上一次 ArgoCD 同步中有哪些变更?” “显示 API 网关过去一小时的 p99 延迟。” “现在谁在值班?有哪些未解决的事件?” “调试 payments 服务——它出了什么问题?”
……即可获取直接来自集群和工具的实时答案。
包含的提供方:
| 前缀 | 提供方 | 传输方式 |
|---|---|---|
k8s__* | Kubernetes(通过 kubeconfig 或集群内 SA) | client-go |
argo__* | ArgoCD | REST API |
prom__* | Prometheus | HTTP API(PromQL) |
pd__* | PagerDuty | REST API v2 |
helm__* | Helm | CLI(helm 二进制文件) |
devops__* | 跨提供方事件调试 | 聚合所有提供方 |
logs__* | Loki | HTTP API(LogQL) |
快速开始
Claude Desktop(stdio — 推荐)
将以下内容添加到 ~/.config/claude/claude_desktop_config.json(macOS:~/Library/Application Support/Claude/claude_desktop_config.json):
{
"mcpServers": {
"devops": {
"command": "npx",
"args": ["-y", "@notharshhaa/devops-mcp@latest"],
"env": {
"KUBECONFIG": "/home/you/.kube/config",
"ARGOCD_SERVER": "https://argocd.company.com",
"ARGOCD_TOKEN": "your-argocd-token",
"PROMETHEUS_URL": "http://prometheus.monitoring:9090",
"PAGERDUTY_TOKEN": "your-pd-api-token",
"PAGERDUTY_USER_EMAIL": "[email protected]",
"LOKI_URL": "http://loki.monitoring:3100",
"LOKI_TOKEN": "your-loki-token"
}
}
}
}
重启 Claude Desktop。devops 服务会出现在工具列表中。
Claude Code(CLI)
claude mcp add devops-mcp -e KUBECONFIG=$HOME/.kube/config \
-e ARGOCD_SERVER=https://argocd.company.com \
-e ARGOCD_TOKEN=... \
-e PROMETHEUS_URL=http://prometheus:9090 \
-e PAGERDUTY_TOKEN=... \
-e LOKI_URL=http://loki.monitoring:3100 \
-e LOKI_TOKEN=... \
-- npx -y @notharshhaa/devops-mcp@latest
本地开发 / 测试
需要 Node.js 20 或更高版本。
npx @notharshhaa/devops-mcp
# or clone and run:
git clone https://github.com/NotHarshhaa/devops-mcp
cd devops-mcp
npm install
cp .env.example .env # fill in your values
npm run dev
配置
所有配置均通过环境变量设置。只需设置实际使用的提供方所需的变量——缺少配置的提供方会被自动跳过,不会发出提示。
# ── Kubernetes ────────────────────────────────────────────────
KUBECONFIG=/home/user/.kube/config # omit to use in-cluster service account
K8S_CONTEXT=my-prod-context # optional: pin a specific context
K8S_ALLOWED_NAMESPACES=default,backend # optional: restrict namespace access
# ── ArgoCD ───────────────────────────────────────────────────
ARGOCD_SERVER=https://argocd.company.com
ARGOCD_TOKEN=eyJhbGci... # argocd account generate-token
# ── Prometheus ───────────────────────────────────────────────
PROMETHEUS_URL=http://prometheus:9090
PROMETHEUS_BEARER_TOKEN= # optional: for authenticated Prometheus
# ── PagerDuty ────────────────────────────────────────────────
PAGERDUTY_TOKEN=your-api-v2-token
[email protected] # required for PagerDuty incident mutations (From header)
# ── Loki ───────────────────────────────────────────────────
LOKI_URL=http://loki.monitoring:3100
LOKI_TOKEN=your-loki-token
# ── Stateless Streamable HTTP ────────────────────────────────
# For stdio mode (default): no transport config needed
MCP_HTTP_HOST=127.0.0.1 # use 0.0.0.0 inside a container
PORT=3000
MCP_AUTH_TOKEN=shared-secret # optional static Bearer token
MCP_REQUEST_STATE_SECRET=32+-byte-secret # optional MRTR signing key shared by all replicas
MCP_ALLOWED_HOSTS=localhost,127.0.0.1 # required with non-loopback binding
MCP_ALLOWED_ORIGINS= # optional browser Origin hostname allowlist
MCP_CACHE_TTL_MS=60000 # discovery/tools catalog TTL; 0 disables caching
# ── Safety ───────────────────────────────────────────────────
DEVOPS_MCP_DRY_RUN=false # true = block all mutations globally
DEVOPS_MCP_AUDIT_LOG=/var/log/devops-mcp-audit.jsonl
工具参考
所有工具均遵循三级安全模型:
- 读取 — 安全,无副作用,无需确认
- 修改 — 默认设置为
dry_run: true;设置dry_run: false执行操作 - 破坏性操作 — 需要设置
confirm: true;或者,2026-07-28 及之后版本的客户端可以完成服务端的交互式 MRTR 确认
Kubernetes(k8s__*)
| 工具 | 层级 | 描述 |
|---|---|---|
k8s__list_pods | read | 列出 Pod 的状态、重启次数、节点和运行时长 |
k8s__get_pod_logs | read | 查看或流式输出 Pod 容器的日志 |
k8s__describe_resource | read | 查看任意资源类型的完整描述(pod、service、configmap、secret[值会自动隐藏]、deployment、statefulset、daemonset、job、cronjob) |
k8s__get_events | read | 查看集群或命名空间事件,可按原因筛选 |
k8s__list_deployments | read | 列出 Deployment 的副本数、滚动更新健康状况和容器镜像 |
k8s__get_resource_usage | read | 通过 metrics-server 查看各 Pod 的 CPU/内存使用情况 |
k8s__get_node_status | read | 查看节点健康状况、条件、容量、可分配资源和污点 |
k8s__get_network_policies | read | 查看网络策略、Pod 选择器及入站/出站规则 |
k8s__get_ingresses | read | 查看 Ingress 资源的主机、路径、后端和 TLS 配置 |
k8s__list_cronjobs | read | 列出 CronJob 的计划、上次运行时间、活动作业和暂停状态 |
k8s__get_cronjob_status | read | 查看详细的 CronJob 状态及近期作业历史 |
k8s__diff_resource | read | 比较当前资源状态与上次应用的配置 |
k8s__get_hpa | read | 查看 HorizontalPodAutoscaler 的当前/目标指标和扩缩容状态 |
k8s__list_pvcs | read | 列出 PersistentVolumeClaim 的状态、容量和存储类 |
k8s__list_services | read | 列出 Service 的类型、端口、选择器、clusterIP 和端点 |
k8s__list_contexts | read | 列出所有 kubeconfig 上下文及当前活动上下文 |
k8s__switch_context | mutate | 预览上下文选择;设置 K8S_CONTEXT 并重启,以安全地应用更改 |
k8s__scale_deployment | mutate | 调整副本数,并预览 dry-run 差异 |
k8s__apply_manifest | mutate | 使用服务端 dry-run 应用清单字符串 |
k8s__rollout_restart | mutate | 触发 Deployment 或 StatefulSet 的滚动重启 |
k8s__delete_resource | destructive | 删除指定名称的资源(pod、service、configmap、secret、deployment、statefulset、daemonset、job、cronjob)——需要直接确认或交互式确认 |
ArgoCD(argo__*)
| 工具 | 层级 | 描述 |
|---|---|---|
argo__list_apps | read | 列出所有应用及其健康状况、同步状态和源代码仓库 |
argo__get_app | read | 查看单个应用的完整规范和状态 |
argo__get_app_diff | read | 查看 Git 与集群状态之间的实时差异 |
argo__get_app_history | read | 查看部署历史及 Git SHA 和时间戳 |
argo__get_resource_tree | read | 查看应用拥有的完整资源树 |
argo__sync_app | mutate | 触发同步——支持 dry-run、prune 和 force |
argo__rollback_app | mutate | 预览回滚到历史版本;设置 dry_run: false 以执行 |
argo__terminate_op | mutate | 预览取消进行中的同步;设置 dry_run: false 以执行 |
Prometheus(prom__*)
| 工具 | 层级 | 描述 |
|---|---|---|
prom__query | 读取 | 即时 PromQL 查询,输出标签和数值 |
prom__query_range | 读取 | 范围查询,指定步长,返回时间序列数据 |
prom__list_alerts | 读取 | 列出所有告警规则及其状态(触发中 / 待处理 / 未激活) |
prom__get_firing_alerts | 读取 | 仅列出当前正在触发的告警及持续时间 |
prom__list_targets | 读取 | 列出所有抓取目标及其健康状态和上次抓取时间 |
prom__label_values | 读取 | 列举给定标签名称的所有值 |
prom__metric_metadata | 读取 | 获取指标的类型、帮助文本和单位 |
prom__compare_periods | 读取 | 📈 对比指标:比较两个时间窗口之间的指标,检测部署前后的变化 |
prom__slo_status | 读取 | 🎯 SLO 合规情况:剩余错误预算、消耗速率、预算耗尽时间 |
prom__summarize_service_health | 读取 | 📊 智能摘要:以易读的方式汇总服务健康指标,包括延迟变化、错误率与 SLO 的对比,以及流量模式 |
使用示例:
# Get a human-readable health summary
prom__summarize_service_health(service="payments", timeframeMinutes=30, sloThreshold=0.05)
输出内容:
- 延迟:"延迟上升:120ms → 480ms(+300%)"或"延迟稳定:125ms"
- 错误率:"错误率超出 SLO(5%):7.2%"或"错误率符合 SLO:2.1%"
- 流量:"流量下降:500 → 350 req/s(-30%)"或"检测到流量激增(+150%)"
- 总体评估:总结问题和积极指标
为什么这很重要: 相比需要人工解读的原始 PromQL 数值,此工具能够提供可直接用于回复的可操作洞察,供 AI Agent 使用,让监控数据真正有助于事件调查和沟通。
Loki(logs__*)
| 工具 | 层级 | 描述 |
|---|---|---|
logs__get_recent_errors | 读取 | 从 Loki 获取近期错误日志,以便调试事件 |
logs__search | 读取 | 使用自定义查询在 Loki 中搜索日志,以分析根本原因 |
使用示例:
# Get recent error logs
logs__get_recent_errors(service="payments", namespace="default", minutes=30, limit=50)
# Search logs with custom query
logs__search(query='{service="payments"} |= level="error"', limit=100)
为什么这很重要:
- 指标说明发生了什么:Prometheus 会显示延迟上升或错误率超出 SLO
- 日志说明原因:Loki 会显示实际错误消息、堆栈跟踪和故障上下文
- 完整调试:没有日志时,你可以发现问题,却无法了解根本原因
输出格式:
- 结构化日志条目,包含时间戳、消息、服务、命名空间和提取的日志级别
- 错误数量摘要和筛选结果
- 用于详细分析的原始 LogQL 结果
通过结合“发生了什么”(指标)和“为什么发生”(日志),即可完整调查事件。
PagerDuty(pd__*)
| 工具 | 层级 | 描述 |
|---|---|---|
pd__list_incidents | 读取 | 列出未解决事件及其严重程度、状态和负责人 |
pd__get_incident | 读取 | 获取完整详情,包括告警、备注和时间线 |
pd__who_is_oncall | 读取 | 查询各排班表或升级策略当前的值班人员 |
pd__list_services | 读取 | 列出所有服务及其集成密钥和状态 |
pd__get_log_entries | 读取 | 获取事件的审计日志(所有状态变更) |
pd__acknowledge_incident | 修改 | 预览确认操作;设置 dry_run: false 以执行 |
pd__add_note | 修改 | 预览追加备注;设置 dry_run: false 以执行 |
pd__escalate_incident | 破坏性 | 升级至其他策略——需要直接确认或交互式确认 |
pd__summarize_incident | 读取 | 🚨 事件自动摘要:发生了什么、受影响的服务、可能的根本原因和当前状态 |
pd__summarize_incident
示例用法:
# Get an auto-summary of an incident
pd__summarize_incident(id="ABC123")
输出内容:
- 发生了什么:事件标题、描述、严重程度、紧急程度、状态、创建时间和持续时间
- 受影响的服务:服务名称、ID 和当前状态
- 可能的根本原因:分析触发的告警和日志条目,以确定可能的原因
- 当前状态:当前事件状态、受指派人、确认情况和备注数量
输出格式:
{
"what_happened": {
"title": "API Gateway High Error Rate",
"description": "5xx error rate exceeded 5% threshold",
"severity": "high",
"urgency": "high",
"status": "acknowledged",
"createdAt": "2025-01-15T10:30:00Z",
"updatedAt": "2025-01-15T11:45:00Z",
"duration": "1h 15m"
},
"affected_services": [
{
"id": "P123456",
"name": "API Gateway",
"status": "critical"
}
],
"probable_root_cause": "Triggered by: High 5xx error rate from API Gateway pods",
"current_status": {
"status": "acknowledged",
"lastUpdated": "2025-01-15T11:45:00Z",
"assignees": ["[email protected]"],
"acknowledgements": 2,
"notes": 3
}
}
重要性: 无需手动通过多次 API 调用拼凑事件详情,此工具即可提供全面、易读的摘要,非常适用于:
- 演示:展示 AI 理解和总结复杂事件数据的能力
- 实际使用:无需翻查原始数据,即可快速了解事件影响
- 沟通:与利益相关者分享简洁的事件摘要
Helm(helm__*)
| 工具 | 层级 | 描述 |
|---|---|---|
helm__list_releases | read | 列出 Helm 发布版本及其状态、Chart 和应用版本 |
helm__get_status | read | 获取 Helm 发布版本的完整状态 |
helm__get_values | read | 获取用户提供或计算得出的发布版本配置值 |
helm__get_history | read | 获取发布版本的修订历史 |
helm__rollback | mutate | 回滚到之前的修订版本(默认试运行) |
要求: Helm CLI 二进制文件必须位于 PATH 中。
示例用法:
# List all releases in a namespace
helm__list_releases(namespace="production")
# Check what values a release is using
helm__get_values(name="api-gateway", all_values=true)
# Rollback after a bad deploy
helm__rollback(name="api-gateway", revision=5, dry_run=false)
跨提供商调试(devops__*)
| 工具 | 层级 | 描述 |
|---|---|---|
devops__debug_service | read | 🔥 跨提供商事件调试 - 汇总 Kubernetes、ArgoCD、Prometheus 和 PagerDuty 数据,通过一条命令诊断服务问题 |
devops__explain_change | read | 🧠 解释发生的变更 - 综合 ArgoCD 历史、Kubernetes 发布历史和 Prometheus 异常时间窗口,找出问题原因 |
devops__runbook | read | 📋 自动化运行手册 - 基于症状的诊断,可运行针对性检查(崩溃循环、高延迟、内存溢出、5xx、Pod 等待调度) |
devops__health_report | read | 🏥 集群健康报告 - 一次性评估所有提供商的状态,并给出整体状态(健康/降级/严重) |
devops__incident_timeline | read | 🕐 事件时间线 - 汇总 K8s、ArgoCD、Prometheus 和 PagerDuty 的事件,并按时间顺序排列 |
devops__debug_service
示例用法:
# Debug a service across all providers
devops__debug_service(service="payments", namespace="default")
检查内容:
- Kubernetes:Pod 状态、重启次数、就绪情况、部署健康状况、近期事件
- ArgoCD:同步状态、健康状态、Git 差异检测、部署历史
- Prometheus:错误率(5xx 响应)、延迟(p95)、触发中的告警
- PagerDuty:与服务名称匹配的活动事件
输出格式:
- 带表情符号标记的易读诊断结果(⚠️ 警告、❌ 错误)
- 按提供商划分的状态部分
- 突出显示关键问题的摘要
- 供详细分析使用的原始 JSON 数据
这是用于事件调查的最强大工具,可在数秒内全面呈现服务的问题所在。
devops__explain_change
示例用法:
# Explain what changed in the last hour
devops__explain_change(service="payments", namespace="default", timeframeMinutes=60)
分析内容:
- ArgoCD:时间范围内的部署历史记录,包括修订版本、作者、仓库和 chart
- Kubernetes:当前发布状态、副本数量、镜像标签和部署就绪情况
- Prometheus:时间范围内的错误率趋势、延迟模式和流量峰值
输出格式:
- 包含完整元数据的近期部署时间线
- Kubernetes 发布状态和健康状况
- 指标异常检测(错误率峰值、延迟问题、流量变化)
- 将部署与指标变化关联起来的关联分析
- 包含根因假设的摘要
解决的问题: “昨天一切还好好的……发生了什么变化?”
此工具通过将部署事件与指标异常相关联来回答这个问题,帮助你快速判断问题是否由近期部署、配置更改或外部因素导致。
devops__runbook
示例用法:
# Diagnose a crashlooping service
devops__runbook(symptom="crashloop", service="payments", namespace="default")
# Investigate high latency
devops__runbook(symptom="high-latency", service="api-gateway")
支持的症状:
| 症状 | 检查内容 |
|---|---|
crashloop | Pod 状态 → 日志(尾部 50 行)→ BackOff 事件 → 部署健康状况 |
high-latency | p95 延迟 → 资源使用情况 → 触发中的告警 → 近期部署 |
oom | OOMKilled 事件 → 内存使用情况 → pod describe → 资源限制 |
5xx | 错误率 → Loki 错误日志 → 部署健康状况 |
pod-pending | 调度事件 → 等待中的 Pod → 节点容量 |
**输出:**结构化 JSON,包含 steps_executed[]、findings[] 和 recommended_actions[]。
devops__health_report
示例用法:
# Get a full cluster health assessment
devops__health_report(namespace="production")
收集内容:
- Kubernetes:不健康的 Pod、未达到期望副本数的部署
- Prometheus:触发中的告警数量
- ArgoCD:不同步和不健康的应用
- PagerDuty:未解决事件数量
**输出:**总体状态(healthy / degraded / critical)、各提供方的分区以及摘要。非常适合晨会检查或轮班交接。
部署选项
stdio(推荐用于本地使用)
MCP 宿主将 devops-mcp 作为子进程启动,并通过 stdin/stdout 进行通信。无需网络配置。身份验证来自本地环境(kubeconfig、环境变量)。进程生命周期与 Claude Desktop 绑定。
npx @notharshhaa/devops-mcp
# or with env vars
KUBECONFIG=~/.kube/config npx @notharshhaa/devops-mcp
无状态 Streamable HTTP(共享部署)
HTTP 入口通过 POST /mcp 使用 2026-07-28 无状态协议提供 MCP 服务。每个请求都会获得一个全新的 MCP 服务实例,因此请求可以发送到任意副本,无需会话亲和性或共享协议状态。同一端点也以无状态兼容模式接受使用 Streamable HTTP 的 2025 年客户端。
MCP_HTTP_HOST=127.0.0.1 \
PORT=3000 \
MCP_AUTH_TOKEN=your-secret \
npx -y -p @notharshhaa/devops-mcp@latest devops-mcp-http
将客户端连接到 http://127.0.0.1:3000/mcp。对于容器或远程服务,请设置 MCP_HTTP_HOST=0.0.0.0,并使用公共/代理主机名配置 MCP_ALLOWED_HOSTS。供团队使用时,请将服务置于 TLS 之后。
已弃用的 devops-mcp-sse 二进制文件仍作为 HTTP 入口的临时别名保留,但 /sse、/message 和 /ws 现在会返回 HTTP 410。旧版 HTTP+SSE 和非标准 WebSocket 客户端必须迁移到 Streamable HTTP。
2026-07-28 行为
- 现代请求不需要
initialize,也不需要Mcp-Session-Id。 - 官方 SDK 负责处理
server/discover、每个请求的客户端元数据和MCP-Protocol-Version。 Mcp-Method和Mcp-Name标头会与 JSON-RPC 正文进行校验,以用于网关路由和授权。server/discover和tools/list会通过MCP_CACHE_TTL_MS(默认为 60 秒)公布确定性的公开缓存提示。- 具有破坏性的工具接受
confirm: true;现代客户端也可以通过 MRTR 交互式确认完成确认。确认状态采用 HMAC 签名,5 分钟后过期,并绑定到确切的工具参数。全局试运行模式会在提示确认前阻止操作。 - 所有副本的
MCP_REQUEST_STATE_SECRET必须相同,MRTR 重试才能由任意副本处理。如果未设置,服务器会从MCP_AUTH_TOKEN派生密钥;如果未配置令牌,则使用进程本地随机密钥。 - 仍支持 2025 年时期的 Streamable HTTP 和 stdio 客户端。不支持有状态 HTTP 和旧版 HTTP+SSE。
内置的 MCP_AUTH_TOKEN 是静态 Bearer 令牌门禁,并非 OAuth 授权服务器。对于面向互联网的部署,应在网关处终止 TLS 并执行组织的 OAuth/OIDC 策略,或集成专用身份提供商;新部署不要使用已弃用的 Dynamic Client Registration。
examples/ 中提供了最精简的 docker-compose.yml。
安全模型
devops-mcp 旨在受信任网络内供内部使用。尽管如此:
- Kubernetes: 通过
@kubernetes/client-node使用标准 kubeconfig。支持 exec 插件(AWS EKS、GKE)。在集群内运行时:自动挂载 SA 令牌。根据所需权限添加 RBAC 规则——以专用 ServiceAccount 运行 devops-mcp,并仅授予最少的动词权限。上下文选择由启动时的K8S_CONTEXT固定;该工具只会预览变更,因为运行时切换会影响其他调用方。 - ArgoCD: 生成长期有效的令牌:
argocd account generate-token --account devops-mcp。在 argocd-cm 中创建具有 apiKey 能力的专用账户,并将角色权限限制为读取和同步。 - Prometheus: 在集群内通常无需身份验证。如果使用带身份验证的 Grafana Mimir 或 Thanos,请传入 Bearer 令牌。所有工具均为只读,因此只需最少权限。
- PagerDuty: 在 PagerDuty → API Access → Create New API Key 中创建专用 API 密钥。如果需要确认/升级工具,请选择 Full Access;如果需要安全模式,请选择 Read-only。
- 默认情况下,变更操作采用试运行模式。 每个变更工具的
dry_run: true都是默认值。AI 必须显式传入dry_run: false——除非用户明确要求执行操作,否则不会这样做。 - 具有破坏性的工具需要确认。 直接传入
confirm: true,或使用支持服务器 MRTR 确认请求的 2026-07-28 客户端。即使确认后,DEVOPS_MCP_DRY_RUN=true仍会阻止执行。 - 审计日志。 将
DEVOPS_MCP_AUDIT_LOG设置为文件路径。每次工具调用都会以 JSONL 行的形式写入时间戳、工具名称、参数和结果。变更操作和破坏性调用会被标记。 - 全局试运行模式。 设置
DEVOPS_MCP_DRY_RUN=true,即可阻止执行任何变更操作,即使调用方传入了dry_run: false。安全预览仍可使用——适用于只读团队部署。
架构
Client / UI agents (Claude Desktop, Claude Code, gateways)
│
▼
MCP v2 Serving Layer
┌──────────────────────────────────────────┐
│ serveStdio │ POST /mcp │
│ 2025 + 2026 eras │ stateless per request │
│ │ routing/header checks │
└──────────────────────────────────────────┘
│
▼
Server Factory & Tool Registry
┌──────────────────────────────────────────┐
│ Fresh protocol instance per HTTP request │
│ Deterministic tool catalog + cache hints │
│ MRTR confirmation for destructive tools │
│ Audit logging and error normalization │
└──────────────────────────────────────────┘
│
▼
┌─────┬──────┬──────┬──────┬──────┬──────┐
k8s argo prom pd logs helm
│
▼
Dry-run guard │ Namespace policy │ Provider credentials
关键架构特性:
- **无状态远程协议:**每个
/mcp请求都会创建一个全新的服务实例;没有协议会话 ID,也不需要粘性负载均衡。 - **兼容两个时期的客户端:**官方 SDK 入口支持 2026-07-28 版本,以及兼容的 2025 年时期 stdio/Streamable HTTP 客户端。
- **运行时架构验证:**Zod 架构会在分发前验证工具参数;输入无效时提供清晰、结构化的错误反馈。
- 严格的命名空间隔离:
K8S_ALLOWED_NAMESPACES会限制 Kubernetes、Helm 和 Loki 提供程序中的查询与变更,防止跨租户数据泄漏。 - **凭据与密钥安全:**资源描述操作会自动屏蔽并脱敏 Secret 负载数据。
- **适用于网关的路由:**现代方法和工具标头会在分发前经过验证。
- 安全缓存:
tools/list顺序确定,并可配置公共缓存提示。 - **提供程序隔离:**每个提供程序均可独立配置,且在不可用时会安全跳过。
贡献
欢迎贡献。以下方面最有帮助:
- 新增提供程序 — Grafana、Datadog、Vault、Terraform Cloud、Flux CD
- 新增工具 — 在现有提供程序中添加工具(例如
k8s__get_node_pressure、argo__get_app_logs) - 改进输出格式 — 针对特定资源类型提供更丰富的结构化响应
- 测试 — 使用模拟客户端为提供程序逻辑编写单元测试
添加新的提供程序
- 创建
src/providers/yourprovider/,其中包含index.ts、client.ts,以及每个资源组对应的一个文件。 - 在
src/server.ts中注册该提供程序。 - 在
.env.example和src/config.ts中添加配置项。 - 按照现有表格格式在此 README 中记录工具。
- 提交 PR。
本地开发
git clone https://github.com/NotHarshhaa/devops-mcp
cd devops-mcp
npm install
cp .env.example .env
npm run dev # tsx watch — restarts on file change
使用本地 kind/minikube 集群进行 Kubernetes 测试。开发期间使用 DEVOPS_MCP_DRY_RUN=true,以防意外变更。
路线图
- Grafana 提供程序(
grafana__*)— 仪表板、注释、数据源 - Flux CD 提供程序(
flux__*)— kustomization、Helm 发布、镜像自动化 - Terraform Cloud 提供程序(
tfc__*)— 工作区运行、状态、变量 - HashiCorp Vault 提供程序(
vault__*)— 读取密钥(绝不写入)、租约状态 - Datadog 提供程序(
dd__*)— 指标、监控器、事件 - 用于查看提供程序健康状态、任务进度和审计事件的 Web UI
许可证
MIT — 参见 LICENSE。
为希望 AI 真正了解其集群中正在发生什么的 DevOps 和平台工程师打造。
评论
一个开放协议,规定了 AI 应用如何以统一方式连接外部工具与数据源。客户端负责与模型对话,MCP 服务负责提供工具、资源和提示模板,两者通过标准消息通信,同一个服务可以被不同客户端复用。