Skip to main content
Glama
waTeim

CloudNativePG MCP Server

by waTeim

CloudNativePG MCPサーバー

CloudNativePGオペレーターを通じてPostgreSQLクラスターを管理するためのMCPサーバーです。

このバージョンでは、サーバーレイアウト、認証、コンテナビルド、Helmチャート、プロンプトレジストリ、およびテストハーネスにMCP Baseスキャフォールドを使用しています。以前の手動実装は、参照用に deprecated-v1/ 配下に保持されています。

ツールインターフェース

このサーバーは、v1実装からのCloudNativePGツールを公開します:

  • list_postgres_clusters

  • get_cluster_status

  • create_postgres_cluster

  • scale_postgres_cluster

  • delete_postgres_cluster

  • list_postgres_roles

  • create_postgres_role

  • update_postgres_role

  • delete_postgres_role

  • list_postgres_databases

  • create_postgres_database

  • delete_postgres_database

また、プロンプト管理用のMCP Baseスキャフォールド管理ツールも含まれています:

  • admin_reload_prompts

  • admin_get_prompt_manifest

Related MCP server: PostgreSQL MCP Server

レイアウト

  • src/cnpg_mcp_server.py: 本番用FastMCP HTTPエントリーポイント

  • src/cnpg_mcp_test_server.py: 認証なし/OIDCテスト用エントリーポイント

  • src/cnpg_mcp_tools.py: CloudNativePGツールの実装と登録

  • src/mcp_context.py: ユーザーID抽出機能付きMCPコンテキストラッパー

  • src/auth_*.py: MCP Baseスキャフォールド認証サポート

  • chart/: Helmデプロイメントアセット

  • test/: MCPプラグインテストハーネス

  • SCAFFOLD_INVENTORY.md: MCP Baseスキャフォールドアーティファクトハッシュ

開発

環境を作成し、依存関係をインストールします:

python -m venv .venv
. .venv/bin/activate
pip install -r requirements.txt -r test/requirements.txt

スキャフォールド登録のスモークテストを実行します:

python bin/smoke_test.py

ローカルの認証なしMCPテストスイートを実行します:

python test/run-local-tests.py

deprecated-v1/test/plugins から適応させたCloudNativePG Kubernetes統合テストを実行します:

python test/run-local-tests.py --include-integration
# or
make test-integration

これらのテストは、実際のCloudNativePGリソースを作成、スケーリング、更新、削除します。便利なオプション設定:

  • CNPG_MCP_TEST_NAMESPACE: テストリソース用の名前空間

  • CNPG_MCP_TEST_CLUSTER_PREFIX: 生成されるクラスター名のプレフィックス

  • CNPG_MCP_TEST_STORAGE_SIZE: インスタンスごとのストレージサイズ、デフォルトは 1Gi

  • CNPG_MCP_TEST_CREATE_WAIT_SECONDS: クラスター準備完了タイムアウト、デフォルトは 300

  • CNPG_MCP_TEST_SCALE_WAIT_SECONDS: スケール準備完了タイムアウト、デフォルトは 300

ローカルでの実行

スキャフォールドエントリーポイントはHTTPトランスポートを使用します:

python src/cnpg_mcp_server.py --host 0.0.0.0 --port 4200

テストサーバーは認証なしで実行できます:

python src/cnpg_mcp_test_server.py --host 127.0.0.1 --port 4201 --no-auth

Kubernetesアクセス

ツールはKubernetes Pythonクライアントを使用します。設定は以下の順序で読み込まれます:

  1. クラスター内サービスアカウント設定

  2. ~/.kube/config または KUBECONFIG からのローカルkubeconfig

ほとんどのツールはオプションの namespace を受け付けます。省略された場合は、現在のKubernetesコンテキストの名前空間が使用され、フォールバックとして default が使用されます。

クラスター内Helmデプロイメントの場合、サーバーはデプロイメントサービスアカウントを使用します。デフォルトでは、チャートはそのサービスアカウントに対してHelmリリース名前空間内でのみCNPGおよびシークレットの権限を付与します。別の名前空間でCNPGリソースを管理するには、ツールの namespace 引数を渡し、その名前空間でサービスアカウントにアクセス権を付与してください:

rbac:
  targetNamespaces:
    - application-databases

任意の名前空間で動作する必要がある共有MCPデプロイメントの場合は、クラスター全体のRBACを選択します:

rbac:
  clusterWide: true

クラスター全体モードでは名前空間をまたいでシークレットへのアクセスが許可されるため、ターゲットセットがわかっている場合は明示的な targetNamespaces を優先してください。

デプロイメント

MCP BaseスキャフォールドにはDockerおよびHelmアセットが含まれています:

make build
make push
make helm-install

デプロイメントターゲットを使用する前に、python bin/configure-make.py を使用してイメージおよび名前空間設定用の make.env を生成してください。

Related MCP Connectors

Related MCP Servers