Edgegap MCP Server
OfficialServer Configuration
Describes the environment variables required to run the server.
| Name | Required | Description | Default |
|---|---|---|---|
| EDGEGAP_API_TOKEN | No | API token. Optional — omit it and the developer is asked at first use. The `token ` prefix is added for you. | |
| EDGEGAP_READ_ONLY | No | Set to `1` and the five mutating tools are never registered. The agent cannot see them, so it cannot be talked into calling them. | 0 |
| EDGEGAP_TIMEOUT_MS | No | Per-request HTTP timeout. | 30000 |
| EDGEGAP_APP_ALLOWLIST | No | Comma-separated application names. When set, every tool refuses to touch anything else. | |
| EDGEGAP_MAX_DURATION_MINUTES | No | Ceiling on `max_duration` the agent may set on a version. Caps runaway cost from an unattended agent. | 60 |
Instructions
Guidance the server publishes about itself, which clients place ahead of the tool catalog so the model reads it before choosing anything.
Before acting, read edgegap-skill://edgegap/SKILL.md (Unity: edgegap-skill://edgegap-unity/SKILL.md, NGO: edgegap-skill://edgegap-ngo/SKILL.md, FishNet: edgegap-skill://edgegap-fishnet/SKILL.md, PurrNet: edgegap-skill://edgegap-purrnet/SKILL.md, Photon Fusion: edgegap-skill://edgegap-fusion/SKILL.md, Simple FPS: edgegap-skill://edgegap-fusion-simplefps/SKILL.md, Unreal: edgegap-skill://edgegap-unreal/SKILL.md, Unreal voice chat: edgegap-skill://edgegap-eos-voice/SKILL.md, Godot 4: edgegap-skill://edgegap-godot/SKILL.md, Colyseus: edgegap-skill://edgegap-colyseus/SKILL.md, Cocos Creator: edgegap-skill://edgegap-cocos/SKILL.md, Unity Matchmaker (UGS): edgegap-skill://edgegap-ugs-matchmaker/SKILL.md, Nakama: edgegap-skill://edgegap-nakama/SKILL.md, PlayFab: edgegap-skill://edgegap-playfab/SKILL.md, Supabase backend: edgegap-skill://edgegap-supabase/SKILL.md, Three.js or web game with a Node server: edgegap-skill://edgegap-threejs/SKILL.md, vibe-coded single-player web game going online: edgegap-skill://edgegap-vibe-coded/SKILL.md, Manus game: edgegap-skill://edgegap-manus/SKILL.md, matchmaking, parties, regions or backfill design: edgegap-skill://edgegap-matchmaking/SKILL.md, host/client games on Edgegap relays: edgegap-skill://edgegap-relays/SKILL.md, sample projects: edgegap-skill://edgegap-samples/SKILL.md). If your client cannot read MCP resources, call edgegap_get_skill with the name from the URI (e.g. edgegap-unity). Skills hold the tested workflow, templates and pitfalls; follow them over general knowledge (edgegap_list_skills lists all).
Deployments and relay sessions cost money while running. Stop deployments and delete relay sessions you created before ending the task; edgegap_list_deployments with only_agent_deployments: true lists every deployment tagged "edgegap-mcp". If a deployment errors, read the container logs before redeploying.
Guardrails: edgegap_context shows this session's API and limits. Every write tool takes dry_run: true (shows the exact request, sends nothing); use it when unsure. Never put the API token in env vars, tags or URLs: such calls are refused.
Credentials: if no token was configured, the first tool call asks the developer for one. The token is org-wide (Edgegap cannot scope it): use it only for work the developer asked for, do not enumerate or modify unrelated applications, and do not probe what it allows. If the developer declines to provide a token, stop and report which operation needed it; do not retry.
Dedicated server vs relay — recommend a dedicated server by default (edgegap_deploy): the server owns the game state, so no host advantage, much harder cheating, and the match survives any player leaving. Relay (edgegap_create_relay_session): NOT a game server; one player's game hosts and owns the state, everyone else gets two hops, and the match ends when the host quits. Use one only when the developer explicitly wants host/client; "it needs no server image" is not a reason. If unsure, ask before choosing a relay.
Golden path for a first dedicated-server deployment:
edgegap_generate_dockerfile (no Dockerfile yet) or edgegap_validate_server_config (existing one)
edgegap_get_registry_credentials, then docker build --platform linux/amd64 and push
edgegap_list_registry_tags to confirm the push
edgegap_list_apps, then edgegap_create_app if none fits
edgegap_create_app_version to register the image
edgegap_deploy near the players
edgegap_wait_for_deployment for the connection address
edgegap_stop_deployment when finished edgegap_build_matchmaker_config makes the matchmaker config to upload in the dashboard. For later builds, suggest CI over repeating steps 2-7: the GitHub Action edgegap/deploy-action (edgegap-launch skill) creates the version from an existing one, smoke-tests and promotes it. Do not write Deploy API code for a CI job that only ships a build.
Capabilities
Features and capabilities supported by this server
Protocol revision2025-11-25
| Capability | Details |
|---|---|
| tools | {
"listChanged": true
} |
| prompts | {
"listChanged": true
} |
| resources | {
"listChanged": true
} |
Tools
Functions exposed to the LLM to take actions
| Name | Description |
|---|---|
| edgegap_contextA | 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. Also says whether this session has a usable token and, if not, why and how to fix it. Call it first when unsure what this session is allowed to do, before anything billable, or when tool calls fail with a token problem. Makes no API call unless check_token is true, and never shows the token. |
| edgegap_list_appsA | 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. |
| edgegap_create_appA | 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. |
| edgegap_update_appA | 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. |
| edgegap_list_app_versionsA | 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 the non-secret settings (image, resources, ports) of a working version when creating a new one. The registry login and secret env values are never readable: the API returns "This value is set and encrypted" for them, so get them from the dashboard's Container Registry page or the developer. |
| edgegap_get_app_versionA | Read one version in full: image, resources, ports, max_duration, whether image caching (force_cache) and verify_image are on, restart policy, the Endpoint Storage its logs go to, 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. |
| edgegap_create_app_versionA | Register a container image as a deployable version of an application. The image must already be pushed to a registry that Edgegap can pull from (see edgegap_get_registry_credentials and edgegap_list_registry_tags). Resource units: 1024 cpu units = 1 vCPU; memory_mb must be at least 256 and at most double the cpu units. Set verify_image true on the first version so a bad image fails here rather than at deploy time. Refused, with nothing sent, for the "latest" or an empty docker tag (use a build ID so deployments are reproducible) and for a docker_image that also holds a registry host or tag. Env vars named like secrets (TOKEN, SECRET, PASSWORD, API_KEY…) are hidden in the dashboard. Images on registry.edgegap.com need no registry login: leave registry_username and registry_token out and the version gets the organization's own registry login (registry_profile "Edgegap"). When copying an existing version, copy only non-secret settings: the API returns "This value is set and encrypted" for its registry login and secret env values, and that placeholder is refused here. |
| edgegap_update_app_versionA | Change settings on an existing version instead of creating a new one: point it at a new image tag, turn it on or off, change max_duration, set the registry login (the API cannot add registry_profile "Edgegap" to an existing version: create a new version for that), turn on image caching (force_cache: Edgegap pre-loads the image so deployments start faster), set the restart policy, or set the shutdown grace period. Only the fields you pass change. Deployments already running keep their old settings; new deployments get the new ones. Same refusals as edgegap_create_app_version: "latest" or empty tags, a docker_image holding a host or tag, and the API token in the registry login or env vars. ports and env REPLACE the version's whole list (per the API): read the current ones with edgegap_get_app_version and pass every port or variable to keep; secret env values are not readable, so get them from the developer. Refused, with nothing sent, for a registry login or env value equal to the API's "This value is set and encrypted" placeholder; leave the registry login out to keep it. cpu_units and memory_mb change together (both or neither); to try other resources for one deployment only, override them in edgegap_deploy instead. |
| edgegap_list_locationsA | 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. |
| edgegap_list_ping_beaconsA | 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. |
| edgegap_deployA | 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. Also refused when the version's max_duration is unlimited or above EDGEGAP_MAX_DURATION_MINUTES, unless allow_long_running is true (ask the developer first), and on the local server after EDGEGAP_MAX_DEPLOYS_PER_RUN deploys (default 20). Env vars named like secrets are hidden in the dashboard. Optional: webhooks Edgegap calls when the server is ready, errors or ends (instead of polling), require_cached_locations for faster starts, and private_host_ids to place it on your private fleet first. |
| edgegap_get_deploymentA | 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. |
| edgegap_wait_for_deploymentA | 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. |
| edgegap_list_deploymentsA | 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"]). |
| edgegap_stop_deploymentA | 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. |
| edgegap_get_deployment_logsA | 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. |
| edgegap_get_deployment_metricsA | 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. |
| edgegap_generate_dockerfileA | 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. |
| edgegap_validate_server_configA | 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. |
| edgegap_get_registry_credentialsA | 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. Any other registry Edgegap can pull from (Docker Hub, GHCR, ECR, GitLab) works too: then skip this tool and pass that registry and its pull login to edgegap_create_app_version. |
| edgegap_list_registry_tagsA | 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. An image that was never pushed comes back as status "not_found" with no tags, not as an error. Only for registry.edgegap.com: images in Docker Hub, GHCR or another registry are not listed here. |
| edgegap_delete_registry_tagA | 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. |
| edgegap_tag_deploymentA | Add tags to, or remove tags from, one running deployment, e.g. to mark the match it serves or that a test is done, so edgegap_list_deployments can filter on them. Tags are labels only: the game server does not see the change. The "edgegap-mcp" tag cannot be removed, since it is how agent deployments are found and cleaned up. Returns the tags now on the deployment. |
| edgegap_report_deploymentA | Report a problem with one deployment to Edgegap (the API's "Report a Deployment", meant for a studio's moderation backend), with a short reason and optional key/value details. It does not stop the deployment. Use it only when the developer asks to report a deployment; for a crash, read edgegap_get_deployment_logs first. |
| edgegap_delete_app_versionA | Delete one version of an application, to clean up test versions. Exactly one exact version name; refused while any deployment of that version is running. The container image stays in the registry (edgegap_delete_registry_tag removes it). Cannot be undone, so confirm with the developer when the version is not one this conversation created. |
| edgegap_delete_appA | Delete one application and every version under it, to clean up a test application. Exactly one exact name; refused while any of its deployments is running, and refused when it has more versions than max_versions (default 0: delete its versions first with edgegap_delete_app_version, or raise max_versions after the developer agreed). Registry images are not touched. Cannot be undone. |
| edgegap_list_fleet_hostsA | List the hosts in one of the organization's private fleets (dedicated machines Edgegap manages for you), with status, IP and location. Only ACTIVE hosts accept deployments. Pass their host_id values to edgegap_deploy as private_host_ids to place a server on them first. Organizations without private fleets get an error from the API. |
| edgegap_list_endpoint_storageA | List the organization's Endpoint Storage: S3-compatible buckets Edgegap exports container logs to when a deployment ends (so logs survive the deployment), and the pull profiles under each, which copy files from the bucket into a container at boot. Secret keys are never returned. A version uses a storage for logs through edgegap_create_app_version / edgegap_update_app_version endpoint_storage, and a pull profile through edgegap_link_pull_profile. |
| edgegap_create_endpoint_storageA | Register an S3-compatible bucket (AWS S3, Cloudflare R2, DigitalOcean Spaces, ...) as Endpoint Storage, so container logs are exported there when deployments end. The developer supplies the bucket, endpoint URL and an access key pair scoped to that bucket; never invent or reuse other credentials, and never pass the Edgegap API token. The secret key is sent once and never echoed back. Then set endpoint_storage on the version (edgegap_update_app_version) to turn log export on. |
| edgegap_create_pull_profileA | Create a pull profile under an Endpoint Storage: at boot, Edgegap copies a file or folder from the bucket into the container (maps, configs, large assets kept out of the image). It does nothing until linked to a version with edgegap_link_pull_profile. Avoid destination paths the image already uses. |
| edgegap_link_pull_profileA | Link a pull profile to an application version, so its new deployments get the bucket files at boot, or unlink it (unlink: true). Running deployments are not changed. |
| edgegap_delete_pull_profileA | Delete one pull profile from an Endpoint Storage, to clean up a test profile. Exactly one exact name. Every version linked to it stops getting its files at boot (the API cannot list those links, so ask the developer when the profile is not one this conversation created). The bucket and its files are not touched. Cannot be undone. |
| edgegap_delete_endpoint_storageA | Delete one Endpoint Storage, to clean up a test one. Exactly one exact name; refused when it still has more pull profiles than max_pull_profiles (default 0: delete them first with edgegap_delete_pull_profile, or raise max_pull_profiles after the developer agreed). Versions that export logs to it stop doing so, so confirm with the developer when the storage is not one this conversation created. The bucket and the logs already in it are not touched. Cannot be undone. |
| edgegap_create_relay_sessionA | 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. |
| edgegap_get_relay_sessionA | 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. |
| edgegap_list_relay_sessionsA | 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. |
| edgegap_authorize_relay_userA | 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. |
| edgegap_revoke_relay_userA | 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. |
| edgegap_delete_relay_sessionA | 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. |
| edgegap_build_matchmaker_configA | 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. |
| edgegap_list_skillsA | 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. Each entry says which engine, netcode or backend it is for, and the server instructions map projects to skills. Before working on a game project, load the matching skill with edgegap_get_skill; "edgegap" covers any other engine and routes to the rest. Also says whether a newer skills pack is on GitHub (reads one version number, no Edgegap API call). |
| edgegap_get_skillA | 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 skill that matches the project before acting (the server instructions and edgegap_list_skills say which; "edgegap" when unsure), then fetch the references and templates it points to as you reach them. No API call. |
| edgegap_update_skillsA | Check whether the Edgegap agent skills installed in the developer's agent are the latest, and update them. Finds installs made with the skills CLI (user-wide or this project), the Claude Code plugin edgegap@edgegap, and skills copied by hand into an agent's skills folder, and compares each skill with the latest on GitHub. Without apply it only checks and changes nothing. With apply=true it rewrites hand-copied skills from the files bundled in this server, and runs each outdated install's own updater (npx skills@1.7.4 update for the Edgegap skills only, or claude plugin update) only when the operator started the server with EDGEGAP_ENABLE_SKILLS_UPDATE=1; otherwise it lists those commands for the developer to run. Ask the developer before applying. Skill text is never downloaded by this tool. The skills served by edgegap_get_skill need no update here. |
Prompts
Interactive templates invoked by user choice
| Name | Description |
|---|---|
| deploy-game-server | Start here. Detects the project's engine and netcode, loads the matching Edgegap skill, and walks the golden path to a running dedicated server: Dockerfile, registry, app version, deploy, wait, then stop. |
| edgegap | Start here for hosting a game on Edgegap (dedicated servers + matchmaking) when the engine is not Unity, Unreal or Godot, is unknown, or the question is about the platform itself. Use when someone wants to host or deploy a game server, wants a single-player or co-op game always online or harder to crack, asks how players will connect to matches, wants servers for a custom-engine game, compares hosting options, or asks what Edgegap apps, versions, deployments, fleets or matchmakers are, even if they never say "hosting". It picks the server shape, explains the vocabulary and safety rules, and routes to the right skill. For a Unity project, load edgegap-unity instead (NGO: edgegap-ngo, FishNet: edgegap-fishnet, PurrNet: edgegap-purrnet, Fusion: edgegap-fusion); Unreal: edgegap-unreal; Godot 4: edgegap-godot; Colyseus: edgegap-colyseus; Cocos: edgegap-cocos; Nakama: edgegap-nakama; Manus: edgegap-manus; Three.js/web: edgegap-threejs; vibe-coded: edgegap-vibe-coded; matchmaking design: edgegap-matchmaking. |
| edgegap-cocos | Cocos Creator + Edgegap without Colyseus: host the authoritative server of a Cocos Creator 3.8 game (usually Node.js with ws or socket.io, any language works) on Edgegap, one server per match near its players, end to end. Load this before using Edgegap MCP tools on a Cocos project whose server is not Colyseus. It covers the server shape (Linux container, one WebSocket port with TLS Upgrade for wss://, env config, self-stop), deploying with the Edgegap Cocos extension (install, panel flow, quick-start vs regular token, headless e2e) or with MCP tools/dashboard, the Cocos client (wss by FQDN, first-connection retry, Find Match with @edgegap/sdk), WeChat/Douyin mini-game domain allowlists, testing and troubleshooting. Use for "host my Cocos Creator game server", "Cocos multiplayer on Edgegap", "Edgegap Cocos extension/plugin", "wss from a Cocos web build", "Cocos mini-game with dedicated servers". Colyseus server: edgegap-colyseus. Three.js/Phaser/Babylon browser game: edgegap-threejs. Godot: edgegap-godot. |
| edgegap-colyseus | Colyseus + Edgegap: host a Colyseus (Node.js) multiplayer game on Edgegap with one dedicated server per match, near its players, that stops itself, end to end. Load this before using any Edgegap MCP tool on a Colyseus project (colyseus or @colyseus/* in package.json, Room classes with onJoin/onLeave, defineServer, app.config.ts, colyseus.js, @colyseus/sdk, the Colyseus Unity, Godot, Cocos Creator, Defold, GameMaker or Haxe SDKs). It has templates verified on Edgegap: a lifecycle module (self-stop on no join, empty server or match end), a Dockerfile, the WS + TLS Upgrade app version, a direct deploy script, a matchmaker config, and matchmaker clients for browser JS/TS, Cocos Creator, Unity and Godot, plus the pitfalls: 502 on a fresh server, wss by FQDN, CORS origins, exposed playground. Use for "host my Colyseus server", "Colyseus on Edgegap", "replace Colyseus Cloud", "one server per match", "Find Match with Colyseus", or debugging Colyseus deployments. Manus games: edgegap-manus. |
| edgegap-containerize | Package any game server (Unreal, Godot, Node, Go, Rust, C++, a Unity build) into a Docker image that runs correctly on Edgegap, push it to the Edgegap Container Registry or Docker Hub, GHCR, ECR, GCR or GitLab, and register it as an app version: the container contract, Dockerfile patterns, linux/amd64 builds on Apple Silicon, image tags, registry credentials on the version, and port mapping. Use whenever writing or fixing a Dockerfile for a game server, building on a Mac, pushing to registry.edgegap.com, getting "unable to pull image" or exec format errors, or when someone asks how to get a server build onto Edgegap. Engine-agnostic; edgegap-unity has a ready Unity Dockerfile. |
| edgegap-deployments-api | Write backend code that starts, tracks and stops Edgegap game servers through the HTTP API: POST /v2/deployments with player IPs or coordinates, env vars and tags, ready/error/terminate webhooks, status polling within rate limits, stopping and cleaning up orphaned deployments, and handing players the address and external port. Use whenever building a custom matchmaker, allocator, lobby service or CI job for Edgegap (a CI job that only ships a new build: edgegap-launch, which uses edgegap/deploy-action), writing the allocator for EOS or Steam lobbies (choosing a matchmaker, or keeping Unity Matchmaker: edgegap-matchmaking; Nakama: edgegap-nakama), or when someone mentions api.edgegap.com, the Deploy API, deployment webhooks, request_id, or Edgegap error codes 422/429/410. Not for game clients, which must never hold the API token. |
| edgegap-eos-voice | Add in-game voice chat with EOS Voice (Epic Online Services) to an Unreal Engine game that runs on Edgegap dedicated servers. The game server is the trusted server: it checks each player's EOS ID token, puts them in a match or team room from the Edgegap matchmaker data, gets room tokens from the EOS Voice Web API (EOS voice doesn't run on Linux servers) and removes players who leave. Ships tested C++ drop-ins (device ID login so players need no Epic account, a replicated component that needs no game class edits, server token service), Developer Portal client policies, Edgegap env vars, local two-client test with fake audio, and fixes for pitfalls. Use for "add voice chat", "team voice", "proximity or party chat", "EOS voice", "push to talk", "players can't hear each other", Vivox replacement, or voice on an Unreal game hosted on Edgegap. Needs a working Edgegap dedicated server first (edgegap-unreal). Not for Unity yet, lobby-only voice without a server, or Mumble. |
| edgegap-fishnet | FishNet (Fish-Networking) + Edgegap: take a Unity game built on FishNet to dedicated servers and matchmaking, end to end. Load this before using any Edgegap MCP tool on a FishNet project (Assets/FishNet, Tugboat, Bayou, Multipass, ServerManager, NetworkHudCanvas). It has FishNet-ready C# templates verified on Edgegap (matchmaker client, server self-stop, scene-change persistence), the Start On Headless and WebGL/Bayou wss setup, port 7770 app version, Dockerfile, matchmaker config and fixes for known pitfalls, including the SDK JSON bug on Unity before 2022.3. Use when a FishNet dev wants online play: "host my FishNet game", "players should not host", "works on LAN but not online", "Find Match button", "FishNet WebGL on Edgegap", moving off the old FishNet Edgegap samples that call the API from the client, or debugging FishNet deployments, ports or matchmaking. Other Unity netcodes (NGO, Mirror): edgegap-unity. |
| edgegap-fusion | Photon Fusion 2 + Edgegap: run a Unity game built on Photon Fusion as a dedicated server on Edgegap, verified end to end with Photon's BR200 Battle Royale sample. Load this before using any Edgegap MCP tool on a Fusion project (Assets/Photon/Fusion, NetworkRunner, StartGameArgs, GameMode.Server, PhotonAppSettings, NetworkProjectConfig, TPSBR, BR200). It has a drop-in BR200 kit that changes no sample code (server build with preflight checks, Dockerfile, start script mapping Edgegap variables to BR200's command-line options, Photon region, self-stop), headless test clients logging the connection type, and fixes for pitfalls: Loader IP 127.0.0.1 forcing Photon relays, public IP failing to bind, IL2CPP required on the server, Linux toolchain packages and App ID/AppVersion/region mismatches. Use when a Fusion dev wants dedicated servers, "host BR200", "CT shows Relayed", GameNotFound. Simple FPS sample: edgegap-fusion-simplefps. Other Unity netcodes: edgegap-unity, edgegap-ngo, edgegap-fishnet, edgegap-purrnet. |
| edgegap-fusion-simplefps | Photon's Simple FPS (Fusion 2) sample + Edgegap: run it as a dedicated server on Edgegap and join through its Party menu, verified end to end. Load this before using any Edgegap MCP tool on a Simple FPS project (SimpleFPS namespace, Deathmatch and Startup scenes, FusionBootstrap, FusionMenuUIParty, MenuConnectionBehaviour, SceneObjects). It has a drop-in kit that edits no Simple FPS or Fusion file: a bootstrap subclass that starts the server and names the session after the deployment FQDN, a Party menu subclass that joins by FQDN and Photon region, an editor setup and IL2CPP build, a Dockerfile, and headless test clients. It fixes the two traps of the usual Simple FPS dedicated-server steps: a server built with only the Deathmatch scene, and a scene that is not active on load, which both make clients throw NullReferenceException in Player.FixedUpdateNetwork. Use for "Simple FPS on Edgegap", "join a deployment from the Party menu" or that error. Other Fusion games, BR200: edgegap-fusion. |
| edgegap-godot | Godot 4 + Edgegap: take a Godot multiplayer game (MultiplayerAPI, @rpc, ENetMultiplayerPeer, WebSocketMultiplayerPeer, MultiplayerSpawner, netfox) to dedicated servers and matchmaking, end to end. Load this before using any Edgegap MCP tool on a Godot project (project.godot, .gd, .tscn, export_presets.cfg). It has tested GDScript templates (a server lifecycle autoload that waits for the matched players and stops its own deployment, a matchmaker client and Find Match button), the Edgegap Godot plugin build (export, image, push from the editor), app version ports (UDP for ENet, WS + TLS Upgrade for web and wss), matchmaker config, and fixes for Godot pitfalls: empty server logs, export allowlists that drop new scripts, join validation that silently blocks matched players. Use when a Godot dev wants online play: "host my Godot game", "nobody should host", "Find Match button", "Godot web multiplayer", or is debugging Godot deployments, ports or matchmaking on Edgegap. |
| edgegap-launch | Take an Edgegap-hosted game from "the test deployment works" to live players: the launch checklist (token hygiene, app version settings, restart policy, max duration, self-stop, image caching, log storage), version naming and blue/green rollouts with zero matchmaking downtime, cost and leak control, rate limits, free-tier limits to lift before launch, observability (logs, metrics, deployment IDs), capacity planning with Edgegap, Private Fleets and persistent servers, and incident basics. Use when preparing a launch, beta or playtest on Edgegap, reviewing production readiness, rolling out a new server build, deploying builds from CI or GitHub Actions (edgegap/deploy-action), or when someone mentions going live, launch day, rollout, scaling, hosting costs or operating game servers with real players. |
| edgegap-local-testing | Prove a game server container behaves on a laptop exactly as it will on Edgegap before spending money: the parity docker run with Edgegap-style env vars, the random-external-port test, the SIGTERM drain test, boot timing, two servers on one host, resource sizing with docker stats, then one tagged test deployment on Edgegap with a real client. Use before any first deploy or new build rollout, when a server works locally but not on Edgegap, or when someone asks how to test a game server container, run it with Docker, or smoke-test a deployment. Engine-agnostic. |
| edgegap-manus | Manus + Edgegap: turn a browser game built with Manus (manus.im, Manus Game Dev, a Manus web app, or its code exported to GitHub) into an online multiplayer game with an authoritative dedicated server and matchmaking on Edgegap. Load this before using any Edgegap MCP tool on a Manus project. It has templates: Steam sign-in verified on the backend, backend join/status/cancel/leave routes that create Edgegap matchmaker tickets (mode, region, party, player IP) and return only the server address and a signed join token, a Node.js WebSocket game server that self-stops, a browser client with reconnect, a Dockerfile, a GitHub Actions image build, and a matchmaker config. Use when a Manus user wants online play: "make my Manus game multiplayer", "add matchmaking", "Find Match", "Steam login for my web game", "host my HTML5/JavaScript game server", or is debugging wss, CORS, tickets or deployments for a Manus game. Other Three.js/web games without sign-in: edgegap-threejs. Unity: edgegap-unity. |
| edgegap-matchmaking | Design matchmaking for a game hosted on Edgegap, any engine: choose between Edgegap's hosted matchmaker, your own allocator on the Deploy API, or a matchmaker you already use (Unity Matchmaker, Nakama, PlayFab, EOS or Steam lobbies, Pragma, AccelByte, Open Match); design the profile (teams, parties, skill, modes, expansions, queue times); place servers near players (ping beacons, player IPs, region and hub pickers); and add backfill (join in progress, replacing leavers, server-owned backfill tickets). Use for "players wait too long", "EU players land on US servers", "let players join a running match", "replace a player who left", "parties in a 4v4 queue", "skill-based matchmaking", "which matchmaker should we use", "leaving Multiplay or GameLift FlexMatch", or matchmaker config questions not tied to one engine's client code. Engine skills (edgegap-unity, -ngo, -fishnet, -purrnet, -godot, -unreal, -threejs) own their Find Match client code; edgegap-nakama and edgegap-playfab own those integrations. |
| edgegap-nakama | Nakama + Edgegap: keep Nakama for accounts, matchmaking and leaderboards, and run every match on its own Edgegap dedicated server near the players through the Edgegap Fleet Manager for Nakama (nakama-edgegap), end to end. Load this before using any Edgegap MCP tool on a project with a Nakama backend (a Go, TypeScript or Lua Nakama module, heroiclabs/nakama images, a Nakama client SDK: nakama-godot, nakama-unity, nakama-js). Engine-agnostic templates verified on Edgegap with Fish Game (Godot 4.7, Nakama 3.39): the Go module (Fleet Manager, AfterAuthenticate hook for the real sign-in method, MatchmakerMatched hook, notifications 111/112/113, a leaderboard only the server writes), game server code for READY, connection events, STOP and player checks, Dockerfile, compose. Use for "host my Nakama game on Edgegap", "Nakama matchmaker should start a dedicated server", "replace Nakama relayed matches", "Heroic Cloud plus Edgegap", or debugging nakama-edgegap. Unity servers: edgegap-server-nakama-plugin-unity. |
| edgegap-ngo | Netcode for GameObjects (NGO) + Edgegap: take a Unity game built on NGO to dedicated servers and matchmaking, end to end. Load this before using any Edgegap MCP tool on an NGO project (com.unity.netcode.gameobjects, NetworkManager, UnityTransport, StartHost, ConnectionManager, Boss Room). It has NGO C# templates verified on Edgegap, no scene edits (server start and self-stop, Find Match panel, settings asset), a Boss Room adapter, the Edgegap Unity plugin for build, image, push and deploy, port 7777 UDP app version, matchmaker config, and fixes for NGO pitfalls: host-only logic, connection payloads and approval, UnityTransport needing an IP, client-only code on the server, Relay leftovers. Use when an NGO dev wants online play: "host my NGO game", "nobody should host", "replace Unity Relay or Multiplay", "Boss Room on Edgegap", "Find Match button", or debugs NGO deployments, ports or matchmaking. Mirror or WebGL-first games: edgegap-unity. FishNet: edgegap-fishnet. PurrNet: edgegap-purrnet. |
| edgegap-playfab | PlayFab + Edgegap: keep PlayFab for players, login and Matchmaking, and run each match on its own Edgegap dedicated server near the players, started by PlayFab Azure Functions (CloudScript using Azure Functions), end to end. Load this before using any Edgegap MCP tool on a project that uses PlayFab for matchmaking (a PlayFab title ID, playfabapi.com, PlayFabMultiplayerAPI, CreateMatchmakingTicket) or is leaving PlayFab Multiplayer Servers (MPS, GSDK). Verified on Edgegap with a Unity FishNet game: match_found rule, StartEdgegapDeployment (POST /v2/deployments near the players), ready webhook, server address in player read-only data. Ships the Azure Functions, setup scripts, a dependency-free Unity client, server self-stop, and fixes for PlayFab pitfalls (new titles block LoginWithCustomID player creation, legacy CloudScript, ticket polling limits). Use for "PlayFab matchmaking with Edgegap servers", "replace PlayFab Multiplayer Servers", "PlayFab CloudScript Edgegap bridge", or debugging one. |
| edgegap-purrnet | PurrNet + Edgegap: take a Unity game built on PurrNet to dedicated servers and matchmaking, end to end. Load this before using any Edgegap MCP tool on a PurrNet project (dev.purrnet.purrnet, NetworkManager start flags, UDPTransport, WebTransport, ParrelSync clones). It has PurrNet-ready C# templates verified on Edgegap that add themselves at runtime without editing scenes (server start and self-stop, connect panel with direct and matchmaker modes, settings asset), port 7777 UDP app version, Dockerfile, matchmaker config, and fixes for PurrNet pitfalls: auto start flags, the async StartClient, ObserversRpc that never runs on a dedicated server. Use when a PurrNet dev wants online play: "host my PurrNet game", "nobody should host", "works with a host but not online", "Find Match button", or is debugging PurrNet deployments, ports or matchmaking on Edgegap. Other Unity netcodes: edgegap-unity (NGO, Mirror) or edgegap-fishnet. |
| edgegap-relays | Edgegap Relays (Smart Relays, Distributed Relay) for host/client games: one player hosts, friends join with a code, and traffic goes through an Edgegap relay near them, so nobody port forwards and NAT or firewalls stop mattering. Load this once the developer has chosen peer-to-peer or a listen server over a dedicated server, before using edgegap_create_relay_session or any relay API. Emulator-tested, not yet on a live Edgegap relay; points to the LightNet relay deployment verified on Edgegap. Ships a relay transport for raw-UDP netcodes (relay protocol plus reliable fragmented and unreliable ordered channels), a lobby service that keeps the relay token off players' machines, an offline relay emulator, and fixes for relay pitfalls: relay vs API token, server vs client port, IP authorization, 1200-byte MTU, clients only reach the host. Use for "relay for my P2P game", "join by code without port forwarding", "replace Unity Relay or Steam P2P with Edgegap", or a custom relay transport. |
| edgegap-samples | Find the right public Edgegap sample project, SDK or build tool to learn from or copy: a game already running on Edgegap with the same engine, netcode or backend (Unity with Mirror, NGO, FishNet, PurrNet, Photon Fusion or Netcode for Entities; Unreal and Lyra; Godot; Colyseus; Nakama; PlayFab; Three.js; Supabase; Cocos; relays), how recently each was updated, which ones are verified and which are outdated, and which Edgegap skill walks through it. Use when someone asks for an Edgegap example, sample, demo, template, starter or reference project, wants to see working code before integrating, or asks whether a sample repo is still current. For the integration steps themselves, load the engine skill the catalog points to (edgegap-unity, edgegap-unreal, edgegap-godot, edgegap-colyseus and so on); for picking a server shape, edgegap. |
| edgegap-server-design | Design an authoritative dedicated game server that fits per-match hosting on Edgegap: who owns the game state, the deployment lifecycle (boot, read injected env vars, bind a fixed port on 0.0.0.0, accept players, self-stop at match end, drain on SIGTERM), logging, and what never goes in the server. Use whenever adding online multiplayer to a game, converting a host/client, listen-server or peer-to-peer game to dedicated servers, or when someone asks about netcode architecture, authoritative servers, match lifecycle, tick rate, cheat prevention or how a game server should behave on Edgegap. Engine-agnostic (Unreal, Godot, Node, custom engines); apply it before containerizing. Unity projects get the same rules, already applied, from edgegap-unity. |
| edgegap-supabase | Supabase + Edgegap: use Supabase as the backend of a multiplayer game (sign-in, player profiles, leaderboards, match history) while Edgegap runs one authoritative game server per match, end to end. Load this before using any Edgegap MCP tool on a project that has or wants Supabase (@supabase/supabase-js, a supabase/ folder, Supabase Auth, Edge Functions, Row Level Security). Templates verified on Edgegap with a Three.js game: anonymous sign-in, Postgres schema with RLS, an Edge Function that holds the Edgegap matchmaker token and ties tickets to users, a game server that verifies Supabase access tokens with JWKS and holds no Supabase key, results reported through a second Edge Function and checked in Postgres, a live Realtime leaderboard, headless e2e. Use for "Supabase as my game backend", "only signed-in players can find a match", "save match results/wins from the game server", "leaderboard with Supabase", "Supabase auth + dedicated servers". Nakama: edgegap-nakama; PlayFab: edgegap-playfab. |
| edgegap-threejs | Three.js / browser game + Edgegap: make a JavaScript web game multiplayer with an authoritative Node.js WebSocket server per match and the Edgegap matchmaker called from the page, end to end. Load this before using any Edgegap MCP tool on a Three.js, Babylon.js, PlayCanvas engine, Phaser or plain canvas/WebGL game that has (or needs) its own ws server rather than Colyseus or Nakama. Templates verified on Edgegap with five Three.js games (shooter, racer, 2v2 soccer, light cycles, sumo): a room with phases, bots, fixed tick and snapshots, self-stop, matchmaker teams, a no-build Three.js client with Find Match on the Edgegap JS SDK, wss retry, Dockerfile, WS + TLS Upgrade versions, one image for several games, a multi-profile matchmaker config, headless e2e scripts. Use for "make my three.js game multiplayer", "host my browser game server", "Find Match for a web game", "wss from an https page", "several mini-games on one matchmaker", or debugging them. Colyseus: edgegap-colyseus; Manus: edgegap-manus. |
| edgegap-troubleshoot | Diagnose why a game server on Edgegap will not start, keeps restarting, stops early, or cannot be reached, for any engine: image push and pull failures (401, 403, 424 "unable to pull image"), exec format errors, 422 couldn't allocate, Error deployments, crash loops and OOM kills, 100% CPU, deployments stopping after 60 minutes or 24 hours, missing logs, clients timing out or failing to connect (internal vs external port, protocol, 0.0.0.0 binding, wss and TLS Upgrade), and matchmaker players stuck searching. Use when someone says their Edgegap deployment, server or matchmaking "isn't working", or pastes an Edgegap error. Unity-specific build and SDK issues are in edgegap-unity. |
| edgegap-ugs-matchmaker | Unity Gaming Services (UGS) Matchmaker + Edgegap: keep Unity Matchmaker queues and pools and have each match start its own Edgegap dedicated server near the players, through the EdgegapAllocator Cloud Code module (Matchmaker_AllocateServer deploys, Matchmaker_PollAllocation returns IP:port to the tickets). Load this before using any Edgegap MCP tool on a Unity project that uses com.unity.services.matchmaker or MatchmakeSessionAsync, has .mmq queue files, ugs deploy, Cloud Code hosting, or is leaving Multiplay Hosting (MultiplayService, server query, allocation payload). Covers deploying the module with the UGS CLI, the EDGEGAP_API_TOKEN secret, app/version/port constants, the queue's Cloud Code hosting, player_ip in ticket custom data, the client ticket flow, MATCH_ID and self-stop on the server. Not run end to end yet. A new game with no matchmaker: edgegap-matchmaking + edgegap-unity. PlayFab: edgegap-playfab. Choosing a matchmaker: edgegap-matchmaking. |
| edgegap-unity | Unity + Edgegap: get a Unity multiplayer game online with dedicated servers and matchmaking, end to end. Load this before using any Edgegap MCP tool on a Unity project: it has the Unity workflow, tested C# templates (matchmaker client, server self-stop), Linux server build, Dockerfile, matchmaker config and fixes for known pitfalls. Use when a Unity dev wants online play: "put my game online", "play with people over the internet", "works on LAN/same wifi but not online", "nobody should have to host", "click Play and get matched", how Fall Guys/Among Us match players, servers for a playtest, "where do I start with servers". Also for Mirror host/client games moving to dedicated servers, WebGL multiplayer, or debugging Edgegap deployments, ports or matchmaking for a Unity game. Use even for beginners who never say Edgegap, servers or Docker. Not for NGO (edgegap-ngo), FishNet (edgegap-fishnet), PurrNet (edgegap-purrnet) or Fusion (edgegap-fusion) projects, Unreal (edgegap-unreal), Godot or non-game backends. |
| edgegap-unreal | Unreal Engine + Edgegap: get an Unreal multiplayer game online with dedicated servers and matchmaking, end to end. Load this before using any Edgegap MCP tool on an Unreal project: it has the Unreal workflow, Edgegap's Unreal SDK plugin for UE 5.0-5.8 (Find Match with latency beacons, server ticket check, self-stop) with tested C++ drop-ins as fallback, source-engine and Linux cross-compile setup, server packaging, Dockerfile, matchmaker config and fixes for the pitfalls that cost hours. Use when an Unreal dev wants online play: "put my game online", "players can only join on LAN", "nobody should have to host", "click Play and get matched", listen server to dedicated server, a .uproject that needs servers, "open <ip>" connections, packaging a Linux server, or debugging Edgegap deployments, ports or matchmaking for an Unreal game. Covers C++ and Blueprint-only projects. Use even for beginners who never say Edgegap, servers or Docker. Not for Unity (edgegap-unity), Godot or non-game backends. |
| edgegap-vibe-coded | Make a vibe-coded game online multiplayer on Edgegap: a single-player browser game made with an AI tool (Claude, Cursor, Codex, ChatGPT, Lovable, Bolt, v0, Replit, Websim...) that plays against bots in the page, turned into online matches with one authoritative server per match, Find Match and a matchmaker, while solo play keeps working. Load this first for "make my vibe-coded game multiplayer", "add online play to the game I made with AI", "play this with friends online", "my Lovable/Bolt game needs multiplayer", or which game ideas work online. It checks whether the game holds up with network delay, gets the code out of the AI tool into a repo, moves the rules into one file shared by page and server, and runs a public demo cheaply (matchmaker always on, servers stop fast, free-tier limits). Verified with Thin Ice Tussle. Server and client templates: edgegap-threejs; games on Supabase: edgegap-supabase; Manus: edgegap-manus. |
Resources
Contextual data attached and managed by the client
| Name | Description |
|---|---|
| edgegap/SKILL.md | Start here for hosting a game on Edgegap (dedicated servers + matchmaking) when the engine is not Unity, Unreal or Godot, is unknown, or the question is about the platform itself. Use when someone wants to host or deploy a game server, wants a single-player or co-op game always online or harder to crack, asks how players will connect to matches, wants servers for a custom-engine game, compares hosting options, or asks what Edgegap apps, versions, deployments, fleets or matchmakers are, even if they never say "hosting". It picks the server shape, explains the vocabulary and safety rules, and routes to the right skill. For a Unity project, load edgegap-unity instead (NGO: edgegap-ngo, FishNet: edgegap-fishnet, PurrNet: edgegap-purrnet, Fusion: edgegap-fusion); Unreal: edgegap-unreal; Godot 4: edgegap-godot; Colyseus: edgegap-colyseus; Cocos: edgegap-cocos; Nakama: edgegap-nakama; Manus: edgegap-manus; Three.js/web: edgegap-threejs; vibe-coded: edgegap-vibe-coded; matchmaking design: edgegap-matchmaking. |
| edgegap-cocos/SKILL.md | Cocos Creator + Edgegap without Colyseus: host the authoritative server of a Cocos Creator 3.8 game (usually Node.js with ws or socket.io, any language works) on Edgegap, one server per match near its players, end to end. Load this before using Edgegap MCP tools on a Cocos project whose server is not Colyseus. It covers the server shape (Linux container, one WebSocket port with TLS Upgrade for wss://, env config, self-stop), deploying with the Edgegap Cocos extension (install, panel flow, quick-start vs regular token, headless e2e) or with MCP tools/dashboard, the Cocos client (wss by FQDN, first-connection retry, Find Match with @edgegap/sdk), WeChat/Douyin mini-game domain allowlists, testing and troubleshooting. Use for "host my Cocos Creator game server", "Cocos multiplayer on Edgegap", "Edgegap Cocos extension/plugin", "wss from a Cocos web build", "Cocos mini-game with dedicated servers". Colyseus server: edgegap-colyseus. Three.js/Phaser/Babylon browser game: edgegap-threejs. Godot: edgegap-godot. |
| edgegap-colyseus/SKILL.md | Colyseus + Edgegap: host a Colyseus (Node.js) multiplayer game on Edgegap with one dedicated server per match, near its players, that stops itself, end to end. Load this before using any Edgegap MCP tool on a Colyseus project (colyseus or @colyseus/* in package.json, Room classes with onJoin/onLeave, defineServer, app.config.ts, colyseus.js, @colyseus/sdk, the Colyseus Unity, Godot, Cocos Creator, Defold, GameMaker or Haxe SDKs). It has templates verified on Edgegap: a lifecycle module (self-stop on no join, empty server or match end), a Dockerfile, the WS + TLS Upgrade app version, a direct deploy script, a matchmaker config, and matchmaker clients for browser JS/TS, Cocos Creator, Unity and Godot, plus the pitfalls: 502 on a fresh server, wss by FQDN, CORS origins, exposed playground. Use for "host my Colyseus server", "Colyseus on Edgegap", "replace Colyseus Cloud", "one server per match", "Find Match with Colyseus", or debugging Colyseus deployments. Manus games: edgegap-manus. |
| edgegap-containerize/SKILL.md | Package any game server (Unreal, Godot, Node, Go, Rust, C++, a Unity build) into a Docker image that runs correctly on Edgegap, push it to the Edgegap Container Registry or Docker Hub, GHCR, ECR, GCR or GitLab, and register it as an app version: the container contract, Dockerfile patterns, linux/amd64 builds on Apple Silicon, image tags, registry credentials on the version, and port mapping. Use whenever writing or fixing a Dockerfile for a game server, building on a Mac, pushing to registry.edgegap.com, getting "unable to pull image" or exec format errors, or when someone asks how to get a server build onto Edgegap. Engine-agnostic; edgegap-unity has a ready Unity Dockerfile. |
| edgegap-deployments-api/SKILL.md | Write backend code that starts, tracks and stops Edgegap game servers through the HTTP API: POST /v2/deployments with player IPs or coordinates, env vars and tags, ready/error/terminate webhooks, status polling within rate limits, stopping and cleaning up orphaned deployments, and handing players the address and external port. Use whenever building a custom matchmaker, allocator, lobby service or CI job for Edgegap (a CI job that only ships a new build: edgegap-launch, which uses edgegap/deploy-action), writing the allocator for EOS or Steam lobbies (choosing a matchmaker, or keeping Unity Matchmaker: edgegap-matchmaking; Nakama: edgegap-nakama), or when someone mentions api.edgegap.com, the Deploy API, deployment webhooks, request_id, or Edgegap error codes 422/429/410. Not for game clients, which must never hold the API token. |
| edgegap-eos-voice/SKILL.md | Add in-game voice chat with EOS Voice (Epic Online Services) to an Unreal Engine game that runs on Edgegap dedicated servers. The game server is the trusted server: it checks each player's EOS ID token, puts them in a match or team room from the Edgegap matchmaker data, gets room tokens from the EOS Voice Web API (EOS voice doesn't run on Linux servers) and removes players who leave. Ships tested C++ drop-ins (device ID login so players need no Epic account, a replicated component that needs no game class edits, server token service), Developer Portal client policies, Edgegap env vars, local two-client test with fake audio, and fixes for pitfalls. Use for "add voice chat", "team voice", "proximity or party chat", "EOS voice", "push to talk", "players can't hear each other", Vivox replacement, or voice on an Unreal game hosted on Edgegap. Needs a working Edgegap dedicated server first (edgegap-unreal). Not for Unity yet, lobby-only voice without a server, or Mumble. |
| edgegap-fishnet/SKILL.md | FishNet (Fish-Networking) + Edgegap: take a Unity game built on FishNet to dedicated servers and matchmaking, end to end. Load this before using any Edgegap MCP tool on a FishNet project (Assets/FishNet, Tugboat, Bayou, Multipass, ServerManager, NetworkHudCanvas). It has FishNet-ready C# templates verified on Edgegap (matchmaker client, server self-stop, scene-change persistence), the Start On Headless and WebGL/Bayou wss setup, port 7770 app version, Dockerfile, matchmaker config and fixes for known pitfalls, including the SDK JSON bug on Unity before 2022.3. Use when a FishNet dev wants online play: "host my FishNet game", "players should not host", "works on LAN but not online", "Find Match button", "FishNet WebGL on Edgegap", moving off the old FishNet Edgegap samples that call the API from the client, or debugging FishNet deployments, ports or matchmaking. Other Unity netcodes (NGO, Mirror): edgegap-unity. |
| edgegap-fusion/SKILL.md | Photon Fusion 2 + Edgegap: run a Unity game built on Photon Fusion as a dedicated server on Edgegap, verified end to end with Photon's BR200 Battle Royale sample. Load this before using any Edgegap MCP tool on a Fusion project (Assets/Photon/Fusion, NetworkRunner, StartGameArgs, GameMode.Server, PhotonAppSettings, NetworkProjectConfig, TPSBR, BR200). It has a drop-in BR200 kit that changes no sample code (server build with preflight checks, Dockerfile, start script mapping Edgegap variables to BR200's command-line options, Photon region, self-stop), headless test clients logging the connection type, and fixes for pitfalls: Loader IP 127.0.0.1 forcing Photon relays, public IP failing to bind, IL2CPP required on the server, Linux toolchain packages and App ID/AppVersion/region mismatches. Use when a Fusion dev wants dedicated servers, "host BR200", "CT shows Relayed", GameNotFound. Simple FPS sample: edgegap-fusion-simplefps. Other Unity netcodes: edgegap-unity, edgegap-ngo, edgegap-fishnet, edgegap-purrnet. |
| edgegap-fusion-simplefps/SKILL.md | Photon's Simple FPS (Fusion 2) sample + Edgegap: run it as a dedicated server on Edgegap and join through its Party menu, verified end to end. Load this before using any Edgegap MCP tool on a Simple FPS project (SimpleFPS namespace, Deathmatch and Startup scenes, FusionBootstrap, FusionMenuUIParty, MenuConnectionBehaviour, SceneObjects). It has a drop-in kit that edits no Simple FPS or Fusion file: a bootstrap subclass that starts the server and names the session after the deployment FQDN, a Party menu subclass that joins by FQDN and Photon region, an editor setup and IL2CPP build, a Dockerfile, and headless test clients. It fixes the two traps of the usual Simple FPS dedicated-server steps: a server built with only the Deathmatch scene, and a scene that is not active on load, which both make clients throw NullReferenceException in Player.FixedUpdateNetwork. Use for "Simple FPS on Edgegap", "join a deployment from the Party menu" or that error. Other Fusion games, BR200: edgegap-fusion. |
| edgegap-godot/SKILL.md | Godot 4 + Edgegap: take a Godot multiplayer game (MultiplayerAPI, @rpc, ENetMultiplayerPeer, WebSocketMultiplayerPeer, MultiplayerSpawner, netfox) to dedicated servers and matchmaking, end to end. Load this before using any Edgegap MCP tool on a Godot project (project.godot, .gd, .tscn, export_presets.cfg). It has tested GDScript templates (a server lifecycle autoload that waits for the matched players and stops its own deployment, a matchmaker client and Find Match button), the Edgegap Godot plugin build (export, image, push from the editor), app version ports (UDP for ENet, WS + TLS Upgrade for web and wss), matchmaker config, and fixes for Godot pitfalls: empty server logs, export allowlists that drop new scripts, join validation that silently blocks matched players. Use when a Godot dev wants online play: "host my Godot game", "nobody should host", "Find Match button", "Godot web multiplayer", or is debugging Godot deployments, ports or matchmaking on Edgegap. |
| edgegap-launch/SKILL.md | Take an Edgegap-hosted game from "the test deployment works" to live players: the launch checklist (token hygiene, app version settings, restart policy, max duration, self-stop, image caching, log storage), version naming and blue/green rollouts with zero matchmaking downtime, cost and leak control, rate limits, free-tier limits to lift before launch, observability (logs, metrics, deployment IDs), capacity planning with Edgegap, Private Fleets and persistent servers, and incident basics. Use when preparing a launch, beta or playtest on Edgegap, reviewing production readiness, rolling out a new server build, deploying builds from CI or GitHub Actions (edgegap/deploy-action), or when someone mentions going live, launch day, rollout, scaling, hosting costs or operating game servers with real players. |
| edgegap-local-testing/SKILL.md | Prove a game server container behaves on a laptop exactly as it will on Edgegap before spending money: the parity docker run with Edgegap-style env vars, the random-external-port test, the SIGTERM drain test, boot timing, two servers on one host, resource sizing with docker stats, then one tagged test deployment on Edgegap with a real client. Use before any first deploy or new build rollout, when a server works locally but not on Edgegap, or when someone asks how to test a game server container, run it with Docker, or smoke-test a deployment. Engine-agnostic. |
| edgegap-manus/SKILL.md | Manus + Edgegap: turn a browser game built with Manus (manus.im, Manus Game Dev, a Manus web app, or its code exported to GitHub) into an online multiplayer game with an authoritative dedicated server and matchmaking on Edgegap. Load this before using any Edgegap MCP tool on a Manus project. It has templates: Steam sign-in verified on the backend, backend join/status/cancel/leave routes that create Edgegap matchmaker tickets (mode, region, party, player IP) and return only the server address and a signed join token, a Node.js WebSocket game server that self-stops, a browser client with reconnect, a Dockerfile, a GitHub Actions image build, and a matchmaker config. Use when a Manus user wants online play: "make my Manus game multiplayer", "add matchmaking", "Find Match", "Steam login for my web game", "host my HTML5/JavaScript game server", or is debugging wss, CORS, tickets or deployments for a Manus game. Other Three.js/web games without sign-in: edgegap-threejs. Unity: edgegap-unity. |
| edgegap-matchmaking/SKILL.md | Design matchmaking for a game hosted on Edgegap, any engine: choose between Edgegap's hosted matchmaker, your own allocator on the Deploy API, or a matchmaker you already use (Unity Matchmaker, Nakama, PlayFab, EOS or Steam lobbies, Pragma, AccelByte, Open Match); design the profile (teams, parties, skill, modes, expansions, queue times); place servers near players (ping beacons, player IPs, region and hub pickers); and add backfill (join in progress, replacing leavers, server-owned backfill tickets). Use for "players wait too long", "EU players land on US servers", "let players join a running match", "replace a player who left", "parties in a 4v4 queue", "skill-based matchmaking", "which matchmaker should we use", "leaving Multiplay or GameLift FlexMatch", or matchmaker config questions not tied to one engine's client code. Engine skills (edgegap-unity, -ngo, -fishnet, -purrnet, -godot, -unreal, -threejs) own their Find Match client code; edgegap-nakama and edgegap-playfab own those integrations. |
| edgegap-nakama/SKILL.md | Nakama + Edgegap: keep Nakama for accounts, matchmaking and leaderboards, and run every match on its own Edgegap dedicated server near the players through the Edgegap Fleet Manager for Nakama (nakama-edgegap), end to end. Load this before using any Edgegap MCP tool on a project with a Nakama backend (a Go, TypeScript or Lua Nakama module, heroiclabs/nakama images, a Nakama client SDK: nakama-godot, nakama-unity, nakama-js). Engine-agnostic templates verified on Edgegap with Fish Game (Godot 4.7, Nakama 3.39): the Go module (Fleet Manager, AfterAuthenticate hook for the real sign-in method, MatchmakerMatched hook, notifications 111/112/113, a leaderboard only the server writes), game server code for READY, connection events, STOP and player checks, Dockerfile, compose. Use for "host my Nakama game on Edgegap", "Nakama matchmaker should start a dedicated server", "replace Nakama relayed matches", "Heroic Cloud plus Edgegap", or debugging nakama-edgegap. Unity servers: edgegap-server-nakama-plugin-unity. |
| edgegap-ngo/SKILL.md | Netcode for GameObjects (NGO) + Edgegap: take a Unity game built on NGO to dedicated servers and matchmaking, end to end. Load this before using any Edgegap MCP tool on an NGO project (com.unity.netcode.gameobjects, NetworkManager, UnityTransport, StartHost, ConnectionManager, Boss Room). It has NGO C# templates verified on Edgegap, no scene edits (server start and self-stop, Find Match panel, settings asset), a Boss Room adapter, the Edgegap Unity plugin for build, image, push and deploy, port 7777 UDP app version, matchmaker config, and fixes for NGO pitfalls: host-only logic, connection payloads and approval, UnityTransport needing an IP, client-only code on the server, Relay leftovers. Use when an NGO dev wants online play: "host my NGO game", "nobody should host", "replace Unity Relay or Multiplay", "Boss Room on Edgegap", "Find Match button", or debugs NGO deployments, ports or matchmaking. Mirror or WebGL-first games: edgegap-unity. FishNet: edgegap-fishnet. PurrNet: edgegap-purrnet. |
| edgegap-playfab/SKILL.md | PlayFab + Edgegap: keep PlayFab for players, login and Matchmaking, and run each match on its own Edgegap dedicated server near the players, started by PlayFab Azure Functions (CloudScript using Azure Functions), end to end. Load this before using any Edgegap MCP tool on a project that uses PlayFab for matchmaking (a PlayFab title ID, playfabapi.com, PlayFabMultiplayerAPI, CreateMatchmakingTicket) or is leaving PlayFab Multiplayer Servers (MPS, GSDK). Verified on Edgegap with a Unity FishNet game: match_found rule, StartEdgegapDeployment (POST /v2/deployments near the players), ready webhook, server address in player read-only data. Ships the Azure Functions, setup scripts, a dependency-free Unity client, server self-stop, and fixes for PlayFab pitfalls (new titles block LoginWithCustomID player creation, legacy CloudScript, ticket polling limits). Use for "PlayFab matchmaking with Edgegap servers", "replace PlayFab Multiplayer Servers", "PlayFab CloudScript Edgegap bridge", or debugging one. |
| edgegap-purrnet/SKILL.md | PurrNet + Edgegap: take a Unity game built on PurrNet to dedicated servers and matchmaking, end to end. Load this before using any Edgegap MCP tool on a PurrNet project (dev.purrnet.purrnet, NetworkManager start flags, UDPTransport, WebTransport, ParrelSync clones). It has PurrNet-ready C# templates verified on Edgegap that add themselves at runtime without editing scenes (server start and self-stop, connect panel with direct and matchmaker modes, settings asset), port 7777 UDP app version, Dockerfile, matchmaker config, and fixes for PurrNet pitfalls: auto start flags, the async StartClient, ObserversRpc that never runs on a dedicated server. Use when a PurrNet dev wants online play: "host my PurrNet game", "nobody should host", "works with a host but not online", "Find Match button", or is debugging PurrNet deployments, ports or matchmaking on Edgegap. Other Unity netcodes: edgegap-unity (NGO, Mirror) or edgegap-fishnet. |
| edgegap-relays/SKILL.md | Edgegap Relays (Smart Relays, Distributed Relay) for host/client games: one player hosts, friends join with a code, and traffic goes through an Edgegap relay near them, so nobody port forwards and NAT or firewalls stop mattering. Load this once the developer has chosen peer-to-peer or a listen server over a dedicated server, before using edgegap_create_relay_session or any relay API. Emulator-tested, not yet on a live Edgegap relay; points to the LightNet relay deployment verified on Edgegap. Ships a relay transport for raw-UDP netcodes (relay protocol plus reliable fragmented and unreliable ordered channels), a lobby service that keeps the relay token off players' machines, an offline relay emulator, and fixes for relay pitfalls: relay vs API token, server vs client port, IP authorization, 1200-byte MTU, clients only reach the host. Use for "relay for my P2P game", "join by code without port forwarding", "replace Unity Relay or Steam P2P with Edgegap", or a custom relay transport. |
| edgegap-samples/SKILL.md | Find the right public Edgegap sample project, SDK or build tool to learn from or copy: a game already running on Edgegap with the same engine, netcode or backend (Unity with Mirror, NGO, FishNet, PurrNet, Photon Fusion or Netcode for Entities; Unreal and Lyra; Godot; Colyseus; Nakama; PlayFab; Three.js; Supabase; Cocos; relays), how recently each was updated, which ones are verified and which are outdated, and which Edgegap skill walks through it. Use when someone asks for an Edgegap example, sample, demo, template, starter or reference project, wants to see working code before integrating, or asks whether a sample repo is still current. For the integration steps themselves, load the engine skill the catalog points to (edgegap-unity, edgegap-unreal, edgegap-godot, edgegap-colyseus and so on); for picking a server shape, edgegap. |
| edgegap-server-design/SKILL.md | Design an authoritative dedicated game server that fits per-match hosting on Edgegap: who owns the game state, the deployment lifecycle (boot, read injected env vars, bind a fixed port on 0.0.0.0, accept players, self-stop at match end, drain on SIGTERM), logging, and what never goes in the server. Use whenever adding online multiplayer to a game, converting a host/client, listen-server or peer-to-peer game to dedicated servers, or when someone asks about netcode architecture, authoritative servers, match lifecycle, tick rate, cheat prevention or how a game server should behave on Edgegap. Engine-agnostic (Unreal, Godot, Node, custom engines); apply it before containerizing. Unity projects get the same rules, already applied, from edgegap-unity. |
| edgegap-supabase/SKILL.md | Supabase + Edgegap: use Supabase as the backend of a multiplayer game (sign-in, player profiles, leaderboards, match history) while Edgegap runs one authoritative game server per match, end to end. Load this before using any Edgegap MCP tool on a project that has or wants Supabase (@supabase/supabase-js, a supabase/ folder, Supabase Auth, Edge Functions, Row Level Security). Templates verified on Edgegap with a Three.js game: anonymous sign-in, Postgres schema with RLS, an Edge Function that holds the Edgegap matchmaker token and ties tickets to users, a game server that verifies Supabase access tokens with JWKS and holds no Supabase key, results reported through a second Edge Function and checked in Postgres, a live Realtime leaderboard, headless e2e. Use for "Supabase as my game backend", "only signed-in players can find a match", "save match results/wins from the game server", "leaderboard with Supabase", "Supabase auth + dedicated servers". Nakama: edgegap-nakama; PlayFab: edgegap-playfab. |
| edgegap-threejs/SKILL.md | Three.js / browser game + Edgegap: make a JavaScript web game multiplayer with an authoritative Node.js WebSocket server per match and the Edgegap matchmaker called from the page, end to end. Load this before using any Edgegap MCP tool on a Three.js, Babylon.js, PlayCanvas engine, Phaser or plain canvas/WebGL game that has (or needs) its own ws server rather than Colyseus or Nakama. Templates verified on Edgegap with five Three.js games (shooter, racer, 2v2 soccer, light cycles, sumo): a room with phases, bots, fixed tick and snapshots, self-stop, matchmaker teams, a no-build Three.js client with Find Match on the Edgegap JS SDK, wss retry, Dockerfile, WS + TLS Upgrade versions, one image for several games, a multi-profile matchmaker config, headless e2e scripts. Use for "make my three.js game multiplayer", "host my browser game server", "Find Match for a web game", "wss from an https page", "several mini-games on one matchmaker", or debugging them. Colyseus: edgegap-colyseus; Manus: edgegap-manus. |
| edgegap-troubleshoot/SKILL.md | Diagnose why a game server on Edgegap will not start, keeps restarting, stops early, or cannot be reached, for any engine: image push and pull failures (401, 403, 424 "unable to pull image"), exec format errors, 422 couldn't allocate, Error deployments, crash loops and OOM kills, 100% CPU, deployments stopping after 60 minutes or 24 hours, missing logs, clients timing out or failing to connect (internal vs external port, protocol, 0.0.0.0 binding, wss and TLS Upgrade), and matchmaker players stuck searching. Use when someone says their Edgegap deployment, server or matchmaking "isn't working", or pastes an Edgegap error. Unity-specific build and SDK issues are in edgegap-unity. |
| edgegap-ugs-matchmaker/SKILL.md | Unity Gaming Services (UGS) Matchmaker + Edgegap: keep Unity Matchmaker queues and pools and have each match start its own Edgegap dedicated server near the players, through the EdgegapAllocator Cloud Code module (Matchmaker_AllocateServer deploys, Matchmaker_PollAllocation returns IP:port to the tickets). Load this before using any Edgegap MCP tool on a Unity project that uses com.unity.services.matchmaker or MatchmakeSessionAsync, has .mmq queue files, ugs deploy, Cloud Code hosting, or is leaving Multiplay Hosting (MultiplayService, server query, allocation payload). Covers deploying the module with the UGS CLI, the EDGEGAP_API_TOKEN secret, app/version/port constants, the queue's Cloud Code hosting, player_ip in ticket custom data, the client ticket flow, MATCH_ID and self-stop on the server. Not run end to end yet. A new game with no matchmaker: edgegap-matchmaking + edgegap-unity. PlayFab: edgegap-playfab. Choosing a matchmaker: edgegap-matchmaking. |
| edgegap-unity/SKILL.md | Unity + Edgegap: get a Unity multiplayer game online with dedicated servers and matchmaking, end to end. Load this before using any Edgegap MCP tool on a Unity project: it has the Unity workflow, tested C# templates (matchmaker client, server self-stop), Linux server build, Dockerfile, matchmaker config and fixes for known pitfalls. Use when a Unity dev wants online play: "put my game online", "play with people over the internet", "works on LAN/same wifi but not online", "nobody should have to host", "click Play and get matched", how Fall Guys/Among Us match players, servers for a playtest, "where do I start with servers". Also for Mirror host/client games moving to dedicated servers, WebGL multiplayer, or debugging Edgegap deployments, ports or matchmaking for a Unity game. Use even for beginners who never say Edgegap, servers or Docker. Not for NGO (edgegap-ngo), FishNet (edgegap-fishnet), PurrNet (edgegap-purrnet) or Fusion (edgegap-fusion) projects, Unreal (edgegap-unreal), Godot or non-game backends. |
| edgegap-unreal/SKILL.md | Unreal Engine + Edgegap: get an Unreal multiplayer game online with dedicated servers and matchmaking, end to end. Load this before using any Edgegap MCP tool on an Unreal project: it has the Unreal workflow, Edgegap's Unreal SDK plugin for UE 5.0-5.8 (Find Match with latency beacons, server ticket check, self-stop) with tested C++ drop-ins as fallback, source-engine and Linux cross-compile setup, server packaging, Dockerfile, matchmaker config and fixes for the pitfalls that cost hours. Use when an Unreal dev wants online play: "put my game online", "players can only join on LAN", "nobody should have to host", "click Play and get matched", listen server to dedicated server, a .uproject that needs servers, "open <ip>" connections, packaging a Linux server, or debugging Edgegap deployments, ports or matchmaking for an Unreal game. Covers C++ and Blueprint-only projects. Use even for beginners who never say Edgegap, servers or Docker. Not for Unity (edgegap-unity), Godot or non-game backends. |
| edgegap-vibe-coded/SKILL.md | Make a vibe-coded game online multiplayer on Edgegap: a single-player browser game made with an AI tool (Claude, Cursor, Codex, ChatGPT, Lovable, Bolt, v0, Replit, Websim...) that plays against bots in the page, turned into online matches with one authoritative server per match, Find Match and a matchmaker, while solo play keeps working. Load this first for "make my vibe-coded game multiplayer", "add online play to the game I made with AI", "play this with friends online", "my Lovable/Bolt game needs multiplayer", or which game ideas work online. It checks whether the game holds up with network delay, gets the code out of the AI tool into a repo, moves the rules into one file shared by page and server, and runs a public demo cheaply (matchmaker always on, servers stop fast, free-tier limits). Verified with Thin Ice Tussle. Server and client templates: edgegap-threejs; games on Supabase: edgegap-supabase; Manus: edgegap-manus. |
TDQS
Scored across 43 tools
Each tool targets a distinct resource+action, and overlapping-looking pairs are explicitly separated in the descriptions (get_deployment vs wait_for_deployment, list_locations vs list_ping_beacons, validate_server_config vs generate_dockerfile). Minor residual confusion between list_skills/get_skill/update_skills and get_app_version vs list_app_versions, but the text disambiguates them well.
A uniform edgegap_ prefix and consistent verb_noun pattern (get_, list_, create_, update_, delete_, link_, revoke_) runs through nearly all 43 tools. Deviations are small: bare-verb edgegap_deploy and bare-noun edgegap_context, plus build_/generate_/report_ verbs that still read predictably.
43 tools is well above the comfortable agent-facing range, and tooling-adjacent entries (list_skills, get_skill, update_skills, context) pad an already large API surface. The underlying domain is genuinely broad (apps, versions, deployments, relays, storage, pull profiles, registry, fleets), so most tools do map to real operations rather than duplication.
Lifecycle coverage is strong: full create/list/get/update/delete on apps and versions, a complete deployment lifecycle (deploy, wait, get, list, logs, metrics, tag, stop, report), and full relay session management. Minor gaps remain, e.g. no single-item get or update for Endpoint Storage and pull profiles (list/create/delete only) and no fleet list beyond fleet hosts.