はじめに
独自の Model Context Protocol(MCP)サーバーを使用すると、AI エージェントは既存のインフラストラクチャ全体で標準化された接続を使用して、外部リポジトリからデータをリアルタイムでクエリして処理できます。
このソリューション リファレンス実装(SRI)ドキュメントでは、Nextcloud オープンソース アプリケーションとその MCP サーバーを、Solo Enterprise for kagent の Nextcloud エージェントとともにデプロイする方法について説明します。このアーキテクチャは、Distributed Cloud ソフトウェアのみ(GDC)にデプロイされた Google Kubernetes Engine(GKE)クラスタ内で Nextcloud、kagent、Gemma 4 モデルを接続します。この構成では、kagent は Nextcloud をデータ リポジトリとして使用し、Gemma 4 モデルが標準化された MCP インターフェースを介して Nextcloud のファイルにアクセスして処理できるようにします。アーキテクチャのコンテキストについては、関連するリファレンス アーキテクチャをご覧ください。
Nextcloud の概要
Nextcloud は、オンプレミス デプロイをサポートするオープンソースのセルフホスト型コラボレーションおよびクラウド ストレージ プラットフォームです。Nextcloud をオンプレミスにデプロイすると、データの主権、セキュリティ、プライバシーを維持できます。
Nextcloud には次の機能があります。
- ファイル同期と共有: ファイルを保存し、専用アプリを介してデスクトップ デバイスとモバイル デバイス間で同期し、リンクを使用して他のユーザーと共有します。
- 生産性向上ツール: 組み込みのカレンダー、連絡先、タスク管理、メール クライアントを使用して、スケジュールとコミュニケーションを管理します。
- コラボレーション: オフィス スイート(Collabora Online や ONLYOFFICE など)を Nextcloud に直接統合して、ドキュメント、スプレッドシート、プレゼンテーションをリアルタイムで共同編集します。
- 拡張性: アプリストアからプラグインをインストールして、パスワード マネージャー、カンバンボード、音楽プレーヤーなどの機能を追加できます。
ソリューション アーキテクチャ
このソリューションには、kagent 用の Solo Enterprise と Gemma 4 モデルを搭載した vLLM がデプロイされた GDC 環境と、kubectl と helm がインストールされたワークステーションが必要です。
次の図は、GDC、kagent、Nextcloud、vLLM を Gemma 4 に接続するソリューション アーキテクチャを示しています。

