From eed1e4535cf4d2d40eebe6125a95f0cbcc12965e Mon Sep 17 00:00:00 2001 From: Barry Walker Date: Tue, 13 Jan 2026 17:17:02 -0500 Subject: [PATCH] fix: add WithHttpTransport() for HTTP mode and add k8s manifests MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit HTTP transport mode was missing the required WithHttpTransport() call, causing MapMcp() to fail. Also adds Kubernetes manifests for deployment. 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude Opus 4.5 --- PaperlessMCP/Program.cs | 3 ++- k8s/deployment.yaml | 52 +++++++++++++++++++++++++++++++++++++++++ k8s/ingress.yaml | 19 +++++++++++++++ k8s/kustomization.yaml | 8 +++++++ k8s/secret.yaml | 9 +++++++ k8s/service.yaml | 15 ++++++++++++ 6 files changed, 105 insertions(+), 1 deletion(-) create mode 100644 k8s/deployment.yaml create mode 100644 k8s/ingress.yaml create mode 100644 k8s/kustomization.yaml create mode 100644 k8s/secret.yaml create mode 100644 k8s/service.yaml diff --git a/PaperlessMCP/Program.cs b/PaperlessMCP/Program.cs index ebd5618..2b33d76 100644 --- a/PaperlessMCP/Program.cs +++ b/PaperlessMCP/Program.cs @@ -38,6 +38,7 @@ else builder.Services .AddMcpServer() + .WithHttpTransport() .WithToolsFromAssembly(); var app = builder.Build(); @@ -45,7 +46,7 @@ else var port = app.Configuration.GetValue("Mcp:Port") ?? (Environment.GetEnvironmentVariable("MCP_PORT") is string portStr && int.TryParse(portStr, out var p) ? p : 5000); - app.MapMcp("/mcp"); + app.MapMcp(); app.Logger.LogInformation("PaperlessMCP server starting on port {Port}", port); app.Logger.LogInformation("MCP endpoint available at: http://localhost:{Port}/mcp", port); diff --git a/k8s/deployment.yaml b/k8s/deployment.yaml new file mode 100644 index 0000000..07f31f2 --- /dev/null +++ b/k8s/deployment.yaml @@ -0,0 +1,52 @@ +apiVersion: apps/v1 +kind: Deployment +metadata: + name: paperless-mcp + labels: + app: paperless-mcp +spec: + replicas: 1 + selector: + matchLabels: + app: paperless-mcp + template: + metadata: + labels: + app: paperless-mcp + spec: + imagePullSecrets: + - name: ghcr-secret + containers: + - name: paperless-mcp + image: ghcr.io/barryw/paperlessmcp:latest + ports: + - containerPort: 5000 + protocol: TCP + envFrom: + - secretRef: + name: paperless-mcp + env: + - name: PAPERLESS_API_TOKEN + valueFrom: + secretKeyRef: + name: paperless-token + key: token + resources: + requests: + memory: "128Mi" + cpu: "100m" + limits: + memory: "256Mi" + cpu: "500m" + livenessProbe: + httpGet: + path: /mcp + port: 5000 + initialDelaySeconds: 10 + periodSeconds: 30 + readinessProbe: + httpGet: + path: /mcp + port: 5000 + initialDelaySeconds: 5 + periodSeconds: 10 diff --git a/k8s/ingress.yaml b/k8s/ingress.yaml new file mode 100644 index 0000000..4986085 --- /dev/null +++ b/k8s/ingress.yaml @@ -0,0 +1,19 @@ +apiVersion: networking.k8s.io/v1 +kind: Ingress +metadata: + name: paperless-mcp + labels: + app: paperless-mcp +spec: + ingressClassName: traefik + rules: + - host: paperless-mcp.lan + http: + paths: + - path: / + pathType: Prefix + backend: + service: + name: paperless-mcp + port: + number: 5000 diff --git a/k8s/kustomization.yaml b/k8s/kustomization.yaml new file mode 100644 index 0000000..7c5f5a9 --- /dev/null +++ b/k8s/kustomization.yaml @@ -0,0 +1,8 @@ +apiVersion: kustomize.config.k8s.io/v1beta1 +kind: Kustomization + +resources: + - secret.yaml + - deployment.yaml + - service.yaml + - ingress.yaml diff --git a/k8s/secret.yaml b/k8s/secret.yaml new file mode 100644 index 0000000..5e4a3ae --- /dev/null +++ b/k8s/secret.yaml @@ -0,0 +1,9 @@ +apiVersion: v1 +kind: Secret +metadata: + name: paperless-mcp + labels: + app: paperless-mcp +type: Opaque +stringData: + PAPERLESS_BASE_URL: "https://docs.barrywalker.io" diff --git a/k8s/service.yaml b/k8s/service.yaml new file mode 100644 index 0000000..c4f0ece --- /dev/null +++ b/k8s/service.yaml @@ -0,0 +1,15 @@ +apiVersion: v1 +kind: Service +metadata: + name: paperless-mcp + labels: + app: paperless-mcp +spec: + type: ClusterIP + selector: + app: paperless-mcp + ports: + - port: 5000 + targetPort: 5000 + protocol: TCP + name: http