MCP Capabilities
Server someones_computer
Tools 87
grant_credit
Description: Give an organization credit outside Stripe. This is an operator top-up, not a sale. Only a platform ROLE_ADMIN can use this tool.
Handler: App\Mcp\Tool\AdminTool::grantCredit()
Parameters
| Name | Type | Required | Default | Description |
|---|---|---|---|---|
org_slug |
string | Yes | - | - |
amount_cents |
integer | Yes | - | - |
Full Schema
| array(3) { ["type"]=> string(6) "object" ["properties"]=> array(2) { ["org_slug"]=> array(1) { ["type"]=> string(6) "string" } ["amount_cents"]=> array(1) { ["type"]=> string(7) "integer" } } ["required"]=> array(2) { [0]=> string(8) "org_slug" [1]=> string(12) "amount_cents" } } |
generate_sign_in_link
Description: Issue a one-time sign-in link for a user, and send no email. Only a platform ROLE_ADMIN can use this tool.
Handler: App\Mcp\Tool\AdminTool::generateSignInLink()
Parameters
| Name | Type | Required | Default | Description |
|---|---|---|---|---|
identifier |
string | Yes | - | - |
Full Schema
| array(3) { ["type"]=> string(6) "object" ["properties"]=> array(1) { ["identifier"]=> array(1) { ["type"]=> string(6) "string" } } ["required"]=> array(1) { [0]=> string(10) "identifier" } } |
list_applications
Description: List the applications in an organization.
Handler: App\Mcp\Tool\ApplicationTool::listApplications()
Parameters
| Name | Type | Required | Default | Description |
|---|---|---|---|---|
orgSlug |
string | Yes | - | the organization's slug, from list_organizations |
Full Schema
| array(3) { ["type"]=> string(6) "object" ["properties"]=> array(1) { ["orgSlug"]=> array(2) { ["type"]=> string(6) "string" ["description"]=> string(48) "the organization's slug, from list_organizations" } } ["required"]=> array(1) { [0]=> string(7) "orgSlug" } } |
get_application
Description: Get the details of one application, with its current deployment revision if it has one.
Handler: App\Mcp\Tool\ApplicationTool::getApplication()
Parameters
| Name | Type | Required | Default | Description |
|---|---|---|---|---|
orgSlug |
string | Yes | - | the organization's slug |
slug |
string | Yes | - | the application's slug within that organization |
Full Schema
| array(3) { ["type"]=> string(6) "object" ["properties"]=> array(2) { ["orgSlug"]=> array(2) { ["type"]=> string(6) "string" ["description"]=> string(23) "the organization's slug" } ["slug"]=> array(2) { ["type"]=> string(6) "string" ["description"]=> string(47) "the application's slug within that organization" } } ["required"]=> array(2) { [0]=> string(7) "orgSlug" [1]=> string(4) "slug" } } |
create_application
Description: Create a new application in an organization. You must have the owner or admin role. The new application has no deployments.
Handler: App\Mcp\Tool\ApplicationTool::createApplication()
Parameters
| Name | Type | Required | Default | Description |
|---|---|---|---|---|
orgSlug |
string | Yes | - | the organization's slug |
slug |
string | Yes | - | a URL-safe, organization-unique identifier for the application |
name |
string | Yes | - | a human-readable display name |
isolationLevel |
string | No |
shared
|
"shared" (co-tenant on the pool swarm, the default) or "dedicated" (its own swarm) |
Full Schema
| array(3) { ["type"]=> string(6) "object" ["properties"]=> array(4) { ["orgSlug"]=> array(2) { ["type"]=> string(6) "string" ["description"]=> string(23) "the organization's slug" } ["slug"]=> array(2) { ["type"]=> string(6) "string" ["description"]=> string(62) "a URL-safe, organization-unique identifier for the application" } ["name"]=> array(2) { ["type"]=> string(6) "string" ["description"]=> string(29) "a human-readable display name" } ["isolationLevel"]=> array(3) { ["type"]=> string(6) "string" ["description"]=> string(82) ""shared" (co-tenant on the pool swarm, the default) or "dedicated" (its own swarm)" ["default"]=> string(6) "shared" } } ["required"]=> array(3) { [0]=> string(7) "orgSlug" [1]=> string(4) "slug" [2]=> string(4) "name" } } |
delete_application
Description: Retire an application. You must have the owner or admin role. The tool refuses while managed services are still bound to the application, unless force is true.
Handler: App\Mcp\Tool\ApplicationTool::deleteApplication()
Parameters
| Name | Type | Required | Default | Description |
|---|---|---|---|---|
orgSlug |
string | Yes | - | the organization's slug |
slug |
string | Yes | - | the application's slug within that organization |
force |
boolean | No |
|
retire it even though managed services are still bound to it, cutting them off from it |
Full Schema
| array(3) { ["type"]=> string(6) "object" ["properties"]=> array(3) { ["orgSlug"]=> array(2) { ["type"]=> string(6) "string" ["description"]=> string(23) "the organization's slug" } ["slug"]=> array(2) { ["type"]=> string(6) "string" ["description"]=> string(47) "the application's slug within that organization" } ["force"]=> array(3) { ["type"]=> string(7) "boolean" ["description"]=> string(86) "retire it even though managed services are still bound to it, cutting them off from it" ["default"]=> bool(false) } } ["required"]=> array(2) { [0]=> string(7) "orgSlug" [1]=> string(4) "slug" } } |
set_access_gate
Description: Change the access gate on an application, or on one of its deployment names. An application-scoped token can use this tool.
Handler: App\Mcp\Tool\ApplicationTool::setAccessGate()
Parameters
| Name | Type | Required | Default | Description |
|---|---|---|---|---|
orgSlug |
string | Yes | - | the organization's slug |
slug |
string | Yes | - | the application's slug within that organization |
mode |
string | Yes | - | "none", "basic_auth", "token" or "someones_auth". Also "inherit" with a deploymentName, to clear that override |
username |
null|string | No |
|
required for basic_auth, and used only for basic_auth |
password |
null|string | No |
|
required for basic_auth, and used only for basic_auth |
deploymentName |
null|string | No |
|
omit it to change the application-wide default. Give it to change or clear a per-deployment override |
Full Schema
| array(3) { ["type"]=> string(6) "object" ["properties"]=> array(6) { ["orgSlug"]=> array(2) { ["type"]=> string(6) "string" ["description"]=> string(23) "the organization's slug" } ["slug"]=> array(2) { ["type"]=> string(6) "string" ["description"]=> string(47) "the application's slug within that organization" } ["mode"]=> array(2) { ["type"]=> string(6) "string" ["description"]=> string(110) ""none", "basic_auth", "token" or "someones_auth". Also "inherit" with a deploymentName, to clear that override" } ["username"]=> array(3) { ["type"]=> array(2) { [0]=> string(4) "null" [1]=> string(6) "string" } ["description"]=> string(53) "required for basic_auth, and used only for basic_auth" ["default"]=> NULL } ["password"]=> array(3) { ["type"]=> array(2) { [0]=> string(4) "null" [1]=> string(6) "string" } ["description"]=> string(53) "required for basic_auth, and used only for basic_auth" ["default"]=> NULL } ["deploymentName"]=> array(3) { ["type"]=> array(2) { [0]=> string(4) "null" [1]=> string(6) "string" } ["description"]=> string(100) "omit it to change the application-wide default. Give it to change or clear a per-deployment override" ["default"]=> NULL } } ["required"]=> array(3) { [0]=> string(7) "orgSlug" [1]=> string(4) "slug" [2]=> string(4) "mode" } } |
get_build_platform
Description: Say which CPU architecture the build workers run. The reply lists each platform (for example linux/amd64) with the number of nodes that can run a build. Use it before you forward an image to a build: an image for another platform fails with exec format error.
Handler: App\Mcp\Tool\BuildPlatformTool::getBuildPlatform()
Parameters
| Name | Type | Required | Default | Description |
|---|
Full Schema
| array(2) { ["type"]=> string(6) "object" ["properties"]=> object(stdClass)#2830 (0) { } } |
container_findings_list
Description: List the open container findings on the swarm hosts: odd containers (outside_stack, docker_socket, privileged, unknown_image, unknown_port) and unhealthy services (restart_loop, out_of_memory, failing_health_check). Each row has an id for container_finding_mark_known. The optional kind argument keeps one finding kind. The include_known argument is false by default, which hides the findings that an operator marked known. Only a platform ROLE_ADMIN can use this tool.
Handler: App\Mcp\Tool\ContainerFindingTool::containerFindingsList()
Parameters
| Name | Type | Required | Default | Description |
|---|---|---|---|---|
kind |
null|string | No |
|
- |
include_known |
boolean | No |
|
- |
Full Schema
| array(2) { ["type"]=> string(6) "object" ["properties"]=> array(2) { ["kind"]=> array(2) { ["type"]=> array(2) { [0]=> string(4) "null" [1]=> string(6) "string" } ["default"]=> NULL } ["include_known"]=> array(2) { ["type"]=> string(7) "boolean" ["default"]=> bool(false) } } } |
container_finding_mark_known
Description: Mark a container finding as known: the container is meant to run that way. The finding stays listed and stops counting as needing attention. Pass the id from container_findings_list. Reverse it with container_finding_undo_known. Only a platform ROLE_ADMIN can use this tool.
Handler: App\Mcp\Tool\ContainerFindingTool::containerFindingMarkKnown()
Parameters
| Name | Type | Required | Default | Description |
|---|---|---|---|---|
id |
string | Yes | - | - |
Full Schema
| array(3) { ["type"]=> string(6) "object" ["properties"]=> array(1) { ["id"]=> array(1) { ["type"]=> string(6) "string" } } ["required"]=> array(1) { [0]=> string(2) "id" } } |
container_finding_undo_known
Description: Reverse container_finding_mark_known. The finding counts as needing attention again. Pass the id from container_findings_list. Only a platform ROLE_ADMIN can use this tool.
Handler: App\Mcp\Tool\ContainerFindingTool::containerFindingUndoKnown()
Parameters
| Name | Type | Required | Default | Description |
|---|---|---|---|---|
id |
string | Yes | - | - |
Full Schema
| array(3) { ["type"]=> string(6) "object" ["properties"]=> array(1) { ["id"]=> array(1) { ["type"]=> string(6) "string" } } ["required"]=> array(1) { [0]=> string(2) "id" } } |
list_deployments
Description: List the deployment revisions of an application, with the newest first.
Handler: App\Mcp\Tool\DeploymentTool::listDeployments()
Parameters
| Name | Type | Required | Default | Description |
|---|---|---|---|---|
orgSlug |
string | Yes | - | - |
appSlug |
string | Yes | - | - |
Full Schema
| array(3) { ["type"]=> string(6) "object" ["properties"]=> array(2) { ["orgSlug"]=> array(1) { ["type"]=> string(6) "string" } ["appSlug"]=> array(1) { ["type"]=> string(6) "string" } } ["required"]=> array(2) { [0]=> string(7) "orgSlug" [1]=> string(7) "appSlug" } } |
get_deployment
Description: Get one deployment revision, with its raw compose file.
Handler: App\Mcp\Tool\DeploymentTool::getDeployment()
Parameters
| Name | Type | Required | Default | Description |
|---|---|---|---|---|
orgSlug |
string | Yes | - | - |
appSlug |
string | Yes | - | - |
sequence |
integer | Yes | - | - |
Full Schema
| array(3) { ["type"]=> string(6) "object" ["properties"]=> array(3) { ["orgSlug"]=> array(1) { ["type"]=> string(6) "string" } ["appSlug"]=> array(1) { ["type"]=> string(6) "string" } ["sequence"]=> array(1) { ["type"]=> string(7) "integer" } } ["required"]=> array(3) { [0]=> string(7) "orgSlug" [1]=> string(7) "appSlug" [2]=> string(8) "sequence" } } |
create_deployment
Description: Record a new deployment revision, from a compose file or from an earlier revision. Give compose or sourceSequence, not both. The reply has result (new or reused) and reused_sequence. A compose that matches an earlier revision of the application byte for byte reuses it and makes no row. A copy from sourceSequence is always new. With sourceSequence the new revision copies that revision's digest and built image, so it starts built and nothing rebuilds. You must have the owner or admin role. The revision doesn't become active. To make it active, call set_current_deployment.
Handler: App\Mcp\Tool\DeploymentTool::createDeployment()
Parameters
| Name | Type | Required | Default | Description |
|---|---|---|---|---|
orgSlug |
string | Yes | - | the organization's slug |
appSlug |
string | Yes | - | the application's slug |
compose |
null|string | No |
|
the raw compose file content. The tool stores it exactly as you send it |
sourceSequence |
null|integer | No |
|
the revision to copy, from list_deployments. It must have built services `result` says `new` or `reused`, and `reused_sequence` names the revision that a `reused` answer points at. A compose upload reuses the newest revision of the same application with the same content, and makes no row. The content is the compose text, byte for byte. The search covers the revisions of an earlier compose upload, and the bundle uploads of `sc deploy` that had no build context and no name. It skips a failed, cancelled or quarantined revision. A reused revision keeps its own status, and nothing deploys. `copied_from_sequence` names the source of a `sourceSequence` copy, which is always a new revision. |
Full Schema
| array(3) { ["type"]=> string(6) "object" ["properties"]=> array(4) { ["orgSlug"]=> array(2) { ["type"]=> string(6) "string" ["description"]=> string(23) "the organization's slug" } ["appSlug"]=> array(2) { ["type"]=> string(6) "string" ["description"]=> string(22) "the application's slug" } ["compose"]=> array(3) { ["type"]=> array(2) { [0]=> string(4) "null" [1]=> string(6) "string" } ["description"]=> string(71) "the raw compose file content. The tool stores it exactly as you send it" ["default"]=> NULL } ["sourceSequence"]=> array(3) { ["type"]=> array(2) { [0]=> string(4) "null" [1]=> string(7) "integer" } ["description"]=> string(692) "the revision to copy, from list_deployments. It must have built services `result` says `new` or `reused`, and `reused_sequence` names the revision that a `reused` answer points at. A compose upload reuses the newest revision of the same application with the same content, and makes no row. The content is the compose text, byte for byte. The search covers the revisions of an earlier compose upload, and the bundle uploads of `sc deploy` that had no build context and no name. It skips a failed, cancelled or quarantined revision. A reused revision keeps its own status, and nothing deploys. `copied_from_sequence` names the source of a `sourceSequence` copy, which is always a new revision." ["default"]=> NULL } } ["required"]=> array(2) { [0]=> string(7) "orgSlug" [1]=> string(7) "appSlug" } } |
redeploy_deployment
Description: Redeploy a running revision on the image it already built, so it picks up the variables saved now. Nothing rebuilds. A new revision is made and made active. You must have the owner or admin role. The same credit and tier checks as `sc` and the web UI apply.
Handler: App\Mcp\Tool\DeploymentTool::redeployDeployment()
Parameters
| Name | Type | Required | Default | Description |
|---|---|---|---|---|
orgSlug |
string | Yes | - | the organization's slug |
appSlug |
string | Yes | - | the application's slug |
sequence |
integer | Yes | - | the revision to redeploy, from list_deployments. It must be running |
Full Schema
| array(3) { ["type"]=> string(6) "object" ["properties"]=> array(3) { ["orgSlug"]=> array(2) { ["type"]=> string(6) "string" ["description"]=> string(23) "the organization's slug" } ["appSlug"]=> array(2) { ["type"]=> string(6) "string" ["description"]=> string(22) "the application's slug" } ["sequence"]=> array(2) { ["type"]=> string(7) "integer" ["description"]=> string(67) "the revision to redeploy, from list_deployments. It must be running" } } ["required"]=> array(3) { [0]=> string(7) "orgSlug" [1]=> string(7) "appSlug" [2]=> string(8) "sequence" } } |
set_current_deployment
Description: Make one revision the active deployment of an application. Use it to promote a new revision or to roll back to an older one. You must have the owner or admin role. The same credit and tier checks as `sc` and the web UI apply.
Handler: App\Mcp\Tool\DeploymentTool::setCurrentDeployment()
Parameters
| Name | Type | Required | Default | Description |
|---|---|---|---|---|
orgSlug |
string | Yes | - | the organization's slug |
appSlug |
string | Yes | - | the application's slug |
sequence |
integer | Yes | - | the revision number to make active, from list_deployments |
Full Schema
| array(3) { ["type"]=> string(6) "object" ["properties"]=> array(3) { ["orgSlug"]=> array(2) { ["type"]=> string(6) "string" ["description"]=> string(23) "the organization's slug" } ["appSlug"]=> array(2) { ["type"]=> string(6) "string" ["description"]=> string(22) "the application's slug" } ["sequence"]=> array(2) { ["type"]=> string(7) "integer" ["description"]=> string(57) "the revision number to make active, from list_deployments" } } ["required"]=> array(3) { [0]=> string(7) "orgSlug" [1]=> string(7) "appSlug" [2]=> string(8) "sequence" } } |
stop_deployment
Description: Stop the deployment with a given name, as `sc` does. You must have the owner or admin role. Its stack is torn down, the revision goes back to built, and its images stay. A zero credit balance never blocks it. It fails when nothing runs under the name, or when the name is unknown.
Handler: App\Mcp\Tool\DeploymentTool::stopDeployment()
Parameters
| Name | Type | Required | Default | Description |
|---|---|---|---|---|
orgSlug |
string | Yes | - | the organization's slug |
appSlug |
string | Yes | - | the application's slug |
deploymentName |
string | Yes | - | the deployment name, from list_deployments |
Full Schema
| array(3) { ["type"]=> string(6) "object" ["properties"]=> array(3) { ["orgSlug"]=> array(2) { ["type"]=> string(6) "string" ["description"]=> string(23) "the organization's slug" } ["appSlug"]=> array(2) { ["type"]=> string(6) "string" ["description"]=> string(22) "the application's slug" } ["deploymentName"]=> array(2) { ["type"]=> string(6) "string" ["description"]=> string(42) "the deployment name, from list_deployments" } } ["required"]=> array(3) { [0]=> string(7) "orgSlug" [1]=> string(7) "appSlug" [2]=> string(14) "deploymentName" } } |
get_task_logs
Description: Read the last lines of the output of one container of the own stack of the application. That includes a one-shot service such as a migration, and the sidecar of a bound managed service. Give the container id from list_tasks or get_revision. The reply holds at most 500 lines, 32 KB and the last 24 hours. The tool hides the values of sensitive variables and the credentials of bound services. A failed container keeps its last output while the swarm keeps the task.
Handler: App\Mcp\Tool\DiagnosticsTool::getTaskLogs()
Parameters
| Name | Type | Required | Default | Description |
|---|---|---|---|---|
orgSlug |
string | Yes | - | the organization's slug |
appSlug |
string | Yes | - | the application's slug |
containerId |
string | Yes | - | the container id from list_tasks |
lines |
integer | No |
100
|
how many of the last lines to return. At most 500 |
since |
null|string | No |
|
an ISO 8601 time. Nothing older than 24 hours comes back whatever this says |
stream |
string | No |
both
|
"stdout", "stderr" or "both" |
Full Schema
| array(3) { ["type"]=> string(6) "object" ["properties"]=> array(6) { ["orgSlug"]=> array(2) { ["type"]=> string(6) "string" ["description"]=> string(23) "the organization's slug" } ["appSlug"]=> array(2) { ["type"]=> string(6) "string" ["description"]=> string(22) "the application's slug" } ["containerId"]=> array(2) { ["type"]=> string(6) "string" ["description"]=> string(32) "the container id from list_tasks" } ["lines"]=> array(3) { ["type"]=> string(7) "integer" ["description"]=> string(49) "how many of the last lines to return. At most 500" ["default"]=> int(100) } ["since"]=> array(3) { ["type"]=> array(2) { [0]=> string(4) "null" [1]=> string(6) "string" } ["description"]=> string(75) "an ISO 8601 time. Nothing older than 24 hours comes back whatever this says" ["default"]=> NULL } ["stream"]=> array(3) { ["type"]=> string(6) "string" ["description"]=> string(28) ""stdout", "stderr" or "both"" ["default"]=> string(4) "both" } } ["required"]=> array(3) { [0]=> string(7) "orgSlug" [1]=> string(7) "appSlug" [2]=> string(11) "containerId" } } |
get_task_failure
Description: Say why one container failed or was rejected. Give the container id from list_tasks. The reply holds the error text of the swarm, the exit code and the time the container stopped.
Handler: App\Mcp\Tool\DiagnosticsTool::getTaskFailure()
Parameters
| Name | Type | Required | Default | Description |
|---|---|---|---|---|
orgSlug |
string | Yes | - | the organization's slug |
appSlug |
string | Yes | - | the application's slug |
containerId |
string | Yes | - | the container id from list_tasks |
Full Schema
| array(3) { ["type"]=> string(6) "object" ["properties"]=> array(3) { ["orgSlug"]=> array(2) { ["type"]=> string(6) "string" ["description"]=> string(23) "the organization's slug" } ["appSlug"]=> array(2) { ["type"]=> string(6) "string" ["description"]=> string(22) "the application's slug" } ["containerId"]=> array(2) { ["type"]=> string(6) "string" ["description"]=> string(32) "the container id from list_tasks" } } ["required"]=> array(3) { [0]=> string(7) "orgSlug" [1]=> string(7) "appSlug" [2]=> string(11) "containerId" } } |
get_deployment_events
Description: Say why a revision rolled back or failed. The reply holds the status reason and the recorded failures, with the newest first. Each failure names the step that gave up (build, placement, deploy, runtime), its kind, and whose fault it is.
Handler: App\Mcp\Tool\DiagnosticsTool::getDeploymentEvents()
Parameters
| Name | Type | Required | Default | Description |
|---|---|---|---|---|
orgSlug |
string | Yes | - | the organization's slug |
appSlug |
string | Yes | - | the application's slug |
sequence |
integer | Yes | - | the revision's sequence number from list_deployments |
Full Schema
| array(3) { ["type"]=> string(6) "object" ["properties"]=> array(3) { ["orgSlug"]=> array(2) { ["type"]=> string(6) "string" ["description"]=> string(23) "the organization's slug" } ["appSlug"]=> array(2) { ["type"]=> string(6) "string" ["description"]=> string(22) "the application's slug" } ["sequence"]=> array(2) { ["type"]=> string(7) "integer" ["description"]=> string(52) "the revision's sequence number from list_deployments" } } ["required"]=> array(3) { [0]=> string(7) "orgSlug" [1]=> string(7) "appSlug" [2]=> string(8) "sequence" } } |
get_route_status
Description: Say what the router holds for one domain record. The reply names the deployment that the record targets, the router rules for its hostname, and the state of each container behind them. A record with a rule and no running container gives the router 404.
Handler: App\Mcp\Tool\DiagnosticsTool::getRouteStatus()
Parameters
| Name | Type | Required | Default | Description |
|---|---|---|---|---|
orgSlug |
string | Yes | - | the organization's slug |
domainId |
string | Yes | - | the domain's id from list_domains |
recordId |
string | Yes | - | the record's id from list_domain_records |
Full Schema
| array(3) { ["type"]=> string(6) "object" ["properties"]=> array(3) { ["orgSlug"]=> array(2) { ["type"]=> string(6) "string" ["description"]=> string(23) "the organization's slug" } ["domainId"]=> array(2) { ["type"]=> string(6) "string" ["description"]=> string(33) "the domain's id from list_domains" } ["recordId"]=> array(2) { ["type"]=> string(6) "string" ["description"]=> string(40) "the record's id from list_domain_records" } } ["required"]=> array(3) { [0]=> string(7) "orgSlug" [1]=> string(8) "domainId" [2]=> string(8) "recordId" } } |
dns_list_records
Description: List the DNS record sets of one zone, such as snarl.dev. Each row gives the name, the type, the TTL, the values, the source (pool, port, node, manual, api or mcp), the owner of a platform row, and its state: served, waiting or removing. A port row is the name and the SRV record of a service that publishes a port. A node row holds the addresses of a swarm. Only a platform ROLE_ADMIN can use this tool.
Handler: App\Mcp\Tool\DnsTool::dnsListRecords()
Parameters
| Name | Type | Required | Default | Description |
|---|---|---|---|---|
zone |
string | Yes | - | - |
Full Schema
| array(3) { ["type"]=> string(6) "object" ["properties"]=> array(1) { ["zone"]=> array(1) { ["type"]=> string(6) "string" } } ["required"]=> array(1) { [0]=> string(4) "zone" } } |
dns_set_record
Description: Make a DNS record set hold exactly the given values. Give the zone (one the platform serves, such as snarl.dev), the name before the zone (use @ for the zone itself), the type (A, AAAA, CNAME, SRV or TXT), the values, and a TTL in seconds (30 to 86400, default 600). An SRV value reads "priority weight port target". A name that the platform owns, or a CNAME that would share a name with another type, is refused with the reason. The zone is reconciled at once. Only a platform ROLE_ADMIN can use this tool.
Handler: App\Mcp\Tool\DnsTool::dnsSetRecord()
Parameters
| Name | Type | Required | Default | Description |
|---|---|---|---|---|
zone |
string | Yes | - | - |
name |
string | Yes | - | - |
type |
string | Yes | - | - |
values |
array | Yes | - | - |
ttl |
integer | No |
600
|
- |
Full Schema
| array(3) { ["type"]=> string(6) "object" ["properties"]=> array(5) { ["zone"]=> array(1) { ["type"]=> string(6) "string" } ["name"]=> array(1) { ["type"]=> string(6) "string" } ["type"]=> array(1) { ["type"]=> string(6) "string" } ["values"]=> array(2) { ["type"]=> string(5) "array" ["items"]=> object(stdClass)#2806 (0) { } } ["ttl"]=> array(2) { ["type"]=> string(7) "integer" ["default"]=> int(600) } } ["required"]=> array(4) { [0]=> string(4) "zone" [1]=> string(4) "name" [2]=> string(4) "type" [3]=> string(6) "values" } } |
dns_remove_record
Description: Remove a DNS record set. Give the zone, the name before the zone (@ for the zone itself), and the type. A record that the platform owns is refused with the reason. A set that is not there removes nothing. The zone is reconciled at once. Only a platform ROLE_ADMIN can use this tool.
Handler: App\Mcp\Tool\DnsTool::dnsRemoveRecord()
Parameters
| Name | Type | Required | Default | Description |
|---|---|---|---|---|
zone |
string | Yes | - | - |
name |
string | Yes | - | - |
type |
string | Yes | - | - |
Full Schema
| array(3) { ["type"]=> string(6) "object" ["properties"]=> array(3) { ["zone"]=> array(1) { ["type"]=> string(6) "string" } ["name"]=> array(1) { ["type"]=> string(6) "string" } ["type"]=> array(1) { ["type"]=> string(6) "string" } } ["required"]=> array(3) { [0]=> string(4) "zone" [1]=> string(4) "name" [2]=> string(4) "type" } } |
list_domains
Description: List the domains of an organization.
Handler: App\Mcp\Tool\DomainTool::listDomains()
Parameters
| Name | Type | Required | Default | Description |
|---|---|---|---|---|
orgSlug |
string | Yes | - | - |
Full Schema
| array(3) { ["type"]=> string(6) "object" ["properties"]=> array(1) { ["orgSlug"]=> array(1) { ["type"]=> string(6) "string" } } ["required"]=> array(1) { [0]=> string(7) "orgSlug" } } |
create_domain
Description: Claim a domain for the organization. You must have the owner or admin role. The tool fails if another organization already holds the domain.
Handler: App\Mcp\Tool\DomainTool::createDomain()
Parameters
| Name | Type | Required | Default | Description |
|---|---|---|---|---|
orgSlug |
string | Yes | - | the organization's slug |
name |
string | Yes | - | the domain name, for example "acme.com" |
Full Schema
| array(3) { ["type"]=> string(6) "object" ["properties"]=> array(2) { ["orgSlug"]=> array(2) { ["type"]=> string(6) "string" ["description"]=> string(23) "the organization's slug" } ["name"]=> array(2) { ["type"]=> string(6) "string" ["description"]=> string(39) "the domain name, for example "acme.com"" } } ["required"]=> array(2) { [0]=> string(7) "orgSlug" [1]=> string(4) "name" } } |
delete_domain
Description: Release a domain and every record in it. You must have the owner or admin role.
Handler: App\Mcp\Tool\DomainTool::deleteDomain()
Parameters
| Name | Type | Required | Default | Description |
|---|---|---|---|---|
orgSlug |
string | Yes | - | the organization's slug |
domainId |
string | Yes | - | the domain's id, from list_domains |
Full Schema
| array(3) { ["type"]=> string(6) "object" ["properties"]=> array(2) { ["orgSlug"]=> array(2) { ["type"]=> string(6) "string" ["description"]=> string(23) "the organization's slug" } ["domainId"]=> array(2) { ["type"]=> string(6) "string" ["description"]=> string(34) "the domain's id, from list_domains" } } ["required"]=> array(2) { [0]=> string(7) "orgSlug" [1]=> string(8) "domainId" } } |
list_domain_records
Description: List the records in one domain. Each record shows which application answers on which hostname.
Handler: App\Mcp\Tool\DomainTool::listDomainRecords()
Parameters
| Name | Type | Required | Default | Description |
|---|---|---|---|---|
orgSlug |
string | Yes | - | the organization's slug |
domainId |
string | Yes | - | the domain's id, from list_domains |
Full Schema
| array(3) { ["type"]=> string(6) "object" ["properties"]=> array(2) { ["orgSlug"]=> array(2) { ["type"]=> string(6) "string" ["description"]=> string(23) "the organization's slug" } ["domainId"]=> array(2) { ["type"]=> string(6) "string" ["description"]=> string(34) "the domain's id, from list_domains" } } ["required"]=> array(2) { [0]=> string(7) "orgSlug" [1]=> string(8) "domainId" } } |
set_domain_record
Description: Point a hostname at an application, and optionally at one deployment of it. It can also give each deployment its own subdomain of the hostname. If the record doesn't exist, the tool creates it. You must have the owner or admin role.
Handler: App\Mcp\Tool\DomainTool::setDomainRecord()
Parameters
| Name | Type | Required | Default | Description |
|---|---|---|---|---|
orgSlug |
string | Yes | - | the organization's slug |
domainId |
string | Yes | - | the domain's id, from list_domains |
subdomain |
string | Yes | - | the hostname label, for example "www", or "" for the apex |
appSlug |
string | Yes | - | the application's slug within this organization |
serviceName |
null|string | No |
|
the compose service to route to, when the application has more than one HTTP service. With null, the tool finds the service automatically |
deploymentName |
null|string | No |
|
the deployment that answers on the hostname, for example "production". Only that deployment's stack routes it, so a pull request preview of the same application doesn't. With null, every deployment of the application answers |
deploymentSubdomains |
boolean | No |
|
with true, each named deployment also answers one level down: "staging.app.acme.com" for the "staging" deployment of the record "app.acme.com". It needs a wildcard DNS record, "*.app.acme.com" |
Full Schema
| array(3) { ["type"]=> string(6) "object" ["properties"]=> array(7) { ["orgSlug"]=> array(2) { ["type"]=> string(6) "string" ["description"]=> string(23) "the organization's slug" } ["domainId"]=> array(2) { ["type"]=> string(6) "string" ["description"]=> string(34) "the domain's id, from list_domains" } ["subdomain"]=> array(2) { ["type"]=> string(6) "string" ["description"]=> string(57) "the hostname label, for example "www", or "" for the apex" } ["appSlug"]=> array(2) { ["type"]=> string(6) "string" ["description"]=> string(47) "the application's slug within this organization" } ["serviceName"]=> array(3) { ["type"]=> array(2) { [0]=> string(4) "null" [1]=> string(6) "string" } ["description"]=> string(137) "the compose service to route to, when the application has more than one HTTP service. With null, the tool finds the service automatically" ["default"]=> NULL } ["deploymentName"]=> array(3) { ["type"]=> array(2) { [0]=> string(4) "null" [1]=> string(6) "string" } ["description"]=> string(224) "the deployment that answers on the hostname, for example "production". Only that deployment's stack routes it, so a pull request preview of the same application doesn't. With null, every deployment of the application answers" ["default"]=> NULL } ["deploymentSubdomains"]=> array(3) { ["type"]=> string(7) "boolean" ["description"]=> string(192) "with true, each named deployment also answers one level down: "staging.app.acme.com" for the "staging" deployment of the record "app.acme.com". It needs a wildcard DNS record, "*.app.acme.com"" ["default"]=> bool(false) } } ["required"]=> array(4) { [0]=> string(7) "orgSlug" [1]=> string(8) "domainId" [2]=> string(9) "subdomain" [3]=> string(7) "appSlug" } } |
delete_domain_record
Description: Remove a domain record. You must have the owner or admin role.
Handler: App\Mcp\Tool\DomainTool::deleteDomainRecord()
Parameters
| Name | Type | Required | Default | Description |
|---|---|---|---|---|
orgSlug |
string | Yes | - | the organization's slug |
domainId |
string | Yes | - | the domain's id |
recordId |
string | Yes | - | the record's id, from list_domain_records |
Full Schema
| array(3) { ["type"]=> string(6) "object" ["properties"]=> array(3) { ["orgSlug"]=> array(2) { ["type"]=> string(6) "string" ["description"]=> string(23) "the organization's slug" } ["domainId"]=> array(2) { ["type"]=> string(6) "string" ["description"]=> string(15) "the domain's id" } ["recordId"]=> array(2) { ["type"]=> string(6) "string" ["description"]=> string(41) "the record's id, from list_domain_records" } } ["required"]=> array(3) { [0]=> string(7) "orgSlug" [1]=> string(8) "domainId" [2]=> string(8) "recordId" } } |
list_endpoints
Description: List the addresses an application answers on. Each row gives the hostname, the deployment and service it serves, and its kind: assigned, pool, custom_domain or published_port. routing_problem says why a row cannot answer now, or is null. last_check_at, status (up, degraded, down or gated) and uptime_24h come from the outside check, and are null when nothing checked the address in the last 15 minutes. A row with an https address also gives certificate: valid, the expires_at time and the days left in expires_in_days, and error, read from a live TLS handshake now. It is null for any other row. A published_port row on a pool domain also gives port_name: the DNS name that reaches the port, the SRV name that holds its port number, and whether the name resolves on IPv4 and on IPv6. It is null for any other row. Give deploymentName to find one preview or one deployment.
Handler: App\Mcp\Tool\EndpointTool::listEndpoints()
Parameters
| Name | Type | Required | Default | Description |
|---|---|---|---|---|
orgSlug |
string | Yes | - | the organization's slug |
appSlug |
string | Yes | - | the application's slug |
deploymentName |
null|string | No |
|
only this deployment name, such as a pull request preview. Omit it for every deployment on a swarm |
Full Schema
| array(3) { ["type"]=> string(6) "object" ["properties"]=> array(3) { ["orgSlug"]=> array(2) { ["type"]=> string(6) "string" ["description"]=> string(23) "the organization's slug" } ["appSlug"]=> array(2) { ["type"]=> string(6) "string" ["description"]=> string(22) "the application's slug" } ["deploymentName"]=> array(3) { ["type"]=> array(2) { [0]=> string(4) "null" [1]=> string(6) "string" } ["description"]=> string(98) "only this deployment name, such as a pull request preview. Omit it for every deployment on a swarm" ["default"]=> NULL } } ["required"]=> array(2) { [0]=> string(7) "orgSlug" [1]=> string(7) "appSlug" } } |
list_engines
Description: List the shared engines that create_service puts a database on, with the state of each. state is cold when no instance exists yet, then requested, deploying, healthchecking, serving, draining, retired or failed. A failed engine gives failure_reason. my_services counts the services of your organization on it. To start or retry a cold or failed engine, call warm_engine.
Handler: App\Mcp\Tool\EngineTool::listEngines()
Parameters
| Name | Type | Required | Default | Description |
|---|---|---|---|---|
orgSlug |
string | Yes | - | the organization's slug |
Full Schema
| array(3) { ["type"]=> string(6) "object" ["properties"]=> array(1) { ["orgSlug"]=> array(2) { ["type"]=> string(6) "string" ["description"]=> string(23) "the organization's slug" } } ["required"]=> array(1) { [0]=> string(7) "orgSlug" } } |
warm_engine
Description: Start a shared engine, or retry one that failed, so that create_service does not wait on it. Give the engine from list_engines, such as postgres:17. You must have the owner or admin role. The start runs in the background and can take minutes. Call list_engines to watch the state. It fails when the engine is not in the catalogue, or when it already serves.
Handler: App\Mcp\Tool\EngineTool::warmEngine()
Parameters
| Name | Type | Required | Default | Description |
|---|---|---|---|---|
orgSlug |
string | Yes | - | the organization's slug |
engine |
string | Yes | - | the catalogue entry as `<kind>:<version>`, from list_engines, for example `postgres:17` |
Full Schema
| array(3) { ["type"]=> string(6) "object" ["properties"]=> array(2) { ["orgSlug"]=> array(2) { ["type"]=> string(6) "string" ["description"]=> string(23) "the organization's slug" } ["engine"]=> array(2) { ["type"]=> string(6) "string" ["description"]=> string(87) "the catalogue entry as `<kind>:<version>`, from list_engines, for example `postgres:17`" } } ["required"]=> array(2) { [0]=> string(7) "orgSlug" [1]=> string(6) "engine" } } |
get_failure
Description: Read one failure of an application you can reach, with its full build log. Give the F-code from get_deployment_events. The reply holds the phase, the kind, whose fault it is, the reason, and the whole build log with no cut. The tool hides the values of sensitive variables. build_log is null, and build_log_note says why, when the failure has no log to show.
Handler: App\Mcp\Tool\FailureLogTool::getFailure()
Parameters
| Name | Type | Required | Default | Description |
|---|---|---|---|---|
reference |
string | Yes | - | an F-code, or the eight-character handle, from get_deployment_events or the failure page |
Full Schema
| array(3) { ["type"]=> string(6) "object" ["properties"]=> array(1) { ["reference"]=> array(2) { ["type"]=> string(6) "string" ["description"]=> string(88) "an F-code, or the eight-character handle, from get_deployment_events or the failure page" } } ["required"]=> array(1) { [0]=> string(9) "reference" } } |
failure_rollup
Description: Group recent failures into kinds, and split them by whose fault each one is. Each kind lists the references of its 5 newest failures. Pass one to failure_diagnose. The days argument is 7, 30, or 90. Other values give 30. The optional org_slug argument counts only the failures of that organization. Only a platform ROLE_ADMIN can use this tool.
Handler: App\Mcp\Tool\FailureTool::failureRollup()
Parameters
| Name | Type | Required | Default | Description |
|---|---|---|---|---|
days |
integer | No |
30
|
- |
org_slug |
null|string | No |
|
- |
Full Schema
| array(2) { ["type"]=> string(6) "object" ["properties"]=> array(2) { ["days"]=> array(2) { ["type"]=> string(7) "integer" ["default"]=> int(30) } ["org_slug"]=> array(2) { ["type"]=> array(2) { [0]=> string(4) "null" [1]=> string(6) "string" } ["default"]=> NULL } } } |
failure_diagnose
Description: Diagnose one Failure from its F-code, its eight-character handle, a /failures/{reference} link, or a /f/{token} share link. Only a platform ROLE_ADMIN can use this tool.
Handler: App\Mcp\Tool\FailureTool::failureDiagnose()
Parameters
| Name | Type | Required | Default | Description |
|---|---|---|---|---|
reference |
string | Yes | - | - |
Full Schema
| array(3) { ["type"]=> string(6) "object" ["properties"]=> array(1) { ["reference"]=> array(1) { ["type"]=> string(6) "string" } } ["required"]=> array(1) { [0]=> string(9) "reference" } } |
failure_acknowledge
Description: Mark failures as handled by a triage sweep, and link them to the tracker issue that covers them. Give a kind with the rollup until time, or give failure references, never both. A kind takes every untriaged failure of that kind in the window. It never changes a row that an earlier sweep marked. Set dry_run to see what it would mark and write nothing. Only a platform ROLE_ADMIN can use this tool.
Handler: App\Mcp\Tool\FailureTool::failureAcknowledge()
Parameters
| Name | Type | Required | Default | Description |
|---|---|---|---|---|
kind |
null|string | No |
|
- |
references |
array | No |
[]
|
F-codes, handles, `/failures/{reference}` links, or `/f/{token}` links |
issue |
null|integer | No |
|
- |
days |
integer | No |
30
|
- |
until |
null|string | No |
|
- |
dry_run |
boolean | No |
|
- |
Full Schema
| array(2) { ["type"]=> string(6) "object" ["properties"]=> array(6) { ["kind"]=> array(2) { ["type"]=> array(2) { [0]=> string(4) "null" [1]=> string(6) "string" } ["default"]=> NULL } ["references"]=> array(4) { ["type"]=> string(5) "array" ["description"]=> string(70) "F-codes, handles, `/failures/{reference}` links, or `/f/{token}` links" ["default"]=> array(0) { } ["items"]=> object(stdClass)#2824 (0) { } } ["issue"]=> array(2) { ["type"]=> array(2) { [0]=> string(4) "null" [1]=> string(7) "integer" } ["default"]=> NULL } ["days"]=> array(2) { ["type"]=> string(7) "integer" ["default"]=> int(30) } ["until"]=> array(2) { ["type"]=> array(2) { [0]=> string(4) "null" [1]=> string(6) "string" } ["default"]=> NULL } ["dry_run"]=> array(2) { ["type"]=> string(7) "boolean" ["default"]=> bool(false) } } } |
list_game_servers
Description: List the game servers of an organization, with the state of each one and the address that players connect to.
Handler: App\Mcp\Tool\GameServerTool::listGameServers()
Parameters
| Name | Type | Required | Default | Description |
|---|---|---|---|---|
orgSlug |
string | Yes | - | the organization's slug |
Full Schema
| array(3) { ["type"]=> string(6) "object" ["properties"]=> array(1) { ["orgSlug"]=> array(2) { ["type"]=> string(6) "string" ["description"]=> string(23) "the organization's slug" } } ["required"]=> array(1) { [0]=> string(7) "orgSlug" } } |
get_game_server
Description: Show one game server: its game, version, settings and state. A failed server also gives state_reason. The address is what players type in the game.
Handler: App\Mcp\Tool\GameServerTool::getGameServer()
Parameters
| Name | Type | Required | Default | Description |
|---|---|---|---|---|
orgSlug |
string | Yes | - | the organization's slug |
serverSlug |
string | Yes | - | the server's slug, from `list_game_servers` |
Full Schema
| array(3) { ["type"]=> string(6) "object" ["properties"]=> array(2) { ["orgSlug"]=> array(2) { ["type"]=> string(6) "string" ["description"]=> string(23) "the organization's slug" } ["serverSlug"]=> array(2) { ["type"]=> string(6) "string" ["description"]=> string(43) "the server's slug, from `list_game_servers`" } } ["required"]=> array(2) { [0]=> string(7) "orgSlug" [1]=> string(10) "serverSlug" } } |
create_game_server
Description: Create a game server for an organization. It starts stopped, so call start_game_server next. You must have the owner or admin role.
Handler: App\Mcp\Tool\GameServerTool::createGameServer()
Parameters
| Name | Type | Required | Default | Description |
|---|---|---|---|---|
orgSlug |
string | Yes | - | the organization's slug |
slug |
string | Yes | - | what the tenant will call it: lowercase letters, numbers and hyphens, unique within the organization |
name |
string | Yes | - | the display name |
game |
string | Yes | - | `minecraft`, `factorio`, `terraria`, `minecraft-bedrock` or `valheim` |
version |
string | No |
|
the game version. Omit it for the game's default |
settings |
array | No |
[]
|
the fields of the game's settings. A field left out takes its default |
volume |
string | No |
|
the slug of an unused volume. Omit it to make a new volume named like the server |
Full Schema
| array(3) { ["type"]=> string(6) "object" ["properties"]=> array(7) { ["orgSlug"]=> array(2) { ["type"]=> string(6) "string" ["description"]=> string(23) "the organization's slug" } ["slug"]=> array(2) { ["type"]=> string(6) "string" ["description"]=> string(100) "what the tenant will call it: lowercase letters, numbers and hyphens, unique within the organization" } ["name"]=> array(2) { ["type"]=> string(6) "string" ["description"]=> string(16) "the display name" } ["game"]=> array(2) { ["type"]=> string(6) "string" ["description"]=> string(69) "`minecraft`, `factorio`, `terraria`, `minecraft-bedrock` or `valheim`" } ["version"]=> array(3) { ["type"]=> string(6) "string" ["description"]=> string(48) "the game version. Omit it for the game's default" ["default"]=> string(0) "" } ["settings"]=> array(4) { ["type"]=> string(5) "array" ["description"]=> string(69) "the fields of the game's settings. A field left out takes its default" ["default"]=> array(0) { } ["items"]=> object(stdClass)#2809 (0) { } } ["volume"]=> array(3) { ["type"]=> string(6) "string" ["description"]=> string(80) "the slug of an unused volume. Omit it to make a new volume named like the server" ["default"]=> string(0) "" } } ["required"]=> array(4) { [0]=> string(7) "orgSlug" [1]=> string(4) "slug" [2]=> string(4) "name" [3]=> string(4) "game" } } |
start_game_server
Description: Start a stopped or failed game server. It returns at once with the state starting. Call get_game_server to see it become running. A zero credit balance refuses the start. You must have the owner or admin role.
Handler: App\Mcp\Tool\GameServerTool::startGameServer()
Parameters
| Name | Type | Required | Default | Description |
|---|---|---|---|---|
orgSlug |
string | Yes | - | - |
serverSlug |
string | Yes | - | - |
Full Schema
| array(3) { ["type"]=> string(6) "object" ["properties"]=> array(2) { ["orgSlug"]=> array(1) { ["type"]=> string(6) "string" } ["serverSlug"]=> array(1) { ["type"]=> string(6) "string" } } ["required"]=> array(2) { [0]=> string(7) "orgSlug" [1]=> string(10) "serverSlug" } } |
stop_game_server
Description: Stop a starting, running or failed game server. The world syncs to its volume first. A zero credit balance never refuses a stop. You must have the owner or admin role.
Handler: App\Mcp\Tool\GameServerTool::stopGameServer()
Parameters
| Name | Type | Required | Default | Description |
|---|---|---|---|---|
orgSlug |
string | Yes | - | - |
serverSlug |
string | Yes | - | - |
Full Schema
| array(3) { ["type"]=> string(6) "object" ["properties"]=> array(2) { ["orgSlug"]=> array(1) { ["type"]=> string(6) "string" } ["serverSlug"]=> array(1) { ["type"]=> string(6) "string" } } ["required"]=> array(2) { [0]=> string(7) "orgSlug" [1]=> string(10) "serverSlug" } } |
restart_game_server
Description: Restart a running or failed game server. You must have the owner or admin role.
Handler: App\Mcp\Tool\GameServerTool::restartGameServer()
Parameters
| Name | Type | Required | Default | Description |
|---|---|---|---|---|
orgSlug |
string | Yes | - | - |
serverSlug |
string | Yes | - | - |
Full Schema
| array(3) { ["type"]=> string(6) "object" ["properties"]=> array(2) { ["orgSlug"]=> array(1) { ["type"]=> string(6) "string" } ["serverSlug"]=> array(1) { ["type"]=> string(6) "string" } } ["required"]=> array(2) { [0]=> string(7) "orgSlug" [1]=> string(10) "serverSlug" } } |
send_game_server_command
Description: Send one console command to a running game server and return the reply of the game. The command runs with operator rights in the game. You must have the owner or admin role. A server that is not running, or a game with no console, gives an error.
Handler: App\Mcp\Tool\GameServerTool::sendGameServerCommand()
Parameters
| Name | Type | Required | Default | Description |
|---|---|---|---|---|
orgSlug |
string | Yes | - | - |
serverSlug |
string | Yes | - | - |
command |
string | Yes | - | the command as the game's console reads it, for example `say hello` for Minecraft |
Full Schema
| array(3) { ["type"]=> string(6) "object" ["properties"]=> array(3) { ["orgSlug"]=> array(1) { ["type"]=> string(6) "string" } ["serverSlug"]=> array(1) { ["type"]=> string(6) "string" } ["command"]=> array(2) { ["type"]=> string(6) "string" ["description"]=> string(81) "the command as the game's console reads it, for example `say hello` for Minecraft" } } ["required"]=> array(3) { [0]=> string(7) "orgSlug" [1]=> string(10) "serverSlug" [2]=> string(7) "command" } } |
list_game_server_players
Description: List the players that are online on a running game server. A server that is not running, or a game with no console, gives an error.
Handler: App\Mcp\Tool\GameServerTool::listGameServerPlayers()
Parameters
| Name | Type | Required | Default | Description |
|---|---|---|---|---|
orgSlug |
string | Yes | - | - |
serverSlug |
string | Yes | - | - |
Full Schema
| array(3) { ["type"]=> string(6) "object" ["properties"]=> array(2) { ["orgSlug"]=> array(1) { ["type"]=> string(6) "string" } ["serverSlug"]=> array(1) { ["type"]=> string(6) "string" } } ["required"]=> array(2) { [0]=> string(7) "orgSlug" [1]=> string(10) "serverSlug" } } |
get_application_health
Description: Say whether an application answers from outside. The reply gives the worst status of its addresses (up, degraded, down or gated), the time of the last change, the uptime over 24 hours, 7 days and 30 days, and the response time p50 and p95 over 24 hours. Each address repeats these figures and adds cause_hint: for a down address, the router problem, or the state of the tasks when none runs. incidents lists the down periods, newest first, and an open one has a null ended_at. Every figure is null when nothing checked the application in the last 15 minutes. Each address also gives certificate: valid, the expires_at time and the days left in expires_in_days, and error, read from a live TLS handshake now.
Handler: App\Mcp\Tool\HealthTool::getApplicationHealth()
Parameters
| Name | Type | Required | Default | Description |
|---|---|---|---|---|
orgSlug |
string | Yes | - | the organization's slug |
appSlug |
string | Yes | - | the application's slug |
Full Schema
| array(3) { ["type"]=> string(6) "object" ["properties"]=> array(2) { ["orgSlug"]=> array(2) { ["type"]=> string(6) "string" ["description"]=> string(23) "the organization's slug" } ["appSlug"]=> array(2) { ["type"]=> string(6) "string" ["description"]=> string(22) "the application's slug" } } ["required"]=> array(2) { [0]=> string(7) "orgSlug" [1]=> string(7) "appSlug" } } |
incident_list
Description: List the incidents that group related failures, open ones first and then the newest. Each row gives the reference, the title, the scope, the severity, the window, and how many failures it holds. Narrow it with status: open, resolved, or all. Only a platform ROLE_ADMIN can use this tool.
Handler: App\Mcp\Tool\IncidentTool::incidentList()
Parameters
| Name | Type | Required | Default | Description |
|---|---|---|---|---|
status |
string | No |
all
|
- |
limit |
integer | No |
25
|
- |
Full Schema
| array(2) { ["type"]=> string(6) "object" ["properties"]=> array(2) { ["status"]=> array(2) { ["type"]=> string(6) "string" ["default"]=> string(3) "all" } ["limit"]=> array(2) { ["type"]=> string(7) "integer" ["default"]=> int(25) } } } |
incident_get
Description: Read one incident in full, from its reference such as I-7QK2M9XA. It gives the window, the scope, and every failure that the incident holds, each with its phase, kind, fault, reason and subject. Only a platform ROLE_ADMIN can use this tool.
Handler: App\Mcp\Tool\IncidentTool::incidentGet()
Parameters
| Name | Type | Required | Default | Description |
|---|---|---|---|---|
reference |
string | Yes | - | - |
Full Schema
| array(3) { ["type"]=> string(6) "object" ["properties"]=> array(1) { ["reference"]=> array(1) { ["type"]=> string(6) "string" } } ["required"]=> array(1) { [0]=> string(9) "reference" } } |
incident_open
Description: Open an incident by hand, so that related failures can join it. Give a title, a scope (host, guest, swarm, application, or platform), the key of the thing in that scope, and a severity (minor, major, or critical). It posts one Telegram message when an operator has set up Telegram. Only a platform ROLE_ADMIN can use this tool.
Handler: App\Mcp\Tool\IncidentTool::incidentOpen()
Parameters
| Name | Type | Required | Default | Description |
|---|---|---|---|---|
title |
string | Yes | - | - |
scope |
string | Yes | - | - |
scope_key |
string | Yes | - | - |
severity |
string | No |
minor
|
- |
Full Schema
| array(3) { ["type"]=> string(6) "object" ["properties"]=> array(4) { ["title"]=> array(1) { ["type"]=> string(6) "string" } ["scope"]=> array(1) { ["type"]=> string(6) "string" } ["scope_key"]=> array(1) { ["type"]=> string(6) "string" } ["severity"]=> array(2) { ["type"]=> string(6) "string" ["default"]=> string(5) "minor" } } ["required"]=> array(3) { [0]=> string(5) "title" [1]=> string(5) "scope" [2]=> string(9) "scope_key" } } |
incident_attach
Description: Put failures in an incident, and pull its window out to cover them. Each failure is an F-code, a bare handle, a /failures/{reference} link, or a /f/{token} link. It writes nothing if any failure is unknown. A failure that another incident holds stays there unless move is true. Only a platform ROLE_ADMIN can use this tool.
Handler: App\Mcp\Tool\IncidentTool::incidentAttach()
Parameters
| Name | Type | Required | Default | Description |
|---|---|---|---|---|
reference |
string | Yes | - | - |
failures |
array | Yes | - | F-codes, handles, /failures/{reference} links, or /f/{token} links |
move |
boolean | No |
|
- |
Full Schema
| array(3) { ["type"]=> string(6) "object" ["properties"]=> array(3) { ["reference"]=> array(1) { ["type"]=> string(6) "string" } ["failures"]=> array(3) { ["type"]=> string(5) "array" ["description"]=> string(66) "F-codes, handles, /failures/{reference} links, or /f/{token} links" ["items"]=> object(stdClass)#2810 (0) { } } ["move"]=> array(2) { ["type"]=> string(7) "boolean" ["default"]=> bool(false) } } ["required"]=> array(2) { [0]=> string(9) "reference" [1]=> string(8) "failures" } } |
incident_resolve
Description: Close an incident. A repeat keeps the first close time and posts nothing. It posts one Telegram message when an operator has set up Telegram. Only a platform ROLE_ADMIN can use this tool.
Handler: App\Mcp\Tool\IncidentTool::incidentResolve()
Parameters
| Name | Type | Required | Default | Description |
|---|---|---|---|---|
reference |
string | Yes | - | - |
Full Schema
| array(3) { ["type"]=> string(6) "object" ["properties"]=> array(1) { ["reference"]=> array(1) { ["type"]=> string(6) "string" } } ["required"]=> array(1) { [0]=> string(9) "reference" } } |
incident_link_issue
Description: Record the tracker issue that covers an incident, from its reference such as I-7QK2M9XA and an issue number. A sweep calls it after it files the one issue of an incident, so that the next sweep finds the issue and files no second one. A later call replaces the number. Only a platform ROLE_ADMIN can use this tool.
Handler: App\Mcp\Tool\IncidentTool::incidentLinkIssue()
Parameters
| Name | Type | Required | Default | Description |
|---|---|---|---|---|
reference |
string | Yes | - | - |
issue |
integer | Yes | - | - |
Full Schema
| array(3) { ["type"]=> string(6) "object" ["properties"]=> array(2) { ["reference"]=> array(1) { ["type"]=> string(6) "string" } ["issue"]=> array(1) { ["type"]=> string(7) "integer" } } ["required"]=> array(2) { [0]=> string(9) "reference" [1]=> string(5) "issue" } } |
list_organizations
Description: List the organizations that the authenticated user belongs to, with the user's role in each.
Handler: App\Mcp\Tool\OrganizationTool::listOrganizations()
Parameters
| Name | Type | Required | Default | Description |
|---|
Full Schema
| array(2) { ["type"]=> string(6) "object" ["properties"]=> object(stdClass)#2825 (0) { } } |
platform_status
Description: Show each platform component and its health now. This is the detail behind /admin/status. Only a platform ROLE_ADMIN can use this tool.
Handler: App\Mcp\Tool\PlatformStatusTool::platformStatus()
Parameters
| Name | Type | Required | Default | Description |
|---|
Full Schema
| array(2) { ["type"]=> string(6) "object" ["properties"]=> object(stdClass)#2829 (0) { } } |
list_registry_credentials
Description: List the registry sign-ins of an organization. The tool returns only the server and the username. It never returns a password.
Handler: App\Mcp\Tool\RegistryCredentialTool::listRegistryCredentials()
Parameters
| Name | Type | Required | Default | Description |
|---|---|---|---|---|
orgSlug |
string | Yes | - | - |
Full Schema
| array(3) { ["type"]=> string(6) "object" ["properties"]=> array(1) { ["orgSlug"]=> array(1) { ["type"]=> string(6) "string" } } ["required"]=> array(1) { [0]=> string(7) "orgSlug" } } |
set_registry_credential
Description: Record a registry sign-in. If a sign-in for that server exists, the tool replaces its password. You must have the owner or admin role. The tool never returns the password.
Handler: App\Mcp\Tool\RegistryCredentialTool::setRegistryCredential()
Parameters
| Name | Type | Required | Default | Description |
|---|---|---|---|---|
orgSlug |
string | Yes | - | the organization's slug |
server |
string | Yes | - | the registry hostname as it appears in an image reference, for example "ghcr.io" |
username |
string | Yes | - | the registry username |
password |
string | Yes | - | the registry password or token, encrypted at rest and never read back |
Full Schema
| array(3) { ["type"]=> string(6) "object" ["properties"]=> array(4) { ["orgSlug"]=> array(2) { ["type"]=> string(6) "string" ["description"]=> string(23) "the organization's slug" } ["server"]=> array(2) { ["type"]=> string(6) "string" ["description"]=> string(80) "the registry hostname as it appears in an image reference, for example "ghcr.io"" } ["username"]=> array(2) { ["type"]=> string(6) "string" ["description"]=> string(21) "the registry username" } ["password"]=> array(2) { ["type"]=> string(6) "string" ["description"]=> string(69) "the registry password or token, encrypted at rest and never read back" } } ["required"]=> array(4) { [0]=> string(7) "orgSlug" [1]=> string(6) "server" [2]=> string(8) "username" [3]=> string(8) "password" } } |
delete_registry_credential
Description: Remove a registry sign-in. You must have the owner or admin role. Deployments that already run keep pulling images with the old sign-in. The next deploy is the first that can't use it.
Handler: App\Mcp\Tool\RegistryCredentialTool::deleteRegistryCredential()
Parameters
| Name | Type | Required | Default | Description |
|---|---|---|---|---|
orgSlug |
string | Yes | - | the organization's slug |
server |
string | Yes | - | the registry hostname to remove |
Full Schema
| array(3) { ["type"]=> string(6) "object" ["properties"]=> array(2) { ["orgSlug"]=> array(2) { ["type"]=> string(6) "string" ["description"]=> string(23) "the organization's slug" } ["server"]=> array(2) { ["type"]=> string(6) "string" ["description"]=> string(31) "the registry hostname to remove" } } ["required"]=> array(2) { [0]=> string(7) "orgSlug" [1]=> string(6) "server" } } |
test_registry_credential
Description: Pull one image with a stored registry sign-in, and say whether the registry accepted it. Give the server from list_registry_credentials and a private image on that server, such as ghcr.io/acme/app:1. You must have the owner or admin role. The pull runs on the build context, and a large image takes time. The reply has ok and, when it failed, the error of the registry. The tool never returns the password.
Handler: App\Mcp\Tool\RegistryCredentialTool::testRegistryCredential()
Parameters
| Name | Type | Required | Default | Description |
|---|---|---|---|---|
orgSlug |
string | Yes | - | the organization's slug |
server |
string | Yes | - | the registry hostname of a stored sign-in, from list_registry_credentials |
image |
string | Yes | - | a private image on that registry, spelled with the server first, for example "ghcr.io/acme/app:1" |
Full Schema
| array(3) { ["type"]=> string(6) "object" ["properties"]=> array(3) { ["orgSlug"]=> array(2) { ["type"]=> string(6) "string" ["description"]=> string(23) "the organization's slug" } ["server"]=> array(2) { ["type"]=> string(6) "string" ["description"]=> string(73) "the registry hostname of a stored sign-in, from list_registry_credentials" } ["image"]=> array(2) { ["type"]=> string(6) "string" ["description"]=> string(97) "a private image on that registry, spelled with the server first, for example "ghcr.io/acme/app:1"" } } ["required"]=> array(3) { [0]=> string(7) "orgSlug" [1]=> string(6) "server" [2]=> string(5) "image" } } |
list_registries
Description: List every registry that this feature created. Only a platform ROLE_ADMIN can use this tool. The list doesn't include the two fixed registries that existed before this feature, because they have no database row. See docs/registry.md and docs/pull-through-cache.md.
Handler: App\Mcp\Tool\RegistryTool::listRegistries()
Parameters
| Name | Type | Required | Default | Description |
|---|
Full Schema
| array(2) { ["type"]=> string(6) "object" ["properties"]=> object(stdClass)#2805 (0) { } } |
create_registry
Description: Create a new registry namespace. Only a platform ROLE_ADMIN can use this tool. The purpose sets a fixed retention preset, `tenant_build` or `ephemeral`. The tool returns only metadata. It doesn't make a client credential yet.
Handler: App\Mcp\Tool\RegistryTool::createRegistry()
Parameters
| Name | Type | Required | Default | Description |
|---|---|---|---|---|
name |
string | Yes | - | operator-facing name, for example "CI ephemeral images" |
purpose |
string | Yes | - | "tenant_build" (keep everything a Deployment might reference) or "ephemeral" (keep only the newest tags) |
description |
string | No |
|
optional note about what pushes and pulls here |
Full Schema
| array(3) { ["type"]=> string(6) "object" ["properties"]=> array(3) { ["name"]=> array(2) { ["type"]=> string(6) "string" ["description"]=> string(55) "operator-facing name, for example "CI ephemeral images"" } ["purpose"]=> array(2) { ["type"]=> string(6) "string" ["description"]=> string(104) ""tenant_build" (keep everything a Deployment might reference) or "ephemeral" (keep only the newest tags)" } ["description"]=> array(3) { ["type"]=> string(6) "string" ["description"]=> string(46) "optional note about what pushes and pulls here" ["default"]=> string(0) "" } } ["required"]=> array(2) { [0]=> string(4) "name" [1]=> string(7) "purpose" } } |
get_revision
Description: Read one revision as the platform holds it. The reply gives the compose as submitted, and beside it the stack: the digested form that the parser made from it, which is what builds and deploys. It also lists each service of the stack with its role (application, one-shot or sidecar), its last state, and the exit code of a one-shot that finished. The sidecar of a binding is in the list, and its container id works with get_task_logs. A deploy of the same content reuses the revision it made before, with its stack frozen at created_at, so compare created_at to the time you submitted. The tool hides the values of sensitive variables.
Handler: App\Mcp\Tool\RevisionTool::getRevision()
Parameters
| Name | Type | Required | Default | Description |
|---|---|---|---|---|
orgSlug |
string | Yes | - | the organization's slug |
appSlug |
string | Yes | - | the application's slug |
sequence |
integer | Yes | - | the revision's number from list_deployments |
Full Schema
| array(3) { ["type"]=> string(6) "object" ["properties"]=> array(3) { ["orgSlug"]=> array(2) { ["type"]=> string(6) "string" ["description"]=> string(23) "the organization's slug" } ["appSlug"]=> array(2) { ["type"]=> string(6) "string" ["description"]=> string(22) "the application's slug" } ["sequence"]=> array(2) { ["type"]=> string(7) "integer" ["description"]=> string(43) "the revision's number from list_deployments" } } ["required"]=> array(3) { [0]=> string(7) "orgSlug" [1]=> string(7) "appSlug" [2]=> string(8) "sequence" } } |
wait_for_revision
Description: Wait until a revision reaches an end state (running, failed, rolled_back, quarantined or cancelled), then return its status and the id of its newest failure, or null. The reply also names the phase now (queued, building, built, starting, then the end state) and each phase change that the call saw, so a long build does not look like a stall. The wait is at most 90 seconds, 60 by default. When the bound passes first, timed_out is true and status is the state now, so call again to keep waiting. The state built is not an end.
Handler: App\Mcp\Tool\RevisionTool::waitForRevision()
Parameters
| Name | Type | Required | Default | Description |
|---|---|---|---|---|
orgSlug |
string | Yes | - | the organization's slug |
appSlug |
string | Yes | - | the application's slug |
sequence |
integer | Yes | - | the revision's number from list_deployments |
timeoutSeconds |
integer | No |
60
|
how long to wait. At most {@see \self::MAX_WAIT_SECONDS} |
Full Schema
| array(3) { ["type"]=> string(6) "object" ["properties"]=> array(4) { ["orgSlug"]=> array(2) { ["type"]=> string(6) "string" ["description"]=> string(23) "the organization's slug" } ["appSlug"]=> array(2) { ["type"]=> string(6) "string" ["description"]=> string(22) "the application's slug" } ["sequence"]=> array(2) { ["type"]=> string(7) "integer" ["description"]=> string(43) "the revision's number from list_deployments" } ["timeoutSeconds"]=> array(3) { ["type"]=> string(7) "integer" ["description"]=> string(56) "how long to wait. At most {@see \self::MAX_WAIT_SECONDS}" ["default"]=> int(60) } } ["required"]=> array(3) { [0]=> string(7) "orgSlug" [1]=> string(7) "appSlug" [2]=> string(8) "sequence" } } |
list_service_engines
Description: List the database and bucket engines that this release offers, with the catalogue status of each.
Handler: App\Mcp\Tool\ServiceTool::listServiceEngines()
Parameters
| Name | Type | Required | Default | Description |
|---|
Full Schema
| array(2) { ["type"]=> string(6) "object" ["properties"]=> object(stdClass)#2803 (0) { } } |
list_services
Description: List the managed services (databases and buckets) of an organization, with the bindings of each one. Set includeRetired to also list the retired services that you can still restore.
Handler: App\Mcp\Tool\ServiceTool::listServices()
Parameters
| Name | Type | Required | Default | Description |
|---|---|---|---|---|
orgSlug |
string | Yes | - | the organization's slug |
includeRetired |
boolean | No |
|
also list the retired services that `restore_service` can still bring back. Each of those rows has `retired_at` and `restorable_until` |
Full Schema
| array(3) { ["type"]=> string(6) "object" ["properties"]=> array(2) { ["orgSlug"]=> array(2) { ["type"]=> string(6) "string" ["description"]=> string(23) "the organization's slug" } ["includeRetired"]=> array(3) { ["type"]=> string(7) "boolean" ["description"]=> string(134) "also list the retired services that `restore_service` can still bring back. Each of those rows has `retired_at` and `restorable_until`" ["default"]=> bool(false) } } ["required"]=> array(1) { [0]=> string(7) "orgSlug" } } |
get_service
Description: Show one managed service: its engine, its state, and the applications that it has bindings to. A failed service also gives failure_reason, the cause of the failure.
Handler: App\Mcp\Tool\ServiceTool::getService()
Parameters
| Name | Type | Required | Default | Description |
|---|---|---|---|---|
orgSlug |
string | Yes | - | the organization's slug |
serviceSlug |
string | Yes | - | the service's slug, from `list_services` |
Full Schema
| array(3) { ["type"]=> string(6) "object" ["properties"]=> array(2) { ["orgSlug"]=> array(2) { ["type"]=> string(6) "string" ["description"]=> string(23) "the organization's slug" } ["serviceSlug"]=> array(2) { ["type"]=> string(6) "string" ["description"]=> string(40) "the service's slug, from `list_services`" } } ["required"]=> array(2) { [0]=> string(7) "orgSlug" [1]=> string(11) "serviceSlug" } } |
create_service
Description: Create a managed database or bucket for an organization. You must have the owner or admin role. The tool warns you when the catalogue marks your engine as deprecated.
Handler: App\Mcp\Tool\ServiceTool::createService()
Parameters
| Name | Type | Required | Default | Description |
|---|---|---|---|---|
orgSlug |
string | Yes | - | the organization's slug |
slug |
string | Yes | - | what the tenant will call it: lowercase letters, numbers and hyphens, unique within the organization |
engine |
string | No |
|
the catalogue entry as `<kind>:<version>`, for example `postgres:17` or `mysql:8.0`. Omit it for this release's default choice |
Full Schema
| array(3) { ["type"]=> string(6) "object" ["properties"]=> array(3) { ["orgSlug"]=> array(2) { ["type"]=> string(6) "string" ["description"]=> string(23) "the organization's slug" } ["slug"]=> array(2) { ["type"]=> string(6) "string" ["description"]=> string(100) "what the tenant will call it: lowercase letters, numbers and hyphens, unique within the organization" } ["engine"]=> array(3) { ["type"]=> string(6) "string" ["description"]=> string(126) "the catalogue entry as `<kind>:<version>`, for example `postgres:17` or `mysql:8.0`. Omit it for this release's default choice" ["default"]=> string(0) "" } } ["required"]=> array(2) { [0]=> string(7) "orgSlug" [1]=> string(4) "slug" } } |
bind_service
Description: Bind a managed service to an application. The application gets the connection variables of the service on its next deploy. You must have the owner or admin role.
Handler: App\Mcp\Tool\ServiceTool::bindService()
Parameters
| Name | Type | Required | Default | Description |
|---|---|---|---|---|
orgSlug |
string | Yes | - | the organization's slug, which owns both ends |
serviceSlug |
string | Yes | - | the managed service to bind |
appSlug |
string | Yes | - | the application to bind it to |
Full Schema
| array(3) { ["type"]=> string(6) "object" ["properties"]=> array(3) { ["orgSlug"]=> array(2) { ["type"]=> string(6) "string" ["description"]=> string(45) "the organization's slug, which owns both ends" } ["serviceSlug"]=> array(2) { ["type"]=> string(6) "string" ["description"]=> string(27) "the managed service to bind" } ["appSlug"]=> array(2) { ["type"]=> string(6) "string" ["description"]=> string(29) "the application to bind it to" } } ["required"]=> array(3) { [0]=> string(7) "orgSlug" [1]=> string(11) "serviceSlug" [2]=> string(7) "appSlug" } } |
unbind_service
Description: Unbind a managed service from an application. The tool removes the permission and the variables that came with it. It doesn't touch the data. You must have the owner or admin role.
Handler: App\Mcp\Tool\ServiceTool::unbindService()
Parameters
| Name | Type | Required | Default | Description |
|---|---|---|---|---|
orgSlug |
string | Yes | - | the organization's slug |
serviceSlug |
string | Yes | - | the managed service to unbind |
appSlug |
string | Yes | - | the application to unbind it from |
Full Schema
| array(3) { ["type"]=> string(6) "object" ["properties"]=> array(3) { ["orgSlug"]=> array(2) { ["type"]=> string(6) "string" ["description"]=> string(23) "the organization's slug" } ["serviceSlug"]=> array(2) { ["type"]=> string(6) "string" ["description"]=> string(29) "the managed service to unbind" } ["appSlug"]=> array(2) { ["type"]=> string(6) "string" ["description"]=> string(33) "the application to unbind it from" } } ["required"]=> array(3) { [0]=> string(7) "orgSlug" [1]=> string(11) "serviceSlug" [2]=> string(7) "appSlug" } } |
destroy_service
Description: Retire a managed service. You must have the owner or admin role. The tool refuses while applications are still bound to the service, unless force is true. You can reverse it during the grace period. After that period, the platform drops the data.
Handler: App\Mcp\Tool\ServiceTool::destroyService()
Parameters
| Name | Type | Required | Default | Description |
|---|---|---|---|---|
orgSlug |
string | Yes | - | the organization's slug |
serviceSlug |
string | Yes | - | the managed service to retire |
force |
boolean | No |
|
retire it even though applications are still bound to it, cutting them off from it |
Full Schema
| array(3) { ["type"]=> string(6) "object" ["properties"]=> array(3) { ["orgSlug"]=> array(2) { ["type"]=> string(6) "string" ["description"]=> string(23) "the organization's slug" } ["serviceSlug"]=> array(2) { ["type"]=> string(6) "string" ["description"]=> string(29) "the managed service to retire" } ["force"]=> array(3) { ["type"]=> string(7) "boolean" ["description"]=> string(82) "retire it even though applications are still bound to it, cutting them off from it" ["default"]=> bool(false) } } ["required"]=> array(2) { [0]=> string(7) "orgSlug" [1]=> string(11) "serviceSlug" } } |
restore_service
Description: Restore a managed service that was retired, during its grace period. You must have the owner or admin role. The service gets back the state it had before it was retired. Applications that were bound to it are bound again.
Handler: App\Mcp\Tool\ServiceTool::restoreService()
Parameters
| Name | Type | Required | Default | Description |
|---|---|---|---|---|
orgSlug |
string | Yes | - | the organization's slug |
serviceSlug |
string | Yes | - | the retired service, from `list_services` with includeRetired set |
Full Schema
| array(3) { ["type"]=> string(6) "object" ["properties"]=> array(2) { ["orgSlug"]=> array(2) { ["type"]=> string(6) "string" ["description"]=> string(23) "the organization's slug" } ["serviceSlug"]=> array(2) { ["type"]=> string(6) "string" ["description"]=> string(65) "the retired service, from `list_services` with includeRetired set" } } ["required"]=> array(2) { [0]=> string(7) "orgSlug" [1]=> string(11) "serviceSlug" } } |
status_incident_list
Description: List the status incidents, the newest first. Each row gives the reference, the title, the component, the severity, the state, the audience, and the window. Narrow it with status: open, resolved, or all. Only a platform ROLE_ADMIN can use this tool.
Handler: App\Mcp\Tool\StatusIncidentTool::statusIncidentList()
Parameters
| Name | Type | Required | Default | Description |
|---|---|---|---|---|
status |
string | No |
all
|
- |
limit |
integer | No |
25
|
- |
Full Schema
| array(2) { ["type"]=> string(6) "object" ["properties"]=> array(2) { ["status"]=> array(2) { ["type"]=> string(6) "string" ["default"]=> string(3) "all" } ["limit"]=> array(2) { ["type"]=> string(7) "integer" ["default"]=> int(25) } } } |
status_incident_get
Description: Read one status incident in full, from its reference such as S-7QK20A91. It gives every update, oldest first, with its state, text, digest, author and trace, and the internal items that the incident stands for. Only a platform ROLE_ADMIN can use this tool.
Handler: App\Mcp\Tool\StatusIncidentTool::statusIncidentGet()
Parameters
| Name | Type | Required | Default | Description |
|---|---|---|---|---|
reference |
string | Yes | - | - |
Full Schema
| array(3) { ["type"]=> string(6) "object" ["properties"]=> array(1) { ["reference"]=> array(1) { ["type"]=> string(6) "string" } } ["required"]=> array(1) { [0]=> string(9) "reference" } } |
status_incident_open
Description: Open an anonymised status incident with its first update, at the state investigating. Give a generic title, a component (control-panel, deployments, hosting, live-updates, other, or platform), a severity (minor, major, or critical), the first update text, a digest of the internal state that the text describes, and the four trace fields. The text must name no organization, application, user, host, address, image, or internal code. A refusal names the check and never the text. The incident stays admin-only. Only a platform ROLE_ADMIN can use this tool.
Handler: App\Mcp\Tool\StatusIncidentTool::statusIncidentOpen()
Parameters
| Name | Type | Required | Default | Description |
|---|---|---|---|---|
title |
string | Yes | - | - |
component |
string | Yes | - | - |
body |
string | Yes | - | - |
digest |
string | Yes | - | - |
severity |
string | No |
minor
|
- |
sources |
array | No |
[]
|
internal items as kind:ref, with a kind of failure, incident, or issue |
issue |
null|integer | No |
|
- |
trace_skill |
null|string | No |
|
- |
trace_step |
null|string | No |
|
- |
trace_session |
null|string | No |
|
- |
trace_host |
null|string | No |
|
- |
author |
string | No |
skill
|
- |
Full Schema
| array(3) { ["type"]=> string(6) "object" ["properties"]=> array(12) { ["title"]=> array(1) { ["type"]=> string(6) "string" } ["component"]=> array(1) { ["type"]=> string(6) "string" } ["body"]=> array(1) { ["type"]=> string(6) "string" } ["digest"]=> array(1) { ["type"]=> string(6) "string" } ["severity"]=> array(2) { ["type"]=> string(6) "string" ["default"]=> string(5) "minor" } ["sources"]=> array(4) { ["type"]=> string(5) "array" ["description"]=> string(70) "internal items as kind:ref, with a kind of failure, incident, or issue" ["default"]=> array(0) { } ["items"]=> object(stdClass)#2800 (0) { } } ["issue"]=> array(2) { ["type"]=> array(2) { [0]=> string(4) "null" [1]=> string(7) "integer" } ["default"]=> NULL } ["trace_skill"]=> array(2) { ["type"]=> array(2) { [0]=> string(4) "null" [1]=> string(6) "string" } ["default"]=> NULL } ["trace_step"]=> array(2) { ["type"]=> array(2) { [0]=> string(4) "null" [1]=> string(6) "string" } ["default"]=> NULL } ["trace_session"]=> array(2) { ["type"]=> array(2) { [0]=> string(4) "null" [1]=> string(6) "string" } ["default"]=> NULL } ["trace_host"]=> array(2) { ["type"]=> array(2) { [0]=> string(4) "null" [1]=> string(6) "string" } ["default"]=> NULL } ["author"]=> array(2) { ["type"]=> string(6) "string" ["default"]=> string(5) "skill" } } ["required"]=> array(4) { [0]=> string(5) "title" [1]=> string(9) "component" [2]=> string(4) "body" [3]=> string(6) "digest" } } |
status_incident_update
Description: Add an update to an open status incident, at the state investigating, identified, or monitoring. Give the reference, the text, a digest, and the four trace fields. A digest equal to the newest update adds no row and the answer says unchanged. A resolved incident takes no update. A refusal names the check and never the text. Only a platform ROLE_ADMIN can use this tool.
Handler: App\Mcp\Tool\StatusIncidentTool::statusIncidentUpdate()
Parameters
| Name | Type | Required | Default | Description |
|---|---|---|---|---|
reference |
string | Yes | - | - |
state |
string | Yes | - | - |
body |
string | Yes | - | - |
digest |
string | Yes | - | - |
trace_skill |
null|string | No |
|
- |
trace_step |
null|string | No |
|
- |
trace_session |
null|string | No |
|
- |
trace_host |
null|string | No |
|
- |
author |
string | No |
skill
|
- |
Full Schema
| array(3) { ["type"]=> string(6) "object" ["properties"]=> array(9) { ["reference"]=> array(1) { ["type"]=> string(6) "string" } ["state"]=> array(1) { ["type"]=> string(6) "string" } ["body"]=> array(1) { ["type"]=> string(6) "string" } ["digest"]=> array(1) { ["type"]=> string(6) "string" } ["trace_skill"]=> array(2) { ["type"]=> array(2) { [0]=> string(4) "null" [1]=> string(6) "string" } ["default"]=> NULL } ["trace_step"]=> array(2) { ["type"]=> array(2) { [0]=> string(4) "null" [1]=> string(6) "string" } ["default"]=> NULL } ["trace_session"]=> array(2) { ["type"]=> array(2) { [0]=> string(4) "null" [1]=> string(6) "string" } ["default"]=> NULL } ["trace_host"]=> array(2) { ["type"]=> array(2) { [0]=> string(4) "null" [1]=> string(6) "string" } ["default"]=> NULL } ["author"]=> array(2) { ["type"]=> string(6) "string" ["default"]=> string(5) "skill" } } ["required"]=> array(4) { [0]=> string(9) "reference" [1]=> string(5) "state" [2]=> string(4) "body" [3]=> string(6) "digest" } } |
status_incident_close
Description: Close a status incident with a final update at the state resolved. Give the reference, the text, a digest, and the four trace fields. A resolved incident takes no more updates. A refusal names the check and never the text. Only a platform ROLE_ADMIN can use this tool.
Handler: App\Mcp\Tool\StatusIncidentTool::statusIncidentClose()
Parameters
| Name | Type | Required | Default | Description |
|---|---|---|---|---|
reference |
string | Yes | - | - |
body |
string | Yes | - | - |
digest |
string | Yes | - | - |
trace_skill |
null|string | No |
|
- |
trace_step |
null|string | No |
|
- |
trace_session |
null|string | No |
|
- |
trace_host |
null|string | No |
|
- |
author |
string | No |
skill
|
- |
Full Schema
| array(3) { ["type"]=> string(6) "object" ["properties"]=> array(8) { ["reference"]=> array(1) { ["type"]=> string(6) "string" } ["body"]=> array(1) { ["type"]=> string(6) "string" } ["digest"]=> array(1) { ["type"]=> string(6) "string" } ["trace_skill"]=> array(2) { ["type"]=> array(2) { [0]=> string(4) "null" [1]=> string(6) "string" } ["default"]=> NULL } ["trace_step"]=> array(2) { ["type"]=> array(2) { [0]=> string(4) "null" [1]=> string(6) "string" } ["default"]=> NULL } ["trace_session"]=> array(2) { ["type"]=> array(2) { [0]=> string(4) "null" [1]=> string(6) "string" } ["default"]=> NULL } ["trace_host"]=> array(2) { ["type"]=> array(2) { [0]=> string(4) "null" [1]=> string(6) "string" } ["default"]=> NULL } ["author"]=> array(2) { ["type"]=> string(6) "string" ["default"]=> string(5) "skill" } } ["required"]=> array(3) { [0]=> string(9) "reference" [1]=> string(4) "body" [2]=> string(6) "digest" } } |
failure_sweep_heartbeat
Description: Record that a failure triage sweep ran to its end, as the last step of the sweep. Run it for each environment you swept, also when the sweep found nothing. The status page reads it back. It writes the time of the environment clock and nothing else. Only a platform ROLE_ADMIN can use this tool.
Handler: App\Mcp\Tool\SweepTool::failureSweepHeartbeat()
Parameters
| Name | Type | Required | Default | Description |
|---|
Full Schema
| array(2) { ["type"]=> string(6) "object" ["properties"]=> object(stdClass)#2828 (0) { } } |
platform_build
Description: Show the build that this environment runs: its short git sha and the time of the build. A fix that merged after built_at is not in the running image. Only a platform ROLE_ADMIN can use this tool.
Handler: App\Mcp\Tool\SweepTool::platformBuild()
Parameters
| Name | Type | Required | Default | Description |
|---|
Full Schema
| array(2) { ["type"]=> string(6) "object" ["properties"]=> object(stdClass)#2802 (0) { } } |
list_tasks
Description: List the containers of an application. The one that started last comes first. Each state is the last state that the platform read from the swarm.
Handler: App\Mcp\Tool\TaskTool::listTasks()
Parameters
| Name | Type | Required | Default | Description |
|---|---|---|---|---|
orgSlug |
string | Yes | - | the organization's slug |
appSlug |
string | Yes | - | the application's slug |
Full Schema
| array(3) { ["type"]=> string(6) "object" ["properties"]=> array(2) { ["orgSlug"]=> array(2) { ["type"]=> string(6) "string" ["description"]=> string(23) "the organization's slug" } ["appSlug"]=> array(2) { ["type"]=> string(6) "string" ["description"]=> string(22) "the application's slug" } } ["required"]=> array(2) { [0]=> string(7) "orgSlug" [1]=> string(7) "appSlug" } } |
register_user
Description: Register a new user account and its personal organization. This is the same as the public sign-up form. A platform operator must approve the account before it can sign in.
Handler: App\Mcp\Tool\UserTool::registerUser()
Parameters
| Name | Type | Required | Default | Description |
|---|---|---|---|---|
email |
string | Yes | - | the new account's email address |
username |
null|string | No |
|
handle to sign in with. If you omit it, the tool makes one from the email |
displayName |
null|string | No |
|
how the user appears in the UI |
organizationName |
null|string | No |
|
name of the user's personal organization. The default is their display name or email |
password |
null|string | No |
|
local sign-in password. Omit it to create an account that signs in only with OAuth or a magic link |
Full Schema
| array(3) { ["type"]=> string(6) "object" ["properties"]=> array(5) { ["email"]=> array(2) { ["type"]=> string(6) "string" ["description"]=> string(31) "the new account's email address" } ["username"]=> array(3) { ["type"]=> array(2) { [0]=> string(4) "null" [1]=> string(6) "string" } ["description"]=> string(73) "handle to sign in with. If you omit it, the tool makes one from the email" ["default"]=> NULL } ["displayName"]=> array(3) { ["type"]=> array(2) { [0]=> string(4) "null" [1]=> string(6) "string" } ["description"]=> string(30) "how the user appears in the UI" ["default"]=> NULL } ["organizationName"]=> array(3) { ["type"]=> array(2) { [0]=> string(4) "null" [1]=> string(6) "string" } ["description"]=> string(84) "name of the user's personal organization. The default is their display name or email" ["default"]=> NULL } ["password"]=> array(3) { ["type"]=> array(2) { [0]=> string(4) "null" [1]=> string(6) "string" } ["description"]=> string(98) "local sign-in password. Omit it to create an account that signs in only with OAuth or a magic link" ["default"]=> NULL } } ["required"]=> array(1) { [0]=> string(5) "email" } } |
list_variables
Description: List the variables of an application. The tool returns only metadata. It never returns a value.
Handler: App\Mcp\Tool\VariableTool::listVariables()
Parameters
| Name | Type | Required | Default | Description |
|---|---|---|---|---|
orgSlug |
string | Yes | - | the organization's slug |
appSlug |
string | Yes | - | the application's slug |
Full Schema
| array(3) { ["type"]=> string(6) "object" ["properties"]=> array(2) { ["orgSlug"]=> array(2) { ["type"]=> string(6) "string" ["description"]=> string(23) "the organization's slug" } ["appSlug"]=> array(2) { ["type"]=> string(6) "string" ["description"]=> string(22) "the application's slug" } } ["required"]=> array(2) { [0]=> string(7) "orgSlug" [1]=> string(7) "appSlug" } } |
set_variable
Description: Give an application variable a value. If the variable doesn't exist, the tool creates it. You must have the owner or admin role. The tool never returns the value. Leave sensitive out and a name that looks secret (SECRET, TOKEN, PASSWORD, PASSWD, PRIVATE_KEY, API_KEY) is stored as a secret. Print the warnings field to the person: it tells them to rotate a value that an upgrade left in the clear in earlier versions.
Handler: App\Mcp\Tool\VariableTool::setVariable()
Parameters
| Name | Type | Required | Default | Description |
|---|---|---|---|---|
orgSlug |
string | Yes | - | the organization's slug |
appSlug |
string | Yes | - | the application's slug |
key |
string | Yes | - | the environment variable name: A-Z, 0-9 and underscores. It can't start with a digit |
value |
string | Yes | - | the value to store |
sensitive |
null|boolean | No |
|
true to encrypt the value at rest and never show it back. Leave it out and a name that holds SECRET, TOKEN, PASSWORD, PASSWD, PRIVATE_KEY or API_KEY becomes a secret. An explicit false stays false. Setting true on a plain variable upgrades it in place, and the earlier versions keep the old value in the clear |
orgShared |
boolean | No |
|
true to apply this variable to every application in the organization, not only this one |
secretFileDelivery |
boolean | No |
|
has an effect only when $sensitive is true. It delivers the value as a mounted secret file, plus a `<KEY>_FILE` env var that names its path, not as a plain env var. The tool reads it only when it creates the variable. A name that already exists keeps its first delivery mode. Leave it false unless the container can already read `<KEY>_FILE` in place of `KEY`. |
Full Schema
| array(3) { ["type"]=> string(6) "object" ["properties"]=> array(7) { ["orgSlug"]=> array(2) { ["type"]=> string(6) "string" ["description"]=> string(23) "the organization's slug" } ["appSlug"]=> array(2) { ["type"]=> string(6) "string" ["description"]=> string(22) "the application's slug" } ["key"]=> array(2) { ["type"]=> string(6) "string" ["description"]=> string(84) "the environment variable name: A-Z, 0-9 and underscores. It can't start with a digit" } ["value"]=> array(2) { ["type"]=> string(6) "string" ["description"]=> string(18) "the value to store" } ["sensitive"]=> array(3) { ["type"]=> array(2) { [0]=> string(4) "null" [1]=> string(7) "boolean" } ["description"]=> string(309) "true to encrypt the value at rest and never show it back. Leave it out and a name that holds SECRET, TOKEN, PASSWORD, PASSWD, PRIVATE_KEY or API_KEY becomes a secret. An explicit false stays false. Setting true on a plain variable upgrades it in place, and the earlier versions keep the old value in the clear" ["default"]=> NULL } ["orgShared"]=> array(3) { ["type"]=> string(7) "boolean" ["description"]=> string(87) "true to apply this variable to every application in the organization, not only this one" ["default"]=> bool(false) } ["secretFileDelivery"]=> array(3) { ["type"]=> string(7) "boolean" ["description"]=> string(360) "has an effect only when $sensitive is true. It delivers the value as a mounted secret file, plus a `<KEY>_FILE` env var that names its path, not as a plain env var. The tool reads it only when it creates the variable. A name that already exists keeps its first delivery mode. Leave it false unless the container can already read `<KEY>_FILE` in place of `KEY`." ["default"]=> bool(false) } } ["required"]=> array(4) { [0]=> string(7) "orgSlug" [1]=> string(7) "appSlug" [2]=> string(3) "key" [3]=> string(5) "value" } } |
delete_variable
Description: Remove a variable. This is a soft delete. If you give the same name a value again, the variable comes back. You must have the owner or admin role.
Handler: App\Mcp\Tool\VariableTool::deleteVariable()
Parameters
| Name | Type | Required | Default | Description |
|---|---|---|---|---|
orgSlug |
string | Yes | - | the organization's slug |
appSlug |
string | Yes | - | the application's slug |
key |
string | Yes | - | the variable name to remove |
orgShared |
boolean | No |
|
true if the variable to remove is organization-shared, not application-scoped |
Full Schema
| array(3) { ["type"]=> string(6) "object" ["properties"]=> array(4) { ["orgSlug"]=> array(2) { ["type"]=> string(6) "string" ["description"]=> string(23) "the organization's slug" } ["appSlug"]=> array(2) { ["type"]=> string(6) "string" ["description"]=> string(22) "the application's slug" } ["key"]=> array(2) { ["type"]=> string(6) "string" ["description"]=> string(27) "the variable name to remove" } ["orgShared"]=> array(3) { ["type"]=> string(7) "boolean" ["description"]=> string(77) "true if the variable to remove is organization-shared, not application-scoped" ["default"]=> bool(false) } } ["required"]=> array(3) { [0]=> string(7) "orgSlug" [1]=> string(7) "appSlug" [2]=> string(3) "key" } } |
list_volumes
Description: List the volumes of an organization: named S3 stores that a game server keeps its data in. Set includeRetired to also list the retired volumes that you can still restore.
Handler: App\Mcp\Tool\VolumeTool::listVolumes()
Parameters
| Name | Type | Required | Default | Description |
|---|---|---|---|---|
orgSlug |
string | Yes | - | the organization's slug |
includeRetired |
boolean | No |
|
also list the retired volumes that `restore_volume` can still bring back. Each of those rows has `retired_at` and `restorable_until` |
Full Schema
| array(3) { ["type"]=> string(6) "object" ["properties"]=> array(2) { ["orgSlug"]=> array(2) { ["type"]=> string(6) "string" ["description"]=> string(23) "the organization's slug" } ["includeRetired"]=> array(3) { ["type"]=> string(7) "boolean" ["description"]=> string(132) "also list the retired volumes that `restore_volume` can still bring back. Each of those rows has `retired_at` and `restorable_until`" ["default"]=> bool(false) } } ["required"]=> array(1) { [0]=> string(7) "orgSlug" } } |
get_volume
Description: Show one volume: its state and how much storage it uses. A failed volume also gives failure_reason, the cause of the failure. A volume has no restore points.
Handler: App\Mcp\Tool\VolumeTool::getVolume()
Parameters
| Name | Type | Required | Default | Description |
|---|---|---|---|---|
orgSlug |
string | Yes | - | the organization's slug |
volumeSlug |
string | Yes | - | the volume's slug, from `list_volumes` |
Full Schema
| array(3) { ["type"]=> string(6) "object" ["properties"]=> array(2) { ["orgSlug"]=> array(2) { ["type"]=> string(6) "string" ["description"]=> string(23) "the organization's slug" } ["volumeSlug"]=> array(2) { ["type"]=> string(6) "string" ["description"]=> string(38) "the volume's slug, from `list_volumes`" } } ["required"]=> array(2) { [0]=> string(7) "orgSlug" [1]=> string(10) "volumeSlug" } } |
create_volume
Description: Create a volume for an organization. You must have the owner or admin role. The organization pays for the storage that the volume uses.
Handler: App\Mcp\Tool\VolumeTool::createVolume()
Parameters
| Name | Type | Required | Default | Description |
|---|---|---|---|---|
orgSlug |
string | Yes | - | the organization's slug |
slug |
string | Yes | - | what the tenant will call it: lowercase letters, numbers and hyphens, up to 56 characters, unique among the organization's volumes |
Full Schema
| array(3) { ["type"]=> string(6) "object" ["properties"]=> array(2) { ["orgSlug"]=> array(2) { ["type"]=> string(6) "string" ["description"]=> string(23) "the organization's slug" } ["slug"]=> array(2) { ["type"]=> string(6) "string" ["description"]=> string(130) "what the tenant will call it: lowercase letters, numbers and hyphens, up to 56 characters, unique among the organization's volumes" } } ["required"]=> array(2) { [0]=> string(7) "orgSlug" [1]=> string(4) "slug" } } |
retire_volume
Description: Retire a volume. You must have the owner or admin role. Its data stays for the grace period, and restore_volume brings it back. After that period, the platform deletes the data.
Handler: App\Mcp\Tool\VolumeTool::retireVolume()
Parameters
| Name | Type | Required | Default | Description |
|---|---|---|---|---|
orgSlug |
string | Yes | - | the organization's slug |
volumeSlug |
string | Yes | - | the volume to retire |
Full Schema
| array(3) { ["type"]=> string(6) "object" ["properties"]=> array(2) { ["orgSlug"]=> array(2) { ["type"]=> string(6) "string" ["description"]=> string(23) "the organization's slug" } ["volumeSlug"]=> array(2) { ["type"]=> string(6) "string" ["description"]=> string(20) "the volume to retire" } } ["required"]=> array(2) { [0]=> string(7) "orgSlug" [1]=> string(10) "volumeSlug" } } |
restore_volume
Description: Restore a volume that was retired, during its grace period. You must have the owner or admin role. The volume gets back the state it had before it was retired.
Handler: App\Mcp\Tool\VolumeTool::restoreVolume()
Parameters
| Name | Type | Required | Default | Description |
|---|---|---|---|---|
orgSlug |
string | Yes | - | the organization's slug |
volumeSlug |
string | Yes | - | the retired volume, from `list_volumes` with includeRetired set |
Full Schema
| array(3) { ["type"]=> string(6) "object" ["properties"]=> array(2) { ["orgSlug"]=> array(2) { ["type"]=> string(6) "string" ["description"]=> string(23) "the organization's slug" } ["volumeSlug"]=> array(2) { ["type"]=> string(6) "string" ["description"]=> string(63) "the retired volume, from `list_volumes` with includeRetired set" } } ["required"]=> array(2) { [0]=> string(7) "orgSlug" [1]=> string(10) "volumeSlug" } } |
Prompts 0
No prompts were registered.
Resources 0
No resources were registered.
Resource Templates 0
No resource templates were registered.