Discover how Edgegap works

Discover how Edgegap works

/

Epic Online Services

Epic Online Services

Deploy to Edgegap

Published

Published

Published

Last reviewed for accuracy

Last reviewed for accuracy

Last reviewed for accuracy

Epic Online Services: How to start Edgegap dedicated servers from your EOS lobbies

Epic Online Services: How to start Edgegap dedicated servers from your EOS lobbies

This guide shows you how to keep Epic Online Services (EOS) lobbies in your Unreal Engine game and start an Edgegap dedicated game server for each match: when the lobby is ready, your backend deploys a server near the players, and the lobby hands its address to every member.

Once your game server is containerized, Edgegap deploys it worldwide to 615+ Edge Cloud locations (on-demand) from a simple API call and billed exclusively on usage: no entire server to rent, provision or keep running between matches. For persistent servers of reserved capacity, Edgegap offers Private Fleets.

EOS groups the players; Edgegap hosts the match. Between them sits one small service on your backend, because starting a server needs your Edgegap API token, which never goes in a game client.

This guide covers:

  1. Preparing a working Edgegap app version for your Unreal game

  2. Connecting your coding agent to Edgegap (optional)

  3. Setting up your EOS lobby

  4. Adding a deploy service to your backend

  5. Requesting a server when the lobby is ready

  6. Sharing the server with the lobby, and ending the match

  7. Testing with two players

You can do it two ways, and mix them:

  • With a coding agent. Connect Claude Code, Cursor or another agent to the Edgegap MCP server and its agent skills. The agent writes the deploy service and the lobby code, and checks your app version and deployments. You handle your EOS and Edgegap dashboards, the secrets, and playtest.

  • By hand. Every step below also works without an agent.

Prefer a hosted matchmaker with no backend to run? See Unreal Matchmaking.

No credit card required. Free tier includes the resources to deploy a real game server.

No credit card required. Free tier includes the resources to deploy a real game server.

Step-by-Step Guide

Detailed Integration Steps

1. Before you start

  • A free Edgegap account. Verify your email. No credit card is needed to test.

  • A working Edgegap app version of your Unreal game server: a server you deployed and joined at least once. Your backend deploys that version for every match, so it needs a functional, containerized game server to work end to end. If you don't have one yet, use our guide: Unreal Engine. Note its application name, version name and port name (usually gameport).

  • EOS lobbies in your game: an Epic Developer Portal product with the Lobbies interface, and the EOS SDK or Unreal's EOS Online Subsystem in your project.

  • A backend you control, for the deploy service: your existing game backend, or a small serverless function.

  • An Edgegap API token, from Dashboard → User Settings → Tokens, stored in your backend's secret manager. It is organization-wide, so never put it in your game client, your game server, your project files or a chat.

2. Connect your coding agent to Edgegap

Skip this step if you're doing everything by hand.

The Edgegap MCP server lets your agent check your apps and versions, deploy test servers and read their logs on your account. The edgegap-deployments-api agent skill gives it the tested rules for backends that start Edgegap servers: where the token lives, placing servers near players, webhooks, retries and cleanup.

Claude Code (run in your own terminal, so the token never passes through the chat):

claude mcp add --transport http edgegap https://mcp.edgegap.dev/mcp -H "Authorization: token YOUR_EDGEGAP_API_TOKEN" --scope user

Then install the skills: /plugin marketplace add edgegap/edgegap-agent-skills, then /plugin install edgegap@edgegap. Restart the session.

Cursor, VS Code and other clients that send headers: add https://mcp.edgegap.dev/mcp with the header Authorization: token YOUR_EDGEGAP_API_TOKEN, and install the skills with npx skills add edgegap/edgegap-agent-skills --skill "*".

Claude Desktop: custom connectors can't send the header, so use the local server instead (Node 18+): { "mcpServers": { "edgegap": { "command": "npx", "args": ["-y", "@edgegap/mcp"] } } }. It asks for the token on first use.

Check it works:

"List my Edgegap apps and their versions, with each version's ports."

3. Set up your EOS lobby

The lobby carries the match. Two lobby attributes are enough: the server's address and its port. Everything else stays as your game already has it.

  • Members join as today, through your lobby UI or Unreal's EOS Online Subsystem.

  • Each player checks in with your backend once when they join (for example when they sign in), with their EOS user ID. Your backend records the public IP it sees on that request. Edgegap uses those IPs to start the server near all the players, and players never have to report their own IP.

  • Add two lobby attributes, empty for now, for example ServerAddress and ServerPort. Only the lobby owner can set them; every member gets notified when they change.

4. Add a deploy service to your backend

Your backend starts the server with one call: POST https://api.edgegap.com/v2/deployments, with the header Authorization: token <your API token>, and a body with:

  • application and version: your Edgegap app and the version to run, read from your config, never "whatever is newest".

  • users: each player's public IP, as {"user_type": "ip_address", "user_data": {"ip_address": "..."}}. Edgegap picks the location with the best ping for the whole group.

  • tags: for example lobby-<id>, so you can find the server later.

  • webhook_on_ready (and webhook_on_error): your backend's URL, with an unguessable per-lobby token in it. Edgegap calls it with the server's fqdn, public_ip and ports.gameport.external once it starts.

Edgegap answers 202 with a request_id: store it with the lobby right away. There's no idempotency key, so if the call timed out, look for a deployment tagged lobby-<id> before deploying again. A 422 means no server could be allocated yet: retry with backoff. Webhooks aren't retried, so if none arrives in time, check GET https://api.edgegap.com/v1/status/<request_id> (at most 20 requests per second for your whole organization).

With your agent:

"Load the edgegap-deployments-api skill and add an Edgegap deploy service to my backend: an endpoint the EOS lobby owner calls with the lobby ID and member EOS IDs, which checks the caller is the lobby owner, looks up the members' IPs, deploys my app version with POST /v2/deployments (tags, ready and error webhooks), stores the request_id, and exposes the server's address and external port once ready. Read the API token from my secret manager. Add a periodic cleanup that stops orphaned deployments by exact ID."

Prototype shortcut, not for release: Edgegap's docs also show the lobby owner calling the API directly from the game. That puts your organization-wide API token inside your game build, where anyone can extract it. Use it only on your own machine.

5. Request a server when the lobby is ready

When the lobby owner starts the match:

  1. The lobby owner's game calls your deploy service with the lobby ID and the members' EOS IDs, authenticated as that player (for example with their EOS ID token).

  2. Your service deploys the server and returns right away. The server takes a few seconds to start.

  3. The lobby owner's game waits for the address: it checks your service every few seconds, or your service notifies it, until the ready webhook has arrived.

Show players a "starting server" state meanwhile, and a retry if your service reports an error.

6. Share the server with the lobby, and end the match

  1. The lobby owner sets ServerAddress and ServerPort on the lobby. EOS notifies every member.

  2. Each member connects to that address and port (open <address>:<port>, or ClientTravel). Ready means the container started; the game can need up to a minute more to load, so retry the connection every second for a while.

  3. When the match ends, the lobby owner clears both attributes, and members leave the server. The server stops its own deployment: on match end, it calls the ARBITRIUM_DELETE_URL Edgegap gives every deployment, with ARBITRIUM_DELETE_TOKEN. No API token needed.

Rematch with the same players? The lobby owner requests a new server, and the flow starts again.

Your deploy service stops anything left over: a lobby that broke up before the match started, or a server that never ended. Stop those by exact request_id (DELETE https://api.edgegap.com/v1/stop/<request_id>; a 410 means it already stopped), never with broad filters.

7. Test with two players

  1. Make sure no test deployment is still running: the free tier runs one deployment at a time.

  2. Launch two clients, sign both in to EOS, and join the same lobby.

  3. Start the match as the lobby owner. Your service deploys the server; in the Edgegap dashboard, the deployment appears tagged with the lobby, in a location near you.

  4. Both clients get the lobby update and connect to the same server.

  5. End the match: the attributes clear, the server stops itself, and it disappears from the dashboard.

If the lobby gets an address but nobody can connect, it's the server, not the lobby: deploy your version by hand and join it with open <address>:<port>.

Next Steps

Next Steps

Going live? Ask your agent to run the edgegap-launch skill's checklist: version rollouts, restart policy, maximum duration, cost control. Prefer a hosted matchmaker with no backend? See Unreal Matchmaking.

Stuck? Ask your agent to load edgegap-troubleshoot, or ask our team and other studios on the Edgegap Discord.

Frequently Asked Questions

Common questions about starting Edgegap dedicated servers from Epic Online Services lobbies.

Can I use Epic Online Services lobbies with Edgegap dedicated servers?

Yes. Keep your EOS lobbies, and when the lobby owner starts the match, a small service on your backend deploys an Edgegap server near the players. The lobby owner shares its address through lobby attributes, and every member connects.

Why do I need a backend to start Edgegap servers from EOS lobbies?

Starting a server needs your Edgegap API token, which gives access to your whole Edgegap organization. In a game client, anyone could extract it. A backend service keeps it secret and can check who's asking.

How does Edgegap choose the server location for an EOS lobby?

From the players' public IP addresses, which your backend records when each player checks in. Edgegap picks the location with the best ping for the whole group.

How do I stop the Edgegap server when the EOS match ends?

The server stops its own deployment with the delete URL and token Edgegap injects into every deployment, with no API token needed. Your backend also stops leftovers by their exact request ID.

Does Edgegap work with EOS for both Unreal Engine and other engines?

This guide uses Unreal Engine, but the flow only needs EOS lobby attributes and a backend that calls Edgegap's API, so it works the same with the EOS SDK in other engines.

Clients

Learn more from clients who integrated Edgegap

31 case studies are available from studios that moved to Edgegap from another platform.

Key reasons why they chose Edgegap

Discover the impact of Edgegap's automated game server orchestration for a flawless multiplayer experience.

Cost

Pricing

Optimize costs and performance with hybrid orchestration

Optimize costs and performance with hybrid orchestration

Optimize costs and performance with hybrid orchestration

Edge Cloud

On-Demand

$0.00115

/ vCPU

/ MINUTE

Billed by the Minute, Only on Usage

Pay only when players play. 0 active servers = $0

Deploy game servers worldwide, per instance, to all 615+ edge cloud locations. Zero commitment.

Simply add a credit card.

Edge Cloud

On-Demand

$0.00115

/ vCPU

/ MINUTE

Billed by the Minute, Only on Usage

Pay only when players play. 0 active servers = $0

Deploy game servers worldwide, per instance, to all 615+ edge cloud locations. Zero commitment.

Simply add a credit card.

Private Fleet (Bare Metal)

Reserved Capacity

$0.0282

/ vCPU

/ HOUR

Billed Monthly, Always On

$280 per host/month (12 mo rate), or $350 monthly

Optimize the cost effectiveness of your game server with egress-free hosting of Private Fleets.

Persistent, available 24/7, exclusive to your studio.

Private Fleet (Bare Metal)

Reserved Capacity

$0.0282

/ vCPU

/ HOUR

Billed Monthly, Always On

$280 per host/month (12 mo rate), or $350 monthly

Optimize the cost effectiveness of your game server with egress-free hosting of Private Fleets.

Persistent, available 24/7, exclusive to your studio.

Your bill varies per rate and usage; which can vary per game type, player count, & more.

Your bill varies per rate and usage; which can vary per game type, player count, & more.

Model your usage with our estimate calculator ->

Model your usage with our estimate calculator ->

Edgegap's features & price: detailed comparison between Edge Cloud & Private Fleets

Edgegap's features & price: detailed comparison between Edge Cloud & Private Fleets

COMPARE

Free Trial

Edge Cloud

Private Fleets

FEATURES

Analytics & Monitoring

Billing Alarms

Click to Expand

28 more rows

Unlocks

Capabilities are unlocked when a credit card is added to the account.

COMPARE

Free Trial

Edge Cloud

Private Fleets

FEATURES

Analytics & Monitoring

Billing Alarms

Click to Expand

28 more rows

Unlocks

Capabilities are unlocked when a credit card is added to the account.

COMPARE

Free Trial

Edge Cloud

Private Fleets

FEATURES

Analytics & Monitoring

Billing Alarms

Click to Expand

28 more rows

Unlocks

Capabilities are unlocked when a credit card is added to the account.