This Helm chart deploys the StreamNative MCP Server on Kubernetes with Multi-Session Pulsar mode.
- Kubernetes 1.19+
- Helm 3.0+
- External Pulsar cluster accessible from the Kubernetes cluster
Install from the StreamNative Helm repository:
helm repo add streamnative https://charts.streamnative.io
helm repo update
helm install snmcp streamnative/snmcp \
--set pulsar.webServiceURL=http://pulsar.example.com:8080Optional: check available chart versions
helm search repo streamnative/snmcpInstall from local chart (for development):
helm install snmcp ./charts/snmcp \
--set pulsar.webServiceURL=http://pulsar.example.com:8080| Parameter | Description |
|---|---|
pulsar.webServiceURL |
Pulsar web service URL (required) |
| Parameter | Default | Description |
|---|---|---|
server.readOnly |
false |
Enable read-only mode |
server.features |
[] |
Features to enable (default: all-pulsar) |
server.httpPath |
/mcp |
Base path for SSE/message/health endpoints |
server.configDir |
/var/lib/snmcp |
Config directory for snmcp state (must be writable) |
The container listens on port 9090. Use service.port or Ingress to expose a different port.
| Parameter | Default | Description |
|---|---|---|
session.cacheSize |
100 |
Max cached sessions |
session.ttlMinutes |
30 |
Session TTL before eviction |
| Parameter | Default | Description |
|---|---|---|
pulsar.tls.enabled |
false |
Enable TLS for Pulsar |
pulsar.tls.secretName |
"" |
Secret containing TLS certs |
pulsar.tls.allowInsecureConnection |
false |
Allow insecure TLS |
pulsar.tls.enableHostnameVerification |
true |
Verify hostname |
| Parameter | Default | Description |
|---|---|---|
replicaCount |
1 |
Number of replicas |
service.type |
ClusterIP |
Service type |
service.port |
9090 |
Service port |
ingress.enabled |
false |
Enable Ingress |
serviceAccount.create |
true |
Create ServiceAccount |
helm install snmcp streamnative/snmcp \
--set pulsar.webServiceURL=http://pulsar:8080helm install snmcp streamnative/snmcp \
--set pulsar.webServiceURL=http://pulsar:8080 \
--set ingress.enabled=true \
--set ingress.hosts[0].host=mcp.example.com \
--set ingress.hosts[0].paths[0].path=/ \
--set ingress.hosts[0].paths[0].pathType=Prefixhelm install snmcp streamnative/snmcp \
--set pulsar.webServiceURL=http://pulsar:8080 \
--set server.readOnly=true \
--set server.features="{pulsar-admin,pulsar-client}"# First create a secret with TLS certs
kubectl create secret generic pulsar-tls \
--from-file=ca.crt=./ca.crt \
--from-file=tls.crt=./tls.crt \
--from-file=tls.key=./tls.key
helm install snmcp streamnative/snmcp \
--set pulsar.webServiceURL=https://pulsar:8443 \
--set pulsar.tls.enabled=true \
--set pulsar.tls.secretName=pulsar-tls \
--set pulsar.tls.trustCertsFilePath=/etc/snmcp/tls/ca.crtThis chart runs MCP Server in Multi-Session Pulsar mode. Each client request must include a valid Pulsar JWT token:
curl -H "Authorization: Bearer <PULSAR_TOKEN>" http://localhost:9090/mcp/sseHealth endpoints do not require authentication and can be used for liveness/readiness:
GET http://localhost:9090/mcp/healthzGET http://localhost:9090/mcp/readyz
Apache License 2.0