Skip to content

Deployment

The server runs on the NRP Nautilus Kubernetes cluster.

Hosted endpoint

https://duckdb-mcp.nrp-nautilus.io/mcp
  • 6 replicas (prod), each running the baked image directly (server.py) — code is built into the image, not cloned at startup
  • 16 Gi RAM requested, up to 160 Gi / 16 CPU per pod
  • HAProxy ingress with CORS enabled, 10-minute query timeout, 1-hour SSE tunnel timeout

Kubernetes manifests

bash
kubectl apply -f k8s/deployment.yaml
kubectl apply -f k8s/service.yaml
kubectl apply -f k8s/ingress.yaml

Redeploying

Code is baked into the image, so redeploying means rolling to a new image — not re-cloning.

  • dev tracks the moving :main tag. After CI builds your merge to main, roll dev to pick it up:

    bash
    kubectl apply -f k8s/dev-deployment.yaml
    kubectl rollout restart deployment/dev-duckdb-mcp -n biodiversity
  • prod pins an immutable vX.Y.Z@sha256:<digest>. Cut a release tag, then bump the digest in k8s/deployment.yaml, apply, and roll:

    bash
    kubectl apply -f k8s/deployment.yaml
    kubectl rollout restart deployment/duckdb-mcp -n biodiversity

See AGENTS.md → Rollout workflow for the full release procedure (tagging, reading the digest, verifying convergence).

Environment variables

VariableDefaultDescription
STAC_CATALOG_URLNRP public catalogURL of the STAC catalog to serve
THREADS100DuckDB thread count (S3 workloads are I/O-bound)
PORT8000HTTP server port

Released under the BSD-3-Clause License.