name: template-catalog description: "Recommends and installs templates from the Control Plane Template Catalog. Use when the user wants postgres, redis, kafka, mongodb, mysql, or any database, cache, queue, or gateway, or asks what templates exist."
Template Catalog
Tool availability:
preview_template(dry-run) androllback_templateare in thefullMCP toolset;browse_templates,get_template,install_template,upgrade_template,uninstall_template,list_installed_templates, andget_installed_templateare incore. If afulltool is not advertised, reconnect the MCP server with?toolsets=fullor use thecpln helmCLI fallback.
The Template Catalog ships production-tested charts (Helm under the hood) for databases, caches, queues, brokers, search, gateways, and more — persistent storage wired up, credentials generated as Control Plane secrets, a sane firewall posture, and HA variants where they matter. For any common component the catalog template is the default recommendation, not the fallback: hand-rolled workload + volumeset + secret + firewall stacks routinely ship without backups, with a public database, or single-replica. Lead with the template, and move to a custom workload only when the user has a hard reason — an unusual extension, a legacy image they must reuse, or a feature the template doesn't expose. Template-first is also enforced by the operating guide's skill router.
Find the right template
browse_templates returns the live catalog — name, category, latest version, a "creates its own GVC" flag, and description. It is the source of truth for what exists; the table below is only the common asks. Filter with a substring (e.g. postgres), then call get_template <name> for the version list, prerequisites, and an example values.yaml to copy.
| Need | Templates |
|---|---|
| PostgreSQL | postgres (single + backup), postgres-highly-available (Patroni failover), pgedge (active-active multi-master), postgis (geospatial) |
| MySQL-compatible | mysql, mariadb, tidb (distributed) |
| Distributed SQL | cockroach, tidb |
| Document / NoSQL | mongodb (single), mongodb-cluster (replica set), cassandra |
| Analytics / columnar | clickhouse |
| Cache / KV | redis (replica + Sentinel), redis-cluster (sharded), redis-multi-location (cross-GVC), etcd |
| Streaming / queues | kafka, redpanda, rabbitmq, nats, cpln-task-runner |
| Search / vector | manticore, opensearch, elasticsearch, weaviate |
| Gateway / WAF / VPN | nginx, tyk, coraza, tailscale |
| Storage / AI / LLM | minio (S3), ollama, langfuse |
| Auth / dev / ops | fusionauth, dbeaver, airflow, ess, secret-env-var-syncer, otel-collector |
Choosing an HA / scaling variant
This is the choice the catalog can't make for you:
- Postgres:
postgresis one instance with optional scheduled S3/GCS backups;postgres-highly-availableadds Patroni leader election and an embedded etcd quorum (odd member count — 3/5/7) plus its own scheduled backups (logical or WAL-G mode);pgedgeis active-active multi-master across regions. Pick HA when failover matters, pgEdge when you need multi-region writes. - MongoDB:
mongodbis single;mongodb-clusteris a replica set and creates its own GVC. - Redis:
redis(master-replica + Sentinel) for one location;redis-cluster(sharded, needs 6+ nodes) for horizontal scale;redis-multi-location(Valkey + Sentinel) for cross-location failover. - Distributed SQL:
cockroachandtidbare natively distributed — HA is built in through their consensus protocols, and they create their own multi-location GVCs. - Streaming:
kafkafor the full Kafka ecosystem;redpandais Kafka-API-compatible with a simpler single-binary footprint.
Install (MCP)
get_template <name>— copy the examplevalues.yaml; edit credentials, replica count, resources, storage size, and access scope.preview_template(full profile) — dry-run render the resources the install would create, without applying anything.install_template— passorg, a uniquename(the release id, immutable),template, thevaluesYAML (required, max 128 KiB), an optionalversion(latest if omitted), andgvc. Omitgvcfor templates that create their own (thecreatesGvcflag inbrowse_templates/get_template; e.g.cockroach,tidb,nats,clickhouse,airflow,mongodb-cluster,redis-multi-location,pgedge).- Installs are asynchronous — confirm with
get_installed_template <name>.
Configure and upgrade
Reconfigure with upgrade_template: pass name plus the new version and/or values. values REPLACES the release's values entirely — there is no reuse-merge — so start from the current values, never a partial. template and gvc are immutable and read from the installed release, so you don't pass them. Roll back with rollback_template (full profile) or cpln helm rollback.
Access scope lives in the template's values — but the key name varies per template (e.g. internal_access.type, internalAccess.type, internalAllowType, or firewall.internal_inboundAllowType). Values are same-gvc (default), same-org, workload-list (with an explicit workloads: list), and none on a few. Copy the example from get_template rather than writing keys from memory.
CLI fallback (CI/CD)
When MCP is unavailable, or in pipelines with a service-account CPLN_TOKEN, use cpln helm against the OCI registry oci://ghcr.io/controlplane-com/templates/<TEMPLATE> (the slug is the template name):
cpln helm install my-pg oci://ghcr.io/controlplane-com/templates/postgres -f values.yaml # omit --version for latest
cpln helm template my-pg oci://ghcr.io/controlplane-com/templates/postgres -f values.yaml # preview rendered resources
cpln helm list # releases in the org
cpln helm get values <RELEASE> --all # currently applied values
cpln helm upgrade <RELEASE> oci://... -f values.yaml
cpln helm history <RELEASE> # revision numbers, for rollback
cpln helm rollback <RELEASE> [<REVISION>] # previous revision if omitted
cpln helm uninstall <RELEASE>
Reference values.yaml for any template lives in the templates repo at <template>/versions/<version>/values.yaml.
Verify
After install, get_installed_template <name> shows the release status, revision, and every resource it created (it decodes the release secret, so the token needs secret reveal permission). Then confirm the workloads are healthy with list_deployments, and check the generated secrets with list_resources (kind secret). Add firewall rules or a domain for any workload that needs external access.
Connection details: an installed service is reachable inside its GVC at <release>-<component>.<gvc>.cpln.local:<port> (e.g. my-pg-postgres.<gvc>.cpln.local:5432); credentials live in the generated dictionary secret — reveal it to read them. The exact workload name, port, and secret keys are in get_installed_template (created resources) and the get_template example values.
Traps
upgrade_templatereplaces values — there is no partial merge, so start from the current values, not a fragment.- Templates with
createsGvcmake their own GVC — omitgvcon install; others require an existinggvc. - Uninstall removes the resources the release created, including volume data — confirm the blast radius first.
valueskey names (credentials, resources, access scope) differ across templates — copy fromget_template, don't hand-write from memory.- Backups (e.g.
postgres,mongodb) need a Cloud Account + storage IAM policy to exist first, referenced in thevaluesbackup block — see theget_templateprerequisites.
Troubleshooting
| Symptom | Cause | Fix |
|---|---|---|
preview_template / rollback_template not found |
core profile | reconnect ?toolsets=full or use the cpln helm equivalent |
| Install fails: GVC required | template installs into an existing GVC | pass gvc (or check createsGvc — self-GVC templates omit it) |
| Upgrade lost settings | values replaces, not merges |
re-supply full values from get_template / cpln helm get values --all |
get_installed_template permission denied |
token lacks secret reveal | grant reveal on the release secret via a policy |
| Install failed / release stuck | partial apply, bad values, or unready workloads | inspect get_installed_template and cpln helm history; fix values and upgrade_template, or uninstall and reinstall |
| Workloads pending after install | image pull / firewall / resources | see the workload skill's troubleshooting |
Quick reference
| Tool | Purpose | Tier |
|---|---|---|
mcp__cpln__browse_templates |
Live catalog (filter by substring) | core |
mcp__cpln__get_template |
Versions, prerequisites, example values | core |
mcp__cpln__preview_template |
Dry-run render, no apply | full |
mcp__cpln__install_template |
Install a release | core |
mcp__cpln__upgrade_template |
Change version/values (replaces values) | core |
mcp__cpln__rollback_template |
Roll back to a prior revision | full |
mcp__cpln__uninstall_template |
Remove a release and its resources | core |
mcp__cpln__list_installed_templates |
Inventory of releases in the org | core |
mcp__cpln__get_installed_template |
One release's status + created resources | core |
CLI fallback (CI/CD via a service-account CPLN_TOKEN): cpln helm install|template|list|get|upgrade|rollback|uninstall|history against oci://ghcr.io/controlplane-com/templates/<TEMPLATE>.
Related skills
| Skill | For |
|---|---|
workload |
Custom workloads when no template fits; deploy-and-verify; pending-replica troubleshooting |
stateful-storage |
Volumesets the database templates provision; snapshots and expansion |
firewall-networking |
Exposing an installed service; outbound rules |
access-control |
Identities and policies for backup cloud accounts and secret reveal |
iac-terraform-pulumi |
Installing templates through Terraform or Pulumi |