GET https://staging.someones.computer/dashboard

MCP Capabilities

Server someones_computer

87 Tools
0 Prompts
0 Resources
0 Resource Templates

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)#2482 (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)#2464 (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)#2479 (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)#2466 (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)#2420 (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)#2816 (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)#2820 (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)#2815 (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)#2814 (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)#2822 (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)#2821 (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)#2818 (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.