Skip to main content
Glama
vcf-automation-mcp-server

vcf-automation-mcp-server

by mdegrasse

vcf-automation-mcp

VCF Automation(旧Aria Automation)のREST APIをラップするMCPサーバーです。プロジェクト、カタログアイテム、デプロイメントをMCPツールとして公開し、LLMクライアントがプロビジョニング済みのインフラを直接参照・管理できるようにします。

これは、VCF Operations(vROps)をラップするvcf-ops-mcpの対応物です。

このサーバーは実際のインフラをプロビジョニングおよび削除できます(request_catalog_item、run_deployment_action/run_deployment_resource_action、delete_deployment)。そのベアラートークンと、その基盤となるVCF Automationのリフレッシュトークンは、監視対象環境全体でVMを作成・削除できる認証情報と同じように扱ってください。実際、それらはまさにそのような認証情報です。

セットアップ

python3 -m venv .venv
source .venv/bin/activate
pip install -e ".[dev]"
cp .env.example .env   # then fill in your VCF Automation details

必須設定(.env または実際の環境変数):

変数

説明

VCFA_BASE_URL

VCF Automation アプライアンスのベースURL(例: https://vcfa.example.com)

VCFA_REFRESH_TOKEN

UIで生成されたAPIリフレッシュトークン(My Account > API Tokens)

VCFA_ORG

認証対象のテナント組織名。プロバイダー("system")レベルの場合は未設定のままにします

VCFA_TOKEN_URL

上級設定: 算出されたOAuthトークンエンドポイントを上書きします

VCFA_VERIFY_SSL

自己署名ラボのインスタンスに対するTLS検証をスキップするには false に設定します

VCFA_TIMEOUT

リクエストごとのタイムアウト(秒)(デフォルト 30)

VCFA_API_VERSION_IAAS

IaaS API 用の ?apiVersion=(デフォルト 2021-07-15)

VCFA_API_VERSION_CATALOG

Catalog API 用の ?apiVersion=(デフォルト 2020-08-25)

VCFA_API_VERSION_DEPLOYMENT

Deployment API 用の ?apiVersion=(デフォルト 2020-08-25)

リフレッシュトークンの取得

VCF Operations(ユーザー名/パスワード)とは異なり、VCF AutomationはUIで一度だけ生成する長期有効なAPIリフレッシュトークンで認証します。このサーバーは、あなたの代わりに、そのトークンを短期有効(約1時間)のベアラーアクセストークンと交換し、キャッシュおよび更新を透過的に処理します。

  1. サーバーにその組織(テナント)として機能させたい組織でVCF AutomationのUIにサインインします。

  2. 右上にある自分のユーザー名をクリックし、My Account > API Tokens > New の順に進みます。

  3. トークンに名前を付けて作成し、それを VCFA_REFRESH_TOKEN にコピーします。

  4. VCFA_ORG をその組織の名前(Provider Portalに表示されているもの)に設定します。どこかで提供("system")レベルでトークンを生成した場合は、設定しなくても問題ありません。

正確なトークン交換パス(VCFA_TOKEN_URL)は、VCF Automationのリリースによってドキュメントに一貫性がありません。このサーバーはデフォルトで /tm/oauth/tenant/<org>/token(テナント)または /oauth/provider/token(プロバイダー)を使用し、インスタンスの実際のパスが異なる場合にはオーバーライドできます。

サーバーのトランスポート/認証設定(こちらも .env または実際の環境変数):

変数

説明

VCFA_MCP_TRANSPORT

streamable-http(デフォルト)または stdio

VCFA_MCP_HOST

streamable-httpのバインドホスト(デフォルト 127.0.0.1)

VCFA_MCP_PORT

streamable-httpのバインドポート(デフォルト 8000)

VCFA_MCP_BEARER_TOKEN

streamable-httpでは必須です。クライアントは Authorization: Bearer <value> を送信する必要があります

VCFA_MCP_ALLOWED_HOSTS

DNSリバインディング対策用の、カンマ区切りのHostヘッダー許可リスト

Related MCP server: Foundry Agents MCP Server

実行

デフォルトでは、streamable-httpでスタンドアロンのリモートサーバーとして実行され、127.0.0.1:8000 にバインドされ、すべてのリクエストでベアラートークンが必要です:

export VCFA_MCP_BEARER_TOKEN="$(openssl rand -hex 32)"
vcf-automation-mcp
# or
python -m vcf_automation_mcp

GET /healthz は認証されていません(ロードサーバー/オーケストレーターの死活チェック用)。その他のすべてにはベアラートークンが必要です。127.0.0.1 はローカルのみをリッスンするため、別のホストから実際に到達するには、VCFA_MCP_HOST=0.0.0.0 を設定するか(またはリバースプロキシの背後で実行)、ベアラートークンがネットワークと管理対象環境全体でインフラをプロビジョニングおよび削除できる認証情報との間の唯一の保護であることを確認してください。つまり、他のシークレットと同じように扱い、信頼できないネットワーク上で平文HTTPで送るのではなく、TLS終端(例: リバースプロキシ)を前段に置くことを推奨します。

VCFA_MCP_HOST が 127.0.0.1/localhost でない場合、FastMCP独自のDNSリバインディング保護(受信リクエストの Host ヘッダーへのチェック)はデフォルトで許可リストに何も登録されません。ループバックホストに対してのみ許可リストを自動構成するためです。未設定のままでは、Host ヘッダーのチェックは実施されず、ベアラートークンのみが唯一のゲートになります。これは信頼できるネットワークでは問題ありませんが、共有または信頼できないネットワークでは、多層防御のために、クライアントが実際に接続するホスト名/IP:port のカンマ区切りリストを VCFA_MCP_ALLOWED_HOSTS に設定してください。

MCPクライアントを streamable-http サーバーとして向けます。例として Claude Code での設定:

claude mcp add --transport http vcf-automation http://<host>:8000/mcp \
  --header "Authorization: Bearer <your-token>"

stdio での実行(代替方法)

ローカル使用(MCPクライアントがサーバー自体をサブプロセスとして起動する場合、ネットワーク公開は不要)では、VCFA_MCP_TRANSPORT=stdio を設定します。このモードではベアラートークンは不要です。Claude Desktopの設定例:

{
  "mcpServers": {
    "vcf-automation": {
      "command": "/absolute/path/to/.venv/bin/vcf-automation-mcp",
      "env": {
        "VCFA_MCP_TRANSPORT": "stdio",
        "VCFA_BASE_URL": "https://vcfa.example.com",
        "VCFA_REFRESH_TOKEN": "changeme",
        "VCFA_ORG": "my-tenant-org"
      }
    }
  }
}

ツール

プロジェクト

  • list_projects — プロビジョニングされたリソースの可視性/分離境界

  • get_project — 1つのプロジェクトの完全な詳細

カタログ

  • list_catalog_items — リクエストに利用可能なブループリント/テンプレートを参照(プロジェクトによる絞り込みも可能)

  • get_catalog_item — 1つのカタログアイテムの完全な詳細

  • list_catalog_item_versions — リクエスト可能なカタログアイテムの公開済みバージョン

  • request_catalog_item — カタログアイテムから新しいデプロイメントをプロビジョニングします

デプロイメント

  • list_deployments — ブループリンド/カタログアイテムのプロビジョニング済みインスタンス

  • get_deployment — 1つのデプロイメントの完全な詳細

  • list_deployment_resources — デプロイメント内のリソース(VM、ネットワーク、ディスクなど)

  • get_deployment_resource — デプロイメント内の1つのリソースの完全な詳細

  • list_deployment_actions — デプロイメントで利用可能なDay-2アクション(例: ChangeLease)

  • list_deployment_resource_actions — リソースで利用可能なDay-2アクション(例: PowerOff)

  • run_deployment_action — デプロイメント上でDay-2アクションを実行します

  • run_deployment_resource_action — リソース上でDay-2アクションを実行します

  • delete_deployment — デプロイメントとそのプロビジョニングされたリソースを破棄します

リクエスト

  • get_request — 非同期リクエスト(デプロイメント/Day-2アクション)のステータスをポーリングします

テスト

pip install -e ".[dev]"
pytest

テストは respx でVCF AutomationのHTTP APIをモックしています。実インスタンスは不要です。

注記

  • mcp<2.0.0 固定にしています: MCP Python SDKの2.x系では FastMCP が MCPServer に改名され、mcp.server.mcpserver に移動しました。このプロジェクトは確立された1.x系の mcp.server.fastmcp.FastMCP API を対象としています。

  • VCF AutomationのREST APIの表面は広大です(クラウドアカウント、ネットーミング、ポリシー、オンボーディング、ブルーブリンドなど)。このサーバーは意図的に「利用/デイ2」のパスのみ(プロジェクト、カタログ、デプロイメント、リクエスト)をカバーし、インフラストラクチャのセットアップ(クラウドアカウント、ゾーン、リージョン)はカバーしていません。

Related MCP Connectors

Related MCP Servers

  • A
    license
    Not graded
    quality
    C
    maintenance
    Enables natural language interaction with VMware SDDC Manager and vCenter APIs through MCP tools, allowing users to query workload domains, VMs, clusters, and more.
    MIT
  • A
    license
    A
    quality
    D
    maintenance
    Exposes Azure AI Foundry agents, workflows, and AI Search vector-database capabilities as MCP tools, enabling natural language interaction with agents, semantic search, and index management.
    10
    2
    MIT
  • A
    license
    Not graded
    quality
    B
    maintenance
    Enables AI coding agents and humans to collaborate on local, evidence-driven planning by exposing MCP tools for plan listing and binding, workflow catalog/run operations, and task tracking with human-reviewed decisions.
    2
    AGPL 3.0