Introducción
Los servidores de Protocolo de contexto del modelo (MCP) de tipo Bring Your Own (BYO) permiten que los agentes de IA consulten y procesen datos de repositorios externos en tiempo real con conexiones estandarizadas en tu infraestructura existente.
En este documento de implementación de referencia de la solución (SRI), se muestra cómo implementar la aplicación de código abierto Nextcloud y su servidor de MCP junto con un agente de Nextcloud en Solo Enterprise para kagent. Esta arquitectura conecta Nextcloud, kagent y el modelo Gemma 4 dentro de un clúster de Google Kubernetes Engine (GKE) implementado en Distributed Cloud, versión Solo Software (GDC). En esta configuración, kagent usa Nextcloud como repositorio de datos, lo que permite que el modelo Gemma 4 acceda a los archivos de Nextcloud y los procese a través de interfaces de MCP estandarizadas. Para obtener contexto de la arquitectura, consulta la arquitectura de referencia complementaria.
Descripción general de Nextcloud
Nextcloud es una plataforma de código abierto, de colaboración y almacenamiento en la nube autohospedada que admite la implementación local. Implementar Nextcloud de forma local ayuda a mantener la soberanía, la seguridad y la privacidad de tus datos.
Nextcloud proporciona las siguientes funciones:
- Sincronización y uso compartido de archivos: Almacena archivos, sincronízalos en tus dispositivos móviles y de escritorio a través de apps dedicadas, y compártelos con otras personas mediante vínculos.
- Herramientas de productividad: Administra las agendas y la comunicación con clientes de correo electrónico, administración de tareas, contactos y calendario integrados.
- Colaboración: Integra paquetes de oficina (como Collabora Online o ONLYOFFICE) directamente en Nextcloud para coeditar documentos, hojas de cálculo y presentaciones en tiempo real.
- Extensibilidad: Instala complementos desde la tienda de aplicaciones para agregar funciones, como administradores de contraseñas, tableros Kanban o reproductores de música.
Arquitectura de soluciones
Esta solución requiere un entorno de GDC con
Solo Enterprise para kagent
y vLLM con el modelo Gemma 4
implementados, y una estación de trabajo con kubectl y helm instalados.
En el siguiente diagrama, se ilustra la arquitectura de la solución que conecta GDC, kagent, Nextcloud y vLLM con Gemma 4:

