mcpField
D
devops-mcp

devops-mcp

ローカル
github.com/NotHarshhaaクラウド・インフラ44 日前に更新

devops-mcp について

devops-mcpはDevOpsエンジニア向けのオープンソースMCPサーバーです。1つのサーバーを通じてAIエージェントからKubernetes、ArgoCD、Prometheus、PagerDuty、Loki、Helmを照会・操作でき、操作を読み取り、変更、破壊的操作に分類します。

主な機能

  1. 016種類のDevOpsプロバイダーを統合
  2. 02クラスター、デプロイ、リソース状態の確認
  3. 03メトリクス、アラート、ログの照会
  4. 04インシデントとオンコール状況の確認
  5. 05変更操作はドライランが既定
  6. 06破壊的操作には確認が必要

活用シーン

  1. 01KubernetesのPod再起動やデプロイ異常の調査
  2. 02ArgoCD同期前後のアプリケーション状態の比較
  3. 03PrometheusのメトリクスとLokiのログを使った障害調査
  4. 04PagerDutyのインシデントと現在のオンコール担当者の確認

MCP 対応

このMCPサーバーは、MCP対応AIエージェント向けにKubernetes、ArgoCD、Prometheus、PagerDuty、Loki、Helmの照会・管理ツールを提供します。

設定

ローカルサーバーの設定はどのクライアントでも共通です。コピーしてクライアントの MCP 設定ファイルに貼り付けてください。

mcp.json · 共通設定
{
"mcpServers": {
"notharshhaa-devops": {
"command": "npx",
"args": [
"-y",
"@notharshhaa/devops-mcp"
],
"env": {
"KUBECONFIG": "<KUBECONFIG>",
"K8S_CONTEXT": "<K8S_CONTEXT>",
"ARGOCD_SERVER": "<ARGOCD_SERVER>",
"ARGOCD_TOKEN": "<ARGOCD_TOKEN>",
"PROMETHEUS_URL": "<PROMETHEUS_URL>",
"PROMETHEUS_BEARER_TOKEN": "<PROMETHEUS_BEARER_TOKEN>",
"PAGERDUTY_TOKEN": "<PAGERDUTY_TOKEN>",
"PAGERDUTY_USER_EMAIL": "<PAGERDUTY_USER_EMAIL>",
"LOKI_URL": "<LOKI_URL>",
"LOKI_TOKEN": "<LOKI_TOKEN>"
}
}
}
}
起動コマンドnpx -y @notharshhaa/devops-mcp
設定が必要な環境変数
KUBECONFIGPath to Kubernetes kubeconfig file
K8S_CONTEXTKubernetes context to use
ARGOCD_SERVERArgoCD server URL
ARGOCD_TOKENシークレットArgoCD authentication token
PROMETHEUS_URLPrometheus server URL
PROMETHEUS_BEARER_TOKENシークレットPrometheus bearer token
PAGERDUTY_TOKENシークレットPagerDuty API token
PAGERDUTY_USER_EMAILPagerDuty user email for mutations requiring From header
LOKI_URLLoki server URL
LOKI_TOKENシークレットLoki authentication token

ローカルサーバーにはマシン上の実行環境(Node.js 18 以上など)が必要です。設定ファイルの場所はクライアントごとに異なります。

パッケージ
npm@notharshhaa/devops-mcp2.1.1

ツール

21

掲載時のツール一覧 · 2 週間前に更新

パラメーター型必須説明
dry_runbooleanいいえサーバー側のドライラン(既定値:true)
manifeststringはいYAML または JSON のマニフェスト文字列
namespacestringいいえ適用先の名前空間(既定値:マニフェストまたは "default")

詳細

devops-mcp

DevOps エンジニア向けの統合 MCP サーバーです。あらゆる MCP 対応 AI エージェントから、Kubernetes、ArgoCD、Prometheus、PagerDuty を照会・管理できます。

npm version License: MIT MCP


これは何ですか?

devops-mcp はオープンソースの Model Context Protocol サーバーで、AI エージェント(Claude など)からインフラスタックへのリアルタイムな読み取り・書き込みアクセスを、1 回のインストールで実現します。

kubectl の出力をチャットウィンドウにコピーして貼り付ける代わりに、次のように質問できます。

