kuadrant-mcp-poc について
kuadrant-mcp-pocは、KubernetesクラスターにMCPサーバーを配置し、Kuadrantでゲートウェイを設定する概念実証です。Streamable HTTP対応のeverything MCP serverを使い、TLS、DNS、認証、レート制限のポリシーを適用します。
主な機能
- 01KubernetesへのMCPサーバー配置
- 02Kuadrantゲートウェイの設定
- 03TLSとDNSポリシーの設定
- 04APIキー認証とレート制限
活用シーン
- 01クラスター内のリモートMCPサーバーの検証
- 02MCPサーバーのDNSとTLS設定
- 03クライアント要求の認証と制限
MCP 対応
everything MCP serverをStreamable HTTP経由で利用できるように配置し、クライアント接続とツール呼び出しの例を示します。
設定
ローカルサーバーの設定はどのクライアントでも共通です。コピーしてクライアントの MCP 設定ファイルに貼り付けてください。
ツール
ローカルサーバーのツールはマシン上で起動して初めて取得できます。メンテナーはまだツール一覧を提供していません。
詳細
kuadrant-mcp-poc
はじめに:
この POC では、Streamable HTTP に対応している everything MCP サーバーを使用しました。
前提条件
- K8s クラスター
- Kuadrant がインストールされていること。詳しくは Kuadrant のドキュメントを参照してください。
環境変数を設定する
export QUAY_USERNAME=xxxx # Quay username
export KUADRANT_AWS_ACCESS_KEY_ID=xxxx # AWS Key ID with access to manage the DNS Zone ID below
export KUADRANT_AWS_SECRET_ACCESS_KEY=xxxx # AWS Secret Access Key with access to manage the DNS Zone ID below
インストール
mcp-server/mcp-server-everything.yamlファイルを更新して、ルートドメインを設定します。
1. Install the MCP Server in your K8s cluster.
```sh
kubectl apply -f mcp-server/mcp-server-everything.yaml
- MCP everything サーバーの Pod が実行中であることを確認します。
kubectl get pods -n mcp-server
- ゲートウェイの名前空間を作成します。
kubectl create ns mcp-gateway
- DNS の設定に使用するシークレット認証情報を、ゲートウェイと同じ名前空間に作成します。
kubectl -n mcp-gateway create secret generic aws-credentials \
--type=kuadrant.io/aws \
--from-literal=AWS_ACCESS_KEY_ID=$KUADRANT_AWS_ACCESS_KEY_ID \
--from-literal=AWS_SECRET_ACCESS_KEY=$KUADRANT_AWS_SECRET_ACCESS_KEY
- cert-manager の名前空間にシークレット認証情報を作成します。
kubectl -n cert-manager create secret generic aws-credentials \
--type=kuadrant.io/aws \
--from-literal=AWS_ACCESS_KEY_ID=$KUADRANT_AWS_ACCESS_KEY_ID \
--from-literal=AWS_SECRET_ACCESS_KEY=$KUADRANT_AWS_SECRET_ACCESS_KEY
- Kuadrant Gateway を作成します。注意:
kuadrant/gateway.yamlファイルを更新して、ルートドメインを設定してください。
kubectl apply -f kuadrant/gateway.yaml
- Let's Encrypt Cluster issuer と TlS Policy を作成します。
kubectl apply -f kuadrant/tls.yaml
**注意**:証明書は自己署名できません。MCP クライアントはまだ自己署名証明書を受け付けません。
- DNSPolicy を作成します。
kubectl apply -f kuadrant/dns.yaml
- 1 分ほど待ってから、MCP サーバーが応答することを確認します。
curl -v -X POST "https://api.KUADRANT_ZONE_ROOT_DOMAIN_GOES_HERE/mcp" \
-H "Content-Type: application/json" \
-H "Accept: application/json, text/event-stream" \
-d '{
"jsonrpc": "2.0",
"method": "initialize",
"params": {
"protocolVersion": "2024-11-05",
"capabilities": {
"resources": {},
"tools": {},
"prompts": {}
},
"clientInfo": {
"name": "test-curl-client",
"version": "1.0"
}
},
"id": 1
}'
- Rate limit policy を作成します。
kubectl apply -f kuadrant/rlp.yaml
- Auth policy と API Key のシークレットを作成します。
kubectl apply -f kuadrant/auth.yaml
MCP クライアント
この例では、Streamable HTTP を使用して接続できる Vscode Co pilot を MCP クライアントとして使用します。
- 以下を VSCode の setting.json に追加します。詳しくは、VSCode 公式 MCP ドキュメントを参照してください。
"mcp": {
"servers": {
"my-mcp-server": {
"type": "http",
"url": "https://KUADRANT_ZONE_ROOT_DOMAIN_GOES_HERE/mcp",
"headers": {
"Authorization": "APIKEY IAMALICE"
}
}
}
},
-
クライアントからサーバーを使用できるようになり、MCP サーバーのツールを利用できます。
⌃⌘Iを使って vscode で co pilot を開き、ドロップダウンから agent をクリックします。 -
チャットに次のように入力します。
add 500 and 500
-
Vscode から、Co pilot が MCP サーバーのツールを呼び出すことを許可するかどうか尋ねられます。許可してください。
-
チャットに回答が表示され、MCP サーバーの
addが実行されたことも確認できます。 -
設定から Auth ヘッダーを省略した場合、またはツールを使った質問をチャットで短時間に何度も行った場合、デプロイされた auth ポリシーと rate limit ポリシーによってリクエストが拒否または制限されます。
コメント
AI アプリケーションが外部のツールやデータソースに統一的な方法で接続するためのオープンなプロトコルです。クライアントはモデルとの対話を担い、MCP サーバーはツール・リソース・プロンプトテンプレートを提供します。標準メッセージでやり取りするため、1 つのサーバーを複数のクライアントで再利用できます。