Skip to main content
Glama

Create an application version

edgegap_create_app_version

Create a deployable application version from a container image, configure ports and resources, and optionally verify Edgegap can pull it so bad images fail before deployment.

Instructions

Register a container image as a deployable version of an application. The image must already be pushed to a registry that Edgegap can pull from (see edgegap_get_registry_credentials and edgegap_list_registry_tags). Resource units: 1024 cpu units = 1 vCPU; memory_mb must be at least 256 and at most double the cpu units. Set verify_image true on the first version so a bad image fails here rather than at deploy time. Refused, with nothing sent, for the "latest" or an empty docker tag (use a build ID so deployments are reproducible) and for a docker_image that also holds a registry host or tag. Env vars named like secrets (TOKEN, SECRET, PASSWORD, API_KEY…) are hidden in the dashboard. Images on registry.edgegap.com need no registry login: leave registry_username and registry_token out and the version gets the organization's own registry login (registry_profile "Edgegap"). When copying an existing version, copy only non-secret settings: the API returns "This value is set and encrypted" for its registry login and secret env values, and that placeholder is refused here.

Tool call template

Replace each placeholder with a value matching the input schema. Only required parameters are included; add optional parameters as needed.

{
  "id": 1,
  "jsonrpc": "2.0",
  "method": "tools/call",
  "params": {
    "arguments": {
      "application": "<application>",
      "name": "<name>",
      "docker_repository": "<docker_repository>",
      "docker_image": "<docker_image>",
      "docker_tag": "<docker_tag>",
      "cpu_units": "<cpu_units>",
      "memory_mb": "<memory_mb>",
      "ports": "<ports>"
    },
    "name": "edgegap_create_app_version"
  }
}

Input Schema

NameRequiredDescriptionDefault
envNoEnvironment variables injected into the container. Values are never echoed back.
nameYesVersion identifier, typically a build ID or timestamp.
portsYesPorts to expose. At least one is required for players to connect.
dry_runNoShow the exact request (method, host, path, body) with secrets masked, and send nothing. Local checks still run. Use it to confirm a billable or destructive call before making it.
cpu_unitsYesvCPU units. 1024 = 1 vCPU.
memory_mbYesMemory in MB. At most 2x cpu_units.
docker_tagYesImage tag: a build ID, commit SHA or timestamp. "latest" and empty tags are refused.
applicationYesExisting application name.
docker_imageYesNamespaced image, e.g. "mystudio/game-server".
verify_imageNoVerify Edgegap can pull the image before accepting the version.
registry_tokenNoRegistry password or token.
restart_policyNoWhat Edgegap does when the server process exits. "never" for match servers that stop themselves (an exit or crash ends the deployment instead of restarting a half-played match); "on_failure" restarts only after a crash (persistent servers); "always" (the API default) restarts after any exit.
endpoint_storageNoEndpoint Storage name (edgegap_list_endpoint_storage) to export container logs to when deployments end.
docker_repositoryYesRegistry host, e.g. "docker.io" or "registry.edgegap.com".
registry_usernameNoRegistry username, for private images on other registries (Docker Hub, GHCR, ECR...). Leave it out for registry.edgegap.com: Edgegap then pulls with the organization's own registry login (registry_profile "Edgegap").
max_duration_minutesNoAuto-stop after this many minutes. Keeps test deployments from running up cost.

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed1 schema field changedv0.17.0
    • changedInput schema / properties / registry_username / description
      Previous value: -"Registry username. Needed for private images, including images in your own registry.edgegap.com project: Edgegap pulls with this login, not your API token."New value: +"Registry username, for private images on other registries (Docker Hub, GHCR, ECR...). Leave it out for registry.edgegap.com: Edgegap then pulls with the organization's own registry login (registry_profile \"Edgegap\")."
  2. Changed1 schema field changedv0.16.0
    • addedInput schema / properties / restart_policy
      Added value: +{
      +  "description": "What Edgegap does when the server process exits. \"never\" for match servers that stop themselves (an exit or crash ends the deployment instead of restarting a half-played match); \"on_failure\" restarts only after a crash (persistent servers); \"always\" (the API default) restarts after any exit.",
      +  "enum": [
      +    "never",
      +    "on_failure",
      +    "always"
      +  ],
      +  "type": "string"
      +}
  3. Changed1 schema field changedv0.15.1
    • addedInput schema / properties / endpoint_storage
      Added value: +{
      +  "description": "Endpoint Storage name (edgegap_list_endpoint_storage) to export container logs to when deployments end.",
      +  "minLength": 1,
      +  "type": "string"
      +}
  4. Changed1 schema field changedv0.7.1
    • changedInput schema / properties / docker_tag / description
      Previous value: -"Image tag. Use a build ID, not \"latest\"."New value: +"Image tag: a build ID, commit SHA or timestamp. \"latest\" and empty tags are refused."
  5. Changed4 schema fields changedv0.5.2
    • addedInput schema / properties / dry_run
      Added value: +{
      +  "description": "Show the exact request (method, host, path, body) with secrets masked, and send nothing. Local checks still run. Use it to confirm a billable or destructive call before making it.",
      +  "type": "boolean"
      +}
    • changedInput schema / properties / env / description
      Previous value: -"Environment variables injected into the container."New value: +"Environment variables injected into the container. Values are never echoed back."
    • addedInput schema / properties / ports / items / properties / tls_upgrade
      Added value: +{
      +  "description": "Edgegap terminates TLS on this port, so clients connect with wss:// or https://. Required for browser (WebGL) clients, which cannot use plain ws:// from an https page. WS and HTTP ports only. Default false.",
      +  "type": "boolean"
      +}
    • changedInput schema / properties / registry_username / description
      Previous value: -"Registry username, for private images."New value: +"Registry username. Needed for private images, including images in your own registry.edgegap.com project: Edgegap pulls with this login, not your API token."
  6. Changed1 schema field changedv0.2.0
    • changedInput schema / properties / ports / items / properties / protocol / description
      Previous value: -"UDP, TCP, WS, or HTTP. Most game servers use UDP."New value: +"One of UDP, TCP, TCP/UDP, HTTP, HTTPS, WS, WSS. Most game servers use UDP."
  7. First observedv0.1.2

