Skip to main content
Glama
hanumanthvendra

finops-copilot

クラスターを最適化するAI — そして本番環境を壊させないプラットフォーム

問題: 「AIにインフラを触らせる」ことは、自信過剰なモデルが 午前3時に本番を1レプリカにスケールダウンさせるための絶好の方法です。エージェンティック運用における 面白いエンジニアリングはモデルではなく、ガードレールです。解決策: AIにクラスターへの 型付けされ、境界のあるインターフェースをMCP経由で与え、セーフティロジックをサーバーサイドに 置くことで、モデルが迂回できなくします。AIは何を変更するかを決定し、プラットフォームは何が 許可されているかを決定します。そして、直接頼まれてもそれ以外のことを拒否します。

Model Context Protocol (MCP) サーバーは、稼働中のKubernetesクラスター上で5つのFinOpsツールを公開します。Claude(または任意のMCPクライアント — Claude Desktopなど)は、それらを使って過剰にプロビジョニングされたワークロードを特定し、適正化を提案します。変更を伴う呼び出しはすべて、何かが起こる前にポリシーでチェックされ、デフォルトでドライランになります。安全でない変更 — 保護されたprod名前空間、リソースの下限、過度に大幅な削減 — はサーバーによって拒否され、監査ログに書き込まれます。

完全にラップトップ上で動作します:kindクラスター(意図的に無駄なワークロードを配置)、約120行のMCPサーバー、そしてデフォルトでオフラインで動作するコパイロットドライバー(決定論的なモックなので、APIキーなしでもCIでも動作します)。ANTHROPIC_API_KEYが設定されている場合は実際のClaudeでも動作します。


何をするか

   Claude / MCP client
          │  calls typed tools
          ▼
   ┌─────────────── MCP server (finops-copilot) ───────────────┐
   │  list_namespaces  list_workloads  estimate_cost           │
   │  recommend_rightsizing        get_audit_log               │
   │                                                           │
   │  apply_rightsizing(…, dry_run=True)                       │
   │        │                                                  │
   │        ▼   ┌─────────── policy.py (guardrails) ────────┐  │
   │     every  │ protected namespaces? resource floors?    │  │
   │     apply ─┤ max single-step cut?  → REFUSE + audit    │  │
   │            └───────────────────────────────────────────┘  │
   └────────────────────────┬──────────────────────────────────┘
                            │ kubectl (read specs / patch)
                            ▼
                  kind cluster: staging (waste) · prod (protected)

要素

重要な理由

ここでの動作

MCP、生のkubectlではない

AIは型付けされ、監査可能なアクションを取得し、制限のないシェルは取得しない

スキーマを持つ5つのツール。クラスターに触れるのはサーバーだけです

ガードレールはサーバーサイド

モデルがプロンプトで迂回できない安全性

apply_rightsizing はすべてのリクエストをまず policy.py に通します。拒否は拒否です

デフォルトでドライラン

安全なことがデフォルトである

apply_rightsizing(dry_run=True) は差分と節約額を表示します。実際の適用はオプトインです

すべてが監査される

「AIは何をしようとしたのか?」に答えがある

適用(許可、拒否、ドライランのいずれも)はすべて、クライアントが読み取れる監査ログに追記されます


Related MCP server: kube-lint-mcp

実行方法

make up            # kind cluster seeded with waste + Python env (MCP deps)
make demo          # the copilot finds & cuts waste — OFFLINE, no API key needed
make demo-claude   # real Claude drives the same MCP tools (needs ANTHROPIC_API_KEY)
make test          # unit-test the guardrail policy (no cluster needed)
make down          # delete the cluster

make demo は、実際のMCPサーバー上で決定論的モックコパイロットを実行します。Claude経路と同じツール、同じガードレールを使用するため、キーなしでもCIでも動作します。make demo-claude はモックを、ツールをエージェンティックに駆動するClaude(公式Anthropic SDKとそのMCPツールランナー)に置き換えます。

デモが示すこと(実際の出力)

4つのワークロード(3つは極端に過剰なリソースが割り当てられ、1つは健全)と保護されたprodを配置したstaging名前空間に対して:

  1. 無駄を発見します。 現在のリクエストではstagingは約$138/月かかります。このツールはCPU使用率1〜4%の3つのワークロードにフラグを立て、CPUとレプリカの削減を提案します。約$102/月(73%) の節約が見込めます。

  2. まずドライラン。 すべての変更は、正確な差分と月間節約額を示すドライランです。明示的な非ドライランの呼び出しなしには何も適用されません。

  3. プラットフォームは本番を拒否します。 prodも削減するよう求められた場合、サーバーは拒否します — namespace 'prod' is protected。AIが求め、ガードレールがノーと言いました。ドライランでさえ、変更は一切ありません。

  4. プラットフォームは過度に大幅な削減を拒否します。 CPUリクエストを10mにまで切り詰めるよう求められた場合、サーバーは拒否します — 下限を下回っており、90%超の一度の削減だからです。

  5. すべてのアクションがログに記録されます。 監査証跡には、5つの試行すべて(ドライラン3件、拒否2件)とその理由が表示されます。

AIは無駄を発見し、削減を提案しました。プラットフォームは何が許可されているかを決定しました。 この役割分担こそが要点です。


Claude Desktopから使う(実際のMCP)

これは実際のMCPサーバーです — 任意のMCPクライアントをこのサーバーに向けてください。Claude Desktopの場合は、claude_desktop_config.jsonに追加します:

{
  "mcpServers": {
    "finops": {
      "command": "/path/to/mcp-finops-copilot/.venv/bin/python",
      "args": ["-m", "finops.server"],
      "env": { "FINOPS_CTX": "kind-mcp-finops" }
    }
  }
}

次にClaudeにこう尋ねます: 「私のstaging名前空間のコストはいくらですか?安全に適正化できるものは何ですか?」


本番環境への対応

デモ

本番

kind、pauseワークロード

実際のDeploymentsを使ったEKS / AKS / GKE

シードされたアノテーションからの使用率

Prometheus / metrics-server(kube.pyの読み取り部分だけが変更されます)

policy.pyの下限 + 保護された名前空間

あなたの組織のガードレール — RBACスコープ、PodDisruptionBudgets、変更ウィンドウ

インメモリの監査ログ

あなたの監査シンク(stdout → Loki、イベントテーブルなど)

例示的なコストレート

あなたのプロバイダーの実際のvCPUあたり / GBあたりの料金

レイアウト

finops/policy.py     the guardrail layer — pure, unit-tested (make test)
finops/cost.py       cost model + right-sizing heuristic
finops/kube.py       kubectl read/patch helpers
finops/server.py     the MCP server: 5 tools, dry-run-by-default, audited
copilot/mock_agent.py   deterministic offline copilot (CI-safe)
copilot/llm_agent.py    real Claude via the Anthropic SDK's MCP tool-runner
copilot/driver.py       picks mock vs Claude by ANTHROPIC_API_KEY
k8s/                 staging (seeded waste) + prod (protected)

MITライセンスです。ラップトップで実行可能な、NDAに抵触しない小さなデモで、ひとつの鋭いアイデアを証明します: エージェンティック運用はガードレールの問題である。AIには実際のアクションを与えなさい。ただし、ノーと言うのはプラットフォームにしなさい。

Related MCP Connectors

Related MCP Servers