「payments のデプロイが CrashLoopBackOff になっているのはなぜですか?」 「auth アプリの直近の ArgoCD 同期で何が変更されましたか?」 「過去 1 時間の API ゲートウェイの p99 レイテンシーを表示してください。」 「今のオンコール担当者は誰ですか? また、未解決のインシデントは何件ありますか?」 「payments サービスをデバッグしてください。何が問題ですか?」

……すると、クラスターやツールから直接取得した最新情報が返されます。

含まれるプロバイダー:

プレフィックスプロバイダートランスポート
k8s__*Kubernetes(kubeconfig またはクラスター内 SA 経由)client-go
argo__*ArgoCDREST API
prom__*PrometheusHTTP API(PromQL)
pd__*PagerDutyREST API v2
helm__*HelmCLI(helm バイナリ)
devops__*プロバイダー横断のインシデントデバッグすべてのプロバイダーを集約
logs__*LokiHTTP 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_podsreadステータス、再起動回数、ノード、経過時間を含む Pod の一覧
k8s__get_pod_logsreadPod コンテナのログを末尾から表示、またはストリーミング
k8s__describe_resourceread任意のリソースタイプ(pod、service、configmap、secret[値は自動的にマスキング]、deployment、statefulset、daemonset、job、cronjob)の詳細な情報
k8s__get_eventsreadクラスターまたは名前空間のイベント。理由によるフィルタリングが可能
k8s__list_deploymentsreadレプリカ数、ロールアウトの健全性、コンテナイメージを含む Deployment の一覧
k8s__get_resource_usagereadmetrics-server 経由で取得する Pod ごとの CPU/メモリ使用量
k8s__get_node_statusreadノードの健全性、状態、容量、割り当て可能なリソース、テイント
k8s__get_network_policiesreadPod セレクターとイングレス/エグレスルールを含むネットワークポリシー
k8s__get_ingressesreadホスト、パス、バックエンド、TLS 設定を含む Ingress リソース
k8s__list_cronjobsreadスケジュール、最終実行、アクティブなジョブ、一時停止状態を含む CronJob の一覧
k8s__get_cronjob_statusread最近のジョブ履歴を含む CronJob の詳細なステータス
k8s__diff_resourceread現在のリソース状態と最後に適用した設定を比較
k8s__get_hparead現在と目標のメトリクス、およびスケーリング状態を含む HorizontalPodAutoscaler
k8s__list_pvcsreadステータス、容量、ストレージクラスを含む PersistentVolumeClaim の一覧
k8s__list_servicesreadタイプ、ポート、セレクター、clusterIP、エンドポイントを含む Service の一覧
k8s__list_contextsreadすべての kubeconfig コンテキストとアクティブなコンテキスト
k8s__switch_contextmutateコンテキスト選択をプレビューします。安全に適用するには K8S_CONTEXT を設定して再起動します
k8s__scale_deploymentmutateドライランによる差分プレビュー付きでレプリカ数を変更
k8s__apply_manifestmutateサーバーサイドのドライランを使用してマニフェスト文字列を適用
k8s__rollout_restartmutateDeployment または StatefulSet のローリング再起動を開始
k8s__delete_resourcedestructive名前を指定したリソース(pod、service、configmap、secret、deployment、statefulset、daemonset、job、cronjob)を削除します — 直接または対話形式での確認が必要です
ArgoCD(argo__*)
ツールティア説明
argo__list_appsreadヘルス、同期ステータス、ソースリポジトリを含むすべてのアプリ
argo__get_appread1 つのアプリケーションの完全な仕様とステータス
argo__get_app_diffreadGit とクラスターの状態のライブ差分
argo__get_app_historyreadGit SHA とタイムスタンプを含むデプロイ履歴
argo__get_resource_treereadアプリが所有するリソースツリー全体
argo__sync_appmutate同期を開始します — ドライラン、プルーン、強制適用に対応
argo__rollback_appmutate履歴リビジョンへのロールバックをプレビューします。実行するには dry_run: false を設定します
argo__terminate_opmutate進行中の同期のキャンセルをプレビューします。実行するには dry_run: false を設定します
Prometheus(prom__*)
ツールティア説明
prom__queryreadラベルと値を出力する、即時の PromQL クエリ
prom__query_rangereadステップを指定する範囲クエリ。時系列データを返します
prom__list_alertsread状態(発火中/保留中/非アクティブ)を含む、すべてのアラートルール
prom__get_firing_alertsread現在発火中のアラートのみを継続時間とともに取得します
prom__list_targetsreadヘルス状態と最後のスクレイプ時刻を含む、すべてのスクレイプターゲット
prom__label_valuesread指定したラベル名の値を列挙します
prom__metric_metadatareadメトリクスの型、ヘルプテキスト、単位
prom__compare_periodsread📈 メトリクスを比較 — 2 つの時間帯を比較し、デプロイ前後の変化を検出します
prom__slo_statusread🎯 SLO 遵守状況 — 残りのエラーバジェット、バーンレート、枯渇までの時間
prom__summarize_service_healthread📊 スマートな概要 - レイテンシの変化、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_errorsreadインシデントのデバッグ用に、Loki から最近のエラーログを取得します
logs__searchread根本原因分析用に、カスタムクエリで 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_incidentsread重大度、ステータス、担当者を含む、未解決のインシデント
pd__get_incidentreadアラート、メモ、タイムラインを含む詳細情報
pd__who_is_oncallreadスケジュールまたはエスカレーションポリシーごとの現在のオンコール担当者
pd__list_servicesreadインテグレーションキーとステータスを含む、すべてのサービス
pd__get_log_entriesreadインシデントの監査ログ(すべての状態変更)
pd__acknowledge_incidentmutate確認をプレビューします。実行するには dry_run: false を設定します
pd__add_notemutateメモの追加をプレビューします。実行するには dry_run: false を設定します
pd__escalate_incidentdestructive別のポリシーにエスカレーションします — 直接または対話形式での確認が必要です
pd__summarize_incidentread🚨 インシデントの自動要約 - 発生した事象、影響を受けたサービス、考えられる根本原因、現在の状況
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_releasesreadステータス、チャート、アプリのバージョンとともに Helm リリースを一覧表示します
helm__get_statusreadHelm リリースのステータス全体を取得します
helm__get_valuesreadリリースに指定された値、または計算された値を取得します
helm__get_historyreadリリースのリビジョン履歴を取得します
helm__rollbackmutate前のリビジョンにロールバックします(デフォルトではドライラン)

