Skip to main content
Glama

klyo games: publish HTML5 browser games

Why the game is not working

klyo_game_diagnostics
Read-onlyIdempotent

Read _najpierw first: one object with what blocks the release (co), the parsed error (komunikat, miejsce file:line, biblioteka crate and version, urzadzenie device and browser), why (dlaczego, en.why) and how to fix it (jak_naprawic, en.how_to_fix). Each raw trace appears once, in bledy_przegladarki; bledy_rozbior[].linia points into it. Eyes inside the game: for a package in the waiting room (upload_id) or a game in the catalogue (slug) it returns the files the game asked for that are missing from the package, and the JavaScript errors from the preview in the browser, in the order they happened. Also: the package check result (size, third-party ads, malicious code, missing klyo kit), ready conclusions in wnioski, and dopasowanie: the fit measurement from publishing on four screens (phone portrait and landscape with touch, tablet, desktop): uwagi[] with the codes przewija (page scrolls) | maly_ekran (screen too small) | maly_tekst (text too small) | ciezka (too heavy) | dlugie_wczytanie (long load) | niski_fps (low frame rate) | male_cele_dotyku (small touch targets) | przycisk_bez_nazwy (button without a name), dotyk_nasluch and zrzut thumbnails; null = the game has not been measured yet (a measurement starts with every version release). VERDICT bramka.wynik: POPRAW (fix krytyczne), GOTOWA, GOTOWA_BEZ_POMIARU_EKRANOW, NIESPRAWDZONA (the game asked for 3D graphics, WebGL or WebGPU, and the measurement browser has none: the klyo server renders no 3D, so the gameplay was NOT seen; nie_sprawdzono, test it on a device with a graphics card) and POMIAR_NIEAKTUALNY (the measurement describes older files, dopasowanie.aktualny: false: order zmierz). Never report NIESPRAWDZONA or POMIAR_NIEAKTUALNY as ready. fps is the GAME's frame rate, null when the game drew no frame (the page rhythm is in fps_strony); grafika_gry says what the game asked for, maszyna.grafika what the measurement browser can render. A thumbnail overwritten by a later measurement loses zrzut_adres (zrzut_z_innego_pomiaru: true). Read-only. YOUR BROWSER IS THE EYE HERE: we do not keep a browser farm and do not need one. Open the preview address on YOUR side (Playwright, Chrome, a phone), really play (click, swipe, wait for the second level) and our sensor on that page reports everything that crashed. Then ask with this tool. Order: open, play, ask; the other way round gives an empty answer, because errors are collected only once the game runs. Add ?s=<your marker> to the address and pass sesja with the same value to get only the errors from your own run. NO BROWSER (a conversation in claude.ai or ChatGPT)? Pass zmierz: true for a package or a waiting version: we open the preview for you, collect errors and thumbnails of four screens (zrzut_adres); one measurement runs at a time per account and one more waits in the queue and starts by itself; 6 per hour, a full measurement counts as two. Add pelny: true for the production profile (a slow phone and every declared language). A game with a waiting version (workshop) shows its files, errors and premium review (przeglad).

Examples: • Why does my game show a white screen? • Check the errors in the package preview • What is missing from the lantern-thief package?

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
slugNoGame address in the catalogue, for example lantern-thief (from klyo_my_games).
pelnyNoWith `zmierz: true`: the production profile you run before `etap: gotowa` and before any release other than `poprawka`. On top of the four screens it adds a slow phone (CPU ×4, 3G network: frames, stutter, memory, first frame) and every declared game language (`jezyki_ui`; a package without a declaration: the languages the game offers), with a thumbnail per language (`dopasowanie.jezyki.jezyki[].zrzut_adres`), untranslated keys, English fallback, cut-off text and text outside the screen. Takes 3 to 4 minutes and counts as two measurements of the limit. `pomiar_pelny` in the response says whether the current result has this profile.
sesjaNoYour test marker (1 to 24 characters: letters, digits, - and _). Open the preview on your side with `?s=<the same marker>`, play, then pass it here: you get ONLY the errors from your own run, without those someone else left on the same game.
jezykiNoWith `pelny: true`: the languages to check (for example ["pl","en","de"]) instead of the ones the game declares. A language the game does not show is `jezyk_niedostepny`.
zmierzNoMeasurement on request for a waiting-room package or a waiting version (workshop): we open the preview on four screens, collect errors and take thumbnails (`dopasowanie.ekrany[].zrzut_adres`). For an assistant without a browser these are the only eyes. Safeguards: files unchanged since the last measurement = the stored result without a browser, one measurement runs at a time per account and one more waits in the queue and starts by itself; 6 per hour, a full measurement counts as two. The `pomiar` field says what happened; you see the result in the next call without `zmierz`.
upload_idNoID of a package in the waiting room (from the upload response or from the preview).

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed1 schema field changed
    • changedInput schema / properties / zmierz / description
      Previous value: -"Measurement on request for a waiting-room package or a waiting version (workshop): we open the preview on four screens, collect errors and take thumbnails (`dopasowanie.ekrany[].zrzut_adres`). For an assistant without a browser these are the only eyes. Safeguards: files unchanged since the last measurement = the stored result without a browser, one measurement at a time per account, 6 per hour. The `pomiar` field says what happened; you see the result in the next call without `zmierz`."New value: +"Measurement on request for a waiting-room package or a waiting version (workshop): we open the preview on four screens, collect errors and take thumbnails (`dopasowanie.ekrany[].zrzut_adres`). For an assistant without a browser these are the only eyes. Safeguards: files unchanged since the last measurement = the stored result without a browser, one measurement runs at a time per account and one more waits in the queue and starts by itself; 6 per hour, a full measurement counts as two. The `pomiar` field says what happened; you see the result in the next call without `zmierz`."
  2. Changed1 schema field changed
    • addedInput schema / properties / jezyki
      Added value: +{
      +  "description": "With `pelny: true`: the languages to check (for example [\"pl\",\"en\",\"de\"]) instead of the ones the game declares. A language the game does not show is `jezyk_niedostepny`.",
      +  "items": {
      +    "type": "string"
      +  },
      +  "maxItems": 12,
      +  "type": "array"
      +}
  3. Changed5 schema fields changed
    • addedInput schema / properties / pelny
      Added value: +{
      +  "description": "With `zmierz: true`: the production profile you run before `etap: gotowa` and before any release other than `poprawka`. On top of the four screens it adds a slow phone (CPU ×4, 3G network: frames, stutter, memory, first frame) and every declared game language (`jezyki_ui`; a package without a declaration: the languages the game offers), with a thumbnail per language (`dopasowanie.jezyki.jezyki[].zrzut_adres`), untranslated keys, English fallback, cut-off text and text outside the screen. Takes 3 to 4 minutes and counts as two measurements of the limit. `pomiar_pelny` in the response says whether the current result has this profile.",
      +  "type": "boolean"
      +}
    • changedInput schema / properties / sesja / description
      Previous value: -"Twój znacznik testu (1–24 znaki: litery, cyfry, - i _). Otwórz podgląd u siebie z `?s=<ten sam znacznik>`, pograj, a potem podaj go tutaj — dostaniesz TYLKO błędy ze swojego przebiegu, bez tych, które zostawił ktoś inny na tej samej grze."New value: +"Your test marker (1 to 24 characters: letters, digits, - and _). Open the preview on your side with `?s=<the same marker>`, play, then pass it here: you get ONLY the errors from your own run, without those someone else left on the same game."
    • changedInput schema / properties / slug / description
      Previous value: -"Adres gry w katalogu, np. lantern-thief (z klyo_my_games)."New value: +"Game address in the catalogue, for example lantern-thief (from klyo_my_games)."
    • changedInput schema / properties / upload_id / description
      Previous value: -"Identyfikator paczki z poczekalni (z odpowiedzi wgrania albo z podglądu)."New value: +"ID of a package in the waiting room (from the upload response or from the preview)."
    • addedInput schema / properties / zmierz
      Added value: +{
      +  "description": "Measurement on request for a waiting-room package or a waiting version (workshop): we open the preview on four screens, collect errors and take thumbnails (`dopasowanie.ekrany[].zrzut_adres`). For an assistant without a browser these are the only eyes. Safeguards: files unchanged since the last measurement = the stored result without a browser, one measurement at a time per account, 6 per hour. The `pomiar` field says what happened; you see the result in the next call without `zmierz`.",
      +  "type": "boolean"
      +}
  4. First observed

TDQS

A4/5.0
Behavior5/5

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

Although annotations already declare read-only safety (readOnlyHint, idempotentHint, destructiveHint false), the description adds substantial behavioral context beyond them: measurement queue limits (6 per hour, one at a time, full counts as two), browser-as-sensor requirement, thumbnail overwriting behavior, and detailed verdict interpretation. This is unusually rich disclosure of 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.

Conciseness2/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single, very long paragraph that mixes purpose, return field definitions, workflow instructions, verdict codes, and motivational asides like 'YOUR BROWSER IS THE EYE HERE.' While it front-loads the 'Read `_najpierw` first' point, many sentences do not earn their place for tool selection or invocation, making it hard to scan.

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?

With no output schema, the description must explain return values, and it does so extensively: the `_najpierw` object, error fields, verdict codes, and measurement outputs. Combined with 100% schema coverage and annotations, it provides complete context for an agent to call and interpret the tool. Minor gaps like the exact response envelope are not critical.

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 100%, so the schema already documents every parameter including `sesja`, `zmierz`, `pelny`, `slug`, `upload_id`, and `jezyki`. The description largely repeats or contextualizes these without adding new syntax, defaults, or constraints beyond what the schema provides. A baseline 3 is appropriate when the schema does the heavy lifting.

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 title 'Why the game is not working' and the opening 'Read `_najpierw` first' make the diagnostic purpose clear, with a specific verb (read/diagnose) and resource (game release blocker and error data). However, the description immediately dives into return field names instead of stating a crisp purpose, and it never names sibling alternatives like klyo_fix_game or klyo_game_files to differentiate.

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 a precise workflow: open the preview on your side, play it, then ask this tool; it also provides a no-browser alternative (`zmierz: true`) and a production profile (`pelny: true`). It states the consequence of reversing the order and warns against reporting certain verdicts as ready. It stops short of explicitly comparing to sibling tools, but the when-to-use context is clear.

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.