導入アプローチ
Nextcloud をデプロイして、その MCP サーバーを kagent と統合するには、次の大まかな手順を完了します。
- Nextcloud 専用の Namespace を作成する:
kubectlを使用してnextcloudNamespace を作成し、デプロイを分離します。 - Helm リポジトリを追加して更新する: 公式の Nextcloud Helm リポジトリを使用してワークステーションを構成し、ローカル チャートのメタデータを更新します。
- カスタム デプロイ値を構成する: カスタム
values.yamlファイルを作成して、ターゲット環境用に Nextcloud を構成します。この構成では、デフォルトのローカル SQLite データベースを無効にし、MariaDB 永続ストレージを構成し、管理者認証情報を定義し、ClusterIPサービスを使用して内部ルーティングを設定します。 - Helm のインストールを実行する: カスタム構成ファイルを使用して、チャートをターゲットの名前空間にデプロイします。Nextcloud アプリケーションや MariaDB ストレージ Pod などのすべてのコンポーネントが
Runningステータスに達していることを確認します。 - Nextcloud MCP サーバーをデプロイする: 認証情報の不透明な Secret、
nextcloud-mcp-server:latestイメージを使用する Deployment、ポート8000を公開するClusterIPService を含むデプロイ マニフェスト(nextcloud-mcp.yaml)を作成します。このマニフェストを適用して、Nextcloud アプリケーションとの内部 Kubernetes DNS 通信を許可します。 - kagent にツールサーバーを登録する: 内部サービス URL
http://nextcloud-mcp-service.nextcloud.svc.cluster.local:8000/mcpとSTREAMABLE_HTTPプロトコルを使用して、kagent UI でサーバーを接続します。
Nextcloud と MCP サーバーをデプロイする
Nextcloud の Namespace を作成します。
kubectl create namespace nextcloud出力は次のようになります。
namespace/nextcloud createdNextcloud Helm リポジトリをワークステーションに追加し、ローカル チャートのメタデータを更新します。
helm repo add nextcloud https://nextcloud.github.io/helm/ helm repo update出力は次のようになります。
"nextcloud" has been added to your repositories Hang tight while we grab the latest from your chart repositories... ...Successfully got an update from the "nextcloud" chart repository Update Complete. ⎈Happy Helming!⎈ワークステーションにカスタム
values.yamlファイルを作成して、Nextcloud Helm チャートのデフォルトの構成パラメータをオーバーライドします。# 0. Nextcloud administrator configuration nextcloud: # Use the internal CoreDNS record host: "nextcloud.nextcloud.svc.cluster.local" # Application access through CoreDNS rather than external DNS username: "admin" # Application Login Credentials password: "SuperSecretPassword123" # You can use a standard ClusterIP service since # you are relying on internal routing, not an External LB. service: type: ClusterIP # 1. Configure RWO Storage for Nextcloud persistence: enabled: true storageClass: "local-shared" accessMode: ReadWriteOnce size: 50Gi # Adjust based on your file storage needs # 2. Explicitly disable the default local SQLite database internalDatabase: enabled: false # 3. Configure RWO Storage for the Database mariadb: enabled: true auth: database: "nextcloud" username: "nextcloud" password: "NextcloudDBPassword123" rootPassword: "RootDBPassword123" primary: persistence: enabled: true storageClass: "local-shared" accessModes: - ReadWriteOnce size: 10Gi # 4. Force Nextcloud to connect through the TCP Network externalDatabase: enabled: true type: mysql host: "nextcloud-mariadb" # The internal Kubernetes service name for the DB database: "nextcloud" user: "nextcloud" password: "NextcloudDBPassword123" # MUST match mariadb.auth.password above # Optional: Enable Ingress to route external traffic to Nextcloud ingress: enabled: false # Set to true if you are using an Ingress Controller (like NGINX) className: "nginx" annotations: nginx.ingress.kubernetes.io/proxy-body-size: 4G # Required to allow large file uploadsHelm を使用して Nextcloud をデプロイします。
helm install nextcloud nextcloud/nextcloud \ --namespace nextcloud \ --values values.yaml出力は次のようになります。
NAME: nextcloud LAST DEPLOYED: Thu Jul 9 17:14:03 2026 NAMESPACE: nextcloud STATUS: deployed REVISION: 1 TEST SUITE: None NOTES: 1. Get the nextcloud URL by running: export POD_NAME=$(kubectl get pods --namespace nextcloud -l "app.kubernetes.io/name=nextcloud" -o jsonpath="{.items[0].metadata.name}") echo http://127.0.0.1:8080/ kubectl port-forward --namespace nextcloud $POD_NAME 8080:80 2. Get your nextcloud login credentials by running: echo User: admin echo Password: $(kubectl get secret --namespace nextcloud nextcloud -o jsonpath="{.data.nextcloud-password}" | base64 --decode)Nextcloud Pod が
Runningステータスであり、Service がnextcloudNamespace に存在することを確認します。kubectl get pod -n nextcloud kubectl get svc -n nextcloud出力は次のようになります。
NAME READY STATUS RESTARTS AGE nextcloud-558cbccb4c-q6zqq 1/1 Running 0 25m nextcloud-mariadb-0 1/1 Running 0 25m NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE nextcloud ClusterIP 10.255.224.187 <none> 8080/TCP 25m nextcloud-mariadb ClusterIP 10.255.226.235 <none> 3306/TCP 25m nextcloud-mariadb-headless ClusterIP None <none> 3306/TCP 25mNextcloud MCP サーバーを
nextcloudNamespace にデプロイするには、ワークステーションにnextcloud-mcp.yamlという名前のファイルを作成します。# Secret Creation apiVersion: v1 kind: Secret metadata: name: nextcloud-mcp-secret namespace: nextcloud type: Opaque stringData: # Use your dedicated App Password here, NEVER your primary administrator password NEXTCLOUD_USERNAME: "admin" NEXTCLOUD_PASSWORD: "SuperSecretPassword123" --- apiVersion: apps/v1 kind: Deployment metadata: name: nextcloud-mcp-server namespace: nextcloud labels: app: nextcloud-mcp spec: replicas: 1 selector: matchLabels: app: nextcloud-mcp template: metadata: labels: app: nextcloud-mcp spec: containers: - name: mcp-server # The official Docker image provided by the project image: ghcr.io/cbcoutinho/nextcloud-mcp-server:latest imagePullPolicy: Always ports: - containerPort: 8000 name: http-mcp env: - name: NEXTCLOUD_HOST # Since the MCP server is in the same namespace, it can securely # talk to Nextcloud through the internal Kubernetes DNS, completely bypassing the internet. value: "http://nextcloud.nextcloud.svc.cluster.local:8080" - name: NEXTCLOUD_USERNAME valueFrom: secretKeyRef: name: nextcloud-mcp-secret key: NEXTCLOUD_USERNAME - name: NEXTCLOUD_PASSWORD valueFrom: secretKeyRef: name: nextcloud-mcp-secret key: NEXTCLOUD_PASSWORD resources: requests: cpu: "100m" memory: "128Mi" limits: cpu: "500m" memory: "512Mi" --- apiVersion: v1 kind: Service metadata: name: nextcloud-mcp-service namespace: nextcloud spec: type: ClusterIP ports: - port: 8000 targetPort: 8000 protocol: TCP name: http-mcp selector: app: nextcloud-mcpnextcloud-mcp.yamlマニフェストを適用します。kubectl apply -f nextcloud-mcp.yaml出力は次のようになります。
secret/nextcloud-mcp-secret created deployment.apps/nextcloud-mcp-server created service/nextcloud-mcp-service createdPod と Service が
nextcloudNamespace で実行されていることを確認します。kubectl get svc -n nextcloud kubectl get pod -n nextcloud出力は次のようになります。
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE nextcloud ClusterIP 10.255.224.187 <none> 8080/TCP 26m nextcloud-mariadb ClusterIP 10.255.226.235 <none> 3306/TCP 26m nextcloud-mariadb-headless ClusterIP None <none> 3306/TCP 26m nextcloud-mcp-service ClusterIP 10.255.226.105 <none> 8000/TCP 55s NAME READY STATUS RESTARTS AGE nextcloud-558cbccb4c-q6zqq 1/1 Running 0 29m nextcloud-mariadb-0 1/1 Running 0 29m nextcloud-mcp-server-58484d5799-mfvct 1/1 Running 0 4m11sURL で Nextcloud MCP ツールを統合するには、kagent UI に移動し、次の値を使用してツールサーバーを登録します。
- URL:
http://nextcloud-mcp-service.nextcloud.svc.cluster.local:8000/mcp - プロトコル:
STREAMABLE_HTTP - Namespace:
kagent - クラスタ: クラスタ名(例:
mgmt-cluster)
RemoteMCPServerリソースがkagentNamespace で受け入れられていることを確認します。kubectl get remotemcpserver -n kagent出力は次のようになります。
NAME PROTOCOL URL ACCEPTED kagent-grafana-mcp STREAMABLE_HTTP http://kagent-grafana-mcp.kagent:8000/mcp True kagent-tool-server STREAMABLE_HTTP http://kagent-tools.kagent:8084/mcp True nextcloud STREAMABLE_HTTP http://nextcloud-mcp-service.nextcloud.svc.cluster.local:8000/mcp True- URL:
ワークステーションから Nextcloud にアクセスするには、ローカルポート
8080をnextcloudサービスに転送します(外部 URL を構成した場合は、この手順をスキップします)。kubectl port-forward -n nextcloud svc/nextcloud 8080:8080 &出力は次のようになります。
Forwarding from 127.0.0.1:8080 -> 80 Forwarding from [::1]:8080 -> 80
デプロイを確認して Nextcloud エージェントを構成する
ワークステーションのブラウザから http://localhost:8080 を開き、Nextcloud ダッシュボードを表示します。
[Files] ビューに、Nextcloud に保存されているディレクトリとファイルが表示されます。
kagent UI の [Dashboard] ページに、接続されたクラスタとデプロイされたエージェントが表示されます。
[ツールサーバー] ページには、Nextcloud アプリケーションの MCP を介して検出されたツールが一覧表示されます。
[ツール] ページには、エージェントが使用できる Nextcloud ツールのコレクションが表示されます。
kagent UI で nextcloud エージェントを作成するには、[基本情報] にエージェント名、クラスタ、名前空間、説明を入力します。
[動作とモデルの設定] で、Gemma 4 モデルを選択し、エージェントのシステム指示を入力します。
[ツールとエージェント] で、エージェントの Nextcloud MCP ツールを選択し、[エージェントを作成] をクリックします。
[エージェント] ページに、Ready ステータスの nextcloud エージェントが表示されます。
Nextcloud エージェントに、Nextcloud アプリケーションのディレクトリとファイルを一覧表示するように指示できます。
Nextcloud エージェントに、ファイルの内容を英語からフランス語に翻訳して文字変換するように指示することもできます。