Skip to main content
Glama

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.

Install in Cursor Install in VS Code

👉 Supported Features

TIP

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.

WARNING

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.

NOTE

If you need help,please reach out to us over Discord. For live games support see our ticketing system.

Related MCP server: MileHost 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)

NOTE

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:

  1. Install the MCP server for Popular Agents or with Custom Integration.

  2. 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

CAUTION

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.

TIP

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.

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 user

ChatGPT Codex

codex mcp add edgegap --url https://mcp.edgegap.dev/mcp

Claude Desktop and claude.ai

Custom connectors in claude.ai and Claude Desktop cannot send an Authorization header, so the hosted endpoint never receives your token from them: the connector shows as connected, but every tool call fails. Use the Local Server instead.

In Claude Desktop, open Settings → Developer → Edit Config and add the local server to claude_desktop_config.json:

{
  "mcpServers": {
    "edgegap": {
      "command": "npx",
      "args": ["-y", "@edgegap/mcp"]
    }
  }
}

Leave the token out and you're asked for it on first use. claude.ai in the browser can't run a local server, so it can't use Edgegap MCP until the hosted endpoint supports OAuth.

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.7.1) 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

EDGEGAP_API_TOKEN

(prompted)

API token. Optional: omit it and you're asked at first use. The token prefix is added for you. Never pass it as a command-line argument.

EDGEGAP_READ_ONLY

0

Set to 1 and the eight mutating tools are never registered, so the agent cannot be talked into calling them.

EDGEGAP_APP_ALLOWLIST

(empty)

Comma-separated application names. Limits what the agent can create and deploy into. Reading (listing apps and versions) is not limited, and neither is touching deployments once running. See DESIGN.md.

EDGEGAP_MAX_DURATION_MINUTES

60

Ceiling on max_duration the agent may set on a version.

EDGEGAP_MAX_AGENT_DEPLOYMENTS

5

edgegap_deploy refuses while this many deployments tagged edgegap-mcp are running. 0 turns the cap off.

EDGEGAP_TIMEOUT_MS

30000

Per-request HTTP timeout.

📚 Skills

The server includes the Edgegap agent skills: tested, step-by-step workflows for getting a multiplayer game online, with templates (Dockerfiles, matchmaker configs, Unity C# and Unreal C++ drop-ins) and known pitfalls. Any agent connected to Edgegap MCP gets them, with no separate install and no token needed, and is told to load the matching skill before working on a game project.

Skill

For

edgegap

Start here for any engine other than Unity or Unreal Engine, or platform questions. Routes to the rest.

edgegap-unity

Unity end to end: server build, matchmaker, client, end-to-end test.

edgegap-ngo

Unity with Netcode for GameObjects end to end: server start and self-stop, Find Match panel, Boss Room adapter, matchmaker.

edgegap-fishnet

Unity with FishNet end to end: headless server, Bayou/WebGL, matchmaker, end-to-end test.

edgegap-purrnet

Unity with PurrNet end to end: dedicated server, connect panel, matchmaker, end-to-end test.

edgegap-fusion

Unity with Photon Fusion 2 end to end: IL2CPP Linux server, server bound to 0.0.0.0, Edgegap deployment, BR200 kit.

edgegap-manus

Browser games built with Manus: backend matchmaking, Steam sign-in, signed join tokens, Node WebSocket server.

edgegap-unreal

Unreal Engine end to end: source engine, Linux server, matchmaker, end-to-end test.

edgegap-eos-voice

Voice chat for an Unreal game on Edgegap with EOS Voice: server-side room tokens, match and team rooms.

edgegap-server-design

Authoritative server design and the deployment lifecycle.

edgegap-containerize

The container contract, Dockerfiles, registries, app versions.

edgegap-local-testing

Parity tests on your machine, then one smoke-test deployment.

edgegap-troubleshoot

Pull errors, crash loops, out-of-memory, clients that can't connect.

edgegap-deployments-api

Backend code that deploys servers: webhooks, cleanup, Nakama, PlayFab, UGS, EOS.

edgegap-launch

Launch checklist, rollouts, caching, cost control.

They're served three ways, so every MCP client can reach them:

  • Tools: edgegap_list_skills and edgegap_get_skill, which loads a skill's SKILL.md, or one of its reference documents or templates with file.

  • Prompts: one per skill, named after it. In Claude Code they show up as slash commands, e.g. /mcp__edgegap__edgegap-unity.

  • Resources: one per file, at edgegap-skill://<skill>/<path>, e.g. edgegap-skill://edgegap-unity/references/deploy.md.

Each release bundles the skills at the commit pinned in scripts/skills-pin.txt; edgegap_context reports which pack is loaded. If you also installed the skills locally (the Claude Code plugin or npx skills add), they're the same pack.

🧰 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, accept dry_run, and are hidden when EDGEGAP_READ_ONLY=1.

Tool

What it does

edgegap_context

Shows which API this server talks to, its version, local or hosted, and the guardrails in force. No API call; never shows the token.

Before Your First Deployment

Tool

What it does

edgegap_generate_dockerfile

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 -batchmode -nographics, Godot --headless), a non-root user for Unreal, and matching ports. Lists anything it had to assume so your agent can confirm it. Works for Unity, Unreal Engine, Godot, and any other engine.

edgegap_validate_server_config

Checks an existing Dockerfile, ports, resources, and image tag before you build. Catches ARM or Windows images (Edgegap runs linux/amd64), Unreal servers running as root, missing Unity -batchmode -nographics, servers bound to localhost, ports that don't match your netcode transport, and the latest tag.

edgegap_get_registry_credentials ●

Returns push credentials for your private Edgegap container registry, with the exact docker login, build, and push commands. Edgegap only gives these to the Unity/Unreal plugins' quick-start token; with a regular API token, it tells your agent to ask you for the login from the dashboard's Container Registry page instead.

edgegap_list_registry_tags

Confirms your image push landed before you register it. Takes the image name only, e.g. my-game-server: the project comes from your token.

edgegap_delete_registry_tag ●

Deletes one tag, and the image it points to, to clean up old builds. One exact tag per call; latest, wildcards and lists are refused.

Tool

What it does

edgegap_list_apps

Lists your applications.

edgegap_create_app ●

Creates an application.

edgegap_update_app ●

Turns an application on or off for new deployments.

edgegap_list_app_versions

Lists versions with their image, resources, ports (with TLS Upgrade), and whether a registry login is set.

edgegap_get_app_version

Reads one version in full: image, resources, ports, max duration, image caching, restart policy, and env var names (never values).

edgegap_create_app_version ●

Registers a container image as a deployable version. Supports TLS Upgrade on WS and HTTP ports, which browser (WebGL) clients need for wss://.

edgegap_update_app_version ●

Changes an existing version: a new image tag, on/off, max duration, registry login, image caching (force_cache), shutdown grace period. Only the fields passed change; running deployments keep the old settings.

edgegap_list_locations

Lists the cities Edgegap deploys to, or, for one version, only those with capacity right now.

edgegap_list_ping_beacons

Lists the ping beacons game clients measure latency against before matchmaking.

edgegap_deploy ●

Deploys an authoritative dedicated server close to your players. Always tagged edgegap-mcp, and reports when Edgegap will stop it.

edgegap_wait_for_deployment

Waits until the server is ready and returns the connection address.

edgegap_get_deployment

Reads a deployment's status.

edgegap_list_deployments

Lists running deployments, filtered by application, version, status, tags and more, and sorted by age. Finds servers left running; only_agent_deployments: true lists every one an agent started. See Filter Deployments.

edgegap_get_deployment_logs

Reads container logs and crash details while the deployment runs. After it stops, logs are only kept if Endpoint Storage was set up.

edgegap_get_deployment_metrics

Summarises CPU, CPU throttling, memory and network use (latest, average, peak), to size a version or check a crash.

edgegap_stop_deployment ●

Stops one deployment, by its exact request ID. No bulk stop.

Matchmaking

Tool

What it does

edgegap_build_matchmaker_config

Generates a matchmaker configuration (teams, team size, optional latency rules and expansions) and checks that the version it deploys exists. Set allowed_cors_origins for browser (WebGL) clients. 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

edgegap_create_relay_session ●

Creates a relay session for your players and returns the relay address and each player's authorization token.

edgegap_get_relay_session

Reads a relay session.

edgegap_list_relay_sessions

Lists open relay sessions, to find ones left running. No authorization tokens.

edgegap_authorize_relay_user ●

Adds a player who joins later.

edgegap_revoke_relay_user ●

Removes one player from a relay session.

edgegap_delete_relay_session ●

Closes a relay session.

WARNING

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."

🛡️ Guardrails

Your API token can do anything in your organization, so the server adds its own limits around what an agent does with it. They apply in both the local server and the hosted endpoint.

Guardrail

What it does

Dry run

Every tool that changes something takes dry_run: true: it returns the exact method, host, path and body, with the token, registry tokens and env values masked, and sends nothing. Local checks still run.

No token in containers

A deploy or version is refused, with nothing sent, if your API token appears in an env var name or value, a tag, or a webhook URL. Env values are never echoed back.

Agent tag

Every deployment gets the edgegap-mcp tag, even when the agent passes its own tags. edgegap_list_deployments with only_agent_deployments: true finds them all.

Auto-stop

Every deploy reports when Edgegap will stop it: the version's max_duration, capped at EDGEGAP_MAX_DURATION_MINUTES (default 60) for versions the agent creates. Edgegap has no per-deployment time limit, so a version made elsewhere can run up to its own limit (1440 minutes by default); the result warns when it is over an hour or unlimited.

No moving image tags

edgegap_create_app_version refuses latest (any case), an empty tag, or a tag Docker would reject, with nothing sent: Edgegap caches images by tag, so a re-pushed tag can deploy a stale build. Deploying an existing version on latest is refused too, and so is asking for registry push commands for latest.

Image reference check

A docker_image that also holds a registry host, tag or digest (e.g. registry.edgegap.com/proj/server:v2) is refused, and the error gives the right docker_repository / docker_image / docker_tag split. edgegap_validate_server_config flags the same things.

Deployment cap

edgegap_deploy is refused while EDGEGAP_MAX_AGENT_DEPLOYMENTS (default 5) deployments tagged edgegap-mcp are already running, so a looping agent cannot pile up billing servers. The refusal says how to list and stop them.

Hidden secret env vars

Env vars whose names look like secrets (TOKEN, SECRET, PASSWORD, API_KEY, CREDENTIAL, AUTH…) are sent with is_hidden, so the dashboard does not show their values in plain text.

Strict stop

edgegap_stop_deployment stops one deployment by its exact request ID. Empty IDs, wildcards and lists are refused. There is no bulk stop.

Host on every result

Every result starts with the API host, e.g. [api.edgegap.com], or [custom · host] when EDGEGAP_BASE_URL points elsewhere. A base URL naming api.edgegap.com must be exactly https://api.edgegap.com, or the server refuses to start.

Redaction

The token is stripped from every error before it reaches the agent.

The server identifies itself with User-Agent: edgegap-mcp/<version> (<MCP client name>) on every API call.

Usage analytics. The local server and the self-hosted Docker image send nothing beyond the API calls themselves. The hosted endpoint at mcp.edgegap.dev uses PostHog MCP Analytics (@posthog/mcp) and sends usage events to Edgegap's PostHog: which MCP client connected, which tool, prompt or skill resource was used, the names (not values) of the arguments passed, whether a call succeeded and its error category, how long it took, and whether it was a dry run, plus the server version and Cloudflare's country code. Only named metadata properties are let through. It never sends your token, tool argument values (IP addresses, env vars, app or image names), results or error text, and GeoIP is off. It adds no parameters to the tools. Events from one token are grouped under a keyed, non-reversible hash of it. To opt out, send the header X-Edgegap-Telemetry: off (or DNT: 1), or use the local server.

🚨 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

Edgegap only gives registry credentials to the quick-start token the Unity and Unreal plugins use, so with a regular API token your agent can't retrieve them and asks you instead. Copy the Project, Username and Token from 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.

NOTE

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-mcp

Clients 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, EDGEGAP_MAX_DURATION_MINUTES and EDGEGAP_MAX_AGENT_DEPLOYMENTS apply. Read worker/DECISION.md before exposing it beyond a private network.

Prebuilt images for linux/amd64 and linux/arm64 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:main

Development

See CONTRIBUTING.md for the checks a change has to pass, CHANGELOG.md for what each version changed, and SECURITY.md to report a vulnerability.

npm ci
npm run build
npm test                  # mock-API tests; none reach Edgegap
npm run typecheck:worker

To update the bundled skills to the latest commit of edgegap-agent-skills, then release as usual:

npm run sync-skills -- --ref main
npm run check-skills      # exit 1 if src/skills.generated.ts differs from the pin

Test

Covers

test/unit.test.mjs

Unit tests for the tag, image, secret-name, URL and redaction rules

test/package.mjs

Packaging: one bin, runtime dependencies, versions in step

test/skills.mjs

Skills over MCP: tools, prompts, resources, path safety, bundle matches the pin

test/smoke.mjs

Handshake, tool registration, read-only mode

test/guards.mjs

Local validation and allowlist enforcement

test/elicit.mjs

Token prompt: accept, refuse acknowledgement, decline, no support

test/newtools.mjs

Validator, Dockerfile generator, registry, deployments, relay and matchmaker tools against a local mock API

test/http.mjs

Self-hosted HTTP server: discovery without a token, per-request tokens, foreign credentials

test/spec.mjs

Every endpoint and request-body field the server sends is in spec/ (write tools checked by dry run)

test/snapshot.mjs

Tool names, descriptions, schemas and the instructions match test/tools.snapshot.json; npm run snapshot:update after a deliberate change

test/live-check.mjs

Not in npm test. Runs against the real API with a token from a non-production organization

Design decisions, the security model, and what's deliberately out of scope are in DESIGN.md.

Available Tools

31 tools
edgegap_authorize_relay_userAdd a player to a relay sessionA
Idempotent
Inspect

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
dry_runNoShow the exact request (method, host, path, body) with secrets masked, and send nothing. Local checks still run. Use it to confirm a billable or destructive call before making it.
user_ipYesPublic IP of the joining player.
session_idYes

TDQS

A4/5.0
Behavior3/5

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

Annotations already declare openWorldHint, idempotentHint=true, and destructiveHint=false, so the safety profile is covered. The description usefully adds that a per-player authorization token is returned, but says nothing about what a repeat call for an already-authorized IP does, even though idempotency is asserted.

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

Conciseness5/5

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

Two sentences, zero filler, with the action and the triggering scenario front-loaded before the return value. Nothing redundant with the title or schema.

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

Completeness4/5

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

For a small three-parameter mutation with annotations present, the description covers the action, the scenario, and the returned token (no output schema exists, so this is needed). Remaining gaps are error/repeat-call behavior against a non-existent or already-authorized player.

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

Parameters3/5

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

user_ip and dry_run are fully documented in the schema; session_id has no schema description at all. The description partially compensates by stating the session must already exist and the IP is public, but adds no format or constraint detail. This matches a baseline 3 at 67% coverage.

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

Purpose5/5

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

States a specific verb (authorize) plus resource (relay session / player) and scope ('one more player... joining after the session was created'). This cleanly separates it from edgegap_create_relay_session, edgegap_get_relay_session, and edgegap_delete_relay_session in the sibling set.

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

Usage Guidelines4/5

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

Gives a clear usage condition: use it for a player joining after the session already exists, which implies create_relay_session handles players present at creation. It stops short of naming that sibling or stating exclusions such as duplicate authorization of an already-authorized IP.

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 configurationA
Read-onlyIdempotent
Inspect

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
inspectNoExpose the inspection API for debugging. Default true; turn off for production.
versionYesVersion the matchmaker deploys.
expansionsNoRule relaxations after a player has waited this long, e.g. [{after_seconds: 30, min_team_size: 1}].
team_countYesTeams per match. 1 for free-for-all or co-op.
applicationYesApplication the matchmaker deploys.
profile_nameYesProfile clients will queue into, e.g. "casual-2v2".
max_team_sizeYes
min_team_sizeYes
max_latency_msNoAdds a latency rule: drop players above this ping to the chosen region. Needs beacon pings from the client.
verify_versionNoLook up the application version first. Default true.
ticket_expirationNoDefault "5m".
allowed_cors_originsNoOrigins of web pages allowed to call the matchmaker, e.g. ["https://mygame.example.com", "http://localhost:8080"]. Required when game clients run in a browser (WebGL): browsers block matchmaker calls from any origin not listed. Scheme and host only, no path.
latency_difference_msNoMax ping spread between matched players. Default 100.

TDQS

A4.3/5.0
Behavior4/5

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

Annotations already signal read-only/idempotent, which is consistent with a generator. The description adds real behavioral detail beyond annotations: it performs a lookup that verifies the referenced application version exists and has ports, and it explicitly clarifies that no server-side object is created and the developer must upload the config manually. It does not cover the inspect/verify_version toggles or failure modes when verification fails.

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

Conciseness4/5

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

Front-loaded with the concrete artifact and its contents, then the critical caveat about manual upload. Four sentences all carry weight, though the closing sentence about authoritative dedicated servers is more recommendation than instruction and could be trimmed.

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

Completeness4/5

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

For a 13-parameter generator with no output schema, the description explains what is produced, what is verified, and what to do with the result. It does not describe the shape of the returned JSON beyond 'config', but the schema and the tool's generative nature make that a minor gap.

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

Parameters4/5

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

Schema coverage is already 85%, so the baseline is 3, but the description adds conceptual meaning the schema lacks: expansions are described as time-based rule relaxations ('relax the rules the longer a player waits'), and the latency rule is tied to the profiles's matching behavior. The two undocumented team-size parameters are only generically covered as 'team size'.

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

Purpose5/5

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

States a specific verb and artifact: generate a ready-to-upload Edgegap matchmaker JSON configuration, plus the exact contents (team count/size, optional latency rule, optional expansions). No sibling tool produces matchmaker configs, and the description makes that boundary obvious.

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

Usage Guidelines4/5

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

Gives a clear when-to-use context and an explicit when-not: 'Edgegap has no API for creating a matchmaker, so this tool does NOT create one.' It also prescribes the follow-up workflow (save to file, upload manually on the dashboard). It stops short of pointing to any alternative or prerequisite sibling tools (e.g. app-version lookup tools), so not a full 5.

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

edgegap_contextShow this Edgegap MCP server's configuration
Read-onlyIdempotent
Inspect

Report which Edgegap API this server talks to, its version, whether it is the local or hosted server, and the guardrails in force: read-only mode, application allowlist, max_duration ceiling, the agent deployment cap, the tag forced onto every deployment, and which tools support dry_run. Call it first when unsure what this session is allowed to do, or before anything billable. Makes no API call and never shows the token.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
nameYesApplication name, 3-64 chars. Usually the game or project name.
dry_runNoShow the exact request (method, host, path, body) with secrets masked, and send nothing. Local checks still run. Use it to confirm a billable or destructive call before making it.
is_activeNoWhether deployments are allowed. Default true.

TDQS

A4.4/5.0
Behavior4/5

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

Annotations declare openWorldHint, non-idempotent, non-destructive, but say nothing about side effects. The description adds real behavioral value by clarifying that creation 'does not deploy anything' and must be followed by edgegap_create_app_version, preventing a common misunderstanding. It does not cover auth requirements or what happens to the name if it already exists, so it stops short of 5.

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

Conciseness5/5

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

Three tight sentences: the action first, the precondition second, the follow-up step third. No repetition of schema or title content and nothing extraneous.

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

Completeness4/5

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

With no output schema, an agent still learns the logical next call, which partially compensates. The remaining gap is that the description never indicates what is returned (e.g. whether an application ID comes back for use in edgegap_create_app_version), though the chained-tool guidance makes the call sequence unambiguous.

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

Parameters3/5

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

Schema coverage is 100% and the parameter descriptions (name constraints, dry_run semantics, is_active default) are already richer than anything the description offers. The description adds no parameter-level meaning, so the baseline 3 applies.

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

Purpose5/5

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

States a specific verb+resource ('Create a new application') and immediately clarifies what an application is ('to hold game server versions'), distinguishing it from version-creation and deployment siblings. An agent can identify it without opening the schema.

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

Usage Guidelines5/5

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

Gives an explicit precondition ('Only call this after edgegap_list_apps confirms no suitable application exists') naming the alternative tool and the condition that selects it, plus the required follow-up step (edgegap_create_app_version). Both when-to-use and what-comes-next are covered.

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 versionInspect

Register a container image as a deployable version of an application. The image must already be pushed to a registry that Edgegap can pull from (see edgegap_get_registry_credentials and edgegap_list_registry_tags). Resource units: 1024 cpu units = 1 vCPU; memory_mb must be at least 256 and at most double the cpu units. Set verify_image true on the first version so a bad image fails here rather than at deploy time. Refused, with nothing sent, for the "latest" or an empty docker tag (use a build ID so deployments are reproducible) and for a docker_image that also holds a registry host or tag. Env vars named like secrets (TOKEN, SECRET, PASSWORD, API_KEY…) are hidden in the dashboard.

ParametersJSON Schema
NameRequiredDescriptionDefault
envNoEnvironment variables injected into the container. Values are never echoed back.
nameYesVersion identifier, typically a build ID or timestamp.
portsYesPorts to expose. At least one is required for players to connect.
dry_runNoShow the exact request (method, host, path, body) with secrets masked, and send nothing. Local checks still run. Use it to confirm a billable or destructive call before making it.
cpu_unitsYesvCPU units. 1024 = 1 vCPU.
memory_mbYesMemory in MB. At most 2x cpu_units.
docker_tagYesImage tag: a build ID, commit SHA or timestamp. "latest" and empty tags are refused.
applicationYesExisting application name.
docker_imageYesNamespaced image, e.g. "mystudio/game-server".
verify_imageNoVerify Edgegap can pull the image before accepting the version.
registry_tokenNoRegistry password or token.
docker_repositoryYesRegistry host, e.g. "docker.io" or "registry.edgegap.com".
registry_usernameNoRegistry username. Needed for private images, including images in your own registry.edgegap.com project: Edgegap pulls with this login, not your API token.
max_duration_minutesNoAuto-stop after this many minutes. Keeps test deployments from running up cost.
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.

ParametersJSON Schema
NameRequiredDescriptionDefault
dry_runNoShow the exact request (method, host, path, body) with secrets masked, and send nothing. Local checks still run. Use it to confirm a billable or destructive call before making it.
user_ipsYesPublic IP of each player, host first. Add late joiners with edgegap_authorize_relay_user.
webhook_urlNoCalled when the session is ready.
timeout_secondsNoDefault 30.
wait_until_readyNoPoll until the relay is assigned. Default true.

TDQS

A4.6/5.0
Behavior5/5

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

Annotations only give the openWorld/idempotent/destructive profile; the description adds genuinely new behavioral context: relay sessions are billed while open, the call blocks until ready, the host is created first, and it returns the relay address plus per-player authorization tokens. The security caveats (host can cheat, host latency advantage, match dies if host quits) further explain the operational consequences of choosing this path.

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

Conciseness4/5

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

Efficient in substance — every sentence is decision-relevant — but the action itself is deferred behind two long admonition paragraphs, and the 'not the default' warning is repeated in both the opening and the 'Only use this when' sentence. Slightly wordier than needed, though justified by the misuse risk.

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

Completeness5/5

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 value (relay address + per-player tokens) and the async readiness behavior. It also covers billing, cleanup via edgegap_delete_relay_session, and late-joiner handling, so an agent has everything needed to call and manage the session correctly.

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

Parameters3/5

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

