Skip to main content
Glama

Server Details

Publish browser games to Playfrog and get a shareable play link. Static HTML5, files sent inline.

If you are the author of this connector, you can claim ownership with GitHub, an HTTP challenge, or a DNS record. Claimed connector authors can inspect health checks, view analytics, and manage their listing.
Status
Healthy
Last Tested
Transport
Streamable HTTP
URL

Available Tools

2 tools
publish_gamePublish a game to PlayfrogA
Destructive
Inspect

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
coverNoOptional 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.
filesYes
genreNoThe gallery category the game is filed under (e.g. arcade, puzzle, platformer). Improves discoverability.
titleNoThe game title players will see.
controlsNoE.g. "WASD to move, space to shoot".
descriptionNo2 to 4 real sentences: what the game is, how to play, what makes it fun. Players read this before playing.
orientationNoOnly if the game works one way; phones held wrong get a rotate overlay.

Output Schema

ParametersJSON Schema
NameRequiredDescription
slugYes
statusYes
game_idYes
game_urlYes
play_urlYes
claim_urlYes
expires_atYes
version_idYes
manage_tokenYes
dropped_filesNo
metadata_hintNo
action_requiredNo

TDQS

A4.9/5.0
Behavior5/5

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.

Conciseness5/5

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.

Completeness5/5

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.

Parameters4/5

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.

Purpose5/5

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.

Usage Guidelines5/5

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 gameA
Destructive
Inspect

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
coverNoOptional 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.
filesYes
genreNoThe gallery category the game is filed under (e.g. arcade, puzzle, platformer). Improves discoverability.
notesNoOne line about what changed in this version.
titleNoThe game title players will see.
game_idYesFrom the publish_game response.
controlsNoE.g. "WASD to move, space to shoot".
descriptionNo2 to 4 real sentences: what the game is, how to play, what makes it fun. Players read this before playing.
orientationNoOnly if the game works one way; phones held wrong get a rotate overlay.
manage_tokenYesFrom the publish_game response (starts with pfm_).

Output Schema

ParametersJSON Schema
NameRequiredDescription
slugYes
statusYes
game_idYes
game_urlYes
play_urlYes
claim_urlYes
expires_atYes
version_idYes
manage_tokenYes
dropped_filesNo
metadata_hintNo
action_requiredNo

TDQS

A4.1/5.0
Behavior4/5

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.

Conciseness4/5

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.

Completeness4/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines4/5

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. Dates show when Glama detected each change.

  1. 4 tool updates
    • Removedcreate_game_draft
    • Addedpublish_game
    • Addedupdate_game
    • Removedupdate_game_draft
  2. 4 tool updates
    • Addedcreate_game_draft
    • Removedpublish_game
    • Removedupdate_game
    • Addedupdate_game_draft
  3. 2 tool updates
    • Changedpublish_game1 field changed
      • addedOutput schema / properties / dropped_files
        Added value: +{
        +  "items": {
        +    "type": "string"
        +  },
        +  "type": "array"
        +}
    • Changedupdate_game1 field changed
      • addedOutput schema / properties / dropped_files
        Added value: +{
        +  "items": {
        +    "type": "string"
        +  },
        +  "type": "array"
        +}
  4. 2 tool updates
    • Changedpublish_game1 field changed
      • changedInput schema / properties / genre / description
        Previous 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."
    • Changedupdate_game1 field changed
      • changedInput schema / properties / genre / description
        Previous 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."
  5. 2 tool updates
    • Changedpublish_game1 field changed
      • changedOutput 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"
        +}
    • Changedupdate_game1 field changed
      • changedOutput 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"
        +}
  6. 2 tool updates
    • Changedpublish_game1 field changed
      • changedInput schema / properties / cover / description
        Previous 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."
    • Changedupdate_game1 field changed
      • changedInput schema / properties / cover / description
        Previous 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."
  7. 2 tool updates
    • First observedpublish_game
    • First observedupdate_game

Frequently Asked Questions

Discussions

No comments yet. Be the first to start the discussion!

Related MCP Connectors

Related MCP Servers

Try in Browser

Glama MCP Gateway

Add one secure layer between your agents and this server.

TDQS

A4.2/5.0
Disambiguation5/5

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.

Naming Consistency5/5

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.

Tool Count3/5

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.

Completeness3/5

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.

Resources