Publish HTML5 games in seconds from an AI agent: audience, monetization, analytics.
One address for any MCP client. You sign in at developer.playgama.com once, after adding it.
At most: moves money, runs code or commands, deletes data, or sends messages for you.
Odel charges nothing per call. The publisher may charge for its own service.
| Access to | Read | Change |
|---|---|---|
| Mcp | Not stated: mcp | |
From the sign-in at developer.playgama.com, as the endpoint publishes it. You approve it there.
Odel could not list its tools without signing in.
Publish and manage your HTML5 games on Playgama straight from your AI agent — Codex, Claude Code, Cursor or VS Code. Full guide: Playgama wiki.
The server is hosted by Playgama. There is nothing to install or run and no token to copy — you give your client the endpoint below, sign in to the console in the browser it opens, and allow the connection.
start_sandbox_traffic; share the game first and the boost is free.| Endpoint | https://developer.playgama.com/api/mcp |
| Transport | Streamable HTTP |
| Authentication | OAuth 2.1 — the client discovers it from the endpoint |
| Connected agents | See and revoke them at developer.playgama.com/mcp |
You need a Playgama developer account with the sign-up finished. A connected agent reaches the games of your own organization and nothing else. It stays connected while it keeps using the server; revoke it on the same page and it is refused on its next call.
Every game needs the Playgama Bridge SDK
integrated — the sandbox included. If your game does not have it yet, the agent integrates it
before the first upload: get_bridge_sdk_docs serves the docs, and the
Game checklist lists the required steps
in order. A build in which the SDK was not detected is not published, and the sandbox takes
Playgama Bridge 2.2.0 or newer only.
Questions: developer.success@playgama.com
Every client below opens the browser the first time it connects. Sign in to the console if you are not signed in, check the account and the agent, and allow it.
codex mcp add 'playgama-developer-console' --url 'https://developer.playgama.com/api/mcp'
claude mcp add --transport 'http' 'playgama-developer-console' 'https://developer.playgama.com/api/mcp'
Then run /mcp in Claude Code and choose the server to sign in.
~/.cursor/mcp.json:
{
"mcpServers": {
"playgama-developer-console": {
"type": "http",
"url": "https://developer.playgama.com/api/mcp"
}
}
}
.vscode/mcp.json:
{
"servers": {
"playgama-developer-console": {
"type": "http",
"url": "https://developer.playgama.com/api/mcp"
}
}
}
Settings → Connectors → Add custom connector, with the endpoint
https://developer.playgama.com/api/mcp.
If your config still sends an Authorization header with a pgm_mcp_ token, it keeps working
for now. Remove the header and connect again as above.
The authoritative list is what the server answers to tools/list. As of version 1.5.0:
| Tool | What it does | Kind |
|---|---|---|
| Games | ||
list_applications | Lists your organization's games, newest first | read-only |
create_application | Creates a new game as a draft | write |
get_application | Reads a game's saved form, archives and media | read-only |
update_application_form | Saves form fields; fields you leave out keep their values | write |
get_submission_state | Tells whether the game can be submitted to moderation now, and why not | read-only |
list_moderation_comments | Reads the moderation correspondence on a game | read-only |
get_launch_steps | Reads a game's launch path in order — archive, Bridge SDK, covers, form, sandbox, share, traffic — with the current step and the tools that move each one | read-only |
| Builds | ||
start_archive_upload | Starts a zip upload and answers a one-hour upload URL | write |
confirm_archive_upload | Adds the uploaded archive to the form and starts unpacking | write |
get_archive_status | Reads unpacking progress and the build check | read-only |
| Covers | ||
start_cover_upload | Starts a cover upload for one slot: square, portrait or landscape | write |
confirm_cover_upload | Checks the image and puts it in its slot | write |
| In-app purchases | ||
list_in_app_products | Reads the in-app catalog with its checksum | read-only |
replace_in_app_products | Replaces the whole catalog; products left out are deleted | write |
| Leaderboards | ||
list_leaderboards | Lists a game's leaderboards | read-only |
create_leaderboard | Adds a leaderboard | write |
update_leaderboard | Changes a leaderboard's name, type or score order | write |
| Testing | ||
get_archive_qa_tool_link | Opens an uploaded build in the Playgama QA Tool | read-only |
get_local_game_qa_tool_link | Opens a game served from localhost in the QA Tool | read-only |
| Docs | ||
get_bridge_sdk_docs | Reads the live Playgama Bridge SDK wiki, the whole index or one page | read-only |
get_game_checklist | Reads the live game checklist — what a game and its archive must meet before an upload | read-only |
| Game telemetry | ||
get_game_telemetry_guide | Reads agent-only instructions for instrumenting a game and interpreting telemetry | read-only |
get_game_telemetry_analytics | Reads a compact overview and paginated event inventory for one game | read-only |
get_game_telemetry_event_analytics | Reads preaggregated fields and bounded value summaries for one event, including performance fields | read-only |
get_game_telemetry_timeseries | Reads paginated 30-minute or daily event-volume and sampling-reach trends | read-only |
get_game_telemetry_session_facts | Reads filtered, pseudonymized product-event facts for sequence questions | read-only |
| Referrals | ||
get_referral_program | Reads your organization's invitation, eligibility and referral traffic bonuses | read-only |
apply_referral_code | Accepts a developer-provided invitation before the organization's first sandbox publication | write |
| Sandbox | ||
get_sandbox_state | Reads what is live in the sandbox, how the latest publication went, and whether a publish would be accepted | read-only |
get_sandbox_share | Reads the ready post and share links for the live sandbox | read-only |
publish_sandbox | Makes a build playable by anyone with the link, without moderation | write |
get_sandbox_traffic | Reads whether traffic can be brought to the sandbox, the package on offer and the runs so far | read-only |
start_sandbox_traffic | Starts a DSP campaign built from the game's covers; use a referral bonusId, or 1–3 public post links for the separate share bonus | write |
Every write tool is annotated destructiveHint: true; clients decide how to use that hint when requesting confirmation.
For a launch workflow, agents start with get_launch_steps and read it again after each step.
A request only to read data does not authorize game changes, publication or a traffic campaign.
get_game_checklist and check the game and the zip against each item; fix what fails
before uploading.start_archive_upload answers uploadUrl and headers.uploadUrl with exactly those headers, e.g.
curl -T game.zip -H "Content-Type: application/zip" "<uploadUrl>".confirm_archive_upload, then poll get_archive_status until state.status is no longer
CHECKING. Only a PASSED build can be published; on PROBLEM or NOT_CHECKED pass
state.message on to the developer word for word and fix the build — publish_sandbox and a
submit to moderation both refuse it (get_bridge_sdk_docs has the SDK integration docs). The
sandbox also refuses a build on a Playgama Bridge older than 2.2.0 (BRIDGE_VERSION_OUTDATED)
or one whose version the check could not read (BRIDGE_VERSION_UNKNOWN): update the SDK and
upload a new archive. If processing is FAILED, upload a corrected zip.publish_sandbox is refused with COVERS_INCOMPLETE, which names the empty slots in
emptySlots, or FORM_INCOMPLETE, which names the fields in missingFields: upload the covers
or fill the fields with update_application_form, then publish again.publish_sandbox answers PENDING: the build is built, then published, as a rule within
minutes. Follow publication in get_sandbox_state until it leaves IN_PROGRESS; once it is
PUBLISHED, hand out the url from the publish answer. FAILED means the build did not go
live. While a publication is in progress, another publish is refused with 409.Covers work the same way, one slot per call: a PNG or JPEG of exactly 800×800 (square), 1080×1920 (portrait) or 1920×1080 (landscape). All three are required for a sandbox publish and for a submit to moderation.
Before finishing a game, the agent reads get_game_telemetry_guide and adds the relevant product
progression events and performance sample. Telemetry is guidance, never an upload or publication
gate.
After a release has collected traffic, the agent starts with get_game_telemetry_analytics. It
uses get_game_telemetry_event_analytics only for one relevant event or field,
get_game_telemetry_timeseries for event volume or sampling reach over time, and
get_game_telemetry_session_facts for a filtered product-event order question. FPS, frame-time and
stutter summaries for performance_sample come from event analytics. Timeseries points do not
contain those field values, and repetitive core_ping and performance_sample events are
intentionally absent from session facts, so the current views do not support per-session FPS
claims. The tools return dynamic preaggregated JSON, not raw events and not a server-generated
conclusion. The agent inspects the response's schema version, period, freshness, sample size and
pagination, treats missing or null fields as unavailable rather than zero, and requests another
page only when it can change the current conclusion.
The overview event inventory defaults to 50 event types and accepts up to 100. Its
events_page.next_cursor is passed back as eventCursor; agents do not exhaust the inventory
preemptively. The full parameter and response guidance is in the
Tools reference.
Two separate traffic bonuses can start a sandbox campaign:
get_referral_program and is passed to start_sandbox_traffic as
bonusId; it needs no social post. Every organization member can share the returned
invitation.url. Apply only a developer-provided invitation, before the invited organization's
first sandbox publication. An accepted invitation grants the invited studio $3 of traffic; its
first sandbox publication grants the inviter another $3 of traffic. These are campaign budgets,
not cash.start_sandbox_traffic in postUrls; one is enough. The bonus is once per game,
for up to three games per organization over its lifetime. Earlier free launches without sharing
do not use this bonus. get_sandbox_share has the ready post and share links. Paid traffic is
available in the console; MCP does not purchase it.These stay human actions in the console:
The rest of the Playgama stack picks up where this server stops:
npm i @playgama/bridge.