Apps and templates
Discover, create and update container applications and ready-made templates.
Discover, create and update container applications and ready-made templates.
These are action names. In default compact mode, call the indicated group tool with {"action":"<action-name>","params":{...}}; the arguments below go inside params. In ?mode=all, call the action name directly with those arguments. browse_github and read_docs are direct tools in both modes. Expand each schema for nested fields, enum values and validation constraints. Successful results are JSON in both text content and structuredContent; failures use isError and structuredContent.error.
list_apps
List the apps the caller can see, oldest first. Across every project, or within one
Group: apps · Behavior: Read
Compact tool: apps · Action: list_apps
MCP annotations: readOnlyHint: true · destructiveHint: false · idempotentHint: true · openWorldHint: false
Permissions and REST equivalents
apps.list
GET /apps
apps:read
Arguments
projectId
string
No
Limit the list to one project
limit
integer
No
Items per page, 1 to 200 (default 50)
cursor
string
No
nextCursor from the previous page; omit for the first page
org
string
No
Slug of an organization (see orgs.list) to list only what is in it or shared into it
Result
apps(array<object>): See the complete response schema below.nextCursor(string or null): Pass as cursor to fetch the next page; null on the last page
list_templates
The gallery's app templates as ready-made create_app configurations. Ollama chat with a chosen model, vLLM servers, ...: pass a template's config to create_app with a name, edited as needed; notes says what a template needs filled in first.
Group: apps · Behavior: Read
Compact tool: apps · Action: list_templates
MCP annotations: readOnlyHint: true · destructiveHint: false · idempotentHint: true · openWorldHint: false
Permissions and REST equivalents
templates.list
GET /templates
Authenticated connection; organization and resource permissions still apply
Arguments
search
string
No
Case-insensitive substring of the name or image
category
"llm_general" / "llm_performance" / "general"
No
Only templates of this category
Result
templates(array<object>): See the complete response schema below.galleryUrl(string): The dashboard gallery, where the same templates are deployed by hand
get_app
Get an app with its full configuration and last known status
Group: apps · Behavior: Read
Compact tool: apps · Action: get_app
MCP annotations: readOnlyHint: true · destructiveHint: false · idempotentHint: true · openWorldHint: false
Permissions and REST equivalents
apps.get
GET /projects/{projectId}/apps/{appId}
apps:read
Arguments
projectId
string
Yes
Project id
appId
string
Yes
App id
Result
id(string): App idprojectId(string): See the complete response schema below.name(string): See the complete response schema below.guid(string): Runtime identifier of the appsource(string or null): Where the image comes from: Docker Hub, a registry link, GitHub or an uploadimage(string or null): See the complete response schema below.domain(string or null): Hostname the app answers on: the default custom domain, else the Kinesis-issued onebuildState(string or null): Build pipeline state for GitHub-sourced appsaccess(object): See the complete response schema below.createdBy(object or null): Who created it. Null when nobody is on record, for another organization's, and for a credential without members:readcreatedAt(string): ISO 8601 timestamp (UTC)status(object): Status as last cached; use the status endpoint for a live readconfig(object or null): See the complete response schema below.github(object or null): Repository settings of a GitHub-sourced appdefaultDomain(string or null): Custom domain shown as the app's address in the dashboard; null for the Kinesis-issued one
check_placement
See whether any server could run an app or a configuration change. Reports servers with capacity now, hibernated ones that would fit once woken, whether one can be provisioned on demand, and why sampled servers were rejected, before creating, updating or starting. With appId the app's stored configuration is checked, config (placement-relevant fields only) layered on top; without appId, config describes an app to be created in the project.
Group: apps · Behavior: Read
Compact tool: apps · Action: check_placement
MCP annotations: readOnlyHint: true · destructiveHint: false · idempotentHint: true · openWorldHint: false
Permissions and REST equivalents
apps.placement
POST /projects/{projectId}/apps/{appId}/placement
apps:read
projects.placement
POST /projects/{projectId}/placement
apps:read
Arguments
projectId
string
Yes
Project id
appId
string
No
App id
config
object
No
The placement-relevant parts of an app configuration: instances, stateful, hardware, placement, grids, volumes
Result
apps.placement
placeable(boolean): A server can take the app now, a hibernated one would fit once woken, or one can be provisionedserversWithCapacity(integer): Servers that match and have room nowserversWithoutCapacity(integer): Servers that match but are fullwakeable(integer): Hibernated servers that would match once woken (power_servers wake, or the automatic wake-up on start)wakeableAwaitingStock(integer): Of wakeable, servers whose provider has no stock right now, so a wake would not land yetprovisionable(boolean): The platform can provision a matching cloud machine on demand for a serverless apprejections(array<object>): Why sampled servers cannot take the app; each distinct reason appears first, then repeats
**`projects.placement`**
placeable(boolean): A server can take the app now, a hibernated one would fit once woken, or one can be provisionedserversWithCapacity(integer): Servers that match and have room nowserversWithoutCapacity(integer): Servers that match but are fullwakeable(integer): Hibernated servers that would match once woken (power_servers wake, or the automatic wake-up on start)wakeableAwaitingStock(integer): Of wakeable, servers whose provider has no stock right now, so a wake would not land yetprovisionable(boolean): The platform can provision a matching cloud machine on demand for a serverless apprejections(array<object>): Why sampled servers cannot take the app; each distinct reason appears first, then repeats
create_app
Create an app from an image or a GitHub repository and start it. config.image pulls an image; source builds a connected repository (one without a Dockerfile takes an inline source.dockerfileContent); the start begins spending credits. envFrom copies another app's environment variables, secret values included, on the server. Omitted config fields take the dashboard defaults (1 GiB RAM, 1 GB disk, 1 to 3 instances, no GPU). Returns the app and how the automatic start went; call get_app_status to follow it, or get_build with buildId for a repository app. read_docs(deploy) lists every field.
Group: apps · Behavior: Write
Compact tool: apps_write · Action: create_app
MCP annotations: readOnlyHint: false · destructiveHint: false · idempotentHint: false · openWorldHint: true
Permissions and REST equivalents
apps.create
POST /projects/{projectId}/apps
apps:write, compute:spend
Arguments
name
string
Yes
App name
config
object
Yes
Initial configuration; image is required unless source is set
source
object
No
Build the image from a GitHub repository the caller connected (members of the project's organization); omit to pull config.image
envFrom
object
No
Copy another app's environment variables, secret values included, on the server (developer access to that app); use overrides instead of config.env
projectId
string
Yes
Project to create the app in
idempotencyKey
string
No
Unique string without whitespace; send the same one with the same arguments when retrying after a timeout, and the original result comes back instead of acting twice
Result
id(string): App idprojectId(string): See the complete response schema below.name(string): See the complete response schema below.guid(string): Runtime identifier of the appsource(string or null): Where the image comes from: Docker Hub, a registry link, GitHub or an uploadimage(string or null): See the complete response schema below.domain(string or null): Hostname the app answers on: the default custom domain, else the Kinesis-issued onebuildState(string or null): Build pipeline state for GitHub-sourced appsaccess(object): See the complete response schema below.createdBy(object or null): Who created it. Null when nobody is on record, for another organization's, and for a credential without members:readcreatedAt(string): ISO 8601 timestamp (UTC)status(object): Status as last cached; use the status endpoint for a live readconfig(object or null): See the complete response schema below.github(object or null): Repository settings of a GitHub-sourced appdefaultDomain(string or null): Custom domain shown as the app's address in the dashboard; null for the Kinesis-issued onestart(object): How the automatic start after creation wentbuildId(string or null): First build of a GitHub-sourced app; null for image apps
Operation-specific errors: 402 balance_over_limit, 429 app_creation_quota_exceeded, 400 no_suitable_machines, 429 grid_quota_exceeded, 403 serverless_disabled, 503 github_not_configured, 404 github_installation_not_found, 404 github_repo_not_found, 502 upstream_github, 404 github_branch_not_found, 409 app_config_unavailable.
update_app
Update the name, alerts, configuration or repository settings of an app. A running app is redeployed with the new configuration; while a GitHub-sourced app is still building, the change is applied by that build. Changing instances, hardware or volumes also needs compute:spend.
Group: apps · Behavior: Write
Compact tool: apps_write · Action: update_app
MCP annotations: readOnlyHint: false · destructiveHint: true · idempotentHint: true · openWorldHint: true
Permissions and REST equivalents
apps.update
PATCH /projects/{projectId}/apps/{appId}
apps:write
Conditional
instances, hardware or volumes change
compute:spend
Conditional
source changes what is built (branch, contextDir, dockerfilePath, dockerfileContent)
compute:spend
Arguments
name
string
No
New app name
alerts
object
No
Health-check email alerts
config
object
No
Configuration changes; list fields replace the stored list, object fields merge per key
source
object
No
Repository settings of a GitHub-sourced app (members of the project's organization); a change to the branch, directories or Dockerfile starts a rebuild
projectId
string
Yes
Project id
appId
string
Yes
App id
Result
id(string): App idprojectId(string): See the complete response schema below.name(string): See the complete response schema below.guid(string): Runtime identifier of the appsource(string or null): Where the image comes from: Docker Hub, a registry link, GitHub or an uploadimage(string or null): See the complete response schema below.domain(string or null): Hostname the app answers on: the default custom domain, else the Kinesis-issued onebuildState(string or null): Build pipeline state for GitHub-sourced appsaccess(object): See the complete response schema below.createdBy(object or null): Who created it. Null when nobody is on record, for another organization's, and for a credential without members:readcreatedAt(string): ISO 8601 timestamp (UTC)status(object): Status as last cached; use the status endpoint for a live readconfig(object or null): See the complete response schema below.github(object or null): Repository settings of a GitHub-sourced appdefaultDomain(string or null): Custom domain shown as the app's address in the dashboard; null for the Kinesis-issued onebuildId(string or null): Build started by a source change; null when nothing was rebuilt
Operation-specific errors: 409 app_source_unsupported, 400 grid_to_serverless, 400 no_suitable_machines, 429 grid_quota_exceeded, 403 serverless_disabled.
move_app
Move an app to another project of its organization. Admins may, and so may the app's creator. Nothing about the app itself changes.
Group: apps · Behavior: Write
Compact tool: apps_write · Action: move_app
MCP annotations: readOnlyHint: false · destructiveHint: true · idempotentHint: true · openWorldHint: false
Permissions and REST equivalents
apps.move
POST /projects/{projectId}/apps/{appId}/move
apps:admin
Arguments
targetProjectId
string
Yes
Project to move the app into
projectId
string
Yes
Project id
appId
string
Yes
App id
Result
id(string): App idprojectId(string): See the complete response schema below.name(string): See the complete response schema below.guid(string): Runtime identifier of the appsource(string or null): Where the image comes from: Docker Hub, a registry link, GitHub or an uploadimage(string or null): See the complete response schema below.domain(string or null): Hostname the app answers on: the default custom domain, else the Kinesis-issued onebuildState(string or null): Build pipeline state for GitHub-sourced appsaccess(object): See the complete response schema below.createdBy(object or null): Who created it. Null when nobody is on record, for another organization's, and for a credential without members:readcreatedAt(string): ISO 8601 timestamp (UTC)
Was this helpful?
