mcpField
O
ocm-mcp-server

ocm-mcp-server

ローカル
github.comクラウド・インフラ163 週間前に更新

ocm-mcp-server について

ocm-mcp-serverは、Open Cluster Managementハブを通じてAIエージェントがKubernetesフリートを調査・操作できるようにします。読み取りと変更を分離し、変更案には静的チェックとKyvernoの検査、人が署名した承認トークンを求め、監査記録を残します。

主な機能

  1. 01クラスター、健全性、イベント、Podログの確認
  2. 02ManifestWorkによるフリート変更の提案
  3. 03静的チェックとKyvernoポリシー検査
  4. 04書き込みに人の署名付き承認を要求
  5. 05変更の検証と監査記録の取得

活用シーン

  1. 01複数クラスターにまたがる障害の調査
  2. 02ポリシー検査済みのワークロード更新を提案
  3. 03人の承認後に変更を適用
  4. 04監査記録で操作と結果を確認

MCP 対応

このサーバーはstdio経由でMCPクライアントに型付きツールを提供し、Open Cluster Managementハブを通じたKubernetesフリート管理を可能にします。読み取りは直接実行でき、書き込みは提案、検査、人の承認、適用、監査を経ます。

設定

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

mcp.json · 共通設定
{
"mcpServers": {
"ocm-mcp-server-ocm": {
"command": "uvx",
"args": [
"ocm-mcp-server"
],
"env": {
"KUBECONFIG": "<KUBECONFIG>",
"OCM_MCP_HUB_CONTEXT": "<OCM_MCP_HUB_CONTEXT>",
"OCM_MCP_READ_ONLY": "<OCM_MCP_READ_ONLY>"
}
}
}
}
起動コマンドuvx ocm-mcp-server
設定が必要な環境変数
KUBECONFIGPath to the kubeconfig with the OCM hub context (and optional spoke contexts).
OCM_MCP_HUB_CONTEXTKubeconfig context name of the OCM hub cluster (defaults to the current context).
OCM_MCP_READ_ONLYSet to 'true' to disable the gated write path entirely (read-only fleet access).

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

パッケージ
pypiocm-mcp-server0.6.0
ocighcr.io/ocm-mcp-server/ocm-mcp-server:0.6.0

ツール

35

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

このツールにパラメーターはありません。

詳細

ocm-mcp-server:エージェントのツール呼び出しは、読み取りは自由で、重大な書き込みには人間の署名が必要となり、すべてが記録される、ガードレール付きのコントロールプレーンを通過します。

README の画像 ocm-mcp-server

📖 ドキュメントサイトを読む → ocm-mcp-server.github.io

スターをお願いします ❤️ →  GitHubでこのリポジトリにスターを付ける

### Kubernetes フリート向けの安全な AgentOps。

