Cloud
Cloudbeta

Tenant and fleet administration

The platform-operator side of mcpg.cloud — seed and manage tenant organizations, and register or decommission the clusters that host gateways, with the mcpg admin CLI.

Most cloud work happens through mcpg cloud. Two tasks are reserved for platform operators — the people who own the deployment, not individual tenants — and live in a separate CLI, mcpg admin. It has two surfaces, split by which service they talk to and how they authenticate.

Manage tenant organizations

The org surface seeds and controls tenant organizations. It authenticates with the federation's shared admin token (--admin-token / MCPG_FED_ADMIN_TOKEN) — a machine credential, deliberately separate from user login.

bash
mcpg admin org create --slug acme --plan <P> \
  --owner-email owner@acme.com --owner-password '…'
mcpg admin org get acme
mcpg admin org list
mcpg admin org add-owner acme --owner-email second@acme.com --owner-password '…'
mcpg admin org set-plan acme --plan <P> --status active

You can derive the org from a tenant claim instead of a literal slug with --tenant-claim; the CLI applies the exact same slug function the platform uses at login, so the seeded org matches what that claim resolves to. After seeding, licensing flows automatically — the platform fetches the org's license at the tenant's next login, or within a few minutes via the refresh loop.

Manage the cluster fleet

The cluster surface registers and retires the Kubernetes clusters that host managed gateways. It authenticates with an OIDC id_token from mcpg admin login; the platform's admin-email allowlist decides who may call it.

bash
mcpg admin login
mcpg admin cluster list
mcpg admin cluster health
mcpg admin cluster register --name eu-1 --region eu --gateways-max 200 \
  --kubeconfig ./eu-1.kubeconfig
mcpg admin cluster decommission <ID>

Credential material (--kubeconfig, --ca-pem) is read from disk so secrets never appear in the process arguments. decommission refuses while gateways are still running on the cluster unless you pass --force (which orphans them).

Where to go next