Edgegap MCP Server
OfficialClick on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@Edgegap MCP ServerDeploy my game server container on Edgegap near Frankfurt and give me the connection address."
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
edgegap-mcp
An MCP server that lets a coding agent take a developer from "I have a game server container" to "players are connected to it" without the developer reading the API reference.
Ten tools, hand-picked. Not generated from the OpenAPI spec — see Scope for why.
Install
One line in your MCP client config. Nothing to clone, nothing to build.
{
"mcpServers": {
"edgegap": {
"command": "npx",
"args": ["-y", "@edgegap/mcp"]
}
}
}Works in Claude Code, Cursor, Codex, and VS Code. Pin a version in production
(@edgegap/mcp@0.1.0) rather than floating on latest.
Node version: the server itself needs Node 18+. Deploying the optional Cloudflare Worker needs Node 22+, because
wranglerrequires it.
Related MCP server: antics-mcp
Your token never leaves your machine
There is no Edgegap-hosted component. This server runs as a process on your own computer, spawned by your editor. The first tool call asks you for a token, shows what it authorises, and requires an explicit acknowledgement before accepting it. Where that token then lives, exhaustively:
one variable in that process's memory, for the life of your editor session
That is the whole list. Not on disk. Not in a config file. Not in logs. Not on
any Edgegap server — the only thing sent to Edgegap is the API call itself,
exactly as if you had run curl. Closing your editor revokes this server's
access completely.
Generate a token at https://app.edgegap.com/user-settings?tab=tokens.
Setting EDGEGAP_API_TOKEN still works and takes precedence, for CI and for
clients that cannot show prompts. Do not pass a token as a command-line
argument — arguments are visible to other processes via ps, and the server
warns if it detects one.
Why this is not hosted. A hosted server would have to either store your
token or receive it on every request. "We don't store it" and "we never see it"
are different claims, and only a local process makes the second one. See
worker/DECISION.md for the full reasoning and the conditions under which a
hosted version becomes worth building.
Read this before connecting an agent
The Edgegap API token cannot be scoped. One token authorises every application, every version, every running deployment, and your usage across the whole organization. There is no deploy-only token and no per-application token.
Consequences worth being deliberate about:
An agent holding this token can stop production deployments, not just the test ones it created.
Prompt injection reaching the agent — from a repo file, an issue, a fetched page — reaches the token too.
Anything the agent logs, echoes, or sends to a model provider is a place the token could end up. This server does not log it, but it cannot control what the rest of the agent does.
Recommended setup, in decreasing order of caution:
Situation | Setup |
Unattended or autonomous agent | Separate non-production organization, plus |
Supervised agent, live game in the org |
|
Solo developer, no production workload | Defaults are fine; revoke the token when finished |
The allowlist and read-only flag are enforced in this server, which means they protect against an agent that makes a mistake, not against one that has been compromised into calling the API directly. They narrow the blast radius; they do not remove it.
Environment variables
Variable | Default | Purpose |
| (prompted) | API token. Optional — omit it and the developer is asked at first use. The |
|
| Set to |
| (empty) | Comma-separated application names. When set, every tool refuses to touch anything else. |
|
| Ceiling on |
|
| Per-request HTTP timeout. |
The ten tools
Ordered along the golden path.
# | Tool | Mutating | What it's for |
1 |
| Orient before doing anything. Prevents duplicate applications. | |
2 |
| ● | Create the container for versions. |
3 |
| Find a deployable version, or copy settings from a working one. | |
4 |
| ● | Register a container image with CPU, memory, and ports. |
5 |
| ● | Start one instance near specified players. |
6 |
| Single status read. | |
7 |
| Poll to ready with backoff, then return the connection address. | |
8 |
| Find orphaned servers from earlier sessions. | |
9 |
| ● | Graceful SIGTERM, one deployment at a time. |
10 |
| Container output and crash exit code after a failure. |
Design decisions
Curated, not generated. The Edgegap API has roughly sixty operations. Auto-generating one tool per operation puts all sixty descriptions into the agent's context on every turn and measurably degrades tool selection. These ten cover the path that converts a new developer.
wait_for_deployment is a tool, not a loop. Left to itself an agent will
call a status endpoint in a tight loop, burn turns, and give up early. Folding
the polling and backoff into one call removes the most common failure in
agent-driven deploys.
Errors are written for self-correction. A 424 comes back saying the image could not be pulled and which fields to check. A 422 says to try different coordinates or lower the resource request. The agent can act on these without a round trip to the human.
Local validation before the wire. The memory-to-CPU ratio and the missing player location are caught here rather than surfacing as an opaque 400.
Bulk operations are deliberately absent. stop takes one request_id.
There is no bulk-stop tool, because an agent with a filter expression and a bug
can stop a production fleet.
Scope
Not exposed, on purpose: matchmaking, relays, private fleets, smart fleets, endpoint storage, ACL/whitelist entries, deployment tags, metrics, container registry management, DNS configuration.
These are real capabilities, but they belong to studios already operating on the platform, not to a developer deploying their first server. Adding them would trade the conversion path for surface area.
Known limitation: asking for the token at all
The MCP specification says servers should not use elicitation to collect sensitive data, and an API token is sensitive. This server does it anyway, because requiring a token in a config file before anything works is the largest drop in the onboarding funnel, and the whole point of the server is to remove setup friction.
That is a deliberate trade rather than a pattern to copy. What makes it
defensible is the set of mitigations in src/auth.ts — memory-only storage,
plain-language disclosure, required acknowledgement, redaction from all output,
and the environment variable always winning when present. Removing any of them
breaks the trade.
The real fix is on Edgegap's side: scoped, revocable, deploy-only credentials, issued through OAuth rather than pasted as a secret. Until those exist, the interactive prompt is a workaround and is labelled as one in the code.
Development
npm run typecheck
node smoke.mjs # handshake, tool registration, read-only mode
node guards.mjs # local validation and allowlist enforcement
node elicit.mjs # token prompt: accept, refuse acknowledgement, decline, no supportNone of these make network calls. elicit.mjs asserts that the prompt states
the org-wide scope, that the acknowledgement is required, that the token never
appears in tool output, and that declining produces a stop-and-report message
rather than a retry loop.
Available Tools
10 toolsedgegap_create_appCreate an Edgegap applicationAInspect
Create a new application to hold game server versions. Only call this after edgegap_list_apps confirms no suitable application exists. Creating an application does not deploy anything — follow with edgegap_create_app_version.
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | Application name, 3-64 chars. Usually the game or project name. | |
| is_active | No | Whether deployments are allowed. Default true. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare destructiveHint=false and idempotentHint=false; the description adds that creating an application does not deploy anything, which is crucial behavioral context. It also implies a non-destructive nature but avoids repeating annotation-mandated details. This goes beyond annotations by clarifying the tool's limited scope.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is only two sentences long, with the essential action front-loaded and the critical usage condition immediately following. Every word adds value, and the structure is efficient without redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given that the tool has a simple schema with two simple parameters, full schema coverage, and no output schema, the description provides sufficient information for correct invocation. It lacks details on default behavior for is_active, but the schema covers that. The main gap is not specifying what the response looks like, but since there's no output schema, it's not mandatory. Overall, it's complete enough for its complexity.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so both parameters are fully described in the schema. The description does not add extra parameter-level detail beyond what the schema provides, aligning with the baseline of 3. It doesn't repeat parameter names, but it also doesn't offer additional context like naming conventions beyond the schema's note.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool creates a new application to hold game server versions, distinguishing it from related operations like creating an app version. However, it doesn't explicitly mention that it's creating the top-level container versus other resource types, but the verb 'create' and resource 'application' are specific enough. It could more strongly differentiate from edgegap_create_app_version, but the follow-up note implicitly does so.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly instructs to call this only after confirming no suitable application exists via edgegap_list_apps, and it tells the user to follow with edgegap_create_app_version. This provides clear when-to-use and sequential guidance, surpassing typical usage notes.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
edgegap_create_app_versionCreate an application versionAInspect
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. 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. Avoid the "latest" docker tag — use a build ID so deployments are reproducible.
| Name | Required | Description | Default |
|---|---|---|---|
| env | No | Environment variables injected into the container. | |
| name | Yes | Version identifier, typically a build ID or timestamp. | |
| ports | Yes | Ports to expose. At least one is required for players to connect. | |
| cpu_units | Yes | vCPU units. 1024 = 1 vCPU. | |
| memory_mb | Yes | Memory in MB. At most 2x cpu_units. | |
| docker_tag | Yes | Image tag. Use a build ID, not "latest". | |
| application | Yes | Existing application name. | |
| docker_image | Yes | Namespaced image, e.g. "mystudio/game-server". | |
| verify_image | No | Verify Edgegap can pull the image before accepting the version. | |
| registry_token | No | Registry password or token. | |
| docker_repository | Yes | Registry host, e.g. "docker.io" or "registry.edgegap.com". | |
| registry_username | No | Registry username, for private images. | |
| max_duration_minutes | No | Auto-stop after this many minutes. Keeps test deployments from running up cost. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the annotations, the description adds valuable behavioral context: verify_image makes a bad image fail at registration rather than deployment, and resource units/memory constraints define server sizing. It does not contradict the openWorldHint/idempotentHint/destructiveHint annotations, and while it does not discuss auth or rollback, the annotations already cover the safety profile.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Four tight sentences with no filler; the core purpose is front-loaded in the first sentence, followed by constraints and recommendations. Every sentence adds either a precondition, a conversion rule, or a best practice, so the description is appropriately sized.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 13-parameter tool with no output schema, the description covers the non-obvious prerequisites, resource constraints, verification behavior, and tag strategy, while the schema handles parameter details. It does not describe response shape or failure modes, but this is not necessary for invoking the tool successfully, so the definition is nearly complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the baseline is 3, and the description adds extra meaning: the registry-pull precondition, the 1024 cpu units = 1 vCPU conversion, and the advice to set verify_image on the first version. These details make parameter choices more actionable even though some duplicate the schema text.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a specific verb and resource: “Register a container image as a deployable version of an application,” which clearly distinguishes this from sibling tools like edgegap_create_app or edgegap_deploy. The title and description align and scope the operation to version registration rather than app creation or deployment.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides clear context: use it to register an already-pushed image and states a precondition (“The image must already be pushed to a registry that Edgegap can pull from”). It offers operation-specific recommendations (verify_image on first version, avoid latest tag) but does not explicitly name alternatives or when-not-to-use conditions, so it stops short of a 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
edgegap_deployDeploy a game serverAInspect
Start one containerized instance of an application version, placed near the players you specify. Returns immediately with a request_id; the server is still starting and has no connection details yet. Follow this call with edgegap_wait_for_deployment to get the address players connect to. Always stop deployments you started for testing.
| Name | Required | Description | Default |
|---|---|---|---|
| env | No | Environment variables for this deployment only. | |
| tags | No | Tags for filtering later, e.g. ["agent-test"]. Recommended. | |
| users | Yes | Where the players are. Exactly one of these two is required. | |
| version | Yes | Version name within the application. | |
| cpu_units | No | Override the version CPU. | |
| memory_mb | No | Override the version memory. | |
| application | Yes | Application name. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
It discloses an important behavioral trait not available in the annotations: the deployment is asynchronous and the returned request_id is not yet a usable address. It also surfaces the need to clean up test deployments, which is valuable guidance beyond openWorldHint/idempotentHint.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Compact and efficient: three sentences deliver purpose, async behavior, follow-up call, and cleanup guidance. Each sentence earns its place, and the most important workflow step is clearly front-loaded.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given that all seven parameters are fully documented in the schema and there is no output schema, the description properly provides the missing context: return value (request_id), asynchronous behavior, the next step (wait_for_deployment), and the need to stop test deployments. Nothing essential is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the input schema already explains every parameter. The description slightly reinforces 'application version' and 'players you specify' but does not add substantial new meaning about the parameters or how they interact.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a specific action, 'start one containerized instance of an application version', and clarifies geo-placement ('placed near the players you specify'). It is clearly a deployment creation tool and is easily distinguished from sibling tools like edgegap_wait_for_deployment, edgegap_list_deployments, and edgegap_stop_deployment.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It explicitly tells the agent to follow this call with edgegap_wait_for_deployment for connection details, and explains the timing caveat: it returns immediately, the server is still starting, no connection details yet. It also warns to always stop test deployments, which is concrete operational guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
edgegap_get_deploymentGet deployment statusARead-onlyInspect
Read the current status of one deployment, including connection address and ports once it is ready. For a deployment you just created, prefer edgegap_wait_for_deployment — it polls for you instead of making you call this in a loop.
| Name | Required | Description | Default |
|---|---|---|---|
| request_id | Yes | The request_id returned by edgegap_deploy. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already establish readOnlyHint=true, so the read-only behavior is covered. The description adds value by disclosing that connection address and ports appear only once the deployment is ready, which helps the agent understand timing and response behavior.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two short sentences with no filler: the first states what the tool does and what it returns, and the second routes to the preferred sibling when relevant. The most important information is front-loaded.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple single-parameter read tool with readOnlyHint and full schema coverage, the description is sufficient. An agent knows what to call, how to get the request_id, what to expect in the response, and when to use wait_for_deployment instead.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema already documents request_id fully, including that it is returned by edgegap_deploy, so schema coverage is 100%. The description reinforces this but does not add meaningful semantics beyond the schema, warranting the baseline score.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb and resource: 'Read the current status of one deployment' and adds the relevant output ('connection address and ports once it is ready'). The singular 'one deployment' clearly distinguishes it from list-style siblings.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It explicitly names the alternative edgegap_wait_for_deployment and gives the condition for preferring it: a deployment you just created, because that tool polls for you instead of requiring a loop. This is clear, actionable usage guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
edgegap_get_deployment_logsGet container logs for a deploymentARead-onlyInspect
Retrieve stdout/stderr and crash output for a deployment. Call this whenever a deployment errors or a server exits unexpectedly — the crash exit code usually identifies the problem faster than redeploying does. Logs for stopped deployments are only retained if Endpoint Storage was configured on the version beforehand.
| Name | Required | Description | Default |
|---|---|---|---|
| request_id | Yes | The request_id of the deployment. | |
| max_characters | No | Truncate logs to this length, keeping the tail. Default 8000. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With readOnlyHint and openWorldHint already present, the description adds useful non-obvious behavior: logs include crash output and are retained for stopped deployments only if Endpoint Storage was configured. No contradiction with annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three tight sentences cover what the tool returns, when to call it, and an important retention caveat. No filler; the usage guidance is front-loaded before the edge case.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple read-only log retrieval tool with two well-documented parameters and annotations covering safety, the description provides enough context: what logs are retrieved, when to use it, and the retention limitation. The lack of an output schema is not a gap here.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, with clear descriptions of request_id and max_characters. The description does not add parameter-level details, but the baseline 3 is appropriate because the schema already carries the semantic load.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description names a specific verb ('Retrieve') and resource ('stdout/stderr and crash output for a deployment'), making the tool's function unambiguous. This is clearly distinct from sibling tools that list, stop, or create deployments/apps.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It gives explicit trigger conditions: call when a deployment errors or a server exits unexpectedly, and explains the diagnostic value of the crash exit code. It does not explicitly name alternatives or when-not-to-use cases, so it stops short of a 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
edgegap_list_appsList Edgegap applicationsARead-onlyInspect
List the applications in the Edgegap organization. Start here before creating or deploying anything, so you reuse an existing application instead of making a duplicate. An "application" groups versions of one game server.
| Name | Required | Description | Default |
|---|---|---|---|
| page | No | ||
| limit | No | Results per page. Default 50. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and openWorldHint=true, covering the safety profile. The description adds useful context about organizational scope and the meaning of an application, but does not disclose pagination behavior or response details.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three short sentences front-load the action, then give a concrete usage rule, then define the domain concept. No wasted words.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description is sufficient for deciding to call it and knowing its scope, and the annotations cover safety. It falls slightly short by not hinting that results are paginated or that page/limit should be considered for a complete inventory.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The two pagination parameters are optional, and only 'limit' carries a schema description; 'page' has only type/constraints. The description adds no parameter-level detail, so it fails to compensate for the incomplete schema coverage.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Opens with a specific verb and resource: 'List the applications in the Edgegap organization.' The definition of an application as grouping versions of one game server distinguishes it from sibling list_app_versions and places it clearly in the create/deploy workflow.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly instructs the agent to call this before creating or deploying anything to avoid duplicate applications. It does not name sibling alternatives or state when not to use, but the context is clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
edgegap_list_app_versionsList versions of an applicationARead-onlyInspect
List the versions under an application, with their container image and resource settings. Use this to find the version name to deploy, or to copy settings from a working version when creating a new one.
| Name | Required | Description | Default |
|---|---|---|---|
| application | Yes | Application name, as returned by edgegap_list_apps. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, covering the read-only safety profile. The description adds useful context about the output content, but does not disclose any edge behaviors such as pagination, ordering, or error conditions when an application does not exist.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two tightly written sentences with no filler. The first states the core action and output scope; the second gives practical use cases. Every sentence earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple read-only tool with one well-documented parameter and no output schema, the description covers what the tool returns and why an agent would call it. It could mention absence of an application as a possible failure, but this is a minor gap.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the single 'application' parameter is already documented in the schema. The description does not add format or syntax detail beyond that, which is acceptable given the schema's completeness.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb ('List'), a precise resource ('versions under an application'), and the key contents of the result ('container image and resource settings'). It is clearly distinguished from sibling edgegap_list_apps, which lists applications rather than versions.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Provides explicit use cases: 'find the version name to deploy' or 'copy settings from a working version when creating a new one.' It does not name alternatives or state when not to use it, but the intended context is clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
edgegap_list_deploymentsList running deploymentsARead-onlyInspect
List active deployments, optionally filtered. Use this to find deployments left running from earlier sessions before starting new ones — orphaned servers cost money.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Default 50. | |
| filter | No | Edgegap filter expression, e.g. by tag. Omit for all deployments. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and openWorldHint=true, so safety is covered. The description adds meaningful behavior: it lists only 'active' deployments (not stopped ones) and supports optional filtering. The cost warning adds context about why listing is useful. This goes beyond the annotations without contradicting them.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences with zero redundancy. The core action ('List active deployments') is front-loaded, followed by the optional filter and a practical usage rationale. Every word earns its place; it's both concise and informative.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a read-only list tool with no output schema and high parameter coverage, the description is nearly complete. It covers purpose, usage, and the active-deployment scope. It doesn't mention pagination or response format, but those are typically inferred for list operations and the annotations already signal safety. Overall, an agent has enough to call it correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% – both limit and filter have descriptions in the schema. The description's 'optionally filtered' mirrors the filter param but adds no new syntax or details. Since the schema already documents both parameters fully, the description provides no extra parameter-level value, meeting the baseline for high coverage.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb ('List') and resource ('active deployments') with an explicit filter option. It clearly distinguishes from sibling tools like edgegap_get_deployment (single) and edgegap_stop_deployment (mutation), and even gives a concrete use case that sets it apart. An agent can immediately grasp what this tool does and how it relates to others.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Provides a clear when-to-use context: 'find deployments left running from earlier sessions before starting new ones' with the cost warning. While it doesn't explicitly contrast with siblings or state exclusions, the guidance is actionable and context-rich, making it easy for an agent to decide when to invoke this tool. Slight gap: no mention of alternatives for single-deployment lookup.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
edgegap_stop_deploymentStop a deploymentADestructiveIdempotentInspect
Gracefully stop one deployment by request_id, sending SIGTERM to the container. Stop every deployment you started for testing before ending your task. This tool stops exactly one deployment; bulk stop is deliberately not exposed.
| Name | Required | Description | Default |
|---|---|---|---|
| request_id | Yes | The request_id of the deployment to stop. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already mark the tool destructive and idempotent; the description adds the behavioral detail that stopping is graceful and sends SIGTERM to the container. It also scopes behavior to exactly one deployment. This adds context beyond the structured hints without contradicting them.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three short sentences, each earning its place: the first defines the operation and mechanism, the second gives a task-level cleanup directive, and the third sets scope. Information is front-loaded and there is no filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a single-parameter, annotation-rich tool with no output schema, the description covers what the agent needs: the operation, the mechanism, the required identifier, and the cleanup expectation. Nothing material is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% and the request_id parameter is already described as 'The request_id of the deployment to stop.' The description adds little beyond confirming lookup by request_id and single-deployment scope, so it earns the baseline score for schema-covered parameters.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific action ('stop'), a specific resource ('one deployment'), and the required identifier ('by request_id'), and distinguishes itself from any bulk-stop alternative ('bulk stop is deliberately not exposed'). It is unambiguous and differentiates from sibling tools like edgegap_deploy.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Provides explicit usage context: the agent should stop every deployment it started for testing before ending its task. It also clarifies the tool's single-deployment scope and that bulk stop is intentionally unavailable, preventing the agent from seeking a bulk alternative. It does not explicitly point to sibling tools for finding request_ids, but the context is sufficient.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
edgegap_wait_for_deploymentWait for a deployment to become readyARead-onlyIdempotentInspect
Poll a deployment until it is ready, errors, or the timeout expires, then return the connection details. This is the tool to call right after edgegap_deploy. Do not build your own polling loop — this handles backoff and reports the container error detail if the server fails to start.
| Name | Required | Description | Default |
|---|---|---|---|
| request_id | Yes | The request_id returned by edgegap_deploy. | |
| timeout_seconds | No | How long to wait before giving up. Default 180. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint and idempotentHint, so the safety profile is covered. The description adds valuable behavioral details: polling behavior, backoff, timeout handling, and that it reports container error detail on failure. This is more than the annotations provide, though it doesn't specify exact timeout semantics beyond the parameter.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences with zero waste. The purpose is front-loaded, and the usage guidance is compact and direct. Every clause serves a purpose, making it easy for an agent to parse quickly.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a polling tool with no output schema, the description covers the full lifecycle: what triggers it, what it does while polling, what it returns on success, and what happens on failure (error detail). An agent has everything needed to call it correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% with both parameters documented. The description adds the key contextual meaning that request_id comes from edgegap_deploy, which is not in the schema. This extra clarification goes beyond the schema's field descriptions, justifying a score above the baseline 3.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a precise verb ('poll') and resource ('deployment'), and the outcome ('return the connection details'). It explicitly positions itself relative to edgegap_deploy and mentions that it handles backoff, which distinguishes it from a generic status check like edgegap_get_deployment.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It clearly says 'This is the tool to call right after edgegap_deploy' and instructs 'Do not build your own polling loop', giving an explicit when-to-use and a when-not-to alternative. This leaves no ambiguity about the intended context.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
10 tool updates
v0.1.2- First observed
edgegap_create_app - First observed
edgegap_create_app_version - First observed
edgegap_deploy - First observed
edgegap_get_deployment - First observed
edgegap_get_deployment_logs - First observed
edgegap_list_app_versions - First observed
edgegap_list_apps - First observed
edgegap_list_deployments - First observed
edgegap_stop_deployment - First observed
edgegap_wait_for_deployment
TDQS
Scored across 10 tools
Each tool targets a distinct resource and action: apps, versions, deployments, and logs. The only close pair is get_deployment vs wait_for_deployment, but their descriptions explicitly distinguish one-shot status read from polling helper, so there is no real ambiguity.
All tools share the edgegap_ prefix and mostly follow a verb_noun pattern (list_deployments, create_app, get_deployment_logs). Minor deviations like the bare verb 'deploy' and 'wait_for_deployment' are still predictable and readable.
With 10 tools covering apps, versions, and deployments, the count is well-scoped for the domain. Each tool maps to a clear lifecycle step, and no tool feels redundant.
The core workflow is fully covered: create/list apps, create/list versions, deploy, wait, get status, logs, and stop. Missing update/delete for apps/versions and bulk stop are minor gaps, but agents can complete typical tasks without dead ends.
Maintenance
Related MCP Connectors
Playgama MCP is a remote MCP server for game developers. Point Codex, Claude Code, Cursor or VS Code at it and your agent publishes an HTML5 game to Playgama without leaving the editor: it creates the game and fills in the form, uploads the build and covers, edits the in-app catalog and leaderboards, gets a QA Tool link, and publishes a sandbox — a public link anyone can play. 20 tools, 10 of them read-only; every write is annotated as destructive so your client asks first. Submitting to moderation, deleting and payouts are deliberately left out: the agent prepares everything, a human presses the button. Product page: https://playgama.com/mcp/ Docs: https://wiki.playgama.com/playgama/mcp Tools reference: https://wiki.playgama.com/playgama/mcp/tools Token: https://developer.playgama.com/mcp
Deploy and manage your apps, databases, storage, and scheduled jobs from your AI agent
Provides capabilities that let LLM agents perform a range of infrastructure management tasks.
Build, validate, and deploy multi-agent AI solutions from any AI environment.
Related MCP Servers
- AlicenseAqualityDmaintenanceEnables AI agents to create, edit, and run Godot 4.5+ games by providing tools for project scaffolding, scene manipulation, and engine interaction. It supports full game development workflows including node editing, script attachment, and project execution with debugging capabilities.245MIT

antics-mcpofficial
AlicenseAqualityCmaintenanceEnables AI agents to deploy multiplayer web games as playable URLs with rooms, live state sync, and leaderboards, all through a single tool call.482 npm5-- AlicenseAqualityBmaintenanceEnables AI agents to create and manage BasicDeploy containers with PostgreSQL, S3 storage, and public URLs, including deploying apps, running commands, viewing logs, and sharing containers.18137 npmMIT

MileHost MCP Serverofficial
AlicenseCqualityBmaintenanceEnables AI coding agents to manage cloud containers, create and edit files, run commands, and deploy projects directly.247MIT