TDQS

A4.5/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The annotations only mark this as non-idempotent, non-destructive and open-world, but the description adds substantial behavior beyond them: specific rejection rules ("latest" or empty docker tag, docker_image containing a registry host or tag), the fact that secret-like env vars are hidden in the dashboard, that env values are never echoed, and that copying a version's encrypted placeholders is refused. These are exactly the non-obvious failure modes an agent needs.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The core action is front-loaded, and the dense validation guidance is packed into three long but information-bearing sentences. A few clauses restate schema constraints (1024 cpu units = 1 vCPU, memory_mb max 2x cpu_units, latest-tag refusal), which is redundant given 100% schema coverage.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a 16-parameter creation tool with no output schema, the description covers registry auth, image verification, secret handling, and refusal conditions thoroughly. What it omits is success behavior — nothing about what the created version returns or how to confirm it (e.g., via edgegap_get_app_version).

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so a baseline of 3 already applies, and the description layers on extra meaning: it explains why docker_tag should be a build ID (reproducibility), and that leaving registry_username/registry_token out on registry.edgegap.com yields the org's own registry login (registry_profile "Edgegap"). Some of it repeats schema text (cpu/memory constraints, latest-tag refusal), so it is not a full 5.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

Opens with a specific verb and resource: "Register a container image as a deployable version of an application." That distinguishes it from edgegap_update_app_version and edgegap_create_app without the agent needing to open any schema, and it names the target object of the operation precisely.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives concrete when-to guidance: set verify_image true on the first version so bad images fail here rather than at deploy time, and omit registry credentials for registry.edgegap.com images. It also routes the agent to edgegap_get_registry_credentials and edgegap_list_registry_tags for prerequisites. It does not explicitly say when to prefer edgegap_update_app_version over this tool, which keeps it below a 5.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.