Introdução
Os servidores do Protocolo de Contexto de Modelo (MCP, na sigla em inglês) personalizados (BYO, na sigla em inglês) permitem que os agentes de IA consultem e processem dados de repositórios externos em tempo real usando conexões padronizadas na infraestrutura atual.
Este documento de implementação de referência de solução (SRI, na sigla em inglês) mostra como implantar o aplicativo de código aberto Nextcloud e o servidor MCP dele com um agente do Nextcloud no Solo Enterprise para kagent. Essa arquitetura conecta o Nextcloud, o kagent e o modelo Gemma 4 em um cluster do Google Kubernetes Engine (GKE) implantado no Distributed Cloud somente software (GDC). Nessa configuração, o kagent usa o Nextcloud como um repositório de dados, permitindo que o modelo Gemma 4 acesse e processe arquivos no Nextcloud por meio de interfaces MCP padronizadas. Para contexto arquitetônico, consulte a arquitetura de referência complementar.
Visão geral do Nextcloud
O Nextcloud é uma plataforma de colaboração e armazenamento em nuvem de código aberto e auto-hospedada que oferece suporte à implantação no local. A implantação do Nextcloud no local ajuda a manter a soberania, a segurança e a privacidade dos seus dados.
O Nextcloud oferece os seguintes recursos:
- Sincronização e compartilhamento de arquivos: armazene arquivos, sincronize-os entre computadores e dispositivos móveis usando apps dedicados e compartilhe-os com outras pessoas usando links.
- Ferramentas de produtividade: gerencie agendas e comunicações com clientes de e-mail, gerenciamento de tarefas, contatos e agenda integrados.
- Colaboração: integre pacotes de escritório (como o Collabora Online ou o ONLYOFFICE) diretamente ao Nextcloud para coeditar documentos, planilhas e apresentações em tempo real.
- Extensibilidade: instale plug-ins da app store para adicionar recursos como gerenciadores de senhas, quadros Kanban ou players de música.
Arquitetura da solução
Essa solução requer um ambiente do GDC com o
Solo Enterprise para kagent
e o vLLM com o modelo Gemma 4
implantados, além de uma estação de trabalho com o kubectl e o helm instalados.
O diagrama a seguir ilustra a arquitetura da solução que conecta o GDC, o kagent, o Nextcloud e o vLLM ao Gemma 4:

Abordagem de implantação
Para implantar o Nextcloud e integrar o servidor MCP dele ao kagent, siga estas etapas gerais:
- Crie um namespace dedicado para o Nextcloud: isole a implantação criando o namespace
nextcloudusandokubectl. - Adicione e atualize o repositório do Helm: configure sua estação de trabalho com o repositório oficial do Nextcloud Helm e atualize os metadados do gráfico local.
- Configurar valores de implantação personalizados: crie um arquivo
values.yamlpersonalizado para configurar o Nextcloud para seu ambiente de destino. Essa configuração desativa o banco de dados SQLite local padrão, configura o armazenamento persistente do MariaDB, define as credenciais de administrador e define o roteamento interno usando um serviçoClusterIP. - Execute a instalação do Helm: implante o gráfico no namespace de destino
usando o arquivo de configuração personalizado. Verifique se todos os componentes, incluindo
o aplicativo Nextcloud e os pods de armazenamento do MariaDB, alcançam o status
Running. - Implante o servidor MCP do Nextcloud: crie um manifesto de implantação
(
nextcloud-mcp.yaml) que contenha um Secret opaco para credenciais, uma implantação que use a imagemnextcloud-mcp-server:lateste um serviçoClusterIPque exponha a porta8000. Aplique esse manifesto para permitir a comunicação interna do DNS do Kubernetes com o aplicativo Nextcloud. - Registre o servidor de ferramentas no kagent: conecte o servidor na UI do kagent
usando o URL do serviço interno
http://nextcloud-mcp-service.nextcloud.svc.cluster.local:8000/mcpe o protocoloSTREAMABLE_HTTP.
Implantar o Nextcloud e o servidor MCP
Crie um namespace para o Nextcloud:
kubectl create namespace nextcloudO resultado será o seguinte:
namespace/nextcloud createdAdicione o repositório do Helm do Nextcloud à estação de trabalho e atualize os metadados do gráfico local:
helm repo add nextcloud https://nextcloud.github.io/helm/ helm repo updateO resultado será o seguinte:
"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!⎈Crie um arquivo
values.yamlpersonalizado na estação de trabalho para substituir os parâmetros de configuração padrão do gráfico do Helm do 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 uploadsImplante o Nextcloud usando o Helm:
helm install nextcloud nextcloud/nextcloud \ --namespace nextcloud \ --values values.yamlO resultado será o seguinte:
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)Verifique se os pods do Nextcloud estão no status
Runninge se os serviços existem no namespacenextcloud:kubectl get pod -n nextcloud kubectl get svc -n nextcloudO resultado será o seguinte:
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 implantar o servidor MCP do Nextcloud no namespace
nextcloud, crie um arquivo chamadonextcloud-mcp.yamlna estação de trabalho:# 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-mcpAplique o manifesto
nextcloud-mcp.yaml:kubectl apply -f nextcloud-mcp.yamlO resultado será o seguinte:
secret/nextcloud-mcp-secret created deployment.apps/nextcloud-mcp-server created service/nextcloud-mcp-service createdVerifique se os pods e serviços estão em execução no namespace
nextcloud:kubectl get svc -n nextcloud kubectl get pod -n nextcloudO resultado será o seguinte:
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 as ferramentas MCP do Nextcloud por URL, acesse a UI do kagent e registre um servidor de ferramentas com os seguintes valores:
- URL:
http://nextcloud-mcp-service.nextcloud.svc.cluster.local:8000/mcp - Protocolo:
STREAMABLE_HTTP - Namespace:
kagent - Cluster: o nome do cluster (por exemplo,
mgmt-cluster)
Verifique se o recurso
RemoteMCPServerfoi aceito no namespacekagent:kubectl get remotemcpserver -n kagentO resultado será o seguinte:
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 acessar o Nextcloud na estação de trabalho, encaminhe a porta local
8080para o serviçonextcloud(pule esta etapa se você tiver configurado um URL externo):kubectl port-forward -n nextcloud svc/nextcloud 8080:8080 &O resultado será o seguinte:
Forwarding from 127.0.0.1:8080 -> 80 Forwarding from [::1]:8080 -> 80
Verificar a implantação e configurar o agente do Nextcloud
No navegador da estação de trabalho, abra http://localhost:8080 para ver o
painel do Nextcloud:
A visualização Arquivos mostra os diretórios e arquivos armazenados no Nextcloud:
Na UI do kagent, a página Painel mostra os clusters conectados e os agentes implantados:
A página Servidores de ferramentas lista as ferramentas descobertas pelo MCP para o aplicativo Nextcloud:
A página Ferramentas mostra a coleção de ferramentas do Nextcloud disponíveis para os agentes:
Para criar o agente nextcloud na UI do kagent, insira o nome, o cluster, o namespace e a descrição do agente em Informações básicas:
Em Configurações de comportamento e modelo, selecione o modelo Gemma 4 e insira as instruções do sistema para o agente:
Em Ferramentas e agentes, selecione as ferramentas do MCP do Nextcloud para o agente e clique em Criar agente:
A página Agentes mostra o agente nextcloud com o status Ready:
Você pode pedir ao agente do Nextcloud para listar diretórios e arquivos no aplicativo Nextcloud:
Também é possível pedir ao agente do Nextcloud para traduzir e transliterar o conteúdo do arquivo do inglês para o francês: