Skip to main content
Glama

klyo games: publish HTML5 browser games

Why the game is not working

klyo_game_diagnostics

WAITING PACKAGE VERSIONS: with a new upload_id pass poprzednia_paczka (the currently selected upload_id) to append a version of the same draft. With an older upload_id pass przywroc: true to select it again. Ownership, conflicts and retention are checked by the server. The 3 most recently selected versions keep their 14-day lifetime; older ZIPs expire within 24 hours, previews have a 7-day cleanup grace period. Use klyo_update_game for games with a slug. 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. GOOGLE: widocznosc (game in the catalogue) says whether the game page is in Google search: w_google: false with problemy[] (kod podobny_opis: the page text repeats z by procent % above prog %, so the last catalogue build took the page out of Google with noindex), each with dlaczego/jak_naprawic and en.why/en.how_to_fix; with a passing gate the same shows in _najpierw.google. A green gate does not mean the page is in Google: rewrite the description in that language (klyo_fix_game) and it returns with the next build. 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

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`.
przywrocNoWith an older waiting-room upload_id, select that version again. The original files remain intact. Do not use with slug or poprzednia_paczka.
upload_idNoID of a package in the waiting room (from the upload response or from the preview).
poprzednia_paczkaNoFor an update before first publication: the currently selected upload_id of the same draft. Pass together with the new upload_id on its first preview. A stale parent is refused; reread klyo_my_games instead of creating another draft.

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed2 schema fields changed
    • addedInput schema / properties / poprzednia_paczka
      Added value: +{
      +  "description": "For an update before first publication: the currently selected upload_id of the same draft. Pass together with the new upload_id on its first preview. A stale parent is refused; reread klyo_my_games instead of creating another draft.",
      +  "maxLength": 128,
      +  "type": "string"
      +}
    • addedInput schema / properties / przywroc
      Added value: +{
      +  "description": "With an older waiting-room upload_id, select that version again. The original files remain intact. Do not use with slug or poprzednia_paczka.",
      +  "type": "boolean"
      +}
  2. 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`."
  3. 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"
      +}
  4. 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"
      +}
  5. First observed

TDQS

B3.2/5.0
Behavior2/5

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

It discloses a lot of genuine behavior: per-account concurrency (one measurement running, one queued), a 6-per-hour quota with a full measurement counting double, 14-day/24-hour/7-day retention rules, and the NIESPRAWDZONA/POMIAR_NIEAKTUALNY caveats. But it states 'Read-only.' while annotations declare readOnlyHint=false and the description itself documents `zmierz` starting a server-side measurement job that consumes quota — a self-inconsistent claim that can mislead an agent about side effects.

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?

A ~600-word, single-block wall of text that is not front-loaded: it leads with draft-version bookkeeping rather than the tool's function. It mixes English prose with untranslated Polish field names and interleaves four distinct topics (version selection, error reading, gate verdicts, Google visibility, measurement), making it hard to scan.

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 an 8-parameter tool with no output schema, the description does the heavy lifting: it enumerates the returned fields (`_najpierw`, `bledy_przegladarki`, `dopasowanie.uwagi[]` codes, `bramka.wynik` values, `widocznosc`) and explains what each verdict means. It is complete enough to call correctly, though disorganization and the 'Read-only' misstatement undercut it slightly.

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 coverage is 100%, so the baseline would be 3; the description adds cross-parameter semantics the schema does not spell out, e.g. `poprzednia_paczka` must accompany the new `upload_id` on its first preview, `sesja` must match the `?s=` marker used when opening the preview, and `pelny` only matters alongside `zmierz`. It leaves the odd 'klyo_update_game for games with a slug' line unexplained relative to the `slug` parameter.

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

Purpose3/5

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

The tool is a diagnostics reader for a waiting-room package (`upload_id`) or a catalogue game (`slug`), returning missing files, JS errors, gate verdicts and screen-fit measurements. That purpose is discoverable, but the description opens with 'WAITING PACKAGE VERSIONS' workflow mechanics instead of a statement of what the tool is for, so the agent must reconstruct the purpose from scattered fragments. Sibling differentiation is only partial and partly confusing ('Use klyo_update_game for games with a slug').

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 real routing guidance: the prescribed order ('Order: open, play, ask; the other way round gives an empty answer'), the no-browser fallback (`zmierz: true`), the session-isolation recipe (`?s=` + `sesja`), and a pointer to klyo_fix_game for Google visibility fixes. What is missing is an explicit statement of when NOT to call this tool or which sibling to use for pure error checking versus publishing.

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.