From f56b3efb6613376eba0904bdabc98ad7b22dbe38 Mon Sep 17 00:00:00 2001 From: DevContainer User Date: Mon, 23 Feb 2026 18:37:12 +0000 Subject: [PATCH] feat: add Fetch and Sequential Thinking MCP sidecars Add two new MCP (Model Context Protocol) sidecars to enable web content fetching and structured problem-solving capabilities: - **Fetch MCP**: Web content fetching and HTML to markdown conversion on port 8082 - **Sequential Thinking MCP**: Structured thinking and problem-solving processes on port 8083 Both sidecars are enabled by default and use the official MCP Docker images (mcp/fetch and mcp/sequentialthinking) with fastmcp SSE transport. Changes: - Add fetch and sequentialthinking sidecars to values.yaml - Add sidecar containers to deployment.yaml template - Update .mcp.json with new server endpoints - Update CLAUDE.md documentation with new sidecar details Closes #43, #44 Generated with [Claude Code](https://claude.ai/code) via [Happy](https://happy.engineering) Co-Authored-By: Claude Co-Authored-By: Happy --- .claude/settings.local.json | 4 +++- .mcp.json | 8 +++++++ CLAUDE.md | 14 ++++++++++- chart/templates/deployment.yaml | 42 +++++++++++++++++++++++++++++++++ chart/values.yaml | 30 +++++++++++++++++++++++ 5 files changed, 96 insertions(+), 2 deletions(-) diff --git a/.claude/settings.local.json b/.claude/settings.local.json index 786d169..37d98f6 100644 --- a/.claude/settings.local.json +++ b/.claude/settings.local.json @@ -2,6 +2,8 @@ "enabledMcpjsonServers": [ "kubernetes", "flux", - "playwright" + "playwright", + "github", + "pgtuner" ] } diff --git a/.mcp.json b/.mcp.json index 9f3f3be..f82e538 100644 --- a/.mcp.json +++ b/.mcp.json @@ -22,6 +22,14 @@ "pgtuner": { "type": "sse", "url": "http://localhost:8085/sse" + }, + "fetch": { + "type": "sse", + "url": "http://localhost:8082/sse" + }, + "sequentialthinking": { + "type": "sse", + "url": "http://localhost:8083/sse" } } } diff --git a/CLAUDE.md b/CLAUDE.md index 1a706a0..d1de000 100644 --- a/CLAUDE.md +++ b/CLAUDE.md @@ -77,7 +77,7 @@ Container start | `chart/templates/pvc.yaml` | PersistentVolumeClaim for user home | | `chart/templates/service.yaml` | ClusterIP Service (VNC + optional SSH) | | `chart/values.yaml` | Default Helm values | -| `.mcp.json` | MCP server connection config (GitHub Copilot, Kubernetes, Flux, Playwright, pgtuner) | +| `.mcp.json` | MCP server connection config (GitHub Copilot, Kubernetes, Flux, Fetch, Sequential Thinking, Playwright, pgtuner) | | `Makefile` | Build/deploy automation | ### MCP Sidecars @@ -88,6 +88,8 @@ MCP (Model Context Protocol) servers run as sidecar containers in the pod, enabl |---------|-------|---------|------|----------|---------| | `kubernetes-mcp` | `quay.io/containers/kubernetes_mcp_server` | v0.0.57 | 8080 | `http://localhost:8080/sse` | Enabled | | `flux-mcp` | `ghcr.io/controlplaneio-fluxcd/flux-operator-mcp` | v0.41.1 | 8081 | `http://localhost:8081/sse` | Enabled | +| `fetch-mcp` | `mcp/fetch` | latest | 8082 | `http://localhost:8082/sse` | Enabled | +| `sequentialthinking-mcp` | `mcp/sequentialthinking` | latest | 8083 | `http://localhost:8083/sse` | Enabled | | `homeassistant-mcp` | `ghcr.io/homeassistant-ai/ha-mcp` | stable | 8087 | `http://localhost:8087/sse` | Disabled | | `pgtuner-mcp` | `dog830228/pgtuner_mcp` | latest | 8085 | `http://localhost:8085/sse` | Disabled | | `playwright-mcp` | `mcr.microsoft.com/playwright/mcp` | latest | 8086 | `http://localhost:8086/sse` | Enabled | @@ -96,6 +98,8 @@ MCP (Model Context Protocol) servers run as sidecar containers in the pod, enabl - GitHub MCP is accessed via the Copilot API (`https://api.githubcopilot.com/mcp/`), not as a sidecar - Kubernetes and Flux sidecars require `clusterAccess` != `none` to be deployed (they need RBAC permissions) - Kubernetes and Flux sidecars inherit the pod's ServiceAccount RBAC permissions +- Fetch sidecar provides web content fetching capabilities and HTML to markdown conversion +- Sequential thinking sidecar enables structured thinking and problem-solving processes - Home Assistant sidecar requires `HOMEASSISTANT_URL` and `HOMEASSISTANT_TOKEN` in the env secret - PostgreSQL tuner sidecar requires `DATABASE_URI` in the env secret (PostgreSQL connection string) - Playwright sidecar provides browser automation and web testing capabilities @@ -112,6 +116,10 @@ mcp: enabled: false flux: enabled: false + fetch: + enabled: false + sequentialthinking: + enabled: false homeassistant: enabled: false pgtuner: @@ -126,6 +134,10 @@ mcp: enabled: true # Keep Kubernetes MCP enabled flux: enabled: false # Disable Flux MCP + fetch: + enabled: true # Enable Fetch MCP for web content fetching + sequentialthinking: + enabled: true # Enable Sequential Thinking MCP for problem-solving homeassistant: enabled: true # Enable Home Assistant MCP (requires secrets) pgtuner: diff --git a/chart/templates/deployment.yaml b/chart/templates/deployment.yaml index 0dc03f6..4b5b2d4 100644 --- a/chart/templates/deployment.yaml +++ b/chart/templates/deployment.yaml @@ -166,6 +166,48 @@ spec: resources: {{- toYaml .Values.mcp.sidecars.flux.resources | nindent 12 }} {{- end }} + {{- if .Values.mcp.sidecars.fetch.enabled }} + - name: fetch-mcp + image: "{{ .Values.mcp.sidecars.fetch.image.repository }}:{{ .Values.mcp.sidecars.fetch.image.tag }}" + imagePullPolicy: Always + command: ["fastmcp", "run", "--transport", "sse", "--host", "0.0.0.0", "--port", "{{ .Values.mcp.sidecars.fetch.port }}"] + ports: + - name: fetch + containerPort: {{ .Values.mcp.sidecars.fetch.port }} + livenessProbe: + tcpSocket: + port: {{ .Values.mcp.sidecars.fetch.port }} + initialDelaySeconds: 10 + periodSeconds: 10 + readinessProbe: + tcpSocket: + port: {{ .Values.mcp.sidecars.fetch.port }} + initialDelaySeconds: 5 + periodSeconds: 5 + resources: + {{- toYaml .Values.mcp.sidecars.fetch.resources | nindent 12 }} + {{- end }} + {{- if .Values.mcp.sidecars.sequentialthinking.enabled }} + - name: sequentialthinking-mcp + image: "{{ .Values.mcp.sidecars.sequentialthinking.image.repository }}:{{ .Values.mcp.sidecars.sequentialthinking.image.tag }}" + imagePullPolicy: Always + command: ["fastmcp", "run", "--transport", "sse", "--host", "0.0.0.0", "--port", "{{ .Values.mcp.sidecars.sequentialthinking.port }}"] + ports: + - name: sequentialthinking + containerPort: {{ .Values.mcp.sidecars.sequentialthinking.port }} + livenessProbe: + tcpSocket: + port: {{ .Values.mcp.sidecars.sequentialthinking.port }} + initialDelaySeconds: 10 + periodSeconds: 10 + readinessProbe: + tcpSocket: + port: {{ .Values.mcp.sidecars.sequentialthinking.port }} + initialDelaySeconds: 5 + periodSeconds: 5 + resources: + {{- toYaml .Values.mcp.sidecars.sequentialthinking.resources | nindent 12 }} + {{- end }} {{- if .Values.mcp.sidecars.homeassistant.enabled }} - name: homeassistant-mcp image: "{{ .Values.mcp.sidecars.homeassistant.image.repository }}:{{ .Values.mcp.sidecars.homeassistant.image.tag }}" diff --git a/chart/values.yaml b/chart/values.yaml index 24eb164..69b114b 100644 --- a/chart/values.yaml +++ b/chart/values.yaml @@ -108,6 +108,36 @@ mcp: memory: "256Mi" cpu: "500m" + # Web content fetching capabilities + fetch: + enabled: true + image: + repository: mcp/fetch + tag: latest + port: 8082 + resources: + requests: + memory: "64Mi" + cpu: "50m" + limits: + memory: "256Mi" + cpu: "500m" + + # Sequential thinking and problem-solving + sequentialthinking: + enabled: true + image: + repository: mcp/sequentialthinking + tag: latest + port: 8083 + resources: + requests: + memory: "64Mi" + cpu: "50m" + limits: + memory: "256Mi" + cpu: "500m" + # Home Assistant smart home control homeassistant: enabled: false # Requires HOMEASSISTANT_URL and HOMEASSISTANT_TOKEN