Skip to main content
Glama

Update an application version

edgegap_update_app_version
Idempotent

Update an existing Edgegap app version's image tag, active status, resources, ports, env vars, registry login, caching, restart policy, or shutdown grace period without creating a new version.

Instructions

Change settings on an existing version instead of creating a new one: point it at a new image tag, turn it on or off, change max_duration, set the registry login (the API cannot add registry_profile "Edgegap" to an existing version: create a new version for that), turn on image caching (force_cache: Edgegap pre-loads the image so deployments start faster), set the restart policy, or set the shutdown grace period. Only the fields you pass change. Deployments already running keep their old settings; new deployments get the new ones. Same refusals as edgegap_create_app_version: "latest" or empty tags, a docker_image holding a host or tag, and the API token in the registry login or env vars. ports and env REPLACE the version's whole list (per the API): read the current ones with edgegap_get_app_version and pass every port or variable to keep; secret env values are not readable, so get them from the developer. Refused, with nothing sent, for a registry login or env value equal to the API's "This value is set and encrypted" placeholder; leave the registry login out to keep it. cpu_units and memory_mb change together (both or neither); to try other resources for one deployment only, override them in edgegap_deploy instead.

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>",
      "version": "<version>"
    },
    "name": "edgegap_update_app_version"
  }
}

Input Schema

NameRequiredDescriptionDefault
envNoREPLACES every env var on the version; [] removes them all. Values are never echoed back.
portsNoREPLACES every port on the version. Include the ports to keep, not only new ones.
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.
versionYesVersion name to change.
cpu_unitsNoNew vCPU units for later deployments, with memory_mb. 1024 = 1 vCPU.
is_activeNofalse blocks new deployments of this version.
memory_mbNoNew memory in MB for later deployments, with cpu_units. At most 2x cpu_units.
docker_tagNoNew image tag: a build ID, commit SHA or timestamp.
applicationYesApplication name.
force_cacheNoPre-load the image on Edgegap so deployments start faster.
docker_imageNoImage path, e.g. "my-org-abc123/my-game-server".
verify_imageNoCheck Edgegap can pull the image when saving.
registry_tokenNoRegistry password or token. Never echoed back.
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_repositoryNoRegistry host, e.g. "registry.edgegap.com".
registry_usernameNo
max_duration_minutesNoAuto-stop after this many minutes. Capped by EDGEGAP_MAX_DURATION_MINUTES.
termination_grace_period_secondsNoSeconds between SIGTERM and SIGKILL when a deployment stops.

Schema Changelog

Changes observed during successful MCP inspections.

  1. 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"
      +}
  2. Changed3 schema fields changedv0.15.1
    • addedInput schema / properties / cpu_units
      Added value: +{
      +  "description": "New vCPU units for later deployments, with memory_mb. 1024 = 1 vCPU.",
      +  "maximum": 9007199254740991,
      +  "minimum": 256,
      +  "type": "integer"
      +}
    • 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"
      +}
    • addedInput schema / properties / memory_mb
      Added value: +{
      +  "description": "New memory in MB for later deployments, with cpu_units. At most 2x cpu_units.",
      +  "maximum": 9007199254740991,
      +  "minimum": 256,
      +  "type": "integer"
      +}
  3. Changed2 schema fields changedv0.12.0
    • addedInput schema / properties / env
      Added value: +{
      +  "description": "REPLACES every env var on the version; [] removes them all. Values are never echoed back.",
      +  "items": {
      +    "properties": {
      +      "key": {
      +        "type": "string"
      +      },
      +      "value": {
      +        "type": "string"
      +      }
      +    },
      +    "required": [
      +      "key",
      +      "value"
      +    ],
      +    "type": "object"
      +  },
      +  "type": "array"
      +}
    • addedInput schema / properties / ports
      Added value: +{
      +  "description": "REPLACES every port on the version. Include the ports to keep, not only new ones.",
      +  "items": {
      +    "properties": {
      +      "name": {
      +        "description": "Label, e.g. \"gameport\".",
      +        "type": "string"
      +      },
      +      "port": {
      +        "description": "Port the server listens on.",
      +        "maximum": 59999,
      +        "minimum": 1,
      +        "type": "integer"
      +      },
      +      "protocol": {
      +        "description": "One of UDP, TCP, TCP/UDP, HTTP, HTTPS, WS, WSS. Most game servers use UDP.",
      +        "type": "string"
      +      },
      +      "tls_upgrade": {
      +        "description": "wss:// / https:// for browser clients. WS and HTTP ports only.",
      +        "type": "boolean"
      +      },
      +      "to_check": {
      +        "description": "Readiness check on this port. Default true.",
      +        "type": "boolean"
      +      }
      +    },
      +    "required": [
      +      "port",
      +      "protocol"
      +    ],
      +    "type": "object"
      +  },
      +  "minItems": 1,
      +  "type": "array"
      +}
  4. Addedv0.7.1

TDQS

A4.7/5.0
Behavior5/5

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

Beyond the annotations, it discloses that only passed fields change, that running deployments keep old settings while new ones get the new settings, that ports/env are whole-list replacements, that secret env values are unreadable, and that requests are refused outright for reserved tags, host/tag-bearing docker_image, API token exposure, and the encryption placeholder. This is unusually rich side-effect and failure-mode disclosure for a mutation tool. One caveat: annotations say destructiveHint=false while the description warns of list replacement, but the description's warning mitigates rather than contradicts the annotation.

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 and the 'only passed fields change' guarantee are front-loaded, and every clause carries information. It is dense and parenthetical-heavy (one very long opening sentence), which costs some readability, but there is no filler or restatement of the name.

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 19-parameter mutation tool with no output schema, the description covers replacement semantics, side effects on live deployments, refusal cases, and the paired-resource constraint. It does not address return values or pagination-style concerns, but with 95% schema coverage the remaining gaps are minor.

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 95%, so the baseline is 3, and the description goes further by explaining constraints the schema does not: cpu_units and memory_mb must change together, registry_profile cannot be added to an existing version, empty/"latest" tags are refused, and leaving the registry login out preserves it. It adds meaningful cross-parameter and refusal semantics rather than restating field docs.

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+resource framing: 'Change settings on an existing version instead of creating a new one', which immediately separates it from edgegap_create_app_version and edgegap_get_app_version. It then enumerates the concrete fields that can be changed, so an agent knows the exact scope without opening the schema.

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

Usage Guidelines5/5

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

Explicitly states the when (mutate an existing version rather than create), names the alternative for the excluded case (registry_profile "Edgegap" requires creating a new version), routes the agent to edgegap_get_app_version to read current ports/env, and to edgegap_deploy for one-off resource overrides. Both 'use this' and 'use something else instead' conditions are present.

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