Enfoque de Deployment
Para implementar Nextcloud y, luego, integrar su servidor de MCP con kagent, completa los siguientes pasos de alto nivel:
- Crea un espacio de nombres dedicado para Nextcloud: Aísla la implementación creando
el espacio de nombres
nextcloudconkubectl. - Agrega y actualiza el repositorio de Helm: Configura tu estación de trabajo con el repositorio oficial de Helm de Nextcloud y actualiza los metadatos de tu gráfico local.
- Configura valores de implementación personalizados: Crea un archivo
values.yamlpersonalizado para configurar Nextcloud para tu entorno de destino. Esta configuración inhabilita la base de datos de SQLite local predeterminada, configura el almacenamiento persistente de MariaDB, define las credenciales de administrador y establece el enrutamiento interno con un servicio deClusterIP. - Ejecuta la instalación de Helm: Implementa el gráfico en el espacio de nombres de destino
con tu archivo de configuración personalizado. Verifica que todos los componentes, incluidos
la aplicación de Nextcloud y los Pods de almacenamiento de MariaDB, alcancen el estado
Running. - Implementa el servidor de MCP de Nextcloud: Crea un manifiesto de implementación
(
nextcloud-mcp.yaml) que contenga un Secret opaco para las credenciales, un Deployment que use la imagennextcloud-mcp-server:latesty un ServiceClusterIPque exponga el puerto8000. Aplica este manifiesto para permitir la comunicación interna del DNS de Kubernetes con la aplicación de Nextcloud. - Registra el servidor de herramientas en kagent: Conecta el servidor en la IU de kagent
con la URL del servicio interno
http://nextcloud-mcp-service.nextcloud.svc.cluster.local:8000/mcpy el protocoloSTREAMABLE_HTTP.
Implementa Nextcloud y el servidor de MCP
Crea un espacio de nombres para Nextcloud:
kubectl create namespace nextcloudEl resultado es similar a lo siguiente:
namespace/nextcloud createdAgrega el repositorio de Helm de Nextcloud a tu estación de trabajo y actualiza los metadatos del gráfico local:
helm repo add nextcloud https://nextcloud.github.io/helm/ helm repo updateEl resultado es similar a lo siguiente:
"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!⎈Crea un archivo
values.yamlpersonalizado en tu estación de trabajo para anular los parámetros de configuración predeterminados del gráfico de Helm de Nextcloud:# 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 uploadsImplementa Nextcloud con Helm:
helm install nextcloud nextcloud/nextcloud \ --namespace nextcloud \ --values values.yamlEl resultado es similar a lo siguiente:
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)Verifica que los Pods de Nextcloud estén en el estado
Runningy que los Services existan en el espacio de nombresnextcloud:kubectl get pod -n nextcloud kubectl get svc -n nextcloudEl resultado es similar a lo siguiente:
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 25mPara implementar el servidor de MCP de Nextcloud en el espacio de nombres
nextcloud, crea un archivo llamadonextcloud-mcp.yamlen tu estación de trabajo:# 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-mcpAplica el manifiesto
nextcloud-mcp.yaml:kubectl apply -f nextcloud-mcp.yamlEl resultado es similar a lo siguiente:
secret/nextcloud-mcp-secret created deployment.apps/nextcloud-mcp-server created service/nextcloud-mcp-service createdVerifica que los Pods y los Services se estén ejecutando en el espacio de nombres
nextcloud:kubectl get svc -n nextcloud kubectl get pod -n nextcloudEl resultado es similar a lo siguiente:
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 4m11sPara integrar las herramientas de MCP de Nextcloud por URL, ve a la IU de kagent y registra un servidor de herramientas con los siguientes valores:
- URL:
http://nextcloud-mcp-service.nextcloud.svc.cluster.local:8000/mcp - Protocolo:
STREAMABLE_HTTP - Espacio de nombres:
kagent - Clúster: Es el nombre de tu clúster (por ejemplo,
mgmt-cluster).
Verifica que se acepte el recurso
RemoteMCPServeren el espacio de nombreskagent:kubectl get remotemcpserver -n kagentEl resultado es similar a lo siguiente:
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:
Para acceder a Nextcloud desde tu estación de trabajo, reenvía el puerto local
8080al servicionextcloud(omite este paso si configuraste una URL externa):kubectl port-forward -n nextcloud svc/nextcloud 8080:8080 &El resultado es similar a lo siguiente:
Forwarding from 127.0.0.1:8080 -> 80 Forwarding from [::1]:8080 -> 80
Verifica la implementación y configura el agente de Nextcloud
En el navegador de tu estación de trabajo, abre http://localhost:8080 para ver el
panel de Nextcloud:
En la vista Archivos, se muestran los directorios y archivos almacenados en Nextcloud:
En la IU de kagent, la página Panel muestra los clústeres conectados y los agentes implementados:
En la página Servidores de herramientas, se enumeran las herramientas descubiertas a través de MCP para la aplicación de Nextcloud:
En la página Herramientas, se muestra la colección de herramientas de Nextcloud disponibles para los agentes:
Para crear el agente nextcloud en la IU de kagent, ingresa el nombre del agente, el clúster,
el espacio de nombres y la descripción en Información básica:
En Configuración de comportamiento y modelo, selecciona el modelo Gemma 4 y, luego, ingresa las instrucciones del sistema para el agente:
En Herramientas y agentes, selecciona las herramientas de MCP de Nextcloud para el agente y, luego, haz clic en Crear agente:
En la página Agentes, se muestra el agente nextcloud con el estado Ready:
Puedes pedirle al agente de Nextcloud que enumere los directorios y archivos de la aplicación de Nextcloud:
También puedes pedirle al agente de Nextcloud que traduzca y translitere el contenido de los archivos del inglés al francés: