We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/vfarcic/dot-ai'
If you have feedback or need assistance with the MCP directory API, please join our Discord server
{{- if eq .Values.deployment.method "toolhive" }}
apiVersion: toolhive.stacklok.dev/v1alpha1
kind: MCPServer
metadata:
name: {{ include "dot-ai.fullname" . }}
namespace: {{ .Release.Namespace }}
labels:
{{- include "dot-ai.labels" . | nindent 4 }}
spec:
# Container image configuration
image: {{ .Values.image.repository }}:{{ .Values.image.tag | default .Chart.AppVersion }}
# Transport configuration - streamable-http for ToolHive
transport: streamable-http
port: 3456
targetPort: 3456
# Permission profile for network access (Kubernetes API calls)
permissionProfile:
type: builtin
name: network
# Mount secrets for API keys
{{- if or .Values.secrets.anthropic.apiKey .Values.secrets.openai.apiKey }}
secrets:
- name: {{ .Values.secrets.name }}
key: {{ .Values.secrets.anthropic.keyName }}
{{- if .Values.secrets.openai.apiKey }}
- name: {{ .Values.secrets.name }}
key: {{ .Values.secrets.openai.keyName }}
{{- end }}
{{- end }}
# Minimal resources for ToolHive proxy
resources:
limits:
cpu: "200m"
memory: "256Mi"
requests:
cpu: "100m"
memory: "128Mi"
# Pod template specification for the MCP server container
podTemplateSpec:
spec:
{{- if .Values.serviceAccount.create }}
serviceAccountName: {{ include "dot-ai.serviceAccountName" . }}
{{- end }}
containers:
- name: mcp
image: {{ .Values.image.repository }}:{{ .Values.image.tag | default .Chart.AppVersion }}
imagePullPolicy: IfNotPresent
# Environment variables for HTTP transport
env:
- name: TRANSPORT_TYPE
value: "http"
- name: PORT
value: "3456"
- name: HOST
value: "0.0.0.0"
- name: SESSION_MODE
value: "stateless"
- name: DOT_AI_SESSION_DIR
value: "/tmp/sessions"
# AI Provider configuration
- name: AI_PROVIDER
value: {{ .Values.ai.provider | default "anthropic" | quote }}
{{- if .Values.ai.model }}
- name: AI_MODEL
value: {{ .Values.ai.model | quote }}
{{- end }}
{{- if .Values.ai.customEndpoint.enabled }}
- name: CUSTOM_LLM_BASE_URL
value: {{ .Values.ai.customEndpoint.baseURL | quote }}
- name: CUSTOM_EMBEDDINGS_BASE_URL
value: {{ .Values.ai.customEndpoint.embeddingsBaseURL | default .Values.ai.customEndpoint.baseURL | quote }}
{{- if .Values.ai.customEndpoint.embeddingsModel }}
- name: EMBEDDINGS_MODEL
value: {{ .Values.ai.customEndpoint.embeddingsModel | quote }}
{{- end }}
{{- if .Values.ai.customEndpoint.embeddingsDimensions }}
- name: EMBEDDINGS_DIMENSIONS
value: {{ .Values.ai.customEndpoint.embeddingsDimensions | quote }}
{{- end }}
{{- end }}
# AI Provider API Keys
- name: ANTHROPIC_API_KEY
valueFrom:
secretKeyRef:
name: {{ .Values.secrets.name }}
key: {{ .Values.secrets.anthropic.keyName }}
optional: true
- name: OPENAI_API_KEY
valueFrom:
secretKeyRef:
name: {{ .Values.secrets.name }}
key: {{ .Values.secrets.openai.keyName }}
optional: true
- name: GOOGLE_API_KEY
valueFrom:
secretKeyRef:
name: {{ .Values.secrets.name }}
key: {{ .Values.secrets.google.keyName }}
optional: true
- name: XAI_API_KEY
valueFrom:
secretKeyRef:
name: {{ .Values.secrets.name }}
key: {{ .Values.secrets.xai.keyName }}
optional: true
- name: MOONSHOT_API_KEY
valueFrom:
secretKeyRef:
name: {{ .Values.secrets.name }}
key: {{ .Values.secrets.moonshot.keyName }}
optional: true
- name: CUSTOM_LLM_API_KEY
valueFrom:
secretKeyRef:
name: {{ .Values.secrets.name }}
key: {{ .Values.secrets.customLlm.keyName | default "custom-llm-api-key" }}
optional: true
- name: CUSTOM_EMBEDDINGS_API_KEY
valueFrom:
secretKeyRef:
name: {{ .Values.secrets.name }}
key: {{ .Values.secrets.customEmbeddings.keyName | default "custom-embeddings-api-key" }}
optional: true
{{- if .Values.qdrant.enabled }}
- name: QDRANT_URL
value: "http://{{ include "dot-ai.fullname" . }}-qdrant:6333"
{{- else if .Values.qdrant.external.url }}
- name: QDRANT_URL
value: {{ .Values.qdrant.external.url }}
{{- end }}
{{- with .Values.extraEnv }}
# Additional environment variables
{{- toYaml . | nindent 8 }}
{{- end }}
# Volume mounts for sessions directory
volumeMounts:
- name: sessions
mountPath: /tmp/sessions
# Resource configuration - reuse existing values
resources:
{{- toYaml .Values.resources | nindent 10 }}
# Volumes for writable sessions directory
volumes:
- name: sessions
emptyDir: {}
{{- end }}