This guide shows you how to keep PlayFab for your player accounts and matchmaking queues, and start an Edgegap dedicated game server for each match: when PlayFab finds a match, an Azure Function deploys a server near the players, and a second one hands its address to every player.
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.
PlayFab groups the players; Edgegap hosts the match. The two functions run in your Azure subscription as PlayFab's CloudScript using Azure Functions, so your Edgegap API token and PlayFab secret key stay there: the game client holds only your title ID, and the game server holds no secret at all.
This guide covers:
Preparing a working Edgegap app version, a PlayFab title and an Azure subscription
Connecting your coding agent to Edgegap (optional)
Setting up a PlayFab matchmaking queue
Adding the Azure Function that deploys the server
Handing the server's address to the players
Matching players from your game client
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
edgegap-playfabskill ships the tested Azure Functions, setup scripts and a Unity client, and the agent checks your app version and deployments. You handle your PlayFab, Azure and Edgegap dashboards, the secrets, and playtest.By hand. Every step below also works without an agent.
Want to see it working first? The SpaceEdge sample runs this whole setup in a small Unity space shooter.
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 game server: a server you deployed and joined at least once. PlayFab starts 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 guides: Unity Engine, Unreal Engine, Godot Engine or Custom Engine. Name its game port
gameport, and note the application and version names. The server needs no PlayFab settings or secrets.A PlayFab title with Matchmaking, and access to its Game Manager: you need its Title ID and a secret key.
An Azure subscription and the Azure CLI, for the two Azure Functions. Testing fits in the Flex Consumption plan's monthly free grant.
An Edgegap API token, from Dashboard → User Settings → Tokens. It goes only in your Function App's settings. It is organization-wide, so never put it in your game client, your game server, your project files or a chat.
Optional: Edgegap's PlayFab sample, a Unity 2021.3 project with the two Azure Functions, the client and the server code below.
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-playfab agent skill gives it the tested PlayFab setup: the two Azure Functions, the scripts that deploy them and create the queue, a Unity client, and the fixes for PlayFab’s known pitfalls.
Claude Code: install the Edgegap plugin. It adds both the MCP server and the skills, and asks for your API token during install (stored in your system's credential store):
/plugin marketplace add edgegap/llm-agent-skills, then /plugin install edgegap@edgegap. Restart the session.
Only want the MCP server, without the plugin? Run this in your own terminal instead: claude mcp add --transport http edgegap https://mcp.edgegap.dev/mcp -H "Authorization: token YOUR_EDGEGAP_API_TOKEN" --scope user. Don't do both, or you'll have two edgegap servers.
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/llm-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 a PlayFab matchmaking queue
In PlayFab's Game Manager, open Multiplayer → Matchmaking and create a queue, or reuse yours. For a first test, a match size of 2 with no rules matches any two players.
Turn Enable server allocation off on the queue: PlayFab only forms the match, and Edgegap hosts the server.
If your game signs players in with
LoginWithCustomIDor a device ID, open Title settings → API Features and untick Disable player creation using Client/LoginWithCustomId. New titles have it ticked, and logins fail withPlayerCreationDisabled.In Title settings → Secret Keys, create a secret key for the Azure Functions.
Your match rules stay in PlayFab. Edgegap only starts the server once PlayFab has found the match.
Moving an existing queue off PlayFab Multiplayer Servers? Clients you already shipped read the server from
GetMatch, which stops returning it once allocation is off. Test on a copy of the queue, and ship the new client before you switch.
4. Add the Azure Function that deploys the server
The Function App. Create one resource group, a storage account and a Flex Consumption Function App on Node.js 22, in a US West region (PlayFab's recommendation). In its settings, add PLAYFAB_TITLE_ID, PLAYFAB_SECRET_KEY, EDGEGAP_API_TOKEN (without the token prefix), EDGEGAP_APP_NAME, EDGEGAP_APP_VERSION, EDGEGAP_PORT_NAME (optional, defaults to gameport) and EDGEGAP_READY_WEBHOOK_URL (step 5). Optional: FALLBACK_LATITUDE / FALLBACK_LONGITUDE, used when PlayFab can’t locate any player.
The function. StartEdgegapDeployment:
Reads the
MatchIdandQueueNamefrom the match-found event.Gets the match members, and each player's location with
Server/GetPlayerProfile(PlayFab geolocates their login IP).Calls
POST https://api.edgegap.com/v2/deploymentswith yourapplicationandversion, the players asusers("user_type": "geo_coordinates"), a tag with the match ID (its first 20 characters),PLAYFAB_MATCH_IDandPLAYFAB_QUEUE_NAMEasenvironment_variables, andwebhook_on_ready/webhook_on_errorpointing to the second function.Returns right away, in about a second. It never waits for the server: PlayFab's call times out after 10 seconds, and a server takes 5 to 30 seconds to be ready.
Edgegap picks the best available location for the whole group and answers with a request_id. Log it with the match ID.
match_found fires for every queue of your title. To give Edgegap servers to some queues only, list them in EDGEGAP_QUEUES.
Register it and add the rule. In Automation → CloudScript → Functions, register StartEdgegapDeployment with its URL and function key. Then in Automation → Rules, add a rule: event type playfab.matchmaking.match_found, action Execute Azure Function, function StartEdgegapDeployment.
With your agent:
"Load the edgegap-playfab skill. Deploy its two Azure Functions to a new Flex Consumption Function App in US West, set the app settings from my local env file without printing them, register StartEdgegapDeployment in my PlayFab title, and run the chain test before I add the rule."
Keep the secrets out of sight: the Edgegap token and the PlayFab secret key live only in the Function App's settings. Function keys are secrets too: they're part of the URLs, so don't commit or share those URLs.
5. Hand the server's address to the players
When the server is ready, Edgegap calls the second function, EdgegapDeploymentReady, through the ready webhook. Edgegap calls it, not PlayFab, so don't register it in PlayFab.
It doesn't trust the webhook body: it reads the deployment from the Edgegap API and checks that it carries this match's tag.
It reads the match members again from PlayFab.
It writes
{"matchId", "status", "host", "port"}to each player's read-only data, under the keyEdgegapServer. Clients can read it but can't change it.If the server failed, it writes
status: "error", so clients stop waiting.
The game server only has to listen on its port and stop itself when the match is over: it calls the ARBITRIUM_DELETE_URL Edgegap gives every deployment, with ARBITRIUM_DELETE_TOKEN. The sample stops when nobody joins within 120 seconds, or 30 seconds after the last player leaves.
For production, pass the match's player IDs to the server (for example as an environment variable from StartEdgegapDeployment) and reject players who aren't in the match.
6. Match players from your game client
The client signs the player in to PlayFab (the sample uses
LoginWithCustomID; use your game's login). It holds only your title ID.It creates a matchmaking ticket in your queue (
CreateMatchmakingTicket) and checks it withGetMatchmakingTicketevery 6 seconds until the status isMatched. PlayFab allows 10 checks per minute per ticket.It then reads
EdgegapServerwithGetUserReadOnlyDataevery 2 to 3 seconds, and ignores any value whosematchIdisn't this match.It connects to
host:port. Onstatus: "error", it shows an error and lets the player queue again.
The sample's Unity client does this with UnityWebRequest and JsonUtility only, with no PlayFab SDK. If your game already uses the SDK, make the same calls through it.
7. Test with two players
Make sure no test deployment is still running: the free tier runs one deployment at a time.
Sign in two clients as two different PlayFab players and start matchmaking on both. On one machine, give each its own player ID: the sample takes
-playfabCustomId player-aand-playfabCustomId player-b.When PlayFab matches them, the rule runs
StartEdgegapDeployment. In the Edgegap dashboard, a deployment appears tagged with the start of the match ID, in a location near you.Both clients read the address from their read-only data and connect to the same server.
Quit both clients: the server stops itself and disappears from the dashboard.
Matched, but no address? Check the Function App's logs (Application Insights, or each function's Monitor tab), and that the rule's event type is exactly playfab.matchmaking.match_found. A 401 from Edgegap means the token is wrong or still has its token prefix. A deployment starts but nobody connects? It's the server: deploy your version by hand and join it directly.
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 scripts? See Edgegap's matchmaker.
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 hosting PlayFab matches on Edgegap's dedicated servers.
Can I use PlayFab Matchmaking with Edgegap servers?
Yes. Keep your PlayFab queues and rules, and turn server allocation off. When PlayFab finds a match, an Azure Function triggered by the match-found event deploys an Edgegap server near the players, and a second function writes its address to each player's read-only data.
Do I still need PlayFab Multiplayer Servers?
No. Edgegap hosts the dedicated servers. PlayFab keeps your accounts, player data and matchmaking, and Edgegap starts a server only when a match is found, billed per minute while it runs.
How does Edgegap choose the server location for a PlayFab match?
From each player's location, which the Azure Function reads from their PlayFab profile and sends as coordinates. Edgegap picks the best available location for the whole group.
Where does my Edgegap API token go with PlayFab?
Only in your Azure Function App's settings, with your PlayFab secret key. Game clients hold only the title ID, and game servers hold no secret.
How do players get the server address from PlayFab?
When the server is ready, Edgegap calls a webhook function that checks the deployment and writes its host and port to each matched player's read-only data. Each client reads it and connects.
Can I use legacy CloudScript instead of Azure Functions?
The same rule and event drive both, but Microsoft labels JavaScript CloudScript "Legacy" and points new work to CloudScript using Azure Functions. Azure Functions also let the deploy call return at once and receive Edgegap's ready webhook.

Clients
Learn more from clients who integrated Edgegap
31 case studies are available from studios that moved to Edgegap from another platform.

A Flawless Global Launch for Rivals of Aether 2
Aether Studios
Learn how Aether Studios quickly added Edgegap and delivered flawless launch & post-launch to their community.
Case Study

Overcome Latency Introduced by VR’s use of WiFi in Competitive Multiplayer
Halfbrick Studios
Discover how Halfbrick successfully launched & maintains a multiplayer-focused Early Access on META Quest's VR platform.
Case Study

MENA’s Social App Adds Online Games
WOLF
Learn how the highly popular MENA-region social app added matchmaking & multiplayer games orchestration easily to WOLF Qanawat.
Case Study

Hybrid Orchestration Keeps Kickoff Tactics Ready for Any Traffic
Birch Games
How hybrid orchestration helped Birch Games handle traffic, pairing egress-free Fleets with the regionless cloud.
Case Study

7 Days Blood Moons
The Fun Pimps & iLLOGIKA
Learn how Illogika dramatically reduced server costs & ensured the online experience the 7 Days to Die franchise expects.
Case Study

Authentic Online Warfare Requires the Ultimate Orchestration
Highwire Games
Learn how Highwire's need for performance required orchestration only Edgegap can deliver.
Case Study

22,000 Reviews, 4.8 Stars, and Infrastructure That Scaled Automatically
Sinn Studios
How a simple, Slack-supported integration got Sinn Studio's hit VR title online fast and keeps it there.
Case Study

Dynamic Server Orchestration
Under NDA - AAA Studio
Discover how one the world's biggest AAA studio improved its peer-to-peer multiplayer experience through edge computing.
Case Study

Near Zero Latency for AAA Fighting Game
AAA Studio - Under NDA
How an unannounced project delivered the lowest lag possible and improved fairness in its 1v1 game.
Case Study

Play Gods with Multiplayer Physics
Squido Studio
Learn how Squido uses Edgegap's highligh optimized game servers to deliver mind-bending & chaotic VR gameplay.
Case Study

A Fully Managed Solutions that Saves Time for Indies Multiplayer VR Horror
Dirty Pearl Studios
Discover how Dirty Pearl Studios saved development time thanks to Edgegap’s easy integration and automated orchestration alongside its Nakama integration.
Case Study

Instant Global Server Deployment for Collaborative XR Medical Education
AlensiaXR
How AlensiaXR uses Edgegap to deliver low-latency, always-available shared anatomy sessions to medical students worldwide.
Case Study

The Lightkeepers: A VR Social Co-op Game with Dedicated Servers
Spectral Games
How Spectral Games used Edgegap Matchmaking and Server Browser to launch dedicated servers for its VR social lobby, with no prior server experience.
Case Study

Fast & reliable deployments worldwide for PvPvE challenger Gravebound
Crater Studios
How Edgegap’s orchestration and matchmaking helped Crater Studios dramatically helped a small them focus on gameplay instead of infrastructure.
Case Study

Rapid Scaling of Web Metaverse
Hiber
Learn how Hiber eliminated the guesswork out of its server capacity planning with Edgegap.
Case Study

High Hardware Requirements & Custom Game Server Pools
Alderon Games
Learn how Alderon Games instantly leverages a custom pool of game servers across multiple providers worldwide for its popular MMO.
Case Study

Easy Integration for Indie Devs
WhaleFood Games
Read how WhaleFood Games "kicked out" its netcode issues with Edgegap.
Case Study

Cutting-edge tech that powers South-East Asia’s first-ever eSports title.
Anantarupa Studios
Learn how Edgegap transformed South-East Asia’s gaming landscape streamlining complex infrastructure and cutting-edge tech with one seamless solution.
Case Study

One Strike. Global Reach.
Triple Hill Interactive
How Triple Hill Interactive leverages Edgegap's orchestration to deliver low latency and improve fairness in a genre where every millisecond counts.
Case Study

Fast-paced Team Battle Royale... with Gun-totting Animal Plushes!
SANDYFLOOR
Discover how a Korea-based Indie Studio launched it multiplayer worldwide.
Case Study

Mobile Horse Racing Goes Global with Instant, Cost-Efficient Servers
Mirai Labs
How Mirai Labs powers Pegaxy Blaze's worldwide multiplayer races with just-in-time server deployment and fractional vCPU to keep cost per player low.
Case Study

Server Management & Distribution
Matrioshka Games
Read how Matrioshka Games were able to ship a Battle Royale in early access with limited ressources.
Case Study

At my Signal, Unleash Hell!
TyGames
Discover how Indie studio TyGames immerses players in third-person gladiatorial combat multiplayer.
Case Study

Instant Worldwide Orchestration
Soliton Interactive
Discover how Soliton Interactive did the impossible… Ship it's first playable as multiplayer!
Case Study

Competitive play with server-side physics ensures ideal sub-50 ms latency
NS7
Discover why solely Edgegap could enable an indie studio to deliver on its vision for a AAA-quality F2P sports gameplay through server-side physics and authority.
Case Study

Regional Deployments for iGaming
X1 Contra 1
X1 Contra 1 delivers real-time PvP casual games to its Brazilian player base through cost-effective hosting & regional deployments, ensuring data and legal compliance.
Case Study

Pay Only When Players Play: Affordable Multiplayer Infrastructure
Meltdown Interactive
How Edgegap helped indie developer Meltdown Interactive Media solve cost-effective scaling and matchmaking without the complexity, so they could focus on building the game.
Case Study

One Edgegap platform, three very different networking profiles
Warped Games
How Warped Games runs a social hub, real-time co-op, and turn-based co-op, all on the same Edgegap deployment API and the same container pipeline.
Case Study

Pool Live Tour Max
RETA Games
Case Study

Korea’s Web3 POP Extraction Shooter Goes Global, Instantly
NDUS Entertainment
How XOCIETY easily added Edgegap orchestration & integrated custom matchmaking working alongside Edgegap Ping Beacons to optimize latency.
Case Study

Multiplayer in Every Dimension
Arcadia.tv
Discover how Arcadia.tv uses Edgegap's edge network to deliver an innovative, team and location-based athletic VR sport.
Case Study

F2P Mobile Fighter Cuts Infrastructure Costs With Just-in-Time Servers
Game Changers Worldwide
How Game Changer Worldwide hosted Rumble Rush's real-time 3v3 PvP globally on mobile.
Case Study
Key reasons why they chose Edgegap
Discover the impact of Edgegap's automated game server orchestration for a flawless multiplayer experience.









