Skip to content

ulams tenants

Generated from front/cli (ulams schema)

Create a tenant (database, bucket, env, keys, demo users) and wait for it.

Provisioning is queued and takes about a minute; this waits and prints progress (use –no-wait to return the handle tenant-op: for ulams operations wait). Asking for a tenant that failed resumes it at the first unfinished step; an existing active tenant is a conflict (exit 6). The slug is 2 to 30 lowercase letters and digits starting with a letter.

Kind: write. Stability: stable. MCP tool: tenants_create. Scopes: platform:write.

Endpoints: POST /api/platform/tenants.

Flag Type Required Description
--slug (positional) string yes Slug of the new tenant.
--name string Display name.
--theme string Front theme preset, coffee, oncall, nightsky, gravity, poland or ulam.
--accent string Accent colour, e.g. #C2552D.
--users integer Number of demo students (default 5).
--demo boolean Demo mode: login without a password, hourly reset.
Terminal window
# A demo tenant
ulams tenants create acme --name "Acme Academy" --theme coffee --accent "#C2552D" --users 3 --demo --json
Input JSON Schema
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"type": "object",
"properties": {
"slug": {
"type": "string",
"description": "Slug of the new tenant."
},
"name": {
"description": "Display name.",
"type": "string"
},
"theme": {
"description": "Front theme preset, coffee, oncall, nightsky, gravity, poland or ulam.",
"type": "string"
},
"accent": {
"description": "Accent colour, e.g. #C2552D.",
"type": "string"
},
"users": {
"description": "Number of demo students (default 5).",
"type": "integer",
"minimum": 0,
"maximum": 50
},
"demo": {
"description": "Demo mode: login without a password, hourly reset.",
"type": "boolean"
}
},
"required": [
"slug"
]
}

Delete a tenant and ALL its data (database, files, settings) and wait for it.

Permanent. The command asks for –yes (exit 11 with the plan otherwise); the slug is sent to the API as the confirmation. Waits for the queued deletion (–no-wait returns the handle tenant-op:).

Kind: destructive. Stability: stable. MCP tool: tenants_delete. Scopes: platform:write.

Endpoints: DELETE /api/platform/tenants/{slug}.

Flag Type Required Description
--slug (positional) string yes Tenant slug (from ulams tenants list).
Terminal window
# Delete
ulams tenants delete acme --yes --json
Input JSON Schema
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"type": "object",
"properties": {
"slug": {
"type": "string",
"description": "Tenant slug (from `ulams tenants list`)."
}
},
"required": [
"slug"
]
}

Show one tenant: status, hosts, finished provisioning steps, the names of its setting overrides.

Kind: read (idempotent). Stability: stable. MCP tool: tenants_get. Scopes: platform:read.

Endpoints: GET /api/platform/tenants/{slug}.

Flag Type Required Description
--slug (positional) string yes Tenant slug (from ulams tenants list).
Terminal window
# A tenant
ulams tenants get coffee --json
Input JSON Schema
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"type": "object",
"properties": {
"slug": {
"type": "string",
"description": "Tenant slug (from `ulams tenants list`)."
}
},
"required": [
"slug"
]
}

List the tenants of this platform.

Kind: read (idempotent). Stability: stable. MCP tool: tenants_list. Scopes: platform:read.

Endpoints: GET /api/platform/tenants.

Terminal window
# Tenants
ulams tenants list --fields slug,status,urls.front --json
Input JSON Schema
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"type": "object",
"properties": {}
}

Status and steps of one tenant operation.

Kind: read (idempotent). Stability: stable. MCP tool: tenants_operations_get. Scopes: platform:read.

Endpoints: GET /api/platform/operations/{id}.

Flag Type Required Description
--id (positional) string yes Operation id (from tenants create --no-wait or tenants operations list).
Terminal window
# An operation
ulams tenants operations get 01j9z3k8m2x4q7r5t6v8w0y1ab --json
Input JSON Schema
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"type": "object",
"properties": {
"id": {
"type": "string",
"description": "Operation id (from `tenants create --no-wait` or `tenants operations list`)."
}
},
"required": [
"id"
]
}

The latest tenant operations (creations and deletions), newest first.

Kind: read (idempotent). Stability: stable. MCP tool: tenants_operations_list. Scopes: platform:read.

Endpoints: GET /api/platform/operations.

Terminal window
# Operations
ulams tenants operations list --json
Input JSON Schema
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"type": "object",
"properties": {}
}

Override or reset inheritable settings of a tenant (AI driver, key and models).

Only the keys the platform lets a tenant override are accepted (ANTHROPIC_API_KEY, AI_DRIVER, AI_MODEL_*); anything else is refused (exit 7). Values are never shown back: the result lists the names of the overridden keys. Example: –override AI_DRIVER=fake.

Kind: write (idempotent). Stability: stable. MCP tool: tenants_set_env. Scopes: platform:write.

Endpoints: PATCH /api/platform/tenants/{slug}/env.

Flag Type Required Description
--slug (positional) string yes Tenant slug (from ulams tenants list).
--override array KEY=value; repeat for several.
--reset array KEY to drop, so the tenant inherits the platform value again; repeat.
Terminal window
# A fake AI driver for tests
ulams tenants set-env acme --override AI_DRIVER=fake --json
Input JSON Schema
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"type": "object",
"properties": {
"slug": {
"type": "string",
"description": "Tenant slug (from `ulams tenants list`)."
},
"override": {
"description": "KEY=value; repeat for several.",
"type": "array",
"items": {
"type": "string"
}
},
"reset": {
"description": "KEY to drop, so the tenant inherits the platform value again; repeat.",
"type": "array",
"items": {
"type": "string"
}
}
},
"required": [
"slug"
]
}