devops-mcp について
devops-mcpはDevOpsエンジニア向けのオープンソースMCPサーバーです。1つのサーバーを通じてAIエージェントからKubernetes、ArgoCD、Prometheus、PagerDuty、Loki、Helmを照会・操作でき、操作を読み取り、変更、破壊的操作に分類します。
主な機能
- 016種類のDevOpsプロバイダーを統合
- 02クラスター、デプロイ、リソース状態の確認
- 03メトリクス、アラート、ログの照会
- 04インシデントとオンコール状況の確認
- 05変更操作はドライランが既定
- 06破壊的操作には確認が必要
活用シーン
- 01KubernetesのPod再起動やデプロイ異常の調査
- 02ArgoCD同期前後のアプリケーション状態の比較
- 03PrometheusのメトリクスとLokiのログを使った障害調査
- 04PagerDutyのインシデントと現在のオンコール担当者の確認
MCP 対応
このMCPサーバーは、MCP対応AIエージェント向けに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 エージェントから、Kubernetes、ArgoCD、Prometheus、PagerDuty を照会・管理できます。
これは何ですか?
devops-mcp はオープンソースの Model Context Protocol サーバーで、AI エージェント(Claude など)からインフラスタックへのリアルタイムな読み取り・書き込みアクセスを、1 回のインストールで実現します。
kubectl の出力をチャットウィンドウにコピーして貼り付ける代わりに、次のように質問できます。
「payments のデプロイが CrashLoopBackOff になっているのはなぜですか?」 「auth アプリの直近の ArgoCD 同期で何が変更されましたか?」 「過去 1 時間の 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
ツールリファレンス
すべてのツールは、次の 3 段階の安全モデルに従います。
- 読み取り — 安全で、副作用がなく、確認も不要です
- 変更 — デフォルトでは
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 | ホスト、パス、バックエンド、TLS 設定を含む Ingress リソース |
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 | タイプ、ポート、セレクター、clusterIP、エンドポイントを含む Service の一覧 |
k8s__list_contexts | read | すべての kubeconfig コンテキストとアクティブなコンテキスト |
k8s__switch_context | mutate | コンテキスト選択をプレビューします。安全に適用するには K8S_CONTEXT を設定して再起動します |
k8s__scale_deployment | mutate | ドライランによる差分プレビュー付きでレプリカ数を変更 |
k8s__apply_manifest | mutate | サーバーサイドのドライランを使用してマニフェスト文字列を適用 |
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 | 1 つのアプリケーションの完全な仕様とステータス |
argo__get_app_diff | read | Git とクラスターの状態のライブ差分 |
argo__get_app_history | read | Git SHA とタイムスタンプを含むデプロイ履歴 |
argo__get_resource_tree | read | アプリが所有するリソースツリー全体 |
argo__sync_app | mutate | 同期を開始します — ドライラン、プルーン、強制適用に対応 |
argo__rollback_app | mutate | 履歴リビジョンへのロールバックをプレビューします。実行するには dry_run: false を設定します |
argo__terminate_op | mutate | 進行中の同期のキャンセルをプレビューします。実行するには dry_run: false を設定します |
Prometheus(prom__*)
| ツール | ティア | 説明 |
|---|---|---|
prom__query | read | ラベルと値を出力する、即時の PromQL クエリ |
prom__query_range | read | ステップを指定する範囲クエリ。時系列データを返します |
prom__list_alerts | read | 状態(発火中/保留中/非アクティブ)を含む、すべてのアラートルール |
prom__get_firing_alerts | read | 現在発火中のアラートのみを継続時間とともに取得します |
prom__list_targets | read | ヘルス状態と最後のスクレイプ時刻を含む、すべてのスクレイプターゲット |
prom__label_values | read | 指定したラベル名の値を列挙します |
prom__metric_metadata | read | メトリクスの型、ヘルプテキスト、単位 |
prom__compare_periods | read | 📈 メトリクスを比較 — 2 つの時間帯を比較し、デプロイ前後の変化を検出します |
prom__slo_status | read | 🎯 SLO 遵守状況 — 残りのエラーバジェット、バーンレート、枯渇までの時間 |
prom__summarize_service_health | read | 📊 スマートな概要 - レイテンシの変化、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 エージェントが応答に直接利用できる、実行可能なインサイトを提供します。これにより、モニタリングデータをインシデント調査やコミュニケーションに実際に役立てることができます。
Loki(logs__*)
| ツール | ティア | 説明 |
|---|---|---|
logs__get_recent_errors | read | インシデントのデバッグ用に、Loki から最近のエラーログを取得します |
logs__search | read | 根本原因分析用に、カスタムクエリで 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 | read | 重大度、ステータス、担当者を含む、未解決のインシデント |
pd__get_incident | read | アラート、メモ、タイムラインを含む詳細情報 |
pd__who_is_oncall | read | スケジュールまたはエスカレーションポリシーごとの現在のオンコール担当者 |
pd__list_services | read | インテグレーションキーとステータスを含む、すべてのサービス |
pd__get_log_entries | read | インシデントの監査ログ(すべての状態変更) |
pd__acknowledge_incident | mutate | 確認をプレビューします。実行するには dry_run: false を設定します |
pd__add_note | mutate | メモの追加をプレビューします。実行するには dry_run: false を設定します |
pd__escalate_incident | destructive | 別のポリシーにエスカレーションします — 直接または対話形式での確認が必要です |
pd__summarize_incident | read | 🚨 インシデントの自動要約 - 発生した事象、影響を受けたサービス、考えられる根本原因、現在の状況 |
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__*)
| ツール | Tier | 説明 |
|---|---|---|
helm__list_releases | read | ステータス、チャート、アプリのバージョンとともに Helm リリースを一覧表示します |
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__*)
| ツール | Tier | 説明 |
|---|---|---|
devops__debug_service | read | 🔥 プロバイダー横断のインシデントデバッグ - Kubernetes、ArgoCD、Prometheus、PagerDuty のデータを集約し、1 回のコマンドでサービスの問題を診断します |
devops__explain_change | read | 🧠 変更内容の説明 - ArgoCD の履歴、Kubernetes のロールアウト履歴、Prometheus の異常検出期間を組み合わせて、問題の原因を特定します |
devops__runbook | read | 📋 自動化されたランブック - 症状に基づく診断を行い、対象を絞ったチェック(クラッシュループ、高レイテンシ、OOM、5xx、Pod の Pending)を実行します |
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:対象期間内のデプロイ履歴。リビジョン、作成者、リポジトリ、チャートを含みます
- 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 の詳細情報 → リソース制限 |
5xx | エラー率 → Loki のエラーログ → デプロイのヘルス状態 |
pod-pending | スケジューリングイベント → Pending 状態の Pod → ノードの容量 |
出力: steps_executed[]、findings[]、recommended_actions[]を含む構造化 JSON。
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 エントリは、2026-07-28 ステートレスプロトコルを使用してPOST /mcpで MCP を提供します。リクエストごとに新しい MCP サーバーインスタンスが作成されるため、セッションアフィニティやプロトコル状態の共有がなくても、任意のレプリカでリクエストを処理できます。同じエンドポイントは、ステートレス互換モードで2025年以前の Streamable HTTP クライアントも受け付けます。
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も使用しません。 server/discover、リクエストごとのクライアントメタデータ、およびMCP-Protocol-Versionは公式 SDK によって処理されます。Mcp-MethodヘッダーとMcp-Nameヘッダーは、ゲートウェイのルーティングと認可のために、JSON-RPC 本文との整合性が検証されます。server/discoverとtools/listは、MCP_CACHE_TTL_MS(デフォルトは 60 秒)を使用して、予測可能で公開されるキャッシュヒントを提供します。- 破壊的なツールでは
confirm: trueを指定できます。最新のクライアントでは、代わりに MRTR の対話型確認を完了できます。確認状態は HMAC で署名され、5 分後に期限切れとなり、ツールの正確な引数に紐付けられます。グローバルなドライランは、確認プロンプトを表示する前に処理をブロックします。 - MRTR の再試行をどのレプリカでも処理できるようにするには、すべてのレプリカで
MCP_REQUEST_STATE_SECRETを同じ値にする必要があります。省略した場合、サーバーはMCP_AUTH_TOKENからキーを導出します。トークンが設定されていない場合は、プロセスごとにランダムなキーを使用します。 - 2025 年当時の Streamable HTTP および stdio クライアントも引き続きサポートされます。セッションを使用する HTTP とレガシー HTTP+SSE はサポートされません。
組み込みの MCP_AUTH_TOKEN は静的なベアラートークンによるゲートであり、OAuth 認可サーバーではありません。インターネットに公開するデプロイでは、TLS を終端し、ゲートウェイで組織の OAuth/OIDC ポリシーを適用するか、専用の ID プロバイダーを統合してください。新しいデプロイでは、非推奨の Dynamic Client Registration を使用しないでください。
最小構成の docker-compose.yml は examples/ にあります。
セキュリティモデル
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を明示的に渡す必要があります。ユーザーが操作を明確に要求しない限り、AI がこれを指定することはありません。 - 破壊的なツールには確認が必要です。
confirm: trueを直接渡すか、サーバーの MRTR 確認リクエストに対応した 2026-07-28 版のクライアントを使用してください。確認後でも、DEVOPS_MCP_DRY_RUN=trueが設定されていると実行はブロックされます。 - 監査ログ:
DEVOPS_MCP_AUDIT_LOGにファイルパスを設定します。すべてのツール呼び出しは、タイムスタンプ、ツール名、パラメーター、結果を含む JSONL の 1 行として記録されます。変更操作と破壊的な呼び出しにはフラグが付けられます。 - グローバルなドライランモード:
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 やスティッキーロードバランシングは使用しません。 - 2 つの時代のクライアントとの互換性: 公式 SDK エントリーポイントは、2026-07-28 および互換性のある 2025 年代の stdio/Streamable HTTP クライアントに対応します。
- 実行時のスキーマ検証: Zod スキーマでディスパッチ前にツールのパラメーターを検証し、入力が無効な場合は明確で構造化されたエラーフィードバックを提供します。
- 厳格な名前空間の分離:
K8S_ALLOWED_NAMESPACESによって Kubernetes、Helm、Loki プロバイダー全体でクエリと変更を制限し、テナント間の情報漏えいを防ぎます。 - 認証情報とシークレットの安全性: リソースの describe 操作では、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
Kubernetes のテストには、ローカルの kind/minikube クラスターを使用します。開発中の誤った変更を防ぐには、DEVOPS_MCP_DRY_RUN=true を設定してください。
ロードマップ
- Grafana プロバイダー(
grafana__*)— ダッシュボード、注釈、データソース - Flux CD プロバイダー(
flux__*)— kustomizations、helm releases、イメージの自動化 - Terraform Cloud プロバイダー(
tfc__*)— ワークスペースの実行、状態、変数 - HashiCorp Vault プロバイダー(
vault__*)— シークレットの読み取り(書き込みは行いません)、リースのステータス - Datadog プロバイダー(
dd__*)— メトリクス、モニター、イベント - プロバイダーの健全性、タスクの進捗、監査イベントを確認できる Web UI
ライセンス
MIT — LICENSE を参照してください。
クラスターで実際に何が起きているかを把握できる AI を求める DevOps およびプラットフォームエンジニアのために作られています。
コメント
AI アプリケーションが外部のツールやデータソースに統一的な方法で接続するためのオープンなプロトコルです。クライアントはモデルとの対話を担い、MCP サーバーはツール・リソース・プロンプトテンプレートを提供します。標準メッセージでやり取りするため、1 つのサーバーを複数のクライアントで再利用できます。