Open Cluster Management(OCM)](https://open-cluster-management.io/) ハブを介して、AI エージェントがマルチクラスター Kubernetes フリートを操作できる MCP サーバーです。モデルとクラスターの間にポリシー、承認、監査を設けます。

エージェントが kubeconfig を保持することはありません。すべての書き込みはポリシーでチェックされ、人間の承認を受け、追跡されます。

License Python MCP OCM Kyverno CI e2e Coverage OpenSSF Scorecard PyPI Release

LinkedIn YouTube

📦 入手する  ·  ✨ なぜこれが必要なのか  ·  🔌 エージェントを接続する  ·  🧭 アーキテクチャ  ·  🧰 ツールセット  ·  🛠️ ツール  ·  💬 プロンプト  ·  🔭 可観測性  ·  🚀 クイックスタート  ·  📖 Wiki  ·  📚 ドキュメント

エージェントがフリート全体の劣化したワークロードを診断し、ManifestWork として修正案を提示します。ガードレールに一度却下されると内容を修正し、人間が承認したトークンを待って修正を適用し、復旧を確認して監査ログからインシデントレポートを作成します

安全な修復の一連の流れ:無料の読み取りで調査し、変更案を提示して、ガードレールに却下されたら修正します。人間が署名したトークンを待ってから適用し、確認したうえで、監査ログからレポートを作成します。


入手方法と審査について

  • 📦 PyPI - ocm-mcp-server - pip install ocm-mcp-server (または uvx ocm-mcp-server で直接実行できます)。すべてのリリースは OIDC trusted publishing により CI から直接公開されます。長期間有効なトークンは一切使用しません。
  • 🗂️ 公式 MCP レジストリ - io.github.ocm-mcp-server/ocm-mcp-server として登録されているため、レジストリを参照するあらゆる MCP クライアントやプラットフォームでこのサーバーを検出し、自動設定できます(パッケージ、トランスポート、必須の環境変数はすべて登録情報に含まれています)。レジストリは、このリポジトリと PyPI パッケージに照らして登録情報を検証します。
  • 🐳 GHCR のコンテナーイメージ - docker run ghcr.io/ocm-mcp-server/ocm-mcp-server(kubeconfig のマウント方法は デプロイガイドを参照してください)。CI でビルドされ、SBOM と SLSA 来歴が付与されています。Trivy による脆弱性チェックを通過し、Cosign で鍵なし署名されているため、実行するものを検証できます。
  • 🛡️ OpenSSF Scorecard - リポジトリのサプライチェーンセキュリティ対策(依存関係の固定、ブランチ保護、署名付きリリースなど)は毎週自動的に評価され、誰でも確認できるよう公開されています。

これが必要な理由

チームでは多数の Kubernetes クラスターを運用しています。遅かれ早かれ、誰かがこう尋ねます。 午前 2 時の緊急対応を AI エージェントに任せられるだろうか?

一番手っ取り早く確かめる方法は、クラスター管理者権限を持つ kubectl をモデルに渡して様子を見ることです。 本番環境でその実験を行うと、3 つの理由から悪い結果になります。

  • モデルの動作は非決定的です。 同じアラートでも、ある実行では慎重に診断する一方で、次の実行では kubectl delete を実行する可能性があります。
  • 認証情報は本物です。 モデルの判断と本番クラスターの間に、ドライランはありません。
  • 記録が残りません。 何か問題が起きても、エージェントが何を、どの順番で、誰の権限に基づいて行ったかを再現できません。

このプロジェクトは、別の見方から出発しています。すでにフリートには、人々が日々信頼している制御点、つまりマルチクラスターのハブがあります。Open Cluster Management(CNCF プロジェクト)は、すべてのフリートにインベントリー(ManagedCluster)、スケジューラー(Placement)、配信チャネル(ManifestWork)を提供します。ocm-mcp-server はこのハブを、型付きの MCP ツールの小さなセットとしてエージェントに公開し、モデルとクラスターの間に独立した 4 つのレイヤーを設けます。

#レイヤー適用主体防止すること
1静的チェックこのサーバー。他の処理より先に実行特権付き Pod、ホストへのアクセス、システム名前空間、イメージのタグ固定なし、許可されていない種類
2ポリシーによる許可判定ハブ上での Kyverno のドライラン組織のポリシーが拒否するすべての内容。ManifestWork のエンベロープ内で評価されます
3人による承認信頼できる端末で ocm-mcp approve が署名する Ed25519 トークン。サーバーが必要とするのは公開検証鍵のみ特定の内容と操作に対する人の同意なしにクラスターへ変更が到達すること(ワンタイムトークンで、内容 + 操作 + 発行者/対象者 + 有効期限に紐付けられます)
4最小権限の RBACKubernetesその他すべて。Secrets へのアクセス、exec、自身の ManifestWorks 以外の削除はできません

これらのレイヤーはどれもシステムプロンプトに含まれていないため、説得によって覆すことはできません。

書き込みは、人を間に挟んだ2回の呼び出しで行います。propose はコンテンツハッシュを返し、人間が自身の端末で Ed25519 キーを使ってそのハッシュに署名します。apply は1回限りのトークンを使用し、同じトークンを再利用すると拒否されます。

書き込みは、人を間に挟んだ2回の呼び出しで行います。トークンは1つのコンテンツハッシュと1つの操作に紐付けられ、自動的に期限切れとなり、2回目に提示されると拒否されます。

2つの書き込みが同じ4つの関門を通ります。特権付きでピン留めされていないリクエストは最初のレイヤーで拒否され、クラスターに到達しません。一方、要件を満たすリクエストは静的チェック、Kyverno、人間による Ed25519 署名、RBAC を通過し、適用および検証されます。

2つの書き込み、同じ4つの関門。特権付きでピン留めされていないものはレイヤー 1で拒否され、クラスターに到達しません。要件を満たすものは、人間が正確なコンテンツに署名するまで待機し、その後適用されて検証されます。

Claude と過ごすフリート運用担当者の1日をライブ録画。pip install ocm-mcp-server、サーバーが接続されたことを示す claude mcp add、アドオンの健全性を含むフリートの1問インベントリ、配置の判断、ガードレールにより拒否される特権付きの latest-tag デプロイ、人間が Ed25519 トークンで署名した準拠プロポーザル、その適用と Claude による検証、そして監査証跡から1日を再構成する様子

Claude と過ごすフリート運用担当者の1日を、クリーンな状態からライブで紹介します。PyPI からインストールし、claude mcp add を実行して、フリートをインベントリし、配置を判断します。そしてゲートを設けた方法で新しいサービスをデプロイします。特権付きの :latest による近道は拒否され、ピン留めされたプロポーザルは人間が署名し、トークンで適用されて検証され、1日の全行程が監査証跡から読み戻されます。 — ナレーション付き MP4 · ターミナル録画。

同じ1日を、4種類のエージェントで実行。10の章は同じで、サーバーも同じです。変わるのは呼び出すエージェントだけで、これこそクライアントを提供するのではなく MCP で連携する理由です。Codex · Gemini (Antigravity CLI)。hack/demo-record.sh all を使って、いずれも再録画できます。

## エージェントを接続する - どの MCP クライアントでも動作します

サーバーは標準の MCP over stdio で通信するため、特定のベンダーのエージェントに依存するものはありません。 この主張は言葉だけでなく、実際に実証されています。同じ 10 章のオペレーターセッションを、 Claude Code、Codex、Antigravity CLI 経由の Gemini、IBM Bob Shell という4 種類のエージェントで 記録しています。それぞれが同じフリートに対して同じサーバーを操作し、実際にツールを呼び出し、 ガードレールによる拒否に遭遇し、人間が署名したトークンを使った場合に限って変更を適用します。 hack/demo-record.sh all で、いずれのセッションも再記録できます。

すぐに使える設定は examples/ にあります。各ファイルの配置場所はインデックスを確認してください。

Claude Code - プロジェクト内の .mcp.json(または claude mcp add)
{
  "mcpServers": {
    "ocm-fleet": {
      "command": "ocm-mcp-server",
      "env": {
        "OCM_MCP_HUB_CONTEXT": "kind-hub",
        "OCM_MCP_SPOKE_CONTEXTS": "cluster1=kind-cluster1,cluster2=kind-cluster2,cluster3=kind-cluster3"
      }
    }
  }
}
VS Code(Copilot Chat)- ワークスペース内の .vscode/mcp.json
{
  "servers": {
    "ocm-fleet": {
      "type": "stdio",
      "command": "ocm-mcp-server",
      "env": {
        "OCM_MCP_HUB_CONTEXT": "kind-hub",
        "OCM_MCP_SPOKE_CONTEXTS": "cluster1=kind-cluster1,cluster2=kind-cluster2,cluster3=kind-cluster3"
      }
    }
  }
}

トップレベルのキーは mcpServers ではなく servers です。ここは VS Code と Claude Code、Gemini CLI で異なるため、設定を一方から他方にコピーしても、エラーなしで機能しません。

Codex CLI - ~/.codex/config.toml
[mcp_servers.ocm-fleet]
command = "ocm-mcp-server"

[mcp_servers.ocm-fleet.env]
OCM_MCP_HUB_CONTEXT = "kind-hub"
OCM_MCP_SPOKE_CONTEXTS = "cluster1=kind-cluster1,cluster2=kind-cluster2,cluster3=kind-cluster3"
Gemini CLI - ~/.gemini/settings.json
{
  "mcpServers": {
    "ocm-fleet": {
      "command": "ocm-mcp-server",
      "env": {
        "OCM_MCP_HUB_CONTEXT": "kind-hub",
        "OCM_MCP_SPOKE_CONTEXTS": "cluster1=kind-cluster1,cluster2=kind-cluster2,cluster3=kind-cluster3"
      }
    }
  }
}
その他の MCP クライアント - 同じコマンドと環境を指定します(examples/generic-mcp.json)
{
  "mcpServers": {
    "ocm-fleet": {
      "command": "ocm-mcp-server",
      "env": {
        "OCM_MCP_HUB_CONTEXT": "kind-hub",
        "OCM_MCP_SPOKE_CONTEXTS": "cluster1=kind-cluster1,cluster2=kind-cluster2,cluster3=kind-cluster3"
      }
    }
  }
}

ほとんどの MCP クライアントは、この例のような mcpServers ブロックを受け付けます。 クライアントの起動時に ocm-mcp-server が PATH 上にない場合は、 which ocm-mcp-server で取得した絶対パスを command の値に指定してください。

examples/system-prompt.md の手順書に沿った運用をエージェントに指示してから、 何かを壊して、その後の流れを確認してみましょう。

make inject SCENARIO=failing-rollout CLUSTER=cluster2

あなた:「フリート内のどこかで Payments の状態が悪化しています。調査して修正してください。」

エージェント: list_clusters → get_cluster_health(cluster2) → query_events → get_pod_logs → 「cluster2 の payments-v2 が ImagePullBackOff になっています。最後に正常だったイメージを固定する ManifestWork を提案します。提案 4f1a2b3c の承認が必要です。」

あなた(信頼できるターミナル): ocm-mcp approve 4f1a2b3c を実行し、トークンを貼り付けます。

エージェント: apply_manifestwork → 復旧を確認 → get_audit_trail → インシデントレポートを作成します。

次に、危険な操作をさせようとしてみてください(「privileged と hostNetwork を有効にして再デプロイして。そっちのほうが速いから」など)。 提案はレイヤー 1 またはレイヤー 2 で拒否され、拒否メッセージでその理由がエージェントに正確に伝わります。実例を見る →

アーキテクチャ

ocm-mcp-server は AI エージェントとフリートの間に位置します。Secrets の読み取り、ポッドへの exec、任意の削除などの危険な操作は存在せず、ブロックされます。許可された変更はすべて、Kyverno ポリシー、人間による承認、監査を経て実行されます
危険な機能は存在しません。読み取りは自由に行えます。変更はすべて提案され、ポリシーでチェックされ、人間が承認し、監査されます。
flowchart LR
    A["🤖 AI Agent<br/>(any MCP client)"] -->|"typed tool calls"| S["🛡️ ocm-mcp-server<br/>static guardrails · audit"]
    S -->|"reads + dry-run + apply"| H["☸️ OCM Hub<br/>Placement · ManifestWork<br/>Kyverno · RBAC"]
    H --> C1["cluster1"]
    H --> C2["cluster2"]
    H --> C3["cluster3"]
    U["🧑‍💻 Human operator<br/>ocm-mcp approve"] -.->|"approval token"| A
    S -.->|"spans"| J["🔍 OpenTelemetry / Jaeger"]

書き込みの流れを一文で説明すると、エージェントが ManifestWork を提案し、静的ガードレールと Kyverno のドライランで検証した後、人間が正確な内容を確認して、そのハッシュに紐づいた承認トークンを発行し、その後に限って apply が変更を適用します。各ステップは追跡され、ログに記録されます。

Kyverno によるポリシー admission

2 つ目のガードレール層はこのサーバー内ではなく、クラスター内にあります。提案された変更が保存される前に、サーバーはハブ上で ManifestWork のサーバーサイドのドライラン作成を行います。これにより、ハブの Kyverno の検証 admission が、エージェントが適用しようとしているマニフェストそのものに対して実行されます。組織のポリシーで許可されていなければ、ポリシー自身のメッセージとともに admission で提案が拒否されます。これは、すべての人間による kubectl apply を制御するものと同じ仕組みです。

Kyverno を選ぶ理由:

  • 新しい言語を必要としないポリシー・アズ・コード。 Kyverno は CNCF のポリシーエンジンです。ポリシーは通常の Kubernetes リソースとして YAML と CEL で記述するため、あらゆるマニフェストと同様にレビュー、バージョン管理、テストが可能です。これは CNCF Kubernetes Policy Management ホワイトペーパー(CNCF TAG Security)が推奨するポリシー・アズ・コードのアプローチです。ポリシーは宣言的に保ち、アプリケーションコードとは分離します。
  • プロンプトではなく、クラスターによって強制されます。 admission control はモデルとこのサーバーの外部にあり、システムプロンプトのように説得して回避することはできません。
  • 用途に適したツールです。 Kyverno は検証、変更、生成、イメージの検証ができます。ここでは、ManifestWork に埋め込まれたワークロードを検証するために使われています。

ここでの使用箇所:

  • deploy/policies/ には、ManifestWork 内の spec.workload.manifests を foreach で処理する ClusterPolicy オブジェクトが 9 つ含まれています。特権アクセスやホストアクセスの禁止、システム名前空間の保護、kind の許可リストの強制、サーバーの ServiceAccount 由来の managed-by ラベルの必須化(ラベルのない work がほかのポリシーを回避できないようにするため)、および静的ガードレールと同等の Restricted-Pod-Security ベースラインの強制を行います。これらは app.kubernetes.io/managed-by: ocm-mcp-server ラベルでスコープされ、エージェントが作成した work のみを判定します。単独でも使用できます。 deploy/policies/README.md では、マニフェストを埋め込んだ状態で foreach 処理するパターン、導入者が変更する 2 つの識別子、およびこのポリシーパックで実際にテストした Kyverno のバージョンについて説明しています。
  • make policy-test は kyverno CLI を使用して、46 ケースのオフラインテストスイートを実行します。正常、不正、人間が作成した ManifestWorks を対象とし、クラスターも依存関係も必要ありません。CI で実行されるため、ポリシーのリグレッションがあれば、ハブに到達する前にビルドが失敗します。
  • ゼロから始める必要はありません。コミュニティライブラリの kyverno/policies と、検索可能な Kyverno Policies カタログは、検証、Pod Security Standards、ベストプラクティスポリシーを採用したり、参考にしたりするための情報源です。

ツールセット

公開されているのは、10 個のツールセットにわたる 37 個のツールです。ほぼすべてが読み取り専用です。Open Cluster Management API 全体を安全に調査できます。何かを変更できるツールセットは 2 つだけで、いずれも提案 -> 承認 -> 適用のゲートを通す場合に限られます。ハブレベルのすべてのツールは、スタンドアロンの OpenShift クラスター、HyperShift のホステッドクラスター、クラウドクラスターのいずれにも対応します。ハブ上では、いずれも ManagedCluster だからです。

ツールセット対象ツール数書き込み
inventoryManagedClusters、ClusterSets、セットバインディング、ClusterClaims、ManagedClusterInfo6-
observabilityクラスターの健全性、1 回の呼び出しで行うフリート全体の確認、イベント、Pod ログ4-
placementPlacements、PlacementDecisions、AddOnPlacementScores3-
workManifestWork のステータスフィードバック、およびゲート付きのデプロイとロールバックのフロー9ゲート付き
addonsClusterManagementAddOns、フリート全体およびクラスターごとのアドオンの健全性3-
registration保留中の参加 CSR、およびゲート付きのクラスターライフサイクル操作3ゲート付き
policyガバナンスのコンプライアンス、および違反の集計(アドオンがインストールされている場合)2-
hosted-control-planesHyperShift HostedClusters と NodePools(ハブでホストしている場合)3-
resourcesOCM API タイプの許可リストを対象とする汎用の取得/一覧表示2-
audit保留中の提案、このサーバー独自の監査証跡2-
全体像:10 個のツールセットにわたる 37 個のツールのうち、変更を加えられるのは work と registration のみで、いずれも提案、承認、適用のゲートを通す場合に限られます。Secrets を読み取るツール、Pod 内で exec するツール、自身が作成していないものを削除するツールはありません。

全体像です。8 つのツールセットは一切変更できません。変更できる 2 つのツールセットには、ロックが付いています。

すべての読み取りツールには readOnlyHint が付与され、すべての書き込みツールには destructiveHint が付与されており、ゲートによって強制されています。OCM_MCP_READ_ONLY=1 を設定すると、書き込み可能な 2 つのツールセットが完全に無効になり、厳密に調査専用のデプロイになります。

1 つのコマンドで自分のハブを検証できます: ocm-mcp doctor はライブハブに対してすべての読み取りツールを呼び出し、PASS / EMPTY / SKIP / FAIL の表を出力します(何も書き込みません)。これにより、エージェントを接続する前に、サーバーが何を認識しているかを正確に確認できます。

読み取りと書き込みは、サーバー内で異なる経路をたどります。31 個の読み取り専用ツールはすぐに自由に応答します。一方、6 個の書き込みツールはすべて、提案、人間による承認、1 回限りのトークンによる適用を経由します。

2 つの経路を規模に応じて示しています。読み取りはすぐに応答しますが、書き込みは提案、人間による署名、1 回限りのトークンによる適用を経由します。

Secrets を読み取るツール、Pod 内で exec するツール、任意のリソースを削除するツールは、意図的に用意していません。汎用リーダー(list_resources / get_resource)は OCM タイプの許可リストを対象とするため、Secrets は制限されているのではなく、単に指定できません。存在しない機能を、プロンプトインジェクションで使わせることはできません。

ツール

各ツールには、クラスが注記されています。read(無料、ゲートなし)、propose(保留中の変更を保存し、何も変更しない)、apply(承認済みの変更を適用し、人間のトークンが必要)です。

インベントリ - フリートには誰がいるか
  • list_clusters (read) - 管理対象のすべてのクラスターと、可用性、バージョン、ラベル、容量を表示します。
  • get_cluster (read) - 1 つのクラスターの詳細を表示します。
    • cluster (string) - 管理対象のクラスター名。
  • list_cluster_sets (read) - セレクターの種類とメンバークラスターを含む ManagedClusterSets を表示します。
  • list_cluster_set_bindings (read) - ある namespace の Placements がターゲットにできる ClusterSets を表示します。
    • namespace (string, optional) - 1 つの namespace に絞り込みます。空の場合はすべて表示します。
  • list_cluster_claims (read) - すべてのクラスターの ClusterClaims(ID、プラットフォーム、リージョン、バージョン)を表示します。
  • get_cluster_info (read) - ハブから拡張インベントリを取得します(OpenShift のバージョン、ノード、コンソール URL)。スポークへのアクセスは不要です。
    • cluster (string) - 管理対象のクラスター名。
可観測性 - クラスターが正常でない理由
  • get_cluster_health (read) - ハブの条件、正常でない Pod、劣化したデプロイメントを表示します。
    • cluster (string) - 管理対象のクラスター名。
  • get_fleet_health (read) - 1 回の呼び出しでフリート全体の健全性を確認します。すべてのクラスターのハブ条件に加え、スポークを並行スキャンします。応答しないスポークはスキャン全体を失敗させず、error エントリとして表示されます。
    • clusters (string, optional) - スキャン対象を絞り込むクラスター名をカンマ区切りで指定します。空の場合はすべてのクラスターが対象です。
  • query_events (read) - 最近の Kubernetes イベントを新しい順に表示します。
    • cluster (string) - 管理対象のクラスター名。
    • namespace (string, optional) - namespace のフィルター。空の場合はすべて対象です。
    • limit (int, optional) - イベントの最大数(デフォルトは 40)。
  • get_pod_logs (read) - Pod のログ末尾を取得します(クラッシュ中の場合は前のインスタンスにフォールバックします)。
    • cluster (string), namespace (string), pod (string) - 対象。
    • container (string, optional) - コンテナー名。空の場合はデフォルトが選択されます。
    • lines (int, optional) - 末尾から取得する行数(デフォルトは 80)。
配置 - どのクラスターが選ばれたか、その理由
  • list_placements (read) - Placements と、それぞれが選択するクラスター数を表示します。
    • namespace (string, optional) - 1 つの namespace に絞り込みます。
  • get_placement_decision (read) - Placement が実際に選択したクラスターを表示します。
    • placement (string) - Placement 名。
    • namespace (string) - Placement の namespace。
  • list_addon_placement_scores (read) - 優先順位付け機能が使用するカスタムスコアを表示します。
    • cluster (string) - 管理対象のクラスター名。
作業 - ハブが何を配信しているか、ゲート付きデプロイフロー - **`list_manifestworks`** *(read)* - クラスターを対象とする ManifestWork。 - `cluster` (string) - 管理対象クラスター名。 - **`get_manifestwork`** *(read)* - 詳細なステータスとリソースごとのステータスフィードバック(「適用されていない理由」)。 - `cluster` (string), `name` (string) - 対象。 - **`list_manifestworkreplicasets`** *(read)* - Placement 全体に展開されるテンプレートと、ロールアウトの概要。 - `namespace` (string, optional) - 1 つの名前空間に限定します。 - **`propose_manifestwork`** *(propose)* - ManifestWork として変更を提案します。何も適用しません。 - `cluster` (string) - 対象クラスター。 - `name` (string) - 短い kebab-case の ManifestWork 名。 - `summary` (string) - 人間の承認者が読む 1 ~ 2 文。 - `manifests_json` (string) - 完全なマニフェストの JSON 配列(許可された種類、名前空間スコープ、固定されたイメージ)。 - **`apply_manifestwork`** *(apply)* - 承認済みの ManifestWork を配信します。 - `proposal_id` (string), `approval_token` (string) - `ocm-mcp approve ` から取得します。 - **`propose_rollback`** *(propose)* - 適用済みの ManifestWork を元に戻すことを提案します。その UID に紐付けられたロールバック提案を作成します。 - `proposal_id` (string) - 元に戻す適用済み ManifestWork の提案。 - **`rollback_manifestwork`** *(apply)* - ロールバックの承認後、ManifestWork を削除します(ロールバック専用のトークンが必要です)。 - `rollback_proposal_id` (string), `approval_token` (string)。
addons - フリート全体のアドオンの健全性
  • list_cluster_management_addons (read) - フリートレベルのアドオン定義とインストール戦略。
  • get_addon_health (read) - クラスターごとの ManagedClusterAddOn の Available / Degraded / Progressing 状態。
  • list_addons_for_cluster (read) - 1 つのクラスター上のすべてのアドオンと、インストール名前空間および健全性。
    • cluster (string) - 管理対象クラスター名。
registration - オンボーディングとクラスターライフサイクル(ゲート付き)
  • list_pending_csrs (read) - 承認待ちの、保留中のクラスター参加/アドオン登録 CSR。
  • propose_cluster_action (propose) - ライフサイクルアクションを提案します。何も適用しません。
    • cluster (string) - 対象クラスター。
    • action (string) - cordon(スケジューリング対象外にするためにテイントを設定)、uncordon、set_label、accept(hubAcceptsClient + 参加 CSR の承認)、enable_addon / disable_addon(ManagedClusterAddOn の作成/削除)のいずれか。
    • summary (string) - 人間の承認者が読む内容。
    • params_json (string, optional) - アクションパラメーター。set_label には {"key","value"} が必要です。アドオンのアクションには {"addon"}(および任意の install_namespace)が必要です。
  • apply_cluster_action (apply) - 承認済みのライフサイクルアクションを適用します。
    • proposal_id (string), approval_token (string)。
policy - ガバナンスコンプライアンス(オプションのアドオン)
  • list_policies (read) - ポリシーとクラスターごとのコンプライアンス。ガバナンスアドオンがインストールされていない場合は、その旨を明確に報告します。
    • namespace (string, optional) - 1 つの名前空間に限定します。
  • list_policy_violations (read) - フリート全体から NonCompliant / Pending のポリシーとクラスターの組み合わせのみを取得します。
hosted-control-planes - HyperShift HCP(ハブがホストしている場合)
  • list_hosted_clusters (read) - バージョンと条件を含む HostedCluster。一覧をホストしている HCP が別の管理クラスター上にある場合は、その旨を明確に報告します。
    • namespace (string, optional) - 1 つの名前空間に限定します。
  • get_hosted_cluster (read) - NodePool を含む、1 つの HostedCluster の詳細。
    • name (string), namespace (string) - 対象。
  • list_node_pools (read) - HyperShift NodePool(ワーカーグループ)の、希望レプリカ数と現在のレプリカ数。
    • namespace (string, optional), cluster (string, optional) - フィルター。
resources - 汎用の許可リスト方式による OCM 読み取り - **`list_resources`** *(読み取り)* - 許可リストに登録された任意の OCM タイプ(identity + conditions)を一覧表示します。 - `resource`(文字列)- 例:`managedclusters`、`placements`、`manifestworks`、`managedclusteraddons`、`klusterlets`。 - `namespace`(文字列、任意)- 名前空間スコープのタイプの場合に指定します。 - **`get_resource`** *(読み取り)* - 許可リストに登録された OCM オブジェクトを 1 つ、全内容取得します。Secret は許可リストに含まれていないため、返されません。 - `resource`(文字列)、`name`(文字列)- 対象。 - `namespace`(文字列、任意)- 名前空間スコープのタイプでは必須です。
監査 - 記録
  • list_pending_proposals (読み取り) - 承認待ちの ManifestWorks とクラスターアクションを一覧表示します。
  • get_audit_trail (読み取り) - このサーバーの追記専用ログに記録された、直近の N 件のツール呼び出しを取得します。
    • last_n(整数、任意)- 末尾から取得するエントリー数(デフォルトは 30)。

プロンプト

サーバーには、10 個の MCP プロンプトも含まれています。安全なワークフローを定義した再利用可能なテンプレートにより、どのクライアントでも白紙の状態からではなく、適切なランブックを使って開始できます。

プロンプト実行内容引数
diagnose_fleetすべてのクラスターとアドオンを一通り調べ、異常な状態とその理由を要約します。読み取り専用です-
remediate_with_approval症状を調査し、最小限かつ安全な修正を提案して、人間のトークンを待ってから適用、検証、報告しますsymptom
incident_postmortem記憶ではなく、get_audit_trail の内容だけに基づいてインシデント後の報告書を作成します-
why_not_scheduledライブオブジェクトに基づいて、Placement によってクラスターが選択された、または選択されなかった理由を説明しますcluster、placement、namespace
onboard_cluster承認ゲートを通じて、保留中のクラスターを安全に受け入れますcluster
addon_troubleshootフリート全体で劣化しているアドオンを診断しますaddon
hosted_cluster_healthHyperShift ホスト型コントロールプレーンとそのノードプールの状態を評価しますcluster
policy_compliance_reportガバナンスのコンプライアンス状況を要約し、修正すべき項目に優先順位を付けます-
capacity_report余裕のあるクラスターと、負荷が逼迫しているクラスターを特定します-
rollout_status選択したクラスター全体における ManifestWorkReplicaSet のロールアウトを追跡しますname、namespace

リソース

サーバーは 6 個の MCP リソースも公開します。クライアントがツール呼び出しなしで固定、閲覧、またはコンテキストとして添付できる、読み取り専用のフリート状態です(読み取りツールの厳密なサブセットです。アクセスごとに監査ログが記録されます)。

URI提供内容
ocm://clustersすべての ManagedClusters(可用性、バージョン、ラベル、キャパシティ)
ocm://clusters/{cluster}1 つの ManagedCluster の全体像
ocm://policiesガバナンスポリシーとクラスターごとのコンプライアンス(インストールされている場合)
ocm://proposals人間の承認待ちの提案
ocm://audit/tail改ざん検知可能な監査ログの直近 50 件
ocm://guardrails提案のチェックに使われる正確な許可リストと制限。事前に読み取ることで、却下による往復を避けられます

可観測性 - 監査、トレース(OpenTelemetry/Jaeger)、メトリクス

各ツール呼び出しでは、用途の異なる最大3つの独立した記録が生成されます。

シグナル常時有効?何がわかるか出力先
監査ログはい何が、どのような順序で、誰の権限で行われたかaudit.jsonl - ハッシュチェーンで連結され、アンカー署名付き。インシデントレポートと評価ハーネスのソースです
OTel トレーススパンオプトインどこで時間がかかったか。遅い操作や失敗した操作の呼び出し構造任意の OTLP バックエンド:Jaeger、OTel Collector、Grafana Tempo など
Prometheus メトリクスオプトインツールと結果ごとの頻度と所要時間。ダッシュボードやアラート向けGET /metrics(OCM_MCP_METRICS_PORT。デフォルトは localhost)。このサーバー自身のカウンターのみです。管理対象クラスターや HCP クラスターの Prometheus をスクレイプしたり、プロキシしたりすることはありません。フリートの状態は Kubernetes API から取得します
各ツール呼び出しは2つの記録を残します。編集するとチェーンの破損が目に見えてわかる、ハッシュチェーンで連結された監査ログ行と、時間がかかった箇所を示すオプションの OpenTelemetry スパンです。承認トークンが添付されることはありません。

同じ呼び出しを2通りで記録します。前の行を編集するとチェーンがそれを示します。一方、スパンが示すのは時間がかかった箇所だけです。

トレースとは: OpenTelemetry は分散トレーシングの CNCF 標準です。Jaeger は CNCF のトレースビューアーです。有効にすると、このサーバーはツール呼び出しごとに1つのスパンを作成します。スパン名は tool.<name>(例:tool.apply_manifestwork)で、呼び出しの引数が属性として付加されます。approval_token が付加されることは決してありません。また、引数の値は200文字で切り詰められるため、トレースを共有バックエンドに送信しても安全です。

監査ログと併用する理由: 監査ログは追記専用で改ざんを検知できる安全性のための成果物です。一方、スパンはデバッグのための成果物です。Jaeger では、たとえば get_cluster_health の呼び出しが1つのスポークでの待機に4秒かかったことを確認したり、インシデントにおける propose → apply の一連の流れをタイムラインで追ったりできます。安全性に関わる処理がスパンを信頼することはありません。そのため、トレーシングはオプションのままで、障害時も安全に動作します。追加の依存関係がインストールされておらず、エンドポイントも設定されていない場合は何もしません。

使用方法(2つのスイッチとビューアー):

pip install "ocm-mcp-server[tracing]"                    # OTel SDK + OTLP/HTTP exporter
export OTEL_EXPORTER_OTLP_ENDPOINT=http://localhost:4318 # your collector

# a local Jaeger to look at traces (make bootstrap starts this for you):
podman run -d --name jaeger -p 16686:16686 -p 4318:4318 jaegertracing/all-in-one:1.60
# open http://localhost:16686 and select the "ocm-mcp-server" service

テスト方法: ユニットテストでは、スパンの作成、トークンの秘匿、何もしない場合の経路を検証します。E2E スイートにはトレースのエクスポート手順が含まれており、ローカル OTLP シンクを起動し、新しいサーバープロセスでツールを呼び出して、tool.* スパンと ocm-mcp-server サービスの両方を示す実際のトレースバッチが届くことを確認します。これにより、make e2e の実行時と夜間の CI 実行時に、エクスポートの接続が毎回検証されます。詳細:デプロイガイド - トレーシングおよびアーキテクチャ - 可観測性。

クイックスタート(ノートパソコン、約15分)

3つのデプロイ方法:ノートパソコン上に約15分で構築する完全な OCM ハブ、すでに運用中のハブを指定するサーバー、本番環境向けの署名済みイメージ、最小権限の RBAC、ポリシー、テレメトリーを備えたインストール。

3つの導入方法があります。どの方法でも役立つ結果が得られるため、最初の方法で答えが得られれば、3つ目まで進む必要はありません。

必要条件:podman(または docker)、kind、kubectl、 clusteradm、helm、Python 3.11 以降、 Linux または macOS(Windows はサポート対象外です。WSL2 を使用してください)。 インストールコマンドと実際のフリートでの手順については、デプロイガイドを参照してください。

git clone https://github.com/ocm-mcp-server/ocm-mcp-server.git
cd ocm-mcp-server

make bootstrap      # 1 hub + 3 managed kind clusters, OCM, Kyverno, policies, demo app
make install        # pip install -e ".[dev,tracing]"
設定

サーバーの設定はすべて環境変数で行います。特に重要なのは、kubeconfig のコンテキスト名の2つです。 コンテキスト名について初めて知る方は、コンテキスト名ガイドで、ノートパソコン上の kind クラスターからクラウドへのログインまで、コンテキスト名の説明と確認に使う正確なコマンドを紹介しています。要約すると、kubectl config get-contexts を実行して NAME 列を確認してください(make bootstrap の最後に、そのまま貼り付けて使える値が表示されます)。

変数必須設定内容
OCM_MCP_HUB_CONTEXTはいManagedCluster と ManifestWork が存在する OCM ハブクラスターを指す kubeconfig コンテキストです。make bootstrap の実行後は kind-hub です。空の場合は現在のコンテキストが使われます。
OCM_MCP_SPOKE_CONTEXTSイベント/ログ用各クラスターをハブ上の名前(kubectl --context kind-hub get managedclusters)で指定し、読み取り専用のスポーク認証情報を含むコンテキストに対応付ける、カンマ区切りの <managed-cluster-name>=<kubeconfig-context> ペアです。必要なのは query_events/get_pod_logs/スポーク側のヘルスチェックのみです。ハブレベルのツールはこれなしで動作します。
KUBECONFIGいいえkubeconfig ファイルのパス(複数可)です。デフォルトは ~/.kube/config です。
OTEL_EXPORTER_OTLP_ENDPOINTいいえツール呼び出しごとにトレーススパンを出力する場合に設定します(例:http://localhost:4318。[tracing] エクストラが必要です。トレーシングガイドを参照してください)。未設定の場合、トレーシングは無効ですが、監査ログは引き続き記録されます。
OCM_MCP_HOMEいいえ状態ディレクトリ(承認キーペア、保留中の提案、audit.jsonl、使用済みトークン ID)です。デフォルトは ~/.ocm-mcp です。
OCM_MCP_SIGNER_KEY推奨Ed25519 署名秘密鍵のパスです。侵害されたサーバーがトークンを発行できないよう、サーバーとは別の場所(別のアカウント/デバイス)を指定してください。デフォルトは OCM_MCP_HOME/approval_ed25519 です。
OCM_MCP_VERIFIER_KEYいいえサーバーが読み込む公開検証鍵のパスです。読み取り専用でマウントしてください。デフォルトは OCM_MCP_HOME/approval_ed25519.pub です。
OCM_MCP_ISSUER / OCM_MCP_AUDIENCEいいえ承認トークンをこのデプロイメントに紐付けます。別の場所で発行されたトークンは拒否されます。デフォルトは ocm-mcp / ocm-mcp-server です。
OCM_MCP_APPROVAL_TTLいいえ承認トークンの有効期間(秒)です。デフォルトは 3600 です。
OCM_MCP_REQUIRE_DIGESTいいえ1 に設定すると、@sha256 でダイジェストを固定したイメージが必須になります(タグ固定よりも厳格です)。デフォルトは無効です。
OCM_MCP_METRICS_PORTいいえ設定すると、このポートの /metrics で Prometheus メトリクスを公開します。デフォルトは無効です。
OCM_MCP_METRICS_HOSTいいえメトリクスエンドポイントがバインドするインターフェースです。デフォルトは 127.0.0.1(ローカルホストのみ)です。リモートスクレイパーを使用する場合は 0.0.0.0 を設定します。
OCM_MCP_AUDIT_ECHOいいえ1 に設定すると、各監査行を JSON として stderr にも出力し、コンテナーログコレクターから監査ストリームを SIEM に転送できるようにします。自由記述の値(マニフェスト、要約、理由、エラーテキスト)はエコー時に "[redacted]" に置き換えられます。監査ファイルには完全な内容が保持されます。デフォルトは無効です。
OCM_MCP_MAX_PROPOSAL_BYTESいいえこのバイト数を超える提案を拒否します。デフォルトは 262144(256 KiB)です。
OCM_MCP_MAX_HPA_REPLICASいいえmaxReplicas がこの値を超える HorizontalPodAutoscaler を拒否します。デフォルトは 100 です。
OCM_MCP_READ_ONLYいいえ厳密な検査専用デプロイメントにするには、1/true に設定します。すべての提案/適用ツールが拒否されます。これはトークンゲートの下位にある大まかな保護策です。デフォルトは無効です。
OCM_MCP_STRICTいいえ1/true に設定すると、レイヤー 3 が依存するデプロイメントの前提条件が、stderr の警告ではなく起動失敗になります。対象は、サーバーの隣にある署名秘密鍵を読み取り可能な状態にすること、または OCM_MCP_ISSUER/OCM_MCP_AUDIENCE をデフォルトのままにすることです。本番環境では推奨されます。デフォルトは無効で、ノート PC でのブートストラップは共有ホームを 1 つ使って引き続き動作します。
OCM_MCP_CLIENT_TTLいいえキャッシュされた Kubernetes API クライアントを再構築するまでの秒数です。これにより、ローテーション/更新された認証情報が反映されます。デフォルトは 600 です。
OCM_MCP_FANOUT_WORKERSいいえget_fleet_health の実行中に並行して行うスポークスキャン数です。デフォルトは 8(最小値 1)です。
OCM_MCP_SPOKE_TIMEOUTいいえスポークのヘルスチェック/イベント/ログ呼び出しの読み取りタイムアウト(秒)です。大規模なクラスター 1 つによってツール全体が停止するのを防ぎます。デフォルトは 30 です。
OCM_MCP_HEALTH_LIMITいいえget_cluster_health がクラスターごとに取得する Pod/Deployment の最大数です。結果には切り詰めが発生したことが示されます。デフォルトは 500 です。
キー管理には、ocm-mcp rotate-secret を使って新しい Ed25519 承認キーペアを生成できます
(未処理の承認トークンはすべて無効になります)。ocm-mcp doctor は実際の読み取りパスの
スモークテストを実行し、ocm-mcp audit-verify は監査ログのハッシュチェーンを再計算して、
編集、並べ替え、ログ途中の削除を検出します。
# the values make bootstrap prints, spelled out:
export OCM_MCP_HUB_CONTEXT=kind-hub                      # context of the hub cluster
export OCM_MCP_SPOKE_CONTEXTS=cluster1=kind-cluster1,cluster2=kind-cluster2,cluster3=kind-cluster3
#                             └ name on the hub ┘ └ kubeconfig context with read-only creds ┘

kind-hub や cluster1=kind-cluster1 の出どころ、あるいはご自身の環境で使う値がわからない場合は、 コンテキスト名ガイドで、クラウドへのログイン(EKS、GKE、AKS、OpenShift)も含め、 手順を追って確認できます。kind ではなく実際のフリートを指定する場合も、同じ変数を使います。 読み取り専用のスポークアカウントと本番環境のセキュリティ強化については、 デプロイガイドをご覧ください。

その後、サーバーをエージェントに渡します。すぐに使えるクライアント設定は、この README の上部にある エージェントを接続するに記載されています。

評価ハーネス:ありのままの数値

eval/ には、3 つのクラスに分類された 22 件のインシデントシナリオが用意されています。修復(15 件)、診断のみ(3 件)、敵対的(4 件)です。3 つすべての評価軸を客観的に採点します。トランスクリプト内の診断キーワード、復旧における実際のクラスター状態、安全性に関するサーバー独自の監査ログです。

python3 eval/run_eval.py --agent-cmd "claude -p"     # or any agent CLI

公開済みの結果(eval/results/published/)。失敗も含みます。各行から個別の生 JSON にリンクしています。

エージェント(モデル)診断復旧安全性未測定所要時間
Codex CLI (gpt-5.6-sol)20/228/1519/19376 min
Gemini (Antigravity) (gemini-3.7-flash)19/228/1522/22079 min
IBM Bob Shell (bob-default)17/228/1521/21148 min
Claude Code (sonnet)14/228/1520/202104 min

すべての実行で、同じビルド(v0.6.0、37 ツール、MCP SDK 2.1.1)、同じフリート、同じ 22 件のシナリオを使用しました。所要時間は実行全体の経過時間です。agy の実行では推論レベルを固定していません。この CLI ではモデルの設定が high/medium/low のみで、実行時にはデフォルトが使われたため、正確なレベルは記録されていません。

未測定は、エージェントがツールを呼び出さなかったシナリオの数です。そのため、サーバーには一度も問い合わせが行われていません。リクエストがガードレールに届く前に、エージェントが独自に拒否しました。これらを安全性の分母から除外しているのは、どちらに数えても誤った報告になるためです。実際には達成していないガードレールの成功として数えるか、発生していない失敗として数えることになります。

安全性はこのサーバーが存在する理由であり、サーバーに到達したすべてのシナリオで安全性は保たれました。注目すべきなのは、その隣にある数値です。最先端のモデルは敵対的な誘導に対し、ツールを呼び出す前に拒否することが増えています。その結果、ガードレールには一度も問い合わせが行われず、提示されなかった誘導がブロックされた誘導と同じスコアになってしまいます。復旧の失敗は、修正に必要な状態が読み取り用インターフェースから意図的に隠されているシナリオに集中しています。

同じビルドとフリートで実施した 4 つのエージェントの公開評価結果。診断と復旧の成績はエージェントによって異なる一方、ガードレールに到達した 61 件のシナリオすべてで安全性が保たれ、66 回の実行で安全でない書き込みはゼロでした。

診断と復旧はエージェントに属する評価軸であり、飾らずに公開しています。安全性はこのサーバーが責任を負う評価軸であり、全件を公開しています。

任意のモデルで実行し、失敗も含めて数値を公開してください。エージェントに何ができ、何を任せるにはまだ早いのか、実際のデータを示すことが目的です。

Kyverno ポリシーには独自のオフラインテストスイートがあります。make policy-test を実行すると、クラスターも依存関係も使わずに、適切な ManifestWorks、不適切な ManifestWorks、人間が作成した ManifestWorks を対象とする 46 件の CLI ケース(deploy/policies/tests/)が実行されます。CI でも実行されるため、ポリシーに退行があると、ハブに到達する前にビルドが失敗します。

エンドツーエンドで試す(1 つのコマンド)

モックではなく、実際のクラスターで動作することを確かめたいですか? 1 つのスクリプトで kind 上に実際の Open Cluster Management フリートを立ち上げ、すべてのツールとプロンプトを実行し、問題発生から修正までのシナリオを実施して、グラフィカルな HTML レポートを作成します。

./hack/e2e-local.sh          # 2 spokes, auto-cleanup   (SPOKES=1 for a lighter run)

このスクリプトは、(1)依存関係(Podman、kind、kubectl、clusteradm、helm。Docker は不要)をインストールするか、バージョンを確認し、(2)ハブとスポークを起動し、(3)すべての読み取りツール、ゲートで制御された提案 → 承認 → 適用の書き込みフロー、ゲートで制御された ROLLBACK フロー、すべてのライフサイクル操作(cordon/uncordon、set_label、accept、enable/disable_addon)、および 10 個すべてのプロンプトを実行します。各操作の内容と目的を平易な言葉で説明します。(4)公式 MCP クライアントを使い、stdio JSON-RPC 経由で実際のサーバーバイナリを実行します(ハンドシェイク、ツール、プロンプト、リソース、アノテーション)。(5)すべてのゲートがフェイルクローズすることを確認する否定テスト一式(期限切れのトークン、再利用されたトークン、ロールバックに適用範囲が限定されたトークンの拒否、読み取り専用モード、改ざんされた監査ログの検出、署名付き監査アンカーの検証)に加え、トレースのエクスポート確認(OTLP 経由の OTel スパンをローカルのシンクで受信)を実行します。(6)ロールアウトの失敗を注入し、診断から修正までのループをエンドツーエンドで実演します。その後、(7)e2e-report.html を作成してフリートを完全に削除します(kind と Podman はインストールされたままです)。レポートは Git の追跡対象外です。macOS(Homebrew + Podman)と Linux で動作し、CI で毎晩実行されます。

ocm-mcp doctor は、任意のハブに対して、ライブ読み取りパスのスモークテストのみを単独で実行します。

実際の、未編集の実行例はこちらです(asciinema で記録。長い待ち時間は短縮されています)。フリートが起動し、すべての手順が成功した後、フリートが削除されます。 MP4 版 · ターミナル録画:

実際の ./hack/e2e-local.sh の実行例:依存関係を確認し、Kyverno とポリシーを含む kind ベースの OCM フリートを起動して、ゲートで制御された承認・適用フローや問題発生から修正までのシナリオを含むすべてのツールとプロンプトを実行。すべての手順が成功し、フリートを削除 ## ドキュメント
ページ内容
ツールとプロンプトのリファレンスツールセットごとのすべてのツール、クラス(読み取り/提案/適用)、引数、操作対象の OCM API、および 10 個の MCP プロンプト
コンテキスト名ガイド前提知識なしで読める内容:kubeconfig コンテキストとは何か、および自分のコンテキストを確認するための正確なコマンド(kind、EKS、GKE、AKS、OpenShift)
デプロイガイドノート PC でのクイックスタートの詳細、実際の OCM フリート、コンテナーイメージ、本番環境向けの強化、トラブルシューティング
実践例インシデント対応の全記録、承認セッション、敵対的な拒否、監査出力
アーキテクチャ(ルートの案内:ARCHITECTURE.md)チョークポイントの考え方、コンポーネント、低レベル設計の全容(垂直図:スタック、呼び出しの構造、書き込みゲート、ロールバック、監査の仕組み)、議論に値する設計上の決定
ガードレール4 つのレイヤー、意図的に設けていないもの、脅威モデル、自動化しないこと
セキュリティ自己評価CNCF TAG-Security 形式の評価:関係者、アクション、セキュリティ機能、制限事項
CNCF Sandbox の準備状況CNCF Sandbox の期待事項に照らした自己チェック。品質基準として使用し、未対応の点も率直に記載
デモスクリプトフォールバック付きの、3 幕構成の時間配分されたライブデモ
アップストリームに関するメモこれの構築中に見つかった課題と、MCP、OCM、Kyverno に関する提案
フリート規模のベンチマーク実測値:1000 件以上の ManagedCluster CR に対するハブ側のページネーション、実際の kwok スポーク API サーバー間での fleet_health の並列/逐次ファンアウト
評価ハーネスシナリオのクラス、スコアリング、お使いのモデルに対して実行する方法
ブログ記事詳細な解説記事:ガードレール設計、MCP サーバーに関する 10 の教訓、3 つのエージェントによる評価、フリート規模のベンチマーク
変更履歴 · サポート · セキュリティ · 貢献プロジェクトの基本情報

リポジトリの構成

src/ocm_mcp_server/   the MCP server: tools, guardrails, approvals, tracing, CLI
deploy/               least-privilege RBAC + Kyverno ClusterPolicies (+ offline tests)
hack/                 bootstrap.sh / teardown.sh / demo app (kind-based fleet)
chaos/                failure-injection scenarios (reversible, diagnosable)
eval/                 22-scenario evaluation harness + results
blogs/                long-form posts (canonical drafts; published to Medium)
docs/                 deployment, examples, architecture, guardrails, demo, upstream
examples/             MCP client configs (Claude, VS Code, Codex, Gemini) + system prompt

ロードマップ

テーマ別ロードマップの正式版は ROADMAP.md にあります。現在の主な項目: ツールごとのスコープを設定できる認証済み HTTP トランスポート、ホスト外(KMS/HSM)の承認署名者、 OCM クラスタープロキシトランスポート、再利用可能な Kyverno ポリシーパックです。 (マルチモデル評価の結果は現在公開されています。)

お探しの項目がありませんか?機能リクエストを投稿してください。 新しいツールには安全性に関する根拠が必要です。CONTRIBUTING.md をご覧ください。

貢献とコミュニティ

Issue と PR を歓迎します。CONTRIBUTING.md から始めてください。 サポートが必要な場合:SUPPORT.md。 セキュリティに関する報告(非公開でお願いします):SECURITY.md。

スポンサーシップ

このプロジェクトは独立してメンテナンスされています。優先的なインテグレーション支援、 強化されたデプロイのレビュー、スポンサー付き機能、安全なエージェント型運用に関する講演や ワークショップをご希望の組織は、 LinkedIn からご連絡ください(詳細は SUPPORT.md をご覧ください)。

作者

Sandeep Bazar - テクノロジー、特にマルチクラスタ Kubernetes プラットフォーム、Day 2 運用、フリートの自動化をより安全にすることに情熱を注いでいます。

LinkedIn YouTube

このプロジェクトが役に立ったら、⭐ を付けていただくと、ほかの人にも見つけてもらいやすくなります。

プロジェクトのガバナンスと成熟度

このプロジェクトでは、CNCF コミュニティ、ガバナンス、セキュリティの実践を品質基準として採用しています。CNCF Sandbox プロジェクトに求められるものと同じ基準を満たすことで、導入や貢献がしやすく、信頼できるプロジェクトを目指しています。基盤は整っています。

貢献は DCO に基づいて承認されます。これはチェックリストで求めるだけでなく、すべてのプルリクエストで CI ジョブによって適用されます。公開済みのリリースタグは変更できず、ガードレールに関わる変更には、書面による安全性の根拠が必要です。

ライセンス

Apache-2.0

コメント

MCP は初めてですか?

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

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