要件: 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_serviceread🔥 プロバイダー横断のインシデントデバッグ - Kubernetes、ArgoCD、Prometheus、PagerDuty のデータを集約し、1 回のコマンドでサービスの問題を診断します
devops__explain_changeread🧠 変更内容の説明 - ArgoCD の履歴、Kubernetes のロールアウト履歴、Prometheus の異常検出期間を組み合わせて、問題の原因を特定します
devops__runbookread📋 自動化されたランブック - 症状に基づく診断を行い、対象を絞ったチェック(クラッシュループ、高レイテンシ、OOM、5xx、Pod の Pending)を実行します
devops__health_reportread🏥 クラスターの健全性レポート - すべてのプロバイダーを一括で評価し、全体のステータス(健全/劣化/重大)を示します
devops__incident_timelineread🕐 インシデントのタイムライン - 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")

対応する症状:

症状確認項目
crashloopPod の状態 → ログ(末尾50行) → BackOff イベント → デプロイのヘルス状態
high-latencyp95 レイテンシ → リソース使用量 → 発火中のアラート → 直近のデプロイ
oomOOMKilled イベント → メモリ使用量 → 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)
  • 出力フォーマットの改善 — 特定のリソースタイプ向けの、より充実した構造化レスポンス
  • テスト — モッククライアントを使用したプロバイダーロジックのユニットテスト
新しいプロバイダーの追加
  1. src/providers/yourprovider/ を作成し、index.ts、client.ts、リソースグループごとのファイルを追加します。
  2. src/server.ts に登録します。
  3. 設定キーを .env.example と src/config.ts に追加します。
  4. 既存の表形式に従って、この README にツールを記載します。
  5. 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 およびプラットフォームエンジニアのために作られています。

コメント

MCP は初めてですか?

プロトコルの概要から最初のサーバーの導入まで、よくある疑問にまとめて答えます。

AI アプリケーションが外部のツールやデータソースに統一的な方法で接続するためのオープンなプロトコルです。クライアントはモデルとの対話を担い、MCP サーバーはツール・リソース・プロンプトテンプレートを提供します。標準メッセージでやり取りするため、1 つのサーバーを複数のクライアントで再利用できます。