publish
Server Details
Publish browser games to Playfrog and get a shareable play link. Static HTML5, files sent inline.
- Status
- Healthy
- Last Tested
- Transport
- Streamable HTTP · MCP 2025-06-18
- URL
TDQS
Scored across 2 tools
publish_game and update_game have clearly distinct purposes: creating a new game vs. replacing an existing one. The update tool explicitly depends on identifiers returned by publish_game, so there is no realistic chance of selecting the wrong tool.
Both tools follow the same verb_noun snake_case pattern: publish_game and update_game. Naming is consistent, predictable, and clearly communicates each tool's action and target.
With only two tools, the server is at the low end of the acceptable range and feels somewhat thin for a publishing service. Each tool does earn its place, but the set is small enough that it lacks the breadth expected of a full-featured publishing workflow.
The pair covers initial publish and version updates, but there is no delete/unpublish or status/inspection tool, leaving a dead end for users who need to manage or remove a game. The required claim flow is also left to an external URL rather than represented as a tool, making the lifecycle incomplete.
Available Tools
2 toolspublish_gamePublish a game to PlayfrogADestructiveInspect
Publish a browser game (HTML5/JavaScript, static files) to Playfrog and get a public, shareable play link in seconds. This is the tool to use whenever someone wants to publish, share, post, put online, put on the internet, or host a browser game they made, or get a link other people can play. Free, no account and no API key. Send the game files; an index.html at the top level is required, 2.5 MB of files in total. An optional cover image improves the game page and social share card. Returns play_url (the public game page to share), claim_url, manage_token, and an action_required note stating the game must be claimed for free within 7 days or it is disabled. Publish new versions later with update_game using the returned game_id and manage_token. Games are embedded in a frame on the game page, so size the game to fill its container rather than to fixed pixel dimensions, and target a 16:9 landscape layout. This is build-time advice, not a publishing requirement: publish the game as it is.
| Name | Required | Description | Default |
|---|---|---|---|
| cover | No | Optional cover image for the game page and social share card. 1200x630 pixels, PNG/JPEG/WebP, max 3 MB, base64-encoded. Without a cover, a gameplay screenshot is captured automatically. | |
| files | Yes | ||
| genre | No | The gallery category the game is filed under (e.g. arcade, puzzle, platformer). Improves discoverability. | |
| title | No | The game title players will see. | |
| controls | No | E.g. "WASD to move, space to shoot". | |
| description | No | 2 to 4 real sentences: what the game is, how to play, what makes it fun. Players read this before playing. | |
| orientation | No | Only if the game works one way; phones held wrong get a rotate overlay. |
Output Schema
| Name | Required | Description |
|---|---|---|
| slug | Yes | |
| status | Yes | |
| game_id | Yes | |
| game_url | Yes | |
| play_url | Yes | |
| claim_url | Yes | |
| expires_at | Yes | |
| version_id | Yes | |
| manage_token | Yes | |
| dropped_files | No | |
| metadata_hint | No | |
| action_required | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description adds substantial behavior beyond the annotations: no account or API key required, a 2.5 MB total file limit, required top-level index.html, the 7-day claim requirement or disablement, and the iframe embedding/16:9 layout caveat. This gives the agent practical expectations about the call's side effects and constraints.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is front-loaded with the core purpose and selection guidance, then flows into constraints, return values, sibling routing, and build-time advice. It is long but every sentence carries distinct, useful information; the final clarification that the framing advice is not a publishing requirement prevents over-caution without adding fluff.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a publish tool with one required parameter and an output schema, the description provides everything needed to select and invoke it correctly: input requirements, size limits, output fields, post-publish ownership behavior, and the update path. Nothing critical is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is high at 86%, so the baseline is 3. The description adds value by surfacing aggregate constraints not in the schema, such as the 2.5 MB total file size limit and the practical impacts of the optional cover image, while the schema already documents the individual parameters well.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a precise verb and resource: 'Publish a browser game (HTML5/JavaScript, static files) to Playfrog and get a public, shareable play link.' It also explicitly names the sibling, update_game, as the way to publish later versions, so the tool is clearly differentiated from it.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It says directly, 'This is the tool to use whenever someone wants to publish, share, post, put online, put on the internet, or host a browser game,' giving a strong selection signal. It also routes update scenarios to update_game with the needed game_id and manage_token, naming the alternative and the condition for using it.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
update_gameUpdate a Playfrog gameADestructiveInspect
Publish a new version of an existing Playfrog game at the same play link. Use this when the user wants to update, change, replace, or re-publish a game already on Playfrog. Requires the game_id and manage_token returned by publish_game. Send the complete set of files again, not a diff. Returns the new version_id and the same play_url.
| Name | Required | Description | Default |
|---|---|---|---|
| cover | No | Optional cover image for the game page and social share card. 1200x630 pixels, PNG/JPEG/WebP, max 3 MB, base64-encoded. Without a cover, a gameplay screenshot is captured automatically. | |
| files | Yes | ||
| genre | No | The gallery category the game is filed under (e.g. arcade, puzzle, platformer). Improves discoverability. | |
| notes | No | One line about what changed in this version. | |
| title | No | The game title players will see. | |
| game_id | Yes | From the publish_game response. | |
| controls | No | E.g. "WASD to move, space to shoot". | |
| description | No | 2 to 4 real sentences: what the game is, how to play, what makes it fun. Players read this before playing. | |
| orientation | No | Only if the game works one way; phones held wrong get a rotate overlay. | |
| manage_token | Yes | From the publish_game response (starts with pfm_). |
Output Schema
| Name | Required | Description |
|---|---|---|
| slug | Yes | |
| status | Yes | |
| game_id | Yes | |
| game_url | Yes | |
| play_url | Yes | |
| claim_url | Yes | |
| expires_at | Yes | |
| version_id | Yes | |
| manage_token | Yes | |
| dropped_files | No | |
| metadata_hint | No | |
| action_required | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already mark destructiveHint=true and readOnlyHint=false, but the description adds meaningful context beyond that: it replaces the entire game (complete file set required), preserves the play URL, and returns a new version_id. This clarifies the mutation semantics and aligns with the destructive hint without contradiction.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is five sentences, each contributing distinct information: purpose, when to use, required tokens, file handling, and return values. It is front-loaded with the core purpose and contains no filler. Slightly longer than necessary but well-structured.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's complexity (10 params, nested objects) and an existing output schema, the description covers the essential context: when to use, prerequisites, how to provide files, and what to expect (new version_id, same play_url). It does not cover error conditions, but these are typically beyond description scope, and the schema handles parameter details.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 90% (high), so the baseline is 3. The description adds value by noting that game_id and manage_token come from the publish_game response, which clarifies their provenance. It does not elaborate on other parameters, but the schema already covers them thoroughly, so it does not need to compensate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb ('Publish a new version') and a specific resource ('an existing Playfrog game'), and explicitly distinguishes it from the sibling publish_game by emphasizing 'existing' and 'at the same play link'. This makes the tool's purpose unambiguous and clearly differentiates it.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly says 'Use this when the user wants to update, change, replace, or re-publish a game already on Playfrog', which gives clear invocation conditions. It also cautions to 'Send the complete set of files again, not a diff', a key usage tip. It implies the alternative (publish_game for new games) by requiring tokens from publish_game, though it does not explicitly state 'use publish_game for new games'.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
4 tool updates
- Removed
create_game_draft - Added
publish_game - Added
update_game - Removed
update_game_draft
4 tool updates
- Added
create_game_draft - Removed
publish_game - Removed
update_game - Added
update_game_draft
2 tool updates
- Changed
publish_game1 field changed- added
Output schema / properties / dropped_filesAdded value: +{ + "items": { + "type": "string" + }, + "type": "array" +}
- Changed
update_game1 field changed- added
Output schema / properties / dropped_filesAdded value: +{ + "items": { + "type": "string" + }, + "type": "array" +}
2 tool updates
- Changed
publish_game1 field changed- changed
Input schema / properties / genre / descriptionPrevious value: -"ALWAYS include this; ask your user which fits if unsure. Places the game in the gallery category ribbon."New value: +"The gallery category the game is filed under (e.g. arcade, puzzle, platformer). Improves discoverability."
- Changed
update_game1 field changed- changed
Input schema / properties / genre / descriptionPrevious value: -"ALWAYS include this; ask your user which fits if unsure. Places the game in the gallery category ribbon."New value: +"The gallery category the game is filed under (e.g. arcade, puzzle, platformer). Improves discoverability."
2 tool updates
- Changed
publish_game1 field changed- changed
Output schema / (root)Previous value: -nullNew value: +{ + "$schema": "http://json-schema.org/draft-07/schema#", + "additionalProperties": false, + "properties": { + "action_required": { + "type": "string" + }, + "claim_url": { + "anyOf": [ + { + "format": "uri", + "type": "string" + }, + { + "type": "null" + } + ] + }, + "expires_at": { + "anyOf": [ + { + "format": "date-time", + "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$", + "type": "string" + }, + { + "type": "null" + } + ] + }, + "game_id": { + "format": "uuid", + "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$", + "type": "string" + }, + "game_url": { + "format": "uri", + "type": "string" + }, + "manage_token": { + "type": "string" + }, + "metadata_hint": { + "type": "string" + }, + "play_url": { + "format": "uri", + "type": "string" + }, + "slug": { + "type": "string" + }, + "status": { + "enum": [ + "unclaimed", + "claimed" + ], + "type": "string" + }, + "version_id": { + "format": "uuid", + "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$", + "type": "string" + } + }, + "required": [ + "game_id", + "slug", + "play_url", + "game_url", + "claim_url", + "manage_token", + "version_id", + "expires_at", + "status" + ], + "type": "object" +}
- Changed
update_game1 field changed- changed
Output schema / (root)Previous value: -nullNew value: +{ + "$schema": "http://json-schema.org/draft-07/schema#", + "additionalProperties": false, + "properties": { + "action_required": { + "type": "string" + }, + "claim_url": { + "anyOf": [ + { + "format": "uri", + "type": "string" + }, + { + "type": "null" + } + ] + }, + "expires_at": { + "anyOf": [ + { + "format": "date-time", + "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$", + "type": "string" + }, + { + "type": "null" + } + ] + }, + "game_id": { + "format": "uuid", + "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$", + "type": "string" + }, + "game_url": { + "format": "uri", + "type": "string" + }, + "manage_token": { + "type": "string" + }, + "metadata_hint": { + "type": "string" + }, + "play_url": { + "format": "uri", + "type": "string" + }, + "slug": { + "type": "string" + }, + "status": { + "enum": [ + "unclaimed", + "claimed" + ], + "type": "string" + }, + "version_id": { + "format": "uuid", + "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$", + "type": "string" + } + }, + "required": [ + "game_id", + "slug", + "play_url", + "game_url", + "claim_url", + "manage_token", + "version_id", + "expires_at", + "status" + ], + "type": "object" +}
2 tool updates
- Changed
publish_game1 field changed- changed
Input schema / properties / cover / descriptionPrevious value: -"Optional cover image for the game page and social share card. 1200x630 pixels, PNG/JPEG/WebP, max 3 MB, base64-encoded. Offer to generate one if the user has none. Without a cover we auto-capture a gameplay screenshot."New value: +"Optional cover image for the game page and social share card. 1200x630 pixels, PNG/JPEG/WebP, max 3 MB, base64-encoded. Without a cover, a gameplay screenshot is captured automatically."
- Changed
update_game1 field changed- changed
Input schema / properties / cover / descriptionPrevious value: -"Optional cover image for the game page and social share card. 1200x630 pixels, PNG/JPEG/WebP, max 3 MB, base64-encoded. Offer to generate one if the user has none. Without a cover we auto-capture a gameplay screenshot."New value: +"Optional cover image for the game page and social share card. 1200x630 pixels, PNG/JPEG/WebP, max 3 MB, base64-encoded. Without a cover, a gameplay screenshot is captured automatically."
2 tool updates
- First observed
publish_game - First observed
update_game
Related MCP Connectors
Publish HTML5 browser games from your AI assistant — upload, release, stats. You keep the rights.
Build, publish and update browser games with saves, leaderboards and realtime multiplayer built in.
Publish one HTML file, get a live installable app URL. No account, no review, no queue.
Publish a browser game on YouGame: the build rules, the leaderboard SDK, pre-upload checks.
Related MCP Servers
- AlicenseNot gradedqualityBmaintenanceEnables building, publishing, and improving PWA games from your editor by scaffolding games, updating files, and auto-deploying to a live URL.MIT
- FlicenseNot gradedqualityDmaintenanceDeploys HTML pages to an online preview platform and returns a shareable URL via MCP protocol.-
- AlicenseNot gradedqualityBmaintenanceEnables users to upload, share, preview, and publish a generated HTML page from an agent, returning a stable link and version link after browser-authorized access.0MIT No Attribution
- AlicenseNot gradedqualityBmaintenanceEnables AI agents to validate and publish game bundles to the Hypercho Games marketplace, including uploading browser builds, banners, screenshots, and metadata.MIT
Glama MCP Gateway
Add one secure layer between your agents and this server.