Edgegap MCP Server
OfficialSummary: The Edgegap MCP Server lets an AI agent take a game server from a headless build to players connecting — Dockerfile generation/validation, image push to a registry, authoritative dedicated server deployment, matchmaker config generation, relay sessions for host-client games, and troubleshooting via logs.
Containerize a server build — generate a Dockerfile with correct headless flags (Unity
-batchmode -nographics, Godot--headless, non-root for Unreal) and validate an existing Dockerfile, ports, and resources before building.Push images — get private Edgegap registry credentials plus exact
docker login/build/push commands, and list registry tags to confirm a push landed.Manage applications & versions — list applications, create apps, and register container images as deployable versions.
Deploy dedicated servers — deploy an authoritative server placed near players (by IP or coordinates), wait for readiness, and get the connection address; override CPU/memory and tag deployments.
Inspect & monitor deployments — get a deployment's status, list/filter running deployments to find orphaned servers, and read container logs and crash output.
Stop deployments — gracefully stop one deployment by request_id.
Build matchmaker configs — generate a ready-to-upload matchmaker JSON (teams, sizes, latency rules, expansions) that references an existing version; uploading/running it is done in the dashboard, not via MCP.
Run host-client relays — create, read, add players to, and delete relay sessions that forward traffic while one player hosts.
Use local/server controls — run locally with a prompted or provided API token, and restrict actions via read-only mode, app allowlist, and max-duration limits.
Generates and validates Dockerfiles for headless game server builds against Edgegap's requirements, checks images are linux/amd64, and provides registry credentials with the exact docker login, build and push commands to publish the image for deployment.
Supports Unity dedicated server builds: generates a Dockerfile with the correct Unity headless flags (-batchmode -nographics), default build paths and server binary names, and validates existing configs for missing batchmode/nographics flags and port mismatches.
Supports Unreal Engine dedicated server builds: generates a Dockerfile that runs the packaged LinuxServer folder, applies the non-root user Unreal requires, and validates existing configs for Unreal servers running as root.
Click 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 Server
Connect AI coding agents to Edgegap through our MCP server. Your agent can take a headless server build all the way to players connecting: write or check the Dockerfile, push the image to your private Edgegap registry, deploy an authoritative dedicated server close to players, and read logs when something breaks.
👉 Supported Features
Using Unity, Unreal Engine, or Godot? Our Unity, Unreal Engine, and Godot guides and plugins remain the fastest path for those engines. The MCP server works alongside them, and on its own for any engine.
Use our MCP server when:
Containerizing your game server - your agent writes a Dockerfile for your build (or checks the one you have) against Edgegap's requirements, then pushes the image to your private Edgegap container registry.
Deploying a dedicated server - create an application and version, deploy close to your players, and get the connection address.
Setting up matchmaking - generate a matchmaker configuration that points at your deployed version, ready to upload in the dashboard.
Running a host-client game - create a relay session if your game is built with one player as host. See Dedicated Servers or Relays? first.
Building a CI/CD pipeline - test your deployments and teardown from a build system.
Troubleshooting a game server issue - inspect app versions and deployment status, read container logs, or reproduce a failed deployment.
Out of scope / not supported by MCP: creating or running a matchmaker (the MCP generates the configuration, you upload it in the dashboard); server browser; lobbies; managed clusters; private fleets; or billing.
If you need help,please reach out to us over Discord. For live games support see our ticketing system.
Related MCP server: BasicDeploy MCP Server
⚖️ Dedicated Servers or Relays?
Edgegap can host your multiplayer game in two ways. We recommend dedicated servers, and so does our MCP server: your agent will default to a dedicated server and only use a relay when you've chosen a host-client setup.
Dedicated server (recommended) | Relay | |
What Edgegap runs | Your headless server build, close to players | A traffic forwarder only, no game code |
Who runs the game | The server | One player's game (the host) |
Cheating | Much harder, the server has authority | The host can change anything |
Fairness | Every player connects directly to the server | The host has no latency, everyone else goes through two hops |
When the host leaves | The match continues | The match ends, unless your game supports host migration |
Performance limited by | The server's allocated CPU and memory | The host's PC and home internet upload |
You need | A server build in a container image | Netcode built as a listen server (host-client) |
No server image yet? That's not a reason to choose relays. Your agent can write the Dockerfile for your build with edgegap_generate_dockerfile. Learn more about relays in Distributed Relay.
🚀 Installation
MCP server installation is very simple:
Install the MCP server for Popular Agents or with Custom Integration.
Generate and attach an API token for your agent to use with our MCP server.
Generate (and view) your secret tokens for Edgegap API in Dashboard - User Settings / Tokens.
Add your secret token with each API request as an HTTP header (include the word token):
Authorization: token xxxxxxxx-e458-4592-b607-c2c28afd8b62
Do not integrate Edgegap API endpoints in game client, as your API token provides unlimited access to your account. See Integration for secure client-facing API endpoints and functions.
In case your secret tokens are compromised or leaked, delete and re-create them from dashboard.
The token is organization-wide and cannot be scoped to one application. Read DESIGN.md before giving it to an unattended agent.
Popular Agents
Install Edgegap MCP server in your preferred agentic IDE with the Cursor or VS Code buttons at the top of this page, then add your token to the Authorization header.
Claude Code
claude mcp add --transport http edgegap https://mcp.edgegap.dev/mcp \
-H "Authorization: token xxxxxxxx-e458-4592-b607-c2c28afd8b62" --scope userChatGPT Codex
codex mcp add edgegap --url https://mcp.edgegap.dev/mcpclaude.ai
Add https://mcp.edgegap.dev/mcp as a custom connector and supply the same token.
mcp.json
Most agentic IDEs also support integration by pasting JSON configuration:
{
"mcpServers": {
"Edgegap": {
"type": "http",
"url": "https://mcp.edgegap.dev/mcp",
"headers": {
"Authorization": "token xxxxxxxx-e458-4592-b607-c2c28afd8b62"
}
}
}
}Custom Integration
Install remote Edgegap MCP server in your agent's virtualized environment (never in your project!):
Node, using the mcp-remote npx package
{
"command": "npx",
"args": ["-y", "mcp-remote", "https://mcp.edgegap.dev/mcp", "--transport", "http-only"]
}Python, using the mcp-proxy uvx package
{
"command": "uvx",
"args": ["mcp-proxy", "--transport", "streamablehttp", "https://mcp.edgegap.dev/mcp"]
}Local Server
To keep your API token on your own machine, run the server locally instead. Leave the token out and your agent asks you for it on first use, holding it in memory only for that session:
{
"mcpServers": {
"Edgegap": {
"command": "npx",
"args": ["-y", "@edgegap/mcp"],
"env": { "EDGEGAP_API_TOKEN": "xxxxxxxx-e458-4592-b607-c2c28afd8b62" }
}
}
}Needs Node 18+. Pin a version in production (@edgegap/mcp@0.3.0) rather than floating on latest. Registered in the official MCP registry as dev.edgegap/mcp.
The local server can also limit what an agent can do. These variables have no effect on the hosted endpoint at mcp.edgegap.dev:
Variable | Default | Purpose |
| (prompted) | API token. Optional: omit it and you're asked at first use. The |
|
| Set to |
| (empty) | Comma-separated application names. Limits what the agent can create and deploy into, not what it can touch once running. See DESIGN.md. |
|
| Ceiling on |
|
| Per-request HTTP timeout. |
🧰 Tools
Your agent picks the right tool from your request. You don't need to name them, but knowing what's available helps you ask. Tools marked ● change something in your account and are hidden when EDGEGAP_READ_ONLY=1.
Before Your First Deployment
Tool | What it does |
| Writes a Dockerfile for your server build: your build folder, server binary or start script, ports, and launch arguments, with the right headless flags (Unity |
| Checks an existing Dockerfile, ports, resources, and image tag before you build. Catches ARM or Windows images (Edgegap runs |
| Returns push credentials for your private Edgegap container registry, with the exact |
| Confirms your image push landed before you register it. |
Dedicated Servers (Recommended)
Tool | What it does |
| Lists your applications. |
| Creates an application. |
| Lists versions with their image, resources, and ports. |
| Registers a container image as a deployable version. |
| Deploys an authoritative dedicated server close to your players. |
| Waits until the server is ready and returns the connection address. |
| Reads a deployment's status. |
| Lists running deployments, filtered by application, version, status, tags and more, and sorted by age. Finds servers left running. See Filter Deployments. |
| Reads container logs and crash details. |
| Stops one deployment. |
Matchmaking
Tool | What it does |
| Generates a matchmaker configuration (teams, team size, optional latency rules and expansions) and checks that the version it deploys exists. Upload the result in the dashboard to create your matchmaker, which starts a dedicated server for each match. |
Learn more about the configuration in Matchmaking.
Relays (Host-Client Games Only)
A relay is not a game server: it forwards traffic while one player's game hosts the match. See Dedicated Servers or Relays?.
Tool | What it does |
| Creates a relay session for your players and returns the relay address and each player's authorization token. |
| Reads a relay session. |
| Adds a player who joins later. |
| Closes a relay session. |
Deployments and relay sessions are billed while they run. Ask your agent to stop test deployments and delete test relay sessions when it's done.
Example Prompts
"Write a Dockerfile for my Unity server build, then push it and deploy a server near me."
"Check my Dockerfile for Edgegap and fix any problems."
"Create a matchmaker config for 2v2 matches on my latest version."
"My deployment failed. Read the logs and tell me why."
"My game uses host-client networking. Set up an Edgegap relay for two players."
🚨 Troubleshooting
Review common error codes and learn how to unlock your integration.
401 Unauthorized
Your MCP integration is most likely not including the Authorization header correctly.
403 Forbidden
Your MCP integration is likely using the template token or a deleted token. Please validate that the token value used by your integration matches exactly the token displayed in dashboard.
424 Image Could Not Be Pulled
Edgegap could not pull your container image. Check the repository, image name, and tag, and that the tag was pushed (ask your agent to list registry tags). For images in the Edgegap registry, the image name must include your project, e.g. my-project/my-game-server.
Registry Credentials Unavailable
If your agent can't retrieve registry credentials, request them in the dashboard under Container Registry, or push to another registry Edgegap can pull from (Docker Hub, GitHub, AWS ECR, GCP, GitLab). See External Registries.
Server Starts Locally but Not on Edgegap
Ask your agent to validate your server configuration, or to generate a new Dockerfile. The most common causes are an image built on Apple Silicon without docker build --platform linux/amd64, a server listening on a different port than the version exposes, or a UDP transport configured as TCP.
Other API Errors
Please consult our API Reference for possible error responses for individual API endpoints.
If you need help,please reach out to us over Discord. For live games support see our ticketing system.
🛠️ Self-Hosting
The hosted endpoint at mcp.edgegap.dev runs as a Cloudflare Worker (see worker/INSTALL.md). To run the same stateless HTTP server on your own infrastructure, use the Docker image:
docker build -t edgegap-mcp .
docker run --rm -p 8080:8080 edgegap-mcpClients connect to http://<host>:8080/mcp with their own Authorization header, the same way they connect to the hosted endpoint. The image holds no credential, and /health answers without one. PORT, HOST, EDGEGAP_READ_ONLY, EDGEGAP_APP_ALLOWLIST and EDGEGAP_MAX_DURATION_MINUTES apply. Read worker/DECISION.md before exposing it beyond a private network.
Prebuilt images are published to ghcr.io/edgegap/edgegap-mcp, tagged main and sha-<commit> on every push to main, plus the version on v* tags:
docker run --rm -p 8080:8080 ghcr.io/edgegap/edgegap-mcp:mainDevelopment
npm ci
npm run build
npm test # mock-API tests; none reach Edgegap
npm run typecheck:workerTest | Covers |
| Handshake, tool registration, read-only mode |
| Local validation and allowlist enforcement |
| Token prompt: accept, refuse acknowledgement, decline, no support |
| Validator, Dockerfile generator, registry, deployments, relay and matchmaker tools against a local mock API |
| Self-hosted HTTP server: discovery without a token, per-request tokens, foreign credentials |
| Not in |
Design decisions, the security model, and what's deliberately out of scope are in DESIGN.md.
Available Tools
19 toolsedgegap_authorize_relay_userAdd a player to a relay sessionAIdempotentInspect
Authorize one more player (by public IP) on an existing relay session, for a player joining after the session was created. Returns that player's authorization token.
| Name | Required | Description | Default |
|---|---|---|---|
| user_ip | Yes | Public IP of the joining player. | |
| session_id | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare idempotentHint=true, destructiveHint=false, and openWorldHint=true, so safety is covered. The description adds that a token is returned and that the operation augments an existing session, but says nothing about failure modes (e.g., unknown session_id) or any IP validation 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 sentences, front-loaded with the action and scope, followed by the return value. No filler or restatement of the title.
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 2-parameter mutation with no output schema, the description covers the return value (authorization token) and the operational context. Only error/edge-case behavior (invalid or expired session) is left unaddressed, which 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 50%: user_ip is documented ('Public IP of the joining player') but session_id has no schema description. The description's phrase 'existing relay session' and 'by public IP' loosely map to the two params but add no format or constraint detail beyond the schema. Baseline 3 is appropriate.
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 (authorize), resource (player/relay session), and the exact scope: adding a player to an already-created session. This clearly differentiates it from edgegap_create_relay_session (initial creation) and edgegap_get/delete_relay_session.
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?
Gives a precise usage condition: 'for a player joining after the session was created.' This implies the alternative is session creation, but it never names edgegap_create_relay_session explicitly, so the routing is inferred rather than stated.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
edgegap_build_matchmaker_configBuild a basic matchmaker configurationARead-onlyIdempotentInspect
Generate a ready-to-upload Edgegap matchmaker JSON configuration with one profile: team count and size, optional latency rule, and optional expansions that relax the rules the longer a player waits. Checks the referenced application version exists and has ports. Edgegap has no API for creating a matchmaker, so this tool does NOT create one: save the returned config to a file (e.g. matchmaker-config.json) and have the developer upload it on the Matchmaker page of the dashboard. The matchmaker starts an authoritative dedicated server for each match, which is the recommended setup for multiplayer games.
| Name | Required | Description | Default |
|---|---|---|---|
| inspect | No | Expose the inspection API for debugging. Default true; turn off for production. | |
| version | Yes | Version the matchmaker deploys. | |
| expansions | No | Rule relaxations after a player has waited this long, e.g. [{after_seconds: 30, min_team_size: 1}]. | |
| team_count | Yes | Teams per match. 1 for free-for-all or co-op. | |
| application | Yes | Application the matchmaker deploys. | |
| profile_name | Yes | Profile clients will queue into, e.g. "casual-2v2". | |
| max_team_size | Yes | ||
| min_team_size | Yes | ||
| max_latency_ms | No | Adds a latency rule: drop players above this ping to the chosen region. Needs beacon pings from the client. | |
| verify_version | No | Look up the application version first. Default true. | |
| ticket_expiration | No | Default "5m". | |
| latency_difference_ms | No | Max ping spread between matched players. Default 100. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint and openWorldHint, so the safety profile is covered. The description adds real value beyond them by disclosing the version/port verification check and the crucial caveat that no server-side matchmaker is created, making the 'generates a file, does not deploy' behavior unambiguous.
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 output is front-loaded in the first clause, followed by the key constraint and workflow. It is a fairly dense paragraph but each sentence (capability, verification, no-API caveat, recommended setup) carries distinct information.
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 12-parameter tool with no output schema, the description covers the main concept and the return/config-file expectation. It stops short of explaining every optional parameter, but combined with 83% schema coverage 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 83%, so the schema already documents most parameters. The description echoes the schema's semantics (team count/size, latency rule, expansions that relax rules over time) without adding format or syntax detail the schema lacks, so the baseline 3 is appropriate.
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?
Names a specific verb and resource ('Generate a ready-to-upload Edgegap matchmaker JSON configuration') and enumerates the scope of what one profile contains. An agent can immediately tell it apart from sibling tools like edgegap_create_app or edgegap_deploy, none of which build matchmaker configs.
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 clarifies that Edgegap has no API for creating a matchmaker and that this tool does NOT create one, instructing the agent to save the result and have the developer upload it manually. This is clear usage context, but it describes the output workflow rather than naming a sibling alternative to pick instead.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
edgegap_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 (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. 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?
Annotations only supply openWorldHint/idempotentHint/destructiveHint; the description adds real behavioral context beyond them: the external-registry dependency, that verify_image makes a bad image fail here rather than at deploy time, and that reproducible tags prevent flaky deploys. It does not state permissions/error behavior, keeping it short of a 5.
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?
Five sentences, purpose front-loaded, then prerequisites, then resource-unit rules, then two actionable tips. No filler and every clause carries operational information.
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 mutation with no output schema and only safety-oriented annotations, the description covers the key unknowns: registry prerequisites, resource-unit math, verification, and tag hygiene. It omits version-name uniqueness expectations and any indication of the response payload, but the core call path is 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, but the description adds cross-parameter meaning absent from any single schema field: the 1024-units-per-vCPU conversion and the memory_mb >= 256 / <= 2x cpu_units constraint. Usage semantics for verify_image ('first version') also go beyond 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?
Specific verb+resource ('Register a container image as a deployable version of an application') that clearly separates it from sibling edgegap_create_app and edgegap_list_app_versions. An agent can tell exactly what object is being created and from what input.
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?
Gives concrete preconditions (image must already be pushed to a registry Edgegap can pull from) and routes the agent to edgegap_get_registry_credentials and edgegap_list_registry_tags for verification. It advises setting verify_image on the first version and avoiding the 'latest' tag, but doesn't explicitly contrast with edgegap_create_app for the 'when not to use' case.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
edgegap_create_relay_sessionCreate a relay session (host-client games only)AInspect
A relay is NOT a game server and is not the recommended default — for a multiplayer match, deploy an authoritative dedicated server with edgegap_deploy instead. A relay only forwards traffic between players while one player's game acts as host and owns the game state: the host can cheat and has a latency advantage, the host's PC and connection cap the match, and the match ends if the host quits. Only use this when the developer has chosen peer-to-peer/host-client, or the netcode is already a listen server and a dedicated server is not an option; if that has not been established, ask first. Never pick it only because it needs no server image. Creates an Edgegap relay session for every player's public IP, host first, waits until it is ready, and returns the relay address plus per-player authorization tokens for the relay transport. Relay sessions are billed while open: delete test sessions with edgegap_delete_relay_session when finished.
| Name | Required | Description | Default |
|---|---|---|---|
| user_ips | Yes | Public IP of each player, host first. Add late joiners with edgegap_authorize_relay_user. | |
| webhook_url | No | Called when the session is ready. | |
| timeout_seconds | No | Default 30. | |
| wait_until_ready | No | Poll until the relay is assigned. Default true. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations cover openWorld/idempotent/destructive, but the description adds substantial context beyond them: the host-risk profile (host can cheat, has a latency advantage, host's PC caps the match, match ends if host quits), that the call blocks until ready, what is returned (relay address plus per-player authorization tokens), and that sessions are billed while open with a cleanup path via edgegap_delete_relay_session.
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 warnings are front-loaded and every sentence carries real decision weight for a high-stakes, billable, non-default tool. It is long and slightly repetitive about the host's role and the 'no server image' caution, but not padded in a way that harms comprehension.
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?
With no output schema, the description still explains the return payload (relay address and per-player authorization tokens), the blocking behavior, billing implications, and the deletion follow-up. Nothing an agent needs to call and then manage this tool correctly 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 baseline is 3. The description reinforces the host-first ordering of user_ips and points to edgegap_authorize_relay_user for late joiners, but these details already live in the schema, so it adds little beyond it.
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 ('Creates an Edgegap relay session') and explicitly contrasts it with the sibling edgegap_deploy by declaring 'A relay is NOT a game server'. An agent can distinguish this tool from deployment tools without opening any schema.
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 when-to-use ('Only use this when the developer has chosen peer-to-peer/host-client, or the netcode is already a listen server'), when-not ('for a multiplayer match, deploy an authoritative dedicated server with edgegap_deploy instead'), a routing instruction to ask first if that hasn't been established, and an explicit anti-pattern ('Never pick it only because it needs no server image'). This is a complete routing guide.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
edgegap_delete_relay_sessionDelete a relay sessionADestructiveIdempotentInspect
Close one relay session. Connected players lose their relay connection. Delete every session you created for testing before ending your task.
| Name | Required | Description | Default |
|---|---|---|---|
| session_id | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare destructiveHint, idempotentHint and openWorldHint, so the safety profile is structured. The description adds real value beyond that by disclosing the consequence: 'Connected players lose their relay connection.' It does not mention auth requirements or error 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?
Three short sentences, action front-loaded, with the impact statement and cleanup guidance following in priority order. 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 one-parameter destructive delete with annotations covering idempotency and destructiveness, the definition covers the operation, its side effect, and a cleanup workflow. The only real gap is the unexplained session_id, which is minor at this 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 description coverage is 0% and the single parameter session_id is undocumented in the schema or description. The definition never says where session_id comes from (e.g., create_relay_session) or what format it takes, so it fails to compensate for the coverage gap.
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 and resource: 'Close one relay session.' An agent can distinguish it from the create/get/authorize relay siblings by name. It does not explicitly name alternatives, but the operation is unambiguous.
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 gives a lifecycle directive ('Delete every session you created for testing before ending your task'), which implies when cleanup is appropriate but does not compare against siblings or state prerequisites such as needing the session_id from create_relay_session.
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 authoritative dedicated game server from an application version, placed near the players you specify. This is the recommended way to host a multiplayer match: the server owns the game state, so no player hosts it. 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?
Annotations already declare non-idempotent, non-destructive, open-world behavior, so the description isn't carrying the safety burden, but it adds genuinely new async semantics: the call 'returns immediately with a request_id' and the server 'has no connection details yet'. That tells the agent not to expect a usable address in the response, which the annotations do not convey.
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 sentences, front-loaded with the core action and its async consequence, with no filler. The final cleanup sentence is usage guidance rather than capability description, but it is short and operationally useful rather than padding.
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 7-param deployment tool with no output schema, the description covers the key unknowns: what it starts, what it returns immediately (request_id), and how to obtain the connection address. It leaves out failure modes, quota/pricing limits, and whether the deployment auto-expires, which would round out the picture.
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% and the nested users object is fully documented, so the baseline is 3. The description only restates schema content ('placed near the players you specify') and adds no format, cardinality, or override guidance for cpu_units/memory_mb/env/tags.
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 and resource ('Start one authoritative dedicated game server from an application version') and distinguishes the resource from siblings like edgegap_create_app_version or edgegap_create_relay_session. The scope ('one', 'authoritative', 'near the players') is precise enough that an agent can pick it out 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.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly frames this as 'the recommended way to host a multiplayer match' and names the required follow-up tool (edgegap_wait_for_deployment) plus a cleanup obligation ('Always stop deployments you started for testing'). It never states when to prefer this over edgegap_create_relay_session, so it stops short of a full when/when-not contrast.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
edgegap_generate_dockerfileGenerate a game server DockerfileARead-onlyIdempotentInspect
Write a Dockerfile for this project's headless game server build, ready for Edgegap: linux/amd64 base, the build folder copied in, the binary made executable, the right headless flags (Unity -batchmode -nographics, Godot --headless), a non-root user where the engine needs it (Unreal refuses root), CRLF fixes for start scripts, and EXPOSE lines matching the ports. Call this when the project has no Dockerfile, before building anything. Look at the build output first so you can pass the real build folder, binary name and port; anything you omit is assumed and listed under assumptions, which you must confirm with the developer or the project files. Write the result to Dockerfile, then build. The output is checked against edgegap_validate_server_config before it is returned. Makes no API calls.
| Name | Required | Description | Default |
|---|---|---|---|
| ports | No | Ports the server listens on. Default: 7777, with the protocol the netcode uses (UDP if unknown). | |
| engine | Yes | Game engine of the server build. | |
| netcode | No | Networking transport, to pick the protocol. Known: mirror-kcp, kcp, mirror-telepathy, telepathy, mirror-simpleweb, simpleweb, websocket, fishnet-tugboat, tugboat, netcode-for-gameobjects, ngo, unity-transport, utp, photon-fusion, litenetlib, enet, unreal-netdriver, godot-enet, godot-websocket. | |
| base_image | No | Default "ubuntu:22.04". | |
| build_path | No | Server build folder, relative to where docker build runs. Defaults: unity "Builds/EdgegapServer", unreal "." (run from inside the packaged LinuxServer folder), godot "build". | |
| executable | No | File name of the server binary or start script inside build_path. Defaults: unity "ServerBuild", unreal "StartServer.sh", godot "server.x86_64". Required for "other". | |
| launch_args | No | Extra server arguments, one per entry, e.g. ["-log", "-port=7777"]. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint/idempotentHint/openWorldHint=false, and the description reinforces this with 'Makes no API calls' – explaining why a 'write' tool is read-only (it emits a local file). It also discloses the validation step against edgegap_validate_server_config and the assumption-reporting behavior. Minor gap: it doesn't say what happens if required build info is missing beyond 'listed under assumptions', nor what the returned text looks like.
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?
One dense paragraph that front-loads the action and the output contents before moving to preconditions and follow-ups. Every clause carries information, though the mid-sentence list of engine flags and file-system details makes it slightly run-on compared with a tighter two- or three-sentence split.
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?
No output schema exists, but the description explains what the generated artifact contains, where it is written, that it is checked against edgegap_validate_server_config before return, and that assumptions must be confirmed. For a generator tool with only one required parameter, nothing an agent needs to invoke it correctly 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%, so the baseline is 3, but the description adds cross-parameter behavior the schema cannot express: omitted values become assumptions that must be confirmed, and the engine choice drives defaults for build path, executable and headless flags. It does not re-explain the port/netcode lists, which the schema already covers.
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 and artifact ('Write a Dockerfile for this project's headless game server build, ready for Edgegap') and enumerates the exact contents it produces (base image, build folder, binary permissions, headless flags, non-root user, CRLF fixes, EXPOSE). This is clearly distinguishable from siblings like edgegap_create_app_version or edgegap_validate_server_config.
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?
Explicit trigger ('Call this when the project has no Dockerfile, before building anything'), explicit precondition ('Look at the build output first so you can pass the real build folder, binary name and port'), and an explicit follow-up path (write to Dockerfile, then build). Usage is fully determined.
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_get_registry_credentialsGet Edgegap container registry push credentialsAIdempotentInspect
Return the registry URL, project, username and token for this organization's private Edgegap container registry (registry.edgegap.com), plus the exact docker login, build and push commands for your image. Use this when the server image is not in a registry yet — no Docker Hub account needed. Provisions the registry project on first use. The token is registry-scoped (push/pull images in this project), not the org API token: pass it to docker login via --password-stdin, never as a command-line argument, and do not write it into files. Call edgegap_validate_server_config before building.
| Name | Required | Description | Default |
|---|---|---|---|
| tag | No | Unique build tag for the commands, e.g. a build ID. Never "latest". | |
| image_name | No | Image name without project or tag, e.g. "my-game-server". Used to build the commands. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations declare readOnlyHint=false, idempotentHint=true, openWorldHint=true, and the description explains exactly why it is not read-only ('Provisions the registry project on first use'). It adds high-value context beyond annotations: token scope (registry-scoped, not org API token) and a security constraint (pass via --password-stdin, never as an argument, never write to files). No contradiction with the structured hints.
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?
Front-loaded with the return payload, then when-to-use, then provisioning side effect, then token safety, then prerequisite call. Every sentence carries distinct operational information and none is redundant.
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?
No output schema exists, but the description enumerates the return payload (URL, project, username, token, commands) and covers the mutation side effect, token scope, and sequencing. An agent has everything needed to call it safely and 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%, so both parameters (tag, image_name) are already documented, including the 'Never latest' rule. The description only alludes to them via 'the exact docker login, build and push commands for your image,' adding essentially no meaning beyond the schema. Baseline 3 applies.
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?
Names a specific verb and resource (return registry URL/project/username/token plus exact docker commands) and pins it to a concrete artifact (registry.edgegap.com). Clearly distinguishable from sibling edgegap_list_registry_tags, which lists tags rather than handing back credentials and commands.
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?
Explicit trigger: 'Use this when the server image is not in a registry yet — no Docker Hub account needed.' It also sequences a sibling dependency ('Call edgegap_validate_server_config before building'), so the agent knows both when to invoke this and what to do first.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
edgegap_get_relay_sessionGet a relay sessionARead-onlyInspect
Read one relay session: whether it is ready, the relay address and ports, and each authorized player with their authorization token. edgegap_create_relay_session already waits for readiness; use this to re-read a session or one created with wait_until_ready false.
| Name | Required | Description | Default |
|---|---|---|---|
| session_id | Yes | Returned by edgegap_create_relay_session. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint and openWorldHint, so safety is covered. The description adds genuinely useful behavioral context: what data comes back (readiness flag, relay address, ports, per-player authorization tokens). It does not cover auth requirements or rate limits, so it stops short of a 5.
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, zero filler: the first front-loads the return contents, the second handles routing against the sibling tool. Every clause 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?
With no output schema, the description carries the burden of describing return values and does so concretely. Combined with annotations and a fully documented single parameter, an agent has everything needed to call and interpret this tool.
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 single session_id parameter is documented in the schema as 'Returned by edgegap_create_relay_session.' The description adds no format or syntax detail beyond that, so the baseline 3 applies.
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 ('Read') and resource ('one relay session') and enumerates what the read returns: readiness, relay address and ports, authorized players with tokens. It is clearly distinguishable from edgegap_create_relay_session by name.
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 says create already waits for readiness, and directs the agent here to re-read a session or read one created with wait_until_ready false. That is a concrete when-to-use rule with the alternative named.
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 and sorted. Use this to find deployments left running from earlier sessions before starting new ones — orphaned servers cost money. Filter by status, application, version, tags, request_id, created_at, fleet_name or host_name, e.g. [{field:"application",operator:"eq",value:"my-game"},{field:"status",operator:"eq",value:"ready"}]. Operators: eq and neq on every field except created_at (eq, gte, lte); in and nin with an array value on request_id, tags, application, version, fleet_name, host_name; ilike with % wildcards on fleet_name and host_name. At most one filter per field. Sort by created_at or available_session_sockets.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Default 50. | |
| filters | No | Omit for all deployments. | |
| order_by | No | e.g. [{field:"created_at",order:"asc"}] for oldest first. |
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 real behavioral context beyond that: the cost consequence of orphaned deployments, the constraint that at most one filter per field is allowed, and per-field operator support that the schema does not encode.
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 purpose is front-loaded, but the body is a dense single-paragraph run-on mixing use case, field enumeration (already in the schema enum), example filter syntax, and operator rules. Bullet-style structuring of the operator matrix would make it far easier to parse.
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?
No output schema exists, yet the description never characterizes what a returned deployment looks like or its key fields, which matters for a list tool. Input semantics are thoroughly covered and annotations carry the safety profile, but the return shape is an unaddressed 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 much of the filter syntax is already documented. However, the description adds constraint meaning the schema lacks: which operators apply to which fields (eq/neq everywhere but created_at; in/nin only on specific fields; ilike only on fleet_name/host_name) and the one-filter-per-field rule.
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 and resource ('List active deployments') plus scope of optional filtering and sorting. It is clearly distinguishable from edgegap_get_deployment (single) and edgegap_wait_for_deployment (blocking) without opening any schema.
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?
Gives an explicit use case with a rationale: find deployments left running from earlier sessions before starting new ones, because orphaned servers cost money. It does not name a competing sibling tool to route against (e.g. get_deployment for a single deployment), so it stops short of full when/when-not guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
edgegap_list_registry_tagsList image tags in the Edgegap registryARead-onlyInspect
List the tags pushed for one image in this organization's Edgegap container registry, with push time and size. Call it after docker push to confirm the tag landed before edgegap_create_app_version, which otherwise fails later with an image-pull error.
| Name | Required | Description | Default |
|---|---|---|---|
| page | No | ||
| limit | No | Default 20. | |
| image_name | Yes | "<project>/<image>", e.g. "my-org-cv2l3w3vy6fg/my-game-server". Project comes from edgegap_get_registry_credentials. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and openWorldHint=true, so the safety profile is covered. The description adds real value beyond that by explaining the downstream failure mode this check guards against and what the response contains. It omits pagination behavior, which keeps it from a 5.
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, zero filler, with the purpose and the return contents front-loaded before the workflow hint. Every clause 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?
No output schema exists, and the description does adequately describe the payload (tags with push time and size) along with the workflow context. The only real omission is how paging works for retrieving beyond the default limit.
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 67%; image_name has a useful schema description and limit documents its default, but page is undocumented in both schema and description. The description adds no parameter-level detail (format, paging), so it neither compensates for the gap nor regresses below baseline.
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 (tags pushed for one image) scoped to the organization's Edgegap registry, and names the concrete return fields (push time, size). This clearly distinguishes it from the app/deployment 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?
Explicitly says when to call it ('after docker push to confirm the tag landed') and what it prevents ('edgegap_create_app_version, which otherwise fails later with an image-pull error'), naming the sibling tool directly.
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_validate_server_configValidate a game server Dockerfile and port configARead-onlyIdempotentInspect
Check a game server Dockerfile and the ports/resources you intend to register against what Edgegap requires, BEFORE building and pushing. Catches the failures that otherwise only show up after a build, push, version and deploy: ARM or Windows images (Edgegap runs linux/amd64), Unreal running as root, missing Unity -batchmode -nographics, a server bound to localhost, EXPOSE ports that do not match the version ports, a protocol that does not match the netcode transport, the "latest" tag, and bad CPU/memory ratios. Pass the Dockerfile text (read it from disk first). If there is no Dockerfile yet, call edgegap_generate_dockerfile instead. Makes no API calls.
| Name | Required | Description | Default |
|---|---|---|---|
| ports | No | Ports you plan to pass to edgegap_create_app_version. | |
| engine | No | Game engine. Detected from the Dockerfile when omitted. | |
| netcode | No | Networking transport, to check the port protocol. Known: mirror-kcp, kcp, mirror-telepathy, telepathy, mirror-simpleweb, simpleweb, websocket, fishnet-tugboat, tugboat, netcode-for-gameobjects, ngo, unity-transport, utp, photon-fusion, litenetlib, enet, unreal-netdriver, godot-enet, godot-websocket. | |
| cpu_units | No | ||
| memory_mb | No | ||
| docker_tag | No | ||
| dockerfile | No | Full text of the Dockerfile. | |
| docker_image | No | ||
| docker_repository | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint and openWorldHint=false, so the safety profile is known. The description still adds real value beyond them: it enumerates the concrete failure classes detected (ARM/Windows images, root Unreal, missing -batchmode -nographics, localhost binding, EXPOSE/version port mismatch, protocol/netcode mismatch, 'latest' tag, bad CPU/memory ratios) and states 'Makes no API calls,' which confirms it is a local static check. It stops short of describing the returned report.
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 purpose and timing are front-loaded in the first sentence, followed by a dense but well-ordered list of concrete failure modes rather than vague hedging. It is long, but nearly every clause names a distinct, actionable check, so little is wasted.
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 9-parameter, no-output-schema validation tool, the description conveys purpose, timing, alternative routing, and the failure classes it catches. The main gap is the shape of the result (pass/fail report, list of issues) and how the optional params like docker_image/docker_repository feed the check.
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 only 44%, so several parameters (cpu_units, memory_mb, docker_tag, docker_image, docker_repository) carry no explanation anywhere. The description partially compensates by telling the agent to pass the Dockerfile text (read from disk first) and by conveying the port/netcode relationship that drives validation, but it adds little for the remaining unlabeled params. Baseline 3 is appropriate given the partial 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 (validate/check) and resource (game server Dockerfile plus ports/resources) scoped against Edgegap's requirements. It explicitly distinguishes itself from edgegap_generate_dockerfile and from the build/push/version/deploy flow, so an agent knows exactly what this tool does and does not do.
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?
Gives explicit timing ('BEFORE building and pushing') and a clear branch condition with an alternative ('If there is no Dockerfile yet, call edgegap_generate_dockerfile instead'). This is exactly the when-to-use / when-not-to-use / alternative structure.
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.
2 tool updates
v0.2.2- Added
edgegap_generate_dockerfile - Changed
edgegap_list_deployments3 fields changed- removed
Input schema / properties / filterRemoved value: -{ - "description": "Edgegap filter expression, e.g. by tag. Omit for all deployments.", - "type": "string" -} - added
Input schema / properties / filtersAdded value: +{ + "description": "Omit for all deployments.", + "items": { + "properties": { + "field": { + "enum": [ + "status", + "request_id", + "tags", + "created_at", + "application", + "version", + "fleet_name", + "host_name" + ], + "type": "string" + }, + "operator": { + "enum": [ + "eq", + "neq", + "in", + "nin", + "gte", + "lte", + "ilike" + ], + "type": "string" + }, + "value": { + "anyOf": [ + { + "type": "string" + }, + { + "items": { + "type": "string" + }, + "type": "array" + } + ], + "description": "A string, or an array of strings for in/nin. created_at is ISO 8601, e.g. \"2026-09-30T00:00:00Z\"." + } + }, + "required": [ + "field", + "operator", + "value" + ], + "type": "object" + }, + "type": "array" +} - added
Input schema / properties / order_byAdded value: +{ + "description": "e.g. [{field:\"created_at\",order:\"asc\"}] for oldest first.", + "items": { + "properties": { + "field": { + "enum": [ + "created_at", + "available_session_sockets" + ], + "type": "string" + }, + "order": { + "enum": [ + "asc", + "desc" + ], + "type": "string" + } + }, + "required": [ + "field", + "order" + ], + "type": "object" + }, + "type": "array" +}
9 tool updates
v0.2.0- Added
edgegap_authorize_relay_user - Added
edgegap_build_matchmaker_config - Changed
edgegap_create_app_version1 field changed- changed
Input schema / properties / ports / items / properties / protocol / descriptionPrevious 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."
- Added
edgegap_create_relay_session - Added
edgegap_delete_relay_session - Added
edgegap_get_registry_credentials - Added
edgegap_get_relay_session - Added
edgegap_list_registry_tags - Added
edgegap_validate_server_config
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 19 tools
Most tools target clearly distinct resources and actions (deploy vs. relay session, create_app vs. create_app_version vs. create_relay_session). The only mild overlaps are edgegap_get_deployment vs. edgegap_wait_for_deployment and edgegap_list_deployments vs. edgegap_get_deployment, but the descriptions explicitly distinguish polling from one-shot reads. Boundaries are well communicated overall.
Every tool uses the edgegap_ prefix with a consistent snake_case verb_noun pattern (list_apps, create_app_version, deploy, get_deployment, stop_deployment, delete_relay_session). The convention is uniform throughout with no camelCase or style mixing.
19 tools is on the heavier side but each maps to a distinct step in a genuinely broad domain (apps, versions, deployments, relays, registry, and build-time helpers). No tool appears redundant, so the count is justified though slightly high.
Covers the full deployment lifecycle (deploy, wait, get, list, stop, logs), app/version creation and listing, registry access, relay session management, and build-time helpers. Minor gaps exist (no delete/update for applications or versions, no explicit list of applications' full settings), but core workflows are complete.
Maintenance
Related MCP Connectors
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.
Build browser games on gamedev.pl from your coding agent.
Related MCP Servers
AlicenseAqualityCmaintenanceEnables AI agents to deploy multiplayer web games as playable URLs with rooms, live state sync, and leaderboards, all through a single tool call.4116 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.1887 npmMIT

MileHost MCP Serverofficial
AlicenseCqualityBmaintenanceEnables AI coding agents to manage cloud containers, create and edit files, run commands, and deploy projects directly.247MIT- AlicenseNot gradedqualityBmaintenanceEnables Codex and other agents to discover live AutoDL GPU stock, produce cost- and time-optimized rental plans with human review, and manage approved Elastic/Pro deployments through the official API.5Apache 2.0