Add support for deploying Qdrant vector database and Ollama embedding service as optional helm chart dependencies. Enables semantic search capabilities for Nextcloud content with flexible deployment options. Chart Dependencies: - Add Qdrant v0.9.0 from qdrant/qdrant-helm (conditional) - Add Ollama v1.33.0 from otwld/ollama-helm (conditional) - Both dependencies only deploy when enabled Configuration (values.yaml): - vectorSync: Background sync settings (interval, workers, queue size) - qdrant: Subchart config with persistence, resources, clustering - ollama: Subchart config with model pull, persistence, resources - Support for external Ollama via ollama.url (no subchart deployment) - openai: Alternative embedding provider (OpenAI or compatible API) Environment Variables (deployment.yaml): - VECTOR_SYNC_* variables when vectorSync.enabled - QDRANT_URL, QDRANT_COLLECTION when qdrant.enabled - OLLAMA_BASE_URL, OLLAMA_EMBEDDING_MODEL when ollama enabled or URL set - OPENAI_API_KEY when openai.enabled Documentation: - README: New "Vector Search & Semantic Capabilities" section - README: Example 5 showing three deployment patterns - NOTES.txt: Conditional guidance when vector features enabled - Secret template for OpenAI API key management All features disabled by default for backward compatibility. Tested with helm template and helm lint. 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <noreply@anthropic.com>
108 lines
5.2 KiB
Plaintext
108 lines
5.2 KiB
Plaintext
Thank you for installing {{ .Chart.Name }}!
|
|
|
|
Your Nextcloud MCP Server has been deployed in {{ .Values.auth.mode }} authentication mode.
|
|
|
|
1. Get the application URL by running these commands:
|
|
{{- if .Values.ingress.enabled }}
|
|
{{- range $host := .Values.ingress.hosts }}
|
|
{{- range .paths }}
|
|
http{{ if $.Values.ingress.tls }}s{{ end }}://{{ $host.host }}{{ .path }}
|
|
{{- end }}
|
|
{{- end }}
|
|
{{- else if contains "NodePort" .Values.service.type }}
|
|
export NODE_PORT=$(kubectl get --namespace {{ .Release.Namespace }} -o jsonpath="{.spec.ports[0].nodePort}" services {{ include "nextcloud-mcp-server.fullname" . }})
|
|
export NODE_IP=$(kubectl get nodes --namespace {{ .Release.Namespace }} -o jsonpath="{.items[0].status.addresses[0].address}")
|
|
echo http://$NODE_IP:$NODE_PORT
|
|
{{- else if contains "LoadBalancer" .Values.service.type }}
|
|
NOTE: It may take a few minutes for the LoadBalancer IP to be available.
|
|
You can watch the status of by running 'kubectl get --namespace {{ .Release.Namespace }} svc -w {{ include "nextcloud-mcp-server.fullname" . }}'
|
|
export SERVICE_IP=$(kubectl get svc --namespace {{ .Release.Namespace }} {{ include "nextcloud-mcp-server.fullname" . }} --template "{{"{{ range (index .status.loadBalancer.ingress 0) }}{{.}}{{ end }}"}}")
|
|
echo http://$SERVICE_IP:{{ .Values.service.port }}
|
|
{{- else if contains "ClusterIP" .Values.service.type }}
|
|
export POD_NAME=$(kubectl get pods --namespace {{ .Release.Namespace }} -l "app.kubernetes.io/name={{ include "nextcloud-mcp-server.name" . }},app.kubernetes.io/instance={{ .Release.Name }}" -o jsonpath="{.items[0].metadata.name}")
|
|
export CONTAINER_PORT=$(kubectl get pod --namespace {{ .Release.Namespace }} $POD_NAME -o jsonpath="{.spec.containers[0].ports[0].containerPort}")
|
|
echo "Visit http://127.0.0.1:8080 to use your MCP server"
|
|
kubectl --namespace {{ .Release.Namespace }} port-forward $POD_NAME 8080:$CONTAINER_PORT
|
|
{{- end }}
|
|
|
|
2. Check the deployment status:
|
|
kubectl --namespace {{ .Release.Namespace }} get pods -l "app.kubernetes.io/name={{ include "nextcloud-mcp-server.name" . }},app.kubernetes.io/instance={{ .Release.Name }}"
|
|
|
|
{{- if eq .Values.auth.mode "basic" }}
|
|
|
|
3. Basic Authentication Mode:
|
|
{{- if .Values.auth.basic.existingSecret }}
|
|
- Credentials: (using existing secret {{ .Values.auth.basic.existingSecret }})
|
|
{{- else }}
|
|
- Username: {{ .Values.auth.basic.username }}
|
|
- Password: (stored in secret {{ include "nextcloud-mcp-server.basicAuthSecretName" . }})
|
|
{{- end }}
|
|
- Connected to: {{ .Values.nextcloud.host }}
|
|
{{- else if eq .Values.auth.mode "oauth" }}
|
|
|
|
3. OAuth Authentication Mode:
|
|
- Server URL: {{ include "nextcloud-mcp-server.mcpServerUrl" . }}
|
|
- Issuer URL: {{ include "nextcloud-mcp-server.publicIssuerUrl" . }}
|
|
- Connected to: {{ .Values.nextcloud.host }}
|
|
{{- if .Values.auth.oauth.existingSecret }}
|
|
- Using existing OAuth client secret: {{ .Values.auth.oauth.existingSecret }}
|
|
{{- else if and .Values.auth.oauth.clientId .Values.auth.oauth.clientSecret }}
|
|
- Using pre-registered OAuth client
|
|
{{- else }}
|
|
- Using Dynamic Client Registration (DCR)
|
|
{{- end }}
|
|
{{- if .Values.auth.oauth.persistence.enabled }}
|
|
- OAuth client credentials are persisted in PVC: {{ include "nextcloud-mcp-server.oauthPvcName" . }}
|
|
{{- end }}
|
|
|
|
IMPORTANT: OAuth mode is experimental and requires patches to the user_oidc app.
|
|
See: https://github.com/cbcoutinho/nextcloud-mcp-server#authentication
|
|
{{- end }}
|
|
|
|
{{- if .Values.documentProcessing.enabled }}
|
|
|
|
4. Document Processing:
|
|
- Enabled: {{ .Values.documentProcessing.enabled }}
|
|
- Default processor: {{ .Values.documentProcessing.defaultProcessor }}
|
|
{{- if .Values.documentProcessing.unstructured.enabled }}
|
|
- Unstructured API: {{ .Values.documentProcessing.unstructured.apiUrl }}
|
|
{{- end }}
|
|
{{- end }}
|
|
|
|
{{- if .Values.vectorSync.enabled }}
|
|
|
|
5. Vector Search & Semantic Capabilities:
|
|
- Vector Sync: Enabled
|
|
- Scan Interval: {{ .Values.vectorSync.scanInterval }}s
|
|
- Processor Workers: {{ .Values.vectorSync.processorWorkers }}
|
|
{{- if .Values.qdrant.enabled }}
|
|
- Qdrant: Deployed as subchart ({{ .Release.Name }}-qdrant:6333)
|
|
{{- else }}
|
|
- Qdrant: Not deployed (configure external instance)
|
|
{{- end }}
|
|
{{- if .Values.ollama.enabled }}
|
|
- Ollama: Deployed as subchart ({{ .Release.Name }}-ollama:11434)
|
|
- Embedding Model: {{ .Values.ollama.embeddingModel }}
|
|
{{- else if .Values.ollama.url }}
|
|
- Ollama: Using external instance at {{ .Values.ollama.url }}
|
|
- Embedding Model: {{ .Values.ollama.embeddingModel }}
|
|
{{- else if .Values.openai.enabled }}
|
|
- OpenAI: Enabled for embeddings
|
|
{{- else }}
|
|
- WARNING: No embedding provider configured (Ollama or OpenAI required)
|
|
{{- end }}
|
|
|
|
Check vector sync status:
|
|
kubectl --namespace {{ .Release.Namespace }} exec -it deploy/{{ include "nextcloud-mcp-server.fullname" . }} -- curl -s http://localhost:{{ include "nextcloud-mcp-server.port" . }}/user/page | grep "Vector Sync"
|
|
{{- end }}
|
|
|
|
For more information and documentation:
|
|
- GitHub: https://github.com/cbcoutinho/nextcloud-mcp-server
|
|
- Documentation: https://github.com/cbcoutinho/nextcloud-mcp-server#readme
|
|
|
|
To upgrade this deployment:
|
|
helm upgrade {{ .Release.Name }} nextcloud-mcp-server
|
|
|
|
To uninstall:
|
|
helm uninstall {{ .Release.Name }}
|