cubeship

Tool reference

Every tool /mcp offers, with what each one takes — generated from the daemon.

Every tool an agent finds at /mcp, grouped the way the daemon registers them. A tool answers as the API key that called it: a member's key deploys and reads, an admin's also configures the instance. What a tool needs is in its inputs; what it refuses to do is in MCP.

Account

create_api_key

Issue an additional, independent API key for yourself under a given name (e.g. "mcp", "laptop") — it coexists with every key you already hold.

InputTypeWhat it is
name *stringa label to recognize this key by later, e.g. "mcp" or "laptop"

* required

list_api_keys

List metadata for every API key you hold (id, name, timestamps). Key values are never shown again after creation.

Takes no input.

revoke_api_key

Revoke one of your own API keys by id. Never refused, including your last one: a key that has leaked has to be able to go now, and being made to mint a replacement first would keep the leaked one live for as long as that took.

So what it costs is yours to weigh before calling it. Revoking the key this session is authenticating with stops this session at once — the next call fails. Revoking the last one leaves the account with no key at all, and whether that leaves a way in depends on whether it has a password, which this surface does not tell you.

InputTypeWhat it is
id *integerthe key's id, from list_api_keys

* required

rotate_my_api_key

Replace the API key this MCP session is currently using with a freshly generated one. WARNING: the key authenticating this very session stops working immediately — this session's next call will fail. Every other key you hold is unaffected.

Takes no input.

whoami

Report who the API key this MCP session is using belongs to: the username, and the role it holds on this instance — admin or member.

Takes no input.

Projects and environments

create_environment

Create an additional environment within a project. Requires the admin role.

InputTypeWhat it is
project *stringproject slug
slug *stringshort identifier used in URLs and as the environment name apps request. Permanent - it cannot be changed later

* required

create_project

Create a project. Comes with a "production" environment, which can never be deleted. Requires the admin role.

InputTypeWhat it is
slug *stringshort identifier used in URLs: lowercase letters, digits and dashes. Permanent - it cannot be changed later

* required

delete_environment

Delete an environment and every app deployed in it. Refused for the "production" environment, which every project must keep. Requires the admin role, and cannot be undone.

InputTypeWhat it is
environment *stringenvironment slug
project *stringproject slug

* required

delete_project

Delete a project, the environments inside it and every app in those — each app's container is stopped and removed first. Requires the admin role, and cannot be undone.

InputTypeWhat it is
project *stringproject slug

* required

get_environment_env

Read the environment variables set on one environment, plus the effective set an app there inherits (the project's, overridden by this environment's) with the source of every value.

InputTypeWhat it is
environment *stringenvironment slug
project *stringproject slug

* required

get_project_env

Read the environment variables set on a project. Every environment and every app below inherits them.

InputTypeWhat it is
project *stringproject slug

* required

list_environments

List the environments in a project.

InputTypeWhat it is
project *stringproject slug

* required

list_projects

List the projects on this instance.

Takes no input.

set_environment_env

Add, change or remove environment variables shared by every app in one environment. Only the keys you name are touched. Requires the admin role.

InputTypeWhat it is
environment *stringenvironment slug
project *stringproject slug
setobjectvariables to add or overwrite
unsetarraynames of variables to remove

* required

set_project_env

Add, change or remove environment variables shared by every environment (and every app) in a project. Only the keys you name are touched. Requires the admin role.

InputTypeWhat it is
project *stringproject slug
setobjectvariables to add or overwrite
unsetarraynames of variables to remove

* required

Apps

create_app

Register a new app in a project and get its registry push path. environment defaults to "production" when omitted. Requires the member role.

InputTypeWhat it is
dockerfilestringfor a dockerfile app only, the recipe's path within the repository. Defaults to "Dockerfile" at the root.
environmentstringenvironment slug (default "production")
imagestringfor an external app, the image it pulls, without a tag — e.g. "registry.digitalocean.com/acme/api". Leave empty otherwise.
name *stringapp name: lowercase letters, digits and dashes — becomes part of its registry image path. Permanent
project *stringproject slug
refstringfor a building app, the branch, tag or commit to build. Defaults to the repository's default branch.
repostringfor a building app, the https:// Git repository to build from. Leave empty otherwise.
sourcestringwhere the image comes from: "registry" (the default) for an image you push to Cubeship, "external" for one in a registry Cubeship does not run, "dockerfile" to build a Dockerfile from a Git repository, or "railpack" to build from a Git repository with no Dockerfile. Building requires the admin role.
tagstringthe tag to run. Leave empty to follow the registry: on this instance's own that means a push deploys the app, and on any other it means latest. A building app has no tag — it names a ref.

* required

delete_app

Delete an app and stop the container serving it. Images already pushed stay in the registry. This cannot be undone. Requires the member role.

InputTypeWhat it is
app *stringapp reference: project/environment/app, or project/app for production

* required

deploy_app

Manually redeploy an app from an image tag already pushed to its registry path (no tag means "latest" for an image, or the stored ref for a source that builds). Waits for the deploy to finish and reports the outcome; if this call times out first, the deploy carries on regardless — check it with get_app_deployments. Requires the member role.

InputTypeWhat it is
app *stringapp reference: project/environment/app, or project/app for production
tagstringimage tag already pushed to the app's registry path (default "latest")

* required

get_app

Get one app by reference: its domain, registry push path, status, and which project and environment it lives in.

InputTypeWhat it is
app *stringapp reference: project/environment/app, or project/app for production

* required

get_app_deployments

List an app's recent deploys, newest first: whether each succeeded, and why it failed if it did. A deploy runs detached from the call that started it, so this is how you find out how one ended.

InputTypeWhat it is
app *stringapp reference: project/environment/app, or project/app for production

* required

get_app_env

Read an app's environment variables: the ones set on the app itself, and the effective set its container runs with (project, then environment, then app — each overriding the last), with the source of every value. Read this before changing anything.

InputTypeWhat it is
app *stringapp reference: project/environment/app, or project/app for production

* required

get_app_logs

Get an app's recent container log output (stdout and stderr combined).

InputTypeWhat it is
app *stringapp reference: project/environment/app, or project/app for production
serverstringwhich server's copy to read, for an app that runs on more than one; defaults to the one serving its names
tailstringnumber of trailing lines to return, e.g. "500", or "all" for the full log (default "200")

* required

list_apps

List every app you can see, on this instance.

Takes no input.

set_app_env

Add, change or remove an app's own environment variables. Only the keys you name are touched — variables you don't mention are left alone. These are layered on top of (and override) the app's environment's and project's variables. Requires the member role.

InputTypeWhat it is
app *stringapp reference: project/environment/app, or project/app for production
setobjectvariables to add or overwrite
unsetarraynames of variables to remove

* required

update_app

Reconfigure an app: where its image comes from. Its domains are added and removed one at a time — an app can answer at several, each with its own port — so they are not here. A field you leave out is left as it was. The source and its settings travel together — naming a source without what it needs, or settings the source would ignore, is refused. Moving an app to a source that builds requires the admin role. The app's name cannot be changed.

InputTypeWhat it is
dockerfilestringfor a dockerfile app only, the recipe's path within the repository
health_pathstringthe path Traefik asks this app for before trusting a container with traffic, e.g. /healthz. Send empty to check nothing, which is the default; a path that the app does not answer 2xx or 3xx on takes every replica out of rotation
imagestringfor an external app, the image it pulls, without a tag
refstringfor a building app, the branch, tag or commit to build
reference *stringthe app's reference: project/environment/name
repostringfor a building app, the https:// Git repository to build from
sourcestringregistry, external, dockerfile or railpack. Send the settings the new source needs alongside it
tagstringthe tag to run; send empty to follow the registry, which on this instance's own means a push deploys the app

* required

Databases

attach_datastore

Wire an app to a database: the app's container is given DATABASE_URL and its parts — REDIS_URL for a Redis, MONGO_URL for a MongoDB — from its next deploy onwards. The app is named by its full reference, project/environment/name, and may be in any project. Use a prefix like "ANALYTICS_" when one app needs a second database of the same kind; a cache beside a database needs none, since the two name different variables. Requires the admin role.

InputTypeWhat it is
app *stringthe app's full reference: project/environment/name, or project/name for production
datastore *stringthe database's name on this instance
prefixstringwhat the injected variables are named under, e.g. "ANALYTICS_". Leave empty for DATABASE_URL, REDIS_URL or MONGO_URL — whichever this engine writes. Only needed when two attachments would name the same variables. Uppercase, ending in an underscore

* required

create_datastore

Provision a managed database on this instance. It belongs to the instance, not to a project — one database can serve apps in several. It comes up with a generated password, which is never returned: attach an app to it and the app receives the connection string as environment variables. Requires the admin role.

InputTypeWhat it is
databasestringthe database to create inside the server. Defaults to the name with dashes turned into underscores
descriptionstringwhat this database is for, in a sentence
engine *stringwhich server to run: postgres, mysql or mariadb. Call list_datastore_engines for what this release offers
name *stringthe database's name, unique on the instance: lowercase letters, digits and dashes. It is the container's name and is permanent
usernamestringthe login to create. Defaults to "cubeship". MySQL and MariaDB will not accept "root"
versionstringa version this release offers for that engine. Defaults to the newest. Permanent — a major version cannot be changed under an existing data directory

* required

delete_datastore

Delete a managed database, stop its container and remove its data from disk. This cannot be undone and there is no backup. Requires the admin role.

InputTypeWhat it is
datastore *stringthe database's name on this instance

* required

detach_datastore

Unwire an app from a database. Its container keeps the variables it was created with until it is deployed again, so this is not how you cut an app off in a hurry. Requires the admin role.

InputTypeWhat it is
app *stringthe app's full reference: project/environment/name
datastore *stringthe database's name on this instance

* required

get_datastore

Get one managed database by reference: its engine, version, status, the address apps reach it at, and what each attached app receives. Passwords are not reported.

InputTypeWhat it is
datastore *stringthe database's name on this instance

* required

list_datastore_engines

List the database engines this Cubeship release can run and the versions it offers for each. Call this before create_datastore rather than guessing a version.

Takes no input.

list_datastores

List every managed database on this instance: which engine and version each runs, whether it is up, and which apps are attached to it.

Takes no input.

Object storage

attach_object_store

Wire an app to a bucket: the app's container is given S3_ENDPOINT, S3_REGION, S3_BUCKET, S3_ACCESS_KEY_ID, S3_SECRET_ACCESS_KEY and S3_PATH_STYLE from its next deploy onwards. The app is named by its full reference, project/environment/name, and may be in any project. Use a prefix like "BACKUPS_" when one app needs a second bucket, since two attachments would otherwise name the same variables. The keys are never reported here — the app receives them. Requires the admin role.

InputTypeWhat it is
app *stringthe app's full reference: project/environment/name, or project/name for production
bucket *stringwhich bucket in that store the app is pointed at
prefixstringwhat the injected variables are named under, e.g. "BACKUPS_". Leave empty for S3_ENDPOINT and its parts. Only needed when one app is attached to two buckets. Uppercase, ending in an underscore
store *stringthe object store's name on this instance

* required

detach_object_store

Unwire an app from a bucket. Its container keeps the variables it was created with until it is deployed again, so this is not how you cut an app off in a hurry — rotating the credential is. Requires the admin role.

InputTypeWhat it is
app *stringthe app's full reference: project/environment/name
bucket *stringwhich bucket to unwire it from
store *stringthe object store's name on this instance

* required

get_object_store

Get one object store by name: where it answers, which provider it is, and — for one this instance runs — whether it is up. Keys are never reported.

InputTypeWhat it is
store *stringthe object store's name on this instance

* required

list_buckets

List the buckets in one object store. Requires the admin role, like everything about a store's contents.

InputTypeWhat it is
store *stringthe object store's name on this instance

* required

list_object_stores

List the object storage this instance can reach: the MinIO servers it runs and the S3 endpoints it holds keys for. Each carries the endpoint an app on this instance connects to, so this is how you find out where an app should write. Keys are never reported.

Takes no input.

list_objects

List one level of one bucket: the folders directly under a prefix and the files directly in it, with their sizes and when each was last written. Names and sizes only — no tool here reads what is in a file. Requires the admin role.

InputTypeWhat it is
bucket *stringthe bucket to look in
cursorstringcontinue a listing that reported one. Omit for the first page
prefixstringthe folder to list, e.g. "backups/2026/". Empty for the root of the bucket
store *stringthe object store's name on this instance

* required

The machine

instance_containers

List what every container on this instance is using right now — apps, databases and managed object stores together — heaviest CPU first. Each carries the name that identifies it: an app's full project/environment/name reference, a database's or a store's name. The CPU convention here is the container one: 100 is one core, unlike instance_metrics, where 100 is the whole machine. This is what answers "what is eating this box" without opening every app in turn.

Takes no input.

instance_metrics

Read what the machine this Cubeship instance runs on has been doing: how much of its CPU is busy (100 is every core, unlike an app's series where 100 is one core), how much of its memory is spoken for, how full the disk everything is kept on is, and how fast bytes are moving over its own interfaces. Samples are 30 seconds apart and a day is kept. A measurement this daemon cannot take comes back under unavailable with the reason, rather than as a number that is wrong.

InputTypeWhat it is
windowstringhow much of the past to cover: 1h, 6h or 24h. Defaults to 1h

* required

Servers

list_servers

List the machines this Cubeship instance is made of: the control plane — the box it was installed on, which holds the database, the dashboard, the registry and the builder — and the workers connected to it. Each carries what it last reported: its cores, memory and disk, the newest load reading, and whether it is answering. A server that has never connected is "pending"; one that connected and stopped is "unreachable", which says nothing about why.

Takes no input.

On this page