Skip to main content
Glama

FanZero — indie game distribution

Check listing or build (dry run)

check_build
Read-onlyIdempotent

Validates a listing or optional preview. Agents sending html/files need preview_review; static checks do not certify its truth. Saves nothing. Original game links are the default. Optional dry run: send media, platforms/prices or monetization, description and pacts without html/files. A new agent preview needs preview_review with all three flags true and an explicit reason; checks read code and cannot certify representative gameplay or successful sandbox testing. Do not port or strip an online game to pass this gate. No key, writes, critic API call or URL fetch; publication validates internally.

Input Schema

NameRequiredDescriptionDefault
htmlNoOriginal game links are the default. Add optional self-contained html only with preview_review declaring representative, sandbox-tested and preferable to direct access; max 8 MB
tagsNo
filesNoOptional justified playable preview instead of html; needs index.html and preview_review. Do not adapt an online game just to host a preview
genreNo
mediaNoScreenshots, gameplay and trailers. At least one when no optional playable version is supplied
pactsNo
stageNoOptional. Omitted means not specified on a metadata-only listing; legacy playable submissions default to prototype
titleNo
api_keyNoNot needed here; accepted so you can pass it on every call.
taglineNoOne line that bites (8-120 chars)
controlsNoOne line, e.g. "Arrows or drag"
dev_noteNoA personal note from the dev to influencers
platformsNoWhere to access/buy the actual game, each with its own price/model. At least one without a build
store_urlNoOptional https link to where the game already sells (Steam, itch.io, your site). Revenue from every store counts in a pact window. Pass "" or null to remove it.
descriptionNoWhat the game is, its audience and what influencers can show (60-4000 chars)
monetizationNoExplain how the game earns revenue across platforms; do not guess an unknown price
preview_reviewNoRequired for new html/files sent by an agent; all three flags must be true with an explicit reason. A declaration, not certification by static checks

Output Schema

NameRequiredDescriptionDefault
passYesThe Bouncer would let it in (see critic_preview for the critic)
bytesYes
notesYes
blockingYes
warningsYes
max_bytesYes
next_stepYes
uncheckedYesPitch and pact checks skipped because those fields were not sent
has_playableYes
critic_previewYesHouse heuristics only; the real critic may differ

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed6 schema fields changed
    • changedInput schema / properties / description / description
      Previous value: -"What the game is, its audience and what creators can show (60-4000 chars)"New value: +"What the game is, its audience and what influencers can show (60-4000 chars)"
    • changedInput schema / properties / dev_note / description
      Previous value: -"A personal note from the dev to streamers"New value: +"A personal note from the dev to influencers"
    • changedInput schema / properties / pacts / items / properties / action / description
      Previous value: -"What the streamer (or YouTuber, TikToker) does: livestream, video, short, post or playtest"New value: +"What the influencer (a streamer, YouTuber or TikToker) does: livestream, video, short, post or playtest"
    • changedInput schema / properties / pacts / items / properties / share_pct / description
      Previous value: -"Percent of the game's net revenue from every store, for 4 weeks from the earliest date in the creator's approved action plan. In percent: 10 means 10%. Above 0, at most 50. The window length is fixed."New value: +"Percent of the game's net revenue from every store, for 4 weeks from the earliest date in the influencer's approved action plan. In percent: 10 means 10%. Above 0, at most 50. The window length is fixed."
    • addedInput schema / properties / platforms / items / properties / type
      Added value: +{
      +  "description": "What kind of platform it is. Leave it out to have it read from the name and URL (unknown: other)",
      +  "enum": [
      +    "store",
      +    "web_portal",
      +    "app_store",
      +    "console",
      +    "own_site",
      +    "ad_network",
      +    "other"
      +  ],
      +  "type": "string"
      +}
    • changedInput schema / properties / preview_review / properties / preferable_to_direct_link / description
      Previous value: -"Must be true only if creators benefit more than by opening the original game link"New value: +"Must be true only if influencers benefit more than by opening the original game link"
  2. Changed3 schema fields changed
    • changedInput schema / properties / files / description
      Previous value: -"Optional multi-file playable version instead of html; must include index.html at the root"New value: +"Optional justified playable preview instead of html; needs index.html and preview_review. Do not adapt an online game just to host a preview"
    • changedInput schema / properties / html / description
      Previous value: -"Optional playable version hosted on FanZero, self-contained index.html, max 8 MB. Omit for an online game; list its existing platforms instead"New value: +"Original game links are the default. Add optional self-contained html only with preview_review declaring representative, sandbox-tested and preferable to direct access; max 8 MB"
    • addedInput schema / properties / preview_review
      Added value: +{
      +  "additionalProperties": false,
      +  "description": "Required for new html/files sent by an agent; all three flags must be true with an explicit reason. A declaration, not certification by static checks",
      +  "properties": {
      +    "preferable_to_direct_link": {
      +      "description": "Must be true only if creators benefit more than by opening the original game link",
      +      "type": "boolean"
      +    },
      +    "reason": {
      +      "description": "Explain that choice in 20–600 characters. It must be within the owner's authorized scope",
      +      "maxLength": 600,
      +      "type": "string"
      +    },
      +    "representative": {
      +      "description": "Must be true: this is representative of the actual game; it does not lose online/community, account, shop or ranking features",
      +      "type": "boolean"
      +    },
      +    "sandbox_tested": {
      +      "description": "Must be true only after playing this exact build successfully in the allow-scripts sandbox",
      +      "type": "boolean"
      +    }
      +  },
      +  "type": "object"
      +}
  3. Changed10 schema fields changed
    • changedInput schema / properties / description / description
      Previous value: -"What it is, what is weird about it, where it is going (60-4000 chars)"New value: +"What the game is, its audience and what creators can show (60-4000 chars)"
    • changedInput schema / properties / files / description
      Previous value: -"Multi-file build instead of html; must include index.html at the root"New value: +"Optional multi-file playable version instead of html; must include index.html at the root"
    • changedInput schema / properties / html / description
      Previous value: -"The whole game as one self-contained index.html (preferred). Max 8 MB."New value: +"Optional playable version hosted on FanZero, self-contained index.html, max 8 MB. Omit for an online game; list its existing platforms instead"
    • addedInput schema / properties / media
      Added value: +{
      +  "description": "Screenshots, gameplay and trailers. At least one when no optional playable version is supplied",
      +  "items": {
      +    "additionalProperties": false,
      +    "properties": {
      +      "alt": {
      +        "maxLength": 200,
      +        "type": "string"
      +      },
      +      "type": {
      +        "enum": [
      +          "image",
      +          "video"
      +        ],
      +        "type": "string"
      +      },
      +      "url": {
      +        "description": "Public HTTPS screenshot, gameplay or trailer URL; validated without fetching it",
      +        "maxLength": 1000,
      +        "type": "string"
      +      }
      +    },
      +    "required": [
      +      "type",
      +      "url"
      +    ],
      +    "type": "object"
      +  },
      +  "maxItems": 12,
      +  "type": "array"
      +}
    • addedInput schema / properties / monetization
      Added value: +{
      +  "description": "Explain how the game earns revenue across platforms; do not guess an unknown price",
      +  "maxLength": 600,
      +  "type": "string"
      +}
    • addedInput schema / properties / platforms
      Added value: +{
      +  "description": "Where to access/buy the actual game, each with its own price/model. At least one without a build",
      +  "items": {
      +    "additionalProperties": false,
      +    "properties": {
      +      "currency": {
      +        "description": "Uppercase currency code, e.g. EUR or USD; required for a positive price",
      +        "pattern": "^[A-Z]{3}$",
      +        "type": "string"
      +      },
      +      "monetization": {
      +        "enum": [
      +          "paid",
      +          "free",
      +          "free_to_play",
      +          "subscription",
      +          "other"
      +        ],
      +        "type": "string"
      +      },
      +      "name": {
      +        "maxLength": 60,
      +        "minLength": 1,
      +        "type": "string"
      +      },
      +      "note": {
      +        "description": "Price conditions, subscription period or optional purchase details",
      +        "maxLength": 400,
      +        "type": "string"
      +      },
      +      "price": {
      +        "description": "This platform's purchase price. Omit an unknown price; zero means explicitly zero, never an assumed free game",
      +        "minimum": 0,
      +        "type": "number"
      +      },
      +      "url": {
      +        "description": "Public HTTPS game/store URL",
      +        "maxLength": 1000,
      +        "type": "string"
      +      }
      +    },
      +    "required": [
      +      "name",
      +      "url"
      +    ],
      +    "type": "object"
      +  },
      +  "maxItems": 12,
      +  "type": "array"
      +}
    • changedInput schema / properties / stage / description
      Previous value: -"Left out: prototype"New value: +"Optional. Omitted means not specified on a metadata-only listing; legacy playable submissions default to prototype"
    • changedInput schema / properties / stage / enum
      Previous value: -[
      -  "napkin",
      -  "prototype",
      -  "vertical-slice",
      -  "alpha"
      -]New value: +[
      +  "napkin",
      +  "prototype",
      +  "vertical-slice",
      +  "alpha",
      +  "beta",
      +  "released"
      +]
    • addedOutput schema / properties / has_playable
      Added value: +{
      +  "type": "boolean"
      +}
    • changedOutput schema / required
      Previous value: -[
      -  "pass",
      -  "next_step",
      -  "blocking",
      -  "notes",
      -  "unchecked",
      -  "critic_preview",
      -  "bytes",
      -  "max_bytes",
      -  "warnings"
      -]New value: +[
      +  "pass",
      +  "next_step",
      +  "blocking",
      +  "notes",
      +  "unchecked",
      +  "critic_preview",
      +  "bytes",
      +  "max_bytes",
      +  "warnings",
      +  "has_playable"
      +]
  4. First observed

TDQS

A3.9/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Beyond the read-only, idempotent, non-destructive annotations, the description discloses that no key is needed, nothing is saved, no writes or URL fetches occur, and no critic API is called. It also usefully warns that static checks read code and cannot certify representative gameplay or sandbox testing, though it does not describe rate limits or response behavior.

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 purpose is front-loaded and the description is reasonably sized for a complex validator. It is somewhat dense and repeats the preview_review requirement in two places, but most sentences carry relevant constraints or behavioral warnings.

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?

For a 17-parameter, nested-object tool with an output schema and annotations, the description covers the key side-effect profile, validation limits, preview-review requirements, and dry-run modes. It is not exhaustive about every field, but the schema fills those gaps and the output schema covers return values.

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?

With 17 parameters and 76% schema description coverage, the schema already carries most parameter meaning. The description adds useful conditional context around html/files, preview_review, media, platforms/prices, and pacts, but many parameters are left entirely to the schema and much of the preview_review guidance repeats schema descriptions.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states that this tool validates a listing or optional preview and emphasizes that it is a dry run that 'Saves nothing.' It distinguishes the check from publication by saying 'publication validates internally,' though it does not name the submit/publish siblings explicitly.

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?

It gives clear conditions: use this as an optional dry run, send html/files only with preview_review, and send media, platforms/prices, monetization, description, and pacts without html/files. It also warns not to port or strip an online game to pass the gate, though it stops short of explicitly naming submit_game or publish_game as alternatives.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

Try in Browser

Glama MCP Gateway

Add one secure layer between your agents and this server.

Resources