Schema description coverage is 100%, so the schema already documents user_ips, webhook_url, timeout_seconds, wait_until_ready, and dry_run. The description reinforces the host-first ordering and mentions per-player tokens but adds no syntax or format detail beyond the schema, so baseline 3 applies.

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

Purpose5/5

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

States a specific verb+resource ('Creates an Edgegap relay session') and immediately distinguishes it from the sibling edgegap_deploy by naming the dedicated-server alternative. It also names edgegap_authorize_relay_user and edgegap_delete_relay_session, so an agent can place it precisely in the relay workflow without opening a schema.

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

Usage Guidelines5/5

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

Explicitly states when to use it ('developer has chosen peer-to-peer/host-client', listen-server netcode) and when not ('not the recommended default', 'Never pick it only because it needs no server image'), names the preferred alternative (edgegap_deploy), and adds a fallback instruction to ask first if the netcode hasn't been established.

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

edgegap_delete_registry_tagDelete one image tag from the Edgegap registry
DestructiveIdempotent
Inspect

Delete one tag, and the image it points to, from this organization's Edgegap container registry, to clean up old builds. Takes exactly one image name and one exact tag; wildcards, lists and "latest" are refused, and there is no bulk delete. A version that still uses the tag can no longer start deployments, so check edgegap_list_app_versions first. Cannot be undone.

ParametersJSON Schema
NameRequiredDescriptionDefault
tagYesThe exact tag to delete, e.g. "build-41".
dry_runNoShow the exact request (method, host, path, body) with secrets masked, and send nothing. Local checks still run. Use it to confirm a billable or destructive call before making it.
image_nameYesThe image name only, e.g. "my-game-server", as for edgegap_list_registry_tags.
edgegap_delete_relay_sessionDelete a relay sessionA
DestructiveIdempotent
Inspect

Close one relay session. Connected players lose their relay connection. Delete every session you created for testing before ending your task. Takes exactly one session_id; empty IDs, wildcards and lists are refused.

ParametersJSON Schema
NameRequiredDescriptionDefault
dry_runNoShow the exact request (method, host, path, body) with secrets masked, and send nothing. Local checks still run. Use it to confirm a billable or destructive call before making it.
session_idYesThe exact session_id of the one session to delete, e.g. "0724828881e2-S".

TDQS

A4.3/5.0
Behavior4/5

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

Annotations already declare destructiveHint and idempotentHint, but the description adds the human-facing consequence - connected players lose their relay connection - which is not derivable from annotations. It also documents input validation behavior (empty IDs, wildcards and lists refused), useful operational context.

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

Conciseness4/5

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

Four short sentences, front-loaded with the action and its blast radius, then the cleanup rule, then the input constraint. Every sentence carries information; only the imperative cleanup guidance borders on advisory rather than definitional.

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

Completeness4/5

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

For a no-output-schema destructive delete, the description supplies impact, scope, validation, and the dry_run escape hatch is documented in the schema itself. Nothing essential is missing, though return/error behavior is left implicit.

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

Parameters4/5

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

Schema coverage is 100%, so baseline would be 3, but the description adds a real constraint - exactly one session_id, wildcards and lists refused - that tightens interpretation of the single string parameter beyond the schema's per-parameter wording.

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

Purpose5/5

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

States a specific verb (close/delete) and resource (relay session) with explicit single-item scope, which cleanly separates it from the get_relay_session, create_relay_session, and authorize_relay_user siblings.

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

Usage Guidelines4/5

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

Gives a concrete when-to-use rule (delete every test session you created before ending your task), which is real workflow guidance. It stops short of naming alternatives or stating when-not to use, so it is clear context rather than full routing guidance.

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 serverInspect

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. Every deployment is tagged "edgegap-mcp" in addition to any tags you pass, so edgegap_list_deployments with only_agent_deployments: true finds them all. Runs until stopped or until the version's max_duration, which the result reports. Refused, with nothing sent, if the API token appears in an env var or tag, if the version uses the "latest" docker tag, or when too many agent deployments are already running (EDGEGAP_MAX_AGENT_DEPLOYMENTS, default 5): stop finished ones first. Env vars named like secrets are hidden in the dashboard.

ParametersJSON Schema
NameRequiredDescriptionDefault
envNoEnvironment variables for this deployment only. Values are never echoed back.
tagsNoExtra tags for filtering later, e.g. ["agent-test"]. "edgegap-mcp" is always added.
usersYesWhere the players are. Exactly one of these two is required.
dry_runNoShow the exact request (method, host, path, body) with secrets masked, and send nothing. Local checks still run. Use it to confirm a billable or destructive call before making it.
versionYesVersion name within the application.
cpu_unitsNoOverride the version CPU (with memory_mb). Not in the published v2 spec, so the API may ignore it; a version with the size you need is the reliable way.
memory_mbNoOverride the version memory (with cpu_units). Same caveat as cpu_units.
applicationYesApplication name.
edgegap_generate_dockerfileGenerate a game server DockerfileA
Read-onlyIdempotent
Inspect

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
portsNoPorts the server listens on. Default: 7777, with the protocol the netcode uses (UDP if unknown).
engineYesGame engine of the server build.
netcodeNoNetworking 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_imageNoDefault "ubuntu:22.04".
build_pathNoServer build folder, relative to where docker build runs. Defaults: unity "Builds/EdgegapServer", unreal "." (run from inside the packaged LinuxServer folder), godot "build".
executableNoFile 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_argsNoExtra server arguments, one per entry, e.g. ["-log", "-port=7777"].

TDQS

A4.7/5.0
Behavior5/5

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

Annotations already declare readOnly/idempotent/closed-world, but the description adds substantial behavior beyond them: engine-specific quirks (Unreal refuses root, Unity -batchmode -nographics, Godot --headless), CRLF fixing, and the assumption-listing contract for omitted parameters. It also states 'Makes no API calls' and that output is validated before return, which an agent needs to trust the result.

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

Conciseness4/5

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

Front-loaded with verb+artifact before the detail, and every clause is informational rather than filler. The primary sentence is an unusually long run-on list of generated content, which slightly hurts scanability but not correctness.

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

Completeness4/5

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

Covers trigger, prerequisites, assumption handling, downstream validation and the fact that no API is called, which is thorough for a 7-parameter generation tool with no output schema. It does not explicitly state the returned payload shape or overwrite behavior if a Dockerfile already exists, a minor residual gap.

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

Parameters4/5

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

Schema coverage is 100%, so the schema documents defaults, enums and ranges for all seven parameters. The description still adds value by explaining the assumption mechanism for omitted values (they are assumed and surfaced for confirmation), which changes how an agent should treat partial input rather than just what the fields mean.

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

Purpose5/5

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

States a specific verb and artifact (write a Dockerfile) for a defined resource (this project's headless game server build) and enumerates concrete content it will produce. It explicitly names a sibling, edgegap_validate_server_config, which the output is checked against, so an agent can place it relative to the rest of the toolset without opening schemas.

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

Usage Guidelines5/5

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

Gives an explicit trigger and preconditions: 'Call this when the project has no Dockerfile, before building anything,' plus a preceding step ('Look at the build output first so you can pass the real build folder...'). It also routes the follow-up ('Write the result to Dockerfile, then build') and names the validation sibling, leaving little to inference.

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

edgegap_get_app_versionGet one application version
Read-only
Inspect

Read one version in full: image, resources, ports, max_duration, whether image caching (force_cache) and verify_image are on, restart policy, and the names of its env vars (values are never shown). Use it before edgegap_update_app_version or edgegap_deploy to check what a version will do.

ParametersJSON Schema
NameRequiredDescriptionDefault
versionYesVersion name, as listed by edgegap_list_app_versions.
applicationYesApplication name.
edgegap_get_deploymentGet deployment statusA
Read-only
Inspect

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
request_idYesThe request_id returned by edgegap_deploy.

TDQS

A4.5/5.0
Behavior4/5

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.

Conciseness5/5

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.

Completeness5/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines5/5

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 deploymentA
Read-only
Inspect

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
request_idYesThe request_id of the deployment.
max_charactersNoTruncate logs to this length, keeping the tail. Default 8000.

TDQS

A4.3/5.0
Behavior4/5

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.

Conciseness5/5

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.

Completeness5/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines4/5

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_deployment_metricsGet CPU, memory and network use of a deployment
Read-only
Inspect

Summarise a deployment's resource use over time: CPU, CPU throttling, memory and network, each as latest, average and peak, with the API's own labels. Use it to size a version (cpu_units, memory_mb) from a real match, or to check whether a crash was memory or CPU starvation before redeploying. Defaults to the whole life of the deployment.

ParametersJSON Schema
NameRequiredDescriptionDefault
stepNoAveraging step, e.g. "30s" or "5m". Default: the API's.
end_timeNoISO 8601. Default: now, or when it stopped.
request_idYesThe request_id of the deployment.
start_timeNoISO 8601. Default: when the deployment started.
edgegap_get_registry_credentialsGet Edgegap container registry push credentialsA
Idempotent
Inspect

Get the push login for this organization's private Edgegap container registry (registry.edgegap.com) and the exact docker login, build and push commands for your image. Use this when the server image is not in a registry yet. Edgegap only hands these credentials to the quick-start token the Unity/Unreal plugins use; with a regular API token this tool cannot fetch them and instead returns the steps to copy them from the dashboard's Container Registry page — ask the developer for them then, do not retry. When it does return a token, it 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.

ParametersJSON Schema
NameRequiredDescriptionDefault
tagNoUnique build tag for the commands, e.g. a build ID. Never "latest".
image_nameNoImage name without project or tag, e.g. "my-game-server". Used to build the commands.

TDQS

A4.5/5.0
Behavior5/5

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

Far exceeds the annotations (which only say non-read-only, idempotent, non-destructive). It discloses the token-scope behavior (quick-start vs regular API token), the fallback response when credentials are unavailable, and handling constraints (registry-scoped token, use --password-stdin, never a CLI argument, never written to files).

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

Conciseness4/5

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

Front-loaded with the purpose and the registry URL, then ordered by decision flow (when to use → auth caveat → token handling → prerequisite). It is long at roughly 110 words, but nearly every sentence encodes a security or routing constraint that cannot be dropped.

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

Completeness4/5

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

Covers auth behavior, fallback path, token hygiene, and a prerequisite tool, which is substantial for a credential tool with no output schema. It does not state what happens if the optional 'tag' or 'image_name' are omitted, a minor gap given the 0 required parameters.

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

Parameters3/5

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

Schema description coverage is 100%, so the schema already documents both 'tag' (never "latest") and 'image_name' (pattern, no project/tag). The description only adds that the returned commands are built 'for your image', which is implied. Baseline 3 applies when the schema carries parameter meaning.

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

Purpose5/5

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

States a specific verb+resource: fetching push login credentials for the organization's private Edgegap container registry, plus the exact docker login/build/push commands. It is clearly distinguishable from the sibling edgegap_list_registry_tags, which only lists tags rather than supplying credentials.

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

Usage Guidelines5/5

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

Explicitly says when to use it ('when the server image is not in a registry yet'), when it will not work ('with a regular API token this tool cannot fetch them... do not retry'), what to do instead (copy from the dashboard, ask the developer), and names a prerequisite sibling ('Call edgegap_validate_server_config before building').

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 sessionA
Read-only
Inspect

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
session_idYesReturned by edgegap_create_relay_session.

TDQS

A4.5/5.0
Behavior4/5

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.

Conciseness5/5

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.

Completeness5/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines5/5

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_get_skillLoad an Edgegap agent skill
Read-onlyIdempotent
Inspect

Load one Edgegap agent skill: its SKILL.md (the workflow to follow) by default, or one of its reference documents or templates with file. Load the matching skill before acting on a game project — edgegap-ngo for Unity with Netcode for GameObjects, edgegap-fishnet for Unity with FishNet, edgegap-purrnet for Unity with PurrNet, edgegap-fusion for Unity with Photon Fusion 2, edgegap-unity for other Unity projects, edgegap-unreal for Unreal Engine (edgegap-eos-voice for voice chat), edgegap-fusion-simplefps for the Photon Simple FPS sample, edgegap-godot for Godot 4 with a Godot server, edgegap-colyseus for a Colyseus server, edgegap-nakama for a Nakama backend, edgegap-playfab for PlayFab Matchmaking, edgegap-manus for a browser game built with Manus, edgegap otherwise — and fetch the references and templates it points to as you reach them. No API call.

ParametersJSON Schema
NameRequiredDescriptionDefault
fileNoA file inside the skill, e.g. "references/deploy.md" or "assets/docker/Dockerfile". Default SKILL.md.
skillYesSkill name, from edgegap_list_skills: edgegap, edgegap-colyseus, edgegap-containerize, edgegap-deployments-api, edgegap-eos-voice, edgegap-fishnet, edgegap-fusion, edgegap-fusion-simplefps, edgegap-godot, edgegap-launch, edgegap-local-testing, edgegap-manus, edgegap-nakama, edgegap-ngo, edgegap-playfab, edgegap-purrnet, edgegap-server-design, edgegap-troubleshoot, edgegap-unity, edgegap-unreal.
edgegap_list_appsList Edgegap applicationsA
Read-only
Inspect

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
pageNo
limitNoResults per page. Default 50.

TDQS

A3.9/5.0
Behavior3/5

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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters2/5

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.

Purpose5/5

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

Opens with a specific verb and resource: '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.

Usage Guidelines4/5

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 applicationA
Read-only
Inspect

List the versions under an application, with their container image, resources, ports (including whether TLS Upgrade is on, which browser/WebGL clients need for wss://) and whether a registry login is set for pulling the image. Use this to find the version name to deploy, to check a version is ready before deploying, or to copy settings from a working version when creating a new one.

ParametersJSON Schema
NameRequiredDescriptionDefault
applicationYesApplication name, as returned by edgegap_list_apps.

TDQS

A4.3/5.0
Behavior4/5

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 goes further by disclosing the returned content, including the non-obvious detail that ports carry a TLS Upgrade flag needed by browser/WebGL clients for wss://, plus whether registry credentials exist for image pulls. It omits pagination/ordering behavior, which keeps 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.

Conciseness4/5

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

Front-loaded with the verb and the returned fields, then the usage sentence. Every clause carries information; the descriptions of returned fields are dense but each one (TLS Upgrade, registry login) is actionable and not padded.

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

Completeness4/5

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

There is no output schema, so the description correctly carries the burden of describing return values and does so thoroughly. Remaining gaps are minor for a scoped list-under-a-parent call: no mention of ordering or pagination limits, and no explicit note that a nonexistent application errors.

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

Parameters3/5

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

Only one parameter and schema description coverage is 100%, so the schema already explains 'application' and even cross-references edgegap_list_apps as the source. The description adds no syntax, naming, or format constraints beyond the schema, which is the expected baseline.

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

Purpose5/5

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

States a specific verb and resource ('List the versions under an application') and immediately enumerates the payload the agent will get back (container image, resources, ports/TLS, registry login). This is clearly distinguishable from edgegap_list_apps and edgegap_list_registry_tags, which operate on different resources.

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

Usage Guidelines5/5

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

Explicitly names three concrete use cases: finding the version name to deploy, verifying a version is ready before deploying, and copying settings when creating a new one. The last two also route implicitly to edgegap_deploy and edgegap_create_app_version, so the agent knows when this tool is the right first step.

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 deploymentsA
Read-only
Inspect

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. To find every deployment an agent started through this server, pass only_agent_deployments: true (the same as filtering tags in ["edgegap-mcp", "mcp"]).

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNoDefault 50.
filtersNoOmit for all deployments.
order_byNoe.g. [{field:"created_at",order:"asc"}] for oldest first.
only_agent_deploymentsNoOnly deployments started through this server: tagged "edgegap-mcp", or "mcp" by versions up to 0.3.3. Cannot be combined with a tags filter.

TDQS

A4.4/5.0
Behavior4/5

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 constraints beyond that: at most one filter per field, operator availability varies by field, and only_agent_deployments cannot be combined with a tags filter. It does not describe the return shape or result volume, which is a minor gap for a tool with no output schema.

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

Conciseness4/5

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

Purpose and the motivating use case are front-loaded, followed by the filter grammar. It is long, but the length is driven by genuinely dense query semantics rather than filler, and it includes worked examples. Slightly heavy for a single description but each clause carries information.

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

Completeness4/5

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

For a read-only, annotated list tool whose schema already defines limit and filter structure, the description supplies enough to call it correctly, including caveats and examples. The remaining gap is that it never characterizes the returned deployment objects, which matters somewhat given there is no output schema.

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

Parameters5/5

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

Schema coverage is 100%, setting the baseline at 3, but the description meaningfully exceeds it: it maps which operators are valid per field (eq/neq everywhere except created_at, which uses eq/gte/lte; in/nin on specific fields; ilike with % wildcards only on fleet_name and host_name) and documents the only_agent_deployments equivalence to a tags filter. That per-field operator grammar is not inferable from the schema's flat operator enum.

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

Purpose5/5

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

Opens with a specific verb+resource+scope ("List active deployments, optionally filtered and sorted"), which cleanly distinguishes it from the singular edgegap_get_deployment and from edgegap_deploy/edgegap_stop_deployment. An agent can identify the operation without opening the schema.

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

Usage Guidelines4/5

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

Gives a concrete when-to-use scenario with a rationale: find deployments left running from earlier sessions before starting new ones because orphaned servers cost money. It also routes a special case (only_agent_deployments for agent-started servers). It stops short of naming explicit alternatives for single-deployment lookups (get_deployment) or exclusions.

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

edgegap_list_locationsList where servers can run
Read-only
Inspect

List the cities Edgegap can deploy to. Pass application and version to see only the locations with capacity for that version right now. Use it to pick geo_coordinates for edgegap_deploy when you have no player IPs, or to tell a developer where their players can be served from. For the ping beacons game clients use to measure latency, see edgegap_list_ping_beacons.

ParametersJSON Schema
NameRequiredDescriptionDefault
pageNo
limitNoDefault 100.
versionNo
applicationNoWith version: only locations with capacity for it now.
edgegap_list_ping_beaconsList ping beacons
Read-only
Inspect

List Edgegap's ping beacons: one host per region that a game client can ping (UDP or TCP) to measure its latency before matchmaking. The matchmaker's latency rules use these measurements. Read-only; the game client does the pinging, not this tool.

ParametersJSON Schema
NameRequiredDescriptionDefault
pageNo
limitNoDefault 100.
edgegap_list_registry_tagsList image tags in the Edgegap registryA
Read-only
Inspect

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
pageNo
limitNoDefault 20.
image_nameYesThe image name only, without the project, registry host or tag, e.g. "my-game-server". The API reads the project from your token; "<project>/my-game-server" is not found.

TDQS

A4.4/5.0
Behavior4/5

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 genuine value beyond them: what the response contains (push time, size) and the operational consequence of skipping the check. It does not mention pagination behavior, which is the remaining gap.

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

Conciseness5/5

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

Two tightly packed sentences, zero filler. The scoping statement comes first and the workflow guidance second, which is the correct front-loading for a read-only lookup tool.

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

Completeness4/5

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

For a read-only list tool with annotations covering safety and no output schema, the description covers purpose, workflow placement, and return content. The only omission is how page/limit pagination behaves when many tags exist, which matters for a listing tool.

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

Parameters3/5

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

Schema coverage is 67% and the schema itself already documents image_name thoroughly (excluding project, registry host, tag) and limit's default. The description adds no parameter-level syntax or constraints, so the baseline 3 is appropriate.

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

Purpose5/5

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

States a specific verb and resource ('List the tags pushed for one image in this organization's Edgegap container registry') plus the returned fields (push time, size). It is clearly distinguishable from siblings like edgegap_list_apps and edgegap_list_app_versions, which target different resources.

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

Usage Guidelines5/5

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

Gives explicit when-to-use ('Call it after docker push to confirm the tag landed') and names the alternative/downstream tool (edgegap_create_app_version), including the concrete failure mode ('image-pull error') that this check prevents. Nothing is left to inference.

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

edgegap_list_relay_sessionsList relay sessions
Read-only
Inspect

List this organization's active relay sessions: id, status, readiness and player count. Relay sessions bill while open, so use this to find ones left over from earlier sessions and delete them with edgegap_delete_relay_session. Authorization tokens are not listed; read one session with edgegap_get_relay_session.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

edgegap_list_skillsList the Edgegap agent skills
Read-onlyIdempotent
Inspect

List the Edgegap agent skills: tested, step-by-step workflows for getting a multiplayer game online on Edgegap, with templates (Dockerfiles, matchmaker configs, Unity C# and Unreal C++ drop-ins) and known pitfalls. Before working on a game project, load the matching skill with edgegap_get_skill: edgegap-ngo for Unity with Netcode for GameObjects, edgegap-fishnet for Unity with FishNet, edgegap-purrnet for Unity with PurrNet, edgegap-fusion for Unity with Photon Fusion 2, edgegap-unity for other Unity projects, edgegap-unreal for Unreal Engine (edgegap-eos-voice to add voice chat to it), edgegap-fusion-simplefps for the Photon Simple FPS sample, edgegap-godot for Godot 4 with a Godot server, edgegap-colyseus for a Colyseus server, edgegap-nakama for a game with a Nakama backend, edgegap-playfab for a game that keeps PlayFab Matchmaking, edgegap-manus for a browser game built with Manus, edgegap for any other engine or platform questions; it routes to the rest. No API call.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

edgegap_revoke_relay_userRemove a player from a relay session
DestructiveIdempotent
Inspect

Revoke one player's access to a relay session, by that player's authorization token (from edgegap_get_relay_session or edgegap_authorize_relay_user). The player loses the relay connection; the session and the other players stay.

ParametersJSON Schema
NameRequiredDescriptionDefault
dry_runNoShow the exact request (method, host, path, body) with secrets masked, and send nothing. Local checks still run. Use it to confirm a billable or destructive call before making it.
session_idYesThe relay session_id, e.g. "0724828881e2-S".
user_authorization_tokenYesThe player's authorization token, not the session's.
edgegap_stop_deploymentStop a deploymentA
DestructiveIdempotent
Inspect

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, named by its exact request_id: empty IDs, wildcards and lists are refused, and bulk stop is deliberately not exposed.

ParametersJSON Schema
NameRequiredDescriptionDefault
dry_runNoShow the exact request (method, host, path, body) with secrets masked, and send nothing. Local checks still run. Use it to confirm a billable or destructive call before making it.
request_idYesThe exact request_id of the one deployment to stop, e.g. "61b1be8f54d9".

TDQS

A4.3/5.0
Behavior4/5

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

Annotations already declare destructiveHint, idempotentHint and openWorldHint, so safety is covered. The description adds real value beyond them: the SIGTERM graceful-shutdown semantics and the refusal of empty IDs, wildcards, and lists, which the annotations do not express.

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

Conciseness4/5

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

Three sentences, front-loaded with the action and mechanism. The 'exactly one deployment' point is stated twice, a minor redundancy, but every sentence otherwise earns its place.

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

Completeness4/5

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

For a destructive two-parameter tool with no output schema, the description covers mechanism, scope constraints, and workflow guidance. Return-value behavior is unspecified, but that is a minor gap given the annotations carry the safety profile.

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

Parameters4/5

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

Schema coverage is 100%, so the baseline is 3, but the description adds meaning: request_id must be an exact, non-empty single ID and wildcards/lists are rejected. This sharpens usage beyond the schema's example value.

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

Purpose5/5

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

States a specific verb+resource ('stop one deployment by request_id') and constrains scope to exactly one deployment. It is clearly distinguishable from siblings like get_deployment, list_deployments, and deploy, and even notes the SIGTERM mechanism.

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

Usage Guidelines4/5

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

Gives actionable workflow context ('Stop every deployment you started for testing before ending your task') and explicitly rules out bulk stops. It doesn't name alternative tools, but the when-to-use guidance is clear enough to drive correct selection.

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

edgegap_update_appTurn an application on or off
Idempotent
Inspect

Set whether an application accepts new deployments. Turning it off stops new deployments of every version under it; running deployments keep running. Use it to pause an application without deleting anything.

ParametersJSON Schema
NameRequiredDescriptionDefault
dry_runNoShow the exact request (method, host, path, body) with secrets masked, and send nothing. Local checks still run. Use it to confirm a billable or destructive call before making it.
is_activeYesfalse blocks new deployments; true allows them again.
applicationYesApplication name.
edgegap_update_app_versionUpdate an application version
Idempotent
Inspect

Change settings on an existing version instead of creating a new one: point it at a new image tag, turn it on or off, change max_duration, set the registry login, turn on image caching (force_cache: Edgegap pre-loads the image so deployments start faster), or set the shutdown grace period. Only the fields you pass change. Deployments already running keep their old settings; new deployments get the new ones. Same refusals as edgegap_create_app_version: "latest" or empty tags, a docker_image holding a host or tag, and the API token in the registry login. Resources, ports and env vars cannot be changed here; create a new version for those.

ParametersJSON Schema
NameRequiredDescriptionDefault
dry_runNoShow the exact request (method, host, path, body) with secrets masked, and send nothing. Local checks still run. Use it to confirm a billable or destructive call before making it.
versionYesVersion name to change.
is_activeNofalse blocks new deployments of this version.
docker_tagNoNew image tag: a build ID, commit SHA or timestamp.
applicationYesApplication name.
force_cacheNoPre-load the image on Edgegap so deployments start faster.
docker_imageNoImage path, e.g. "my-org-abc123/my-game-server".
verify_imageNoCheck Edgegap can pull the image when saving.
registry_tokenNoRegistry password or token. Never echoed back.
docker_repositoryNoRegistry host, e.g. "registry.edgegap.com".
registry_usernameNo
max_duration_minutesNoAuto-stop after this many minutes. Capped by EDGEGAP_MAX_DURATION_MINUTES.
termination_grace_period_secondsNoSeconds between SIGTERM and SIGKILL when a deployment stops.
edgegap_validate_server_configValidate a game server Dockerfile and port configA
Read-onlyIdempotent
Inspect

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
portsNoPorts you plan to pass to edgegap_create_app_version.
engineNoGame engine. Detected from the Dockerfile when omitted.
netcodeNoNetworking 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_unitsNo
memory_mbNo
docker_tagNo
dockerfileNoFull text of the Dockerfile.
docker_imageNo
docker_repositoryNo

TDQS

A4.5/5.0
Behavior4/5

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

Annotations already declare readOnlyHint and idempotentHint, but the description adds genuinely new behavior: it is a purely local check ('Makes no API calls'), and it discloses the concrete validation rules applied (linux/amd64 only, root detection, Unity batchmode flags, localhost binding, EXPOSE/version-port mismatch, protocol/netcode mismatch, 'latest' tag, CPU/memory ratios). It stops short of saying how findings are reported.

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

Conciseness4/5

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

Front-loaded with the purpose sentence, then a dense but non-redundant list of failure categories, closing with the sibling alternative and the no-API-calls note. The failure list is long but every item is a distinct, actionable check rather than filler.

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

Completeness4/5

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

Covers the two things an agent most needs: what gets checked and that this is a safe local operation with an alternative when the Dockerfile is absent. The one real gap is the return contract — with no output schema and no statement of what a failed validation yields (findings list vs boolean), the agent cannot anticipate the response shape.

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

Parameters4/5

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

With only 44% schema coverage, the description compensates by binding several bare params to meaning: dockerfile ('Pass the Dockerfile text, read it from disk first'), netcode (protocol-vs-transport matching), docker_tag ('latest' rejection), cpu_units/memory_mb (ratios), and ports (must agree with version ports). It does not meaningfully clarify docker_image vs docker_repository, the engine auto-detection, or the port name/tls_upgrade fields.

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

Purpose5/5

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

States a specific verb and resource (validate a game server Dockerfile plus ports/resources) and pins the timing ('BEFORE building and pushing'), which cleanly separates it from edgegap_create_app_version, edgegap_deploy and edgegap_build_matchmaker_config. The enumerated failure classes make the scope unmistakable.

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

Usage Guidelines5/5

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

Explicitly says when to call it (pre-build/push, read the Dockerfile from disk first) and names the alternative for the opposite condition: 'If there is no Dockerfile yet, call edgegap_generate_dockerfile instead.' That is a textbook when/when-not/alternative split.

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 readyA
Read-onlyIdempotent
Inspect

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
request_idYesThe request_id returned by edgegap_deploy.
timeout_secondsNoHow long to wait before giving up. Default 180.

TDQS

A4.7/5.0
Behavior4/5

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.

Conciseness5/5

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.

Completeness5/5

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.

Parameters4/5

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.

Purpose5/5

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.

Usage Guidelines5/5

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.

  1. 12 tool updatesv0.7.1
    • Changededgegap_create_app_version1 field changed
      • changedInput schema / properties / docker_tag / description
        Previous value: -"Image tag. Use a build ID, not \"latest\"."New value: +"Image tag: a build ID, commit SHA or timestamp. \"latest\" and empty tags are refused."
    • Addededgegap_delete_registry_tag
    • Changededgegap_deploy2 fields changed
      • changedInput schema / properties / cpu_units / description
        Previous value: -"Override the version CPU."New value: +"Override the version CPU (with memory_mb). Not in the published v2 spec, so the API may ignore it; a version with the size you need is the reliable way."
      • changedInput schema / properties / memory_mb / description
        Previous value: -"Override the version memory."New value: +"Override the version memory (with cpu_units). Same caveat as cpu_units."
    • Addededgegap_get_app_version
    • Addededgegap_get_deployment_metrics
    • Changededgegap_get_skill2 fields changed
      • changedInput schema / properties / skill / description
        Previous value: -"Skill name, from edgegap_list_skills."New value: +"Skill name, from edgegap_list_skills: edgegap, edgegap-colyseus, edgegap-containerize, edgegap-deployments-api, edgegap-eos-voice, edgegap-fishnet, edgegap-fusion, edgegap-fusion-simplefps, edgegap-godot, edgegap-launch, edgegap-local-testing, edgegap-manus, edgegap-nakama, edgegap-ngo, edgegap-playfab, edgegap-purrnet, edgegap-server-design, edgegap-troubleshoot, edgegap-unity, edgegap-unreal."
      • removedInput schema / properties / skill / enum
        Removed value: -[
        -  "edgegap",
        -  "edgegap-containerize",
        -  "edgegap-deployments-api",
        -  "edgegap-launch",
        -  "edgegap-local-testing",
        -  "edgegap-server-design",
        -  "edgegap-troubleshoot",
        -  "edgegap-unity",
        -  "edgegap-unreal"
        -]
    • Addededgegap_list_locations
    • Addededgegap_list_ping_beacons
    • Addededgegap_list_relay_sessions
    • Addededgegap_revoke_relay_user
    • Addededgegap_update_app
    • Addededgegap_update_app_version
  2. 15 tool updatesv0.5.2
    • Changededgegap_authorize_relay_user1 field changed
      • addedInput schema / properties / dry_run
        Added value: +{
        +  "description": "Show the exact request (method, host, path, body) with secrets masked, and send nothing. Local checks still run. Use it to confirm a billable or destructive call before making it.",
        +  "type": "boolean"
        +}
    • Changededgegap_build_matchmaker_config1 field changed
      • addedInput schema / properties / allowed_cors_origins
        Added value: +{
        +  "description": "Origins of web pages allowed to call the matchmaker, e.g. [\"https://mygame.example.com\", \"http://localhost:8080\"]. Required when game clients run in a browser (WebGL): browsers block matchmaker calls from any origin not listed. Scheme and host only, no path.",
        +  "items": {
        +    "type": "string"
        +  },
        +  "type": "array"
        +}
    • Addededgegap_context
    • Changededgegap_create_app1 field changed
      • addedInput schema / properties / dry_run
        Added value: +{
        +  "description": "Show the exact request (method, host, path, body) with secrets masked, and send nothing. Local checks still run. Use it to confirm a billable or destructive call before making it.",
        +  "type": "boolean"
        +}
    • Changededgegap_create_app_version4 fields changed
      • addedInput schema / properties / dry_run
        Added value: +{
        +  "description": "Show the exact request (method, host, path, body) with secrets masked, and send nothing. Local checks still run. Use it to confirm a billable or destructive call before making it.",
        +  "type": "boolean"
        +}
      • changedInput schema / properties / env / description
        Previous value: -"Environment variables injected into the container."New value: +"Environment variables injected into the container. Values are never echoed back."
      • addedInput schema / properties / ports / items / properties / tls_upgrade
        Added value: +{
        +  "description": "Edgegap terminates TLS on this port, so clients connect with wss:// or https://. Required for browser (WebGL) clients, which cannot use plain ws:// from an https page. WS and HTTP ports only. Default false.",
        +  "type": "boolean"
        +}
      • changedInput schema / properties / registry_username / description
        Previous value: -"Registry username, for private images."New value: +"Registry username. Needed for private images, including images in your own registry.edgegap.com project: Edgegap pulls with this login, not your API token."
    • Changededgegap_create_relay_session1 field changed
      • addedInput schema / properties / dry_run
        Added value: +{
        +  "description": "Show the exact request (method, host, path, body) with secrets masked, and send nothing. Local checks still run. Use it to confirm a billable or destructive call before making it.",
        +  "type": "boolean"
        +}
    • Changededgegap_delete_relay_session2 fields changed
      • addedInput schema / properties / dry_run
        Added value: +{
        +  "description": "Show the exact request (method, host, path, body) with secrets masked, and send nothing. Local checks still run. Use it to confirm a billable or destructive call before making it.",
        +  "type": "boolean"
        +}
      • addedInput schema / properties / session_id / description
        Added value: +"The exact session_id of the one session to delete, e.g. \"0724828881e2-S\"."
    • Changededgegap_deploy5 fields changed
      • addedInput schema / properties / dry_run
        Added value: +{
        +  "description": "Show the exact request (method, host, path, body) with secrets masked, and send nothing. Local checks still run. Use it to confirm a billable or destructive call before making it.",
        +  "type": "boolean"
        +}
      • changedInput schema / properties / env / description
        Previous value: -"Environment variables for this deployment only."New value: +"Environment variables for this deployment only. Values are never echoed back."
      • changedInput schema / properties / tags / description
        Previous value: -"Tags for filtering later, e.g. [\"agent-test\"]. Recommended."New value: +"Extra tags for filtering later, e.g. [\"agent-test\"]. \"edgegap-mcp\" is always added."
      • addedInput schema / properties / tags / items / maxLength
        Added value: +40
      • addedInput schema / properties / tags / items / minLength
        Added value: +1
    • Changededgegap_generate_dockerfile1 field changed
      • addedInput schema / properties / ports / items / properties / tls_upgrade
        Added value: +{
        +  "description": "TLS Upgrade (wss/https) on a WS or HTTP port, for browser clients.",
        +  "type": "boolean"
        +}
    • Addededgegap_get_skill
    • Changededgegap_list_deployments1 field changed
      • addedInput schema / properties / only_agent_deployments
        Added value: +{
        +  "description": "Only deployments started through this server: tagged \"edgegap-mcp\", or \"mcp\" by versions up to 0.3.3. Cannot be combined with a tags filter.",
        +  "type": "boolean"
        +}
    • Changededgegap_list_registry_tags2 fields changed
      • changedInput schema / properties / image_name / description
        Previous value: -"\"<project>/<image>\", e.g. \"my-org-cv2l3w3vy6fg/my-game-server\". Project comes from edgegap_get_registry_credentials."New value: +"The image name only, without the project, registry host or tag, e.g. \"my-game-server\". The API reads the project from your token; \"<project>/my-game-server\" is not found."
      • addedInput schema / properties / image_name / minLength
        Added value: +1
    • Addededgegap_list_skills
    • Changededgegap_stop_deployment2 fields changed
      • addedInput schema / properties / dry_run
        Added value: +{
        +  "description": "Show the exact request (method, host, path, body) with secrets masked, and send nothing. Local checks still run. Use it to confirm a billable or destructive call before making it.",
        +  "type": "boolean"
        +}
      • changedInput schema / properties / request_id / description
        Previous value: -"The request_id of the deployment to stop."New value: +"The exact request_id of the one deployment to stop, e.g. \"61b1be8f54d9\"."
    • Changededgegap_validate_server_config1 field changed
      • addedInput schema / properties / ports / items / properties / tls_upgrade
        Added value: +{
        +  "description": "TLS Upgrade (wss/https) on a WS or HTTP port, for browser clients.",
        +  "type": "boolean"
        +}
  3. 2 tool updatesv0.2.2
    • Addededgegap_generate_dockerfile
    • Changededgegap_list_deployments3 fields changed
      • removedInput schema / properties / filter
        Removed value: -{
        -  "description": "Edgegap filter expression, e.g. by tag. Omit for all deployments.",
        -  "type": "string"
        -}
      • addedInput schema / properties / filters
        Added 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"
        +}
      • addedInput schema / properties / order_by
        Added 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"
        +}
  4. 9 tool updatesv0.2.0
    • Addededgegap_authorize_relay_user
    • Addededgegap_build_matchmaker_config
    • Changededgegap_create_app_version1 field changed
      • changedInput schema / properties / ports / items / properties / protocol / description
        Previous value: -"UDP, TCP, WS, or HTTP. Most game servers use UDP."New value: +"One of UDP, TCP, TCP/UDP, HTTP, HTTPS, WS, WSS. Most game servers use UDP."
    • Addededgegap_create_relay_session
    • Addededgegap_delete_relay_session
    • Addededgegap_get_registry_credentials
    • Addededgegap_get_relay_session
    • Addededgegap_list_registry_tags
    • Addededgegap_validate_server_config
  5. 10 tool updatesv0.1.2
    • First observededgegap_create_app
    • First observededgegap_create_app_version
    • First observededgegap_deploy
    • First observededgegap_get_deployment
    • First observededgegap_get_deployment_logs
    • First observededgegap_list_app_versions
    • First observededgegap_list_apps
    • First observededgegap_list_deployments
    • First observededgegap_stop_deployment
    • First observededgegap_wait_for_deployment

TDQS

A4.1/5.0

Scored across 22 tools

Disambiguation4/5

Almost every tool targets a distinct resource+action (apps, versions, deployments, relay sessions, registry, config, skills), and the descriptions explicitly steer between the few that could overlap. The deployment trio (deploy/get_deployment/wait_for_deployment) is the only real overlap, but the text clearly explains when to use each, so ambiguity is minimal.

Naming Consistency4/5

Nearly all tools follow a consistent edgegap_verb_noun pattern (list_apps, create_app, get_deployment, stop_deployment). Minor deviations like edgegap_deploy (verb only) and edgegap_context (noun only) break the pattern slightly but remain readable and unambiguous.

Tool Count4/5

22 tools is on the heavy side, but the domain is genuinely broad (app/version lifecycle, deployments, relay sessions, registry, Dockerfile/config generation, matchmaker, and skills). Each tool maps to a distinct capability rather than padding, so the count is justified though near the upper bound.

Completeness4/5

Deployment and relay lifecycles are well covered (create/list/get/wait/stop, plus logs, and full relay CRUD), and config/skill helpers round it out. The main gaps are app- and version-level update/delete operations, which are minor and likely intentional given the API surface.

Maintenance

ActivityMaintained
ResponsivenessUnresponsive

Related MCP Connectors

Related MCP Servers