Skip to main content
Glama

klyo games: publish HTML5 browser games

Publish a game to the catalogue

klyo_publish_game

Prepare a browser game for release on games.klyo.pl: the package (upload_id from klyo_upload_package, or a public zip_url), name, tagline, player description (at least 25 words, about 220 to be indexed by Google), genre from the list, text language and all ten answers of the content questionnaire, exactly what a person fills in in the studio wizard; limits are in the schema (name up to 30 characters, tagline up to 80, lists of genres and moods). Write the description in English (required) and in Polish (earns XP); you translate other languages later with klyo_game_translate and the owner approves them in the studio. We download and check the package (size, files, third-party ads, malicious code, profanity, other companies' brands). IT DOES NOT PUBLISH: the game goes live at its own address g-<slug>.klyo.pl in the oczekuje (waiting) state until the account owner plays it and clicks “Release to the catalogue”. Do not tell the user the game is published; it is ready to be looked at. We check the package, not the gameplay. If the game shows a white screen, call klyo_game_diagnostics with the same slug. REQUIRES that the account owner has accepted the developer terms in a browser at https://dev.klyo.pl/ beforehand; the assistant does not sign agreements. PREMIUM REVIEW: for stage gotowa (finished) or no stage, pass przeglad: seven points (graphics, animation, sound, feedback to player actions, light and dark theme, languages, online), each with evidence; the owner sees it before “Release”, together with the traces found in the code.

Examples: • Prepare my game from this ZIP address for release on klyo games • Publish the game “Lantern Thief”, the package is at this link • Upload this package as a game for everyone, with no violence

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
etapNoWhich stage the game is at: `w_budowie` = in development (still changing), `demo` (a finished slice of a bigger game), `gotowa` = finished (the full game). ASK THE DEVELOPER, do not guess. With `w_budowie` and `demo` players see a badge in the catalogue.
opisYesDescription for players in TWO versions, each in its own tag: <en>…</en> in English (REQUIRED, AT LEAST 25 words; without it the refusal `opis_en_wymagany`) and <pl>…</pl> in Polish (the owner gets +40 XP for it). In each version: what you do in the game (first sentence), what a round looks like and how long it takes, who it is for, how it differs from similar games; Google needs about 220 words, and a shorter description means the game page is NOT indexed. Write like a person writing for players: normal punctuation, no “dive into” or “discover”, no lists or bold, no HTML tags. Other languages (<de>, <es>…) only when the developer REALLY wrote them personally; translations from the assistant go through klyo_game_translate as proposals to approve.
seksNoLegacy field: Nudity, sexual or suggestive content. Prefer the `ankieta` object with all the questions.
tagiNoCatalogue shelves separated by commas, optional: logiczne (puzzle), zrecznosciowe (arcade), platformowe (platformers), przygodowe (adventure), na-telefon (for phones), klasyki (classics). Unknown ones are skipped without an error.
hasloYesTagline under the name: one sentence up to 80 characters PER LANGUAGE, no full stop at the end, plain text or one version per tag (<en>...</en><pl>...</pl>, each version counted on its own): what the game is, in the words players search for (“classic offline sudoku for free”). It stands under the name as the H2 and in the Google title of the page. REQUIRED for release: without it the server refuses (`brak_hasla`).
nazwaYesONLY the game's name, up to 30 characters PER LANGUAGE (as in Google Play and the App Store): “2048 Blockfall”, “Neon Coil: Family Arena”. One language: plain text in `jezyk_tekstu`. Several: one version per tag, <en>Kulki: Glass Garden</en><pl>Kulki: Szklany Ogrod</pl>, and the 30-character limit counts each version on its own. NO tagline and no search phrases (“play free online”) in it: we reject that (`nazwa_z_haslem`), because the game's address and its Google title in both languages come from the name. Do not start with another company's brand.
ukladNoGame layout: `poziom` = landscape (like a computer screen), `pion` = portrait (like a phone) or `oba` = both, the game adapts when the screen rotates.
strachNoLegacy field: Scenes that may frighten children. Prefer the `ankieta` object with all the questions.
ankietaYesContent questionnaire (as in the app stores): ten yes/no questions about what IS in the game. The answers decide the age label on the game page, whether ads are shown next to the game and whether the game goes into the klyo games apps in the stores. ASK THE DEVELOPER about each one: answers that do not match the content are a reason for taking the game down. REQUIRED for release: all ten answers.
zip_urlNoPublic https address of the ZIP package (index.html inside), up to 200 MB. Only for a game that REALLY is online already, for example when moving it from itch.io.
etap_dniNoOnly with `demo` and `w_budowie`: after how many days (7 or 30) we remind the developer to change the stage; after the grace period a game without a decision leaves the catalogue.
nastrojeNoWhat the player is in the mood for, separated by commas, from the list: 5-minut, jeden-kciuk, rusz-glowa, adrenalina, klasyki, spokojne (5-minut = five-minute fun, jeden-kciuk = one thumb, rusz-glowa = brain teaser, adrenalina = adrenaline, klasyki = classics, spokojne = calm). This is NOT the genre: the genre says what the game IS, the mood says what you need to feel like playing it. Omit if you do not know.
przegladNoPremium quality review, seven points with evidence. Required for stage `gotowa` and when no stage is given; may be omitted for `demo` and `w_budowie`. The server does not judge taste; it matches the declaration against traces in the code and shows it to the owner before “Release”.
wiek_minNoPlayer age ACCORDING TO THE DEVELOPER: it can only RAISE the label above the questionnaire result (a game for older players by choice), never lower it. Above 12 the game does not go into the store apps. Omit when the questionnaire is enough.
bez_pornoYesStatement by the account owner: the game has no nudity or sexual content. Must be `true`. We accept 18+ games for violence, but not sexual content: that is a condition of the catalogue, not a preference.
jezyki_uiNoLanguages of the MENU AND TEXT INSIDE THE GAME, not of the description. Players choose which languages they want to see games in, so this decides who the game is shown to. A game without a single word (only numbers and shapes, like 2048): only ["bez-tekstu"] (no text). Do not guess: ask the owner or omit it.
kategoriaYesGame genre from the list, UP TO THREE separated by commas (for example “platformowa,przygodowa” = platformer, adventure). Pick the ones that really describe the game, not every one that fits, or the filter stops meaning anything. “inne” (other) only when nothing fits. At least one, otherwise the refusal `rodzaj_spoza_listy`. The values are Polish identifiers, for example zrecznosciowa = arcade, logiczna = puzzle and logic, dopasuj-3 = match-3, obrona-wiezy = tower defense, strzelanka = shooter, wyscigi = racing, planszowa = board game, karcianka = card game, slowna = word game. Allowed: zrecznosciowa, logiczna, ukladanki, klocki, dopasuj-3, kulki, pamiec, sudoku, pasjans, fizyczna, escape, biegacz, jazda, zarzadzanie, tekstowa, rysowanie, dwie-osoby, platformowa, przygodowa, akcja, strzelanka, walka, wyscigi, sportowa, strategiczna, obrona-wiezy, symulacja, farma, rpg, roguelike, przetrwanie, horror, karcianka, planszowa, mahjong, slowna, quiz, edukacyjna, muzyczna, klikacz, ubieranki, gotowanie, szukanie, io, inne.
upload_idNoID of the package sent to klyo (see klyo_upload_package). Use THIS when the file is on disk; do not set up a tunnel.
wynik_maxNoThe highest possible score in one round: a guard against inflated scores on the leaderboard. Omit it when the game has no score or no upper limit.
sklep_playNoAddress of the same game in Google Play (https://play.google.com/store/apps/details?id=…), if it is also an app. A badge on the game page and in share texts; empty = no badge.
wulgaryzmyNoLegacy field: Strong or offensive language. Prefer the `ankieta` object with all the questions.
czas_partiiNoHow long one round takes (“2-5 minutes”), in the `jezyk_tekstu` language.
sklep_appleNoAddress of the same game in the App Store (https://apps.apple.com/…), if it is also an iPhone app.
jezyk_tekstuYesCode of the language the name, tagline and controls are written in (pl, en, de, fr, es, pt, it, ru, uk, tr). ALWAYS give it. The description has its own <en> (required) and <pl> (+40 XP) versions, see `opis`. Other languages are translated by the owner's assistant through klyo_game_translate (proposals the owner approves in the studio); klyo does not translate on its own account.
uklad_pionowyNoLegacy field: true = portrait game. Prefer `uklad`.
sterowanie_dotykNoHow to play ON A PHONE, short and concrete (“swipe across the screen”), in the `jezyk_tekstu` language.
przemoc_rysunkowaNoLegacy field: Cartoon or abstract violence, no blood. Prefer the `ankieta` object with all the questions.
przemoc_realistycznaNoLegacy field: Realistic violence, blood or cruelty. Prefer the `ankieta` object with all the questions.
sterowanie_klawiaturaNoHow to play ON A COMPUTER (“arrow keys and space”), in the `jezyk_tekstu` language.

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed1 schema field changed
    • changedInput schema / properties / zip_url / description
      Previous value: -"Public https address of the ZIP package (index.html inside), up to 100 MB. Only for a game that REALLY is online already, for example when moving it from itch.io."New value: +"Public https address of the ZIP package (index.html inside), up to 200 MB. Only for a game that REALLY is online already, for example when moving it from itch.io."
  2. Changed4 schema fields changed
    • changedInput schema / properties / haslo / description
      Previous value: -"Tagline under the name: one sentence up to 80 characters, no full stop at the end: what the game is, in the words players search for (“classic offline sudoku for free”). It stands under the name as the H2 and in the Google title of the page. REQUIRED for release: without it the server refuses (`brak_hasla`)."New value: +"Tagline under the name: one sentence up to 80 characters PER LANGUAGE, no full stop at the end, plain text or one version per tag (<en>...</en><pl>...</pl>, each version counted on its own): what the game is, in the words players search for (“classic offline sudoku for free”). It stands under the name as the H2 and in the Google title of the page. REQUIRED for release: without it the server refuses (`brak_hasla`)."
    • changedInput schema / properties / haslo / maxLength
      Previous value: -80New value: +900
    • changedInput schema / properties / nazwa / description
      Previous value: -"ONLY the game's name, up to 30 characters (as in Google Play and the App Store), in ONE language (see `jezyk_tekstu`): “2048 Blockfall”, “Neon Coil: Family Arena”. NO tagline and no search phrases (“play free online”) in it: we reject that (`nazwa_z_haslem`), because the game's address and its Google title in both languages come from the name. Do not start with another company's brand."New value: +"ONLY the game's name, up to 30 characters PER LANGUAGE (as in Google Play and the App Store): “2048 Blockfall”, “Neon Coil: Family Arena”. One language: plain text in `jezyk_tekstu`. Several: one version per tag, <en>Kulki: Glass Garden</en><pl>Kulki: Szklany Ogrod</pl>, and the 30-character limit counts each version on its own. NO tagline and no search phrases (“play free online”) in it: we reject that (`nazwa_z_haslem`), because the game's address and its Google title in both languages come from the name. Do not start with another company's brand."
    • changedInput schema / properties / nazwa / maxLength
      Previous value: -30New value: +400
  3. Changed39 schema fields changed
    • changedInput schema / properties / ankieta / description
      Previous value: -"Ankieta treści (jak w sklepach z aplikacjami): dziesięć pytań tak/nie o to, co JEST w grze. Z odpowiedzi wynika etykieta wieku na stronie gry, czy przy grze stoją reklamy i czy gra wchodzi do aplikacji klyo games w sklepach. ZAPYTAJ TWÓRCĘ o każde — odpowiedzi niezgodne z treścią to powód zdjęcia gry. OBOWIĄZKOWA przy wydaniu — wszystkie dziesięć odpowiedzi."New value: +"Content questionnaire (as in the app stores): ten yes/no questions about what IS in the game. The answers decide the age label on the game page, whether ads are shown next to the game and whether the game goes into the klyo games apps in the stores. ASK THE DEVELOPER about each one: answers that do not match the content are a reason for taking the game down. REQUIRED for release: all ten answers."
    • changedInput schema / properties / ankieta / properties / hazard / description
      Previous value: -"Hazard, losowe skrzynki lub symulacja hazardu / Gambling, loot boxes or simulated gambling"New value: +"Gambling, loot boxes or simulated gambling"
    • changedInput schema / properties / ankieta / properties / interakcje / description
      Previous value: -"Rozmowy lub interakcje z innymi graczami / Chat or interaction with other players"New value: +"Chat or interaction with other players"
    • changedInput schema / properties / ankieta / properties / lokalizacja / description
      Previous value: -"Gra prosi o lokalizację, kamerę lub mikrofon / The game asks for location, camera or microphone"New value: +"The game asks for location, camera or microphone"
    • changedInput schema / properties / ankieta / properties / przemoc_realistyczna / description
      Previous value: -"Przemoc realistyczna, krew, okrucieństwo / Realistic violence, blood or cruelty"New value: +"Realistic violence, blood or cruelty"
    • changedInput schema / properties / ankieta / properties / przemoc_rysunkowa / description
      Previous value: -"Przemoc rysunkowa lub umowna, bez krwi / Cartoon or abstract violence, no blood"New value: +"Cartoon or abstract violence, no blood"
    • changedInput schema / properties / ankieta / properties / seks / description
      Previous value: -"Nagość, treści seksualne lub sugestywne / Nudity, sexual or suggestive content"New value: +"Nudity, sexual or suggestive content"
    • changedInput schema / properties / ankieta / properties / strach / description
      Previous value: -"Sceny, które mogą przestraszyć dzieci / Scenes that may frighten children"New value: +"Scenes that may frighten children"
    • changedInput schema / properties / ankieta / properties / uzywki / description
      Previous value: -"Alkohol, tytoń, narkotyki / Alcohol, tobacco or drugs"New value: +"Alcohol, tobacco or drugs"
    • changedInput schema / properties / ankieta / properties / wulgaryzmy / description
      Previous value: -"Wulgaryzmy lub obraźliwy język / Strong or offensive language"New value: +"Strong or offensive language"
    • changedInput schema / properties / ankieta / properties / zakupy / description
      Previous value: -"Zakupy w grze / In-game purchases"New value: +"In-game purchases"
    • changedInput schema / properties / bez_porno / description
      Previous value: -"Oświadczenie właściciela konta: w grze nie ma nagości ani treści seksualnych. Musi być `true`. Gry 18+ za przemoc przyjmujemy, treści seksualnych nie — to warunek katalogu, nie preferencja."New value: +"Statement by the account owner: the game has no nudity or sexual content. Must be `true`. We accept 18+ games for violence, but not sexual content: that is a condition of the catalogue, not a preference."
    • changedInput schema / properties / czas_partii / description
      Previous value: -"Ile trwa jedna partia („2-5 minut”), w języku `jezyk_tekstu`."New value: +"How long one round takes (“2-5 minutes”), in the `jezyk_tekstu` language."
    • changedInput schema / properties / etap / description
      Previous value: -"Na jakim etapie jest gra: `w_budowie` (jeszcze się zmienia), `demo` (skończony kawałek większej gry), `gotowa` (pełna gra). ZAPYTAJ TWÓRCĘ, nie zgaduj. Przy `w_budowie` i `demo` gracz widzi znaczek w katalogu."New value: +"Which stage the game is at: `w_budowie` = in development (still changing), `demo` (a finished slice of a bigger game), `gotowa` = finished (the full game). ASK THE DEVELOPER, do not guess. With `w_budowie` and `demo` players see a badge in the catalogue."
    • changedInput schema / properties / etap_dni / description
      Previous value: -"Tylko przy `demo` i `w_budowie`: za ile dni (7 albo 30) przypominamy o zmianie etapu; po karencji gra bez decyzji schodzi z katalogu."New value: +"Only with `demo` and `w_budowie`: after how many days (7 or 30) we remind the developer to change the stage; after the grace period a game without a decision leaves the catalogue."
    • changedInput schema / properties / haslo / description
      Previous value: -"Hasło pod nazwą — jedno zdanie do 80 znaków, bez kropki na końcu: czym gra jest, słowami, których gracz szuka („klasyczne sudoku offline za darmo”). Stoi pod nazwą jako H2 i w tytule karty w Google. OBOWIĄZKOWE przy wydaniu — bez niego serwer odmawia (`brak_hasla`)."New value: +"Tagline under the name: one sentence up to 80 characters, no full stop at the end: what the game is, in the words players search for (“classic offline sudoku for free”). It stands under the name as the H2 and in the Google title of the page. REQUIRED for release: without it the server refuses (`brak_hasla`)."
    • changedInput schema / properties / jezyk_tekstu / description
      Previous value: -"Kod języka, w którym napisano nazwę, hasło i sterowanie (pl, en, de, fr, es, pt, it, ru, uk, tr). Podaj ZAWSZE. Opis ma własne wersje <en> (wymagana) i <pl> (+40 XP) — patrz `opis`. Pozostałe języki tłumaczy asystent właściciela przez klyo_game_translate (propozycje, które właściciel przyjmuje w studiu); klyo nie tłumaczy na własnym koncie."New value: +"Code of the language the name, tagline and controls are written in (pl, en, de, fr, es, pt, it, ru, uk, tr). ALWAYS give it. The description has its own <en> (required) and <pl> (+40 XP) versions, see `opis`. Other languages are translated by the owner's assistant through klyo_game_translate (proposals the owner approves in the studio); klyo does not translate on its own account."
    • changedInput schema / properties / jezyki_ui / description
      Previous value: -"Języki MENU I NAPISÓW W SAMEJ GRZE — nie języka opisu. Gracz ustawia, w jakich językach chce widzieć gry, więc od tego zależy, komu gra się pokaże. Gra bez ani jednego słowa (same liczby, kształty — jak 2048): wyłącznie [\"bez-tekstu\"]. Nie zgaduj — zapytaj właściciela albo pomiń."New value: +"Languages of the MENU AND TEXT INSIDE THE GAME, not of the description. Players choose which languages they want to see games in, so this decides who the game is shown to. A game without a single word (only numbers and shapes, like 2048): only [\"bez-tekstu\"] (no text). Do not guess: ask the owner or omit it."
    • changedInput schema / properties / kategoria / description
      Previous value: -"Rodzaj gry z listy, DO TRZECH po przecinku (np. „platformowa,przygodowa”). Wybierz te, które naprawdę opisują grę — nie wszystkie pasujące, bo filtr przestaje cokolwiek znaczyć. „inne” tylko gdy nic nie pasuje. Co najmniej jeden — inaczej odmowa (`rodzaj_spoza_listy`). Dozwolone: zrecznosciowa, logiczna, ukladanki, klocki, dopasuj-3, kulki, pamiec, sudoku, pasjans, fizyczna, escape, biegacz, jazda, zarzadzanie, tekstowa, rysowanie, dwie-osoby, platformowa, przygodowa, akcja, strzelanka, walka, wyscigi, sportowa, strategiczna, obrona-wiezy, symulacja, farma, rpg, roguelike, przetrwanie, horror, karcianka, planszowa, mahjong, slowna, quiz, edukacyjna, muzyczna, klikacz, ubieranki, gotowanie, szukanie, io, inne."New value: +"Game genre from the list, UP TO THREE separated by commas (for example “platformowa,przygodowa” = platformer, adventure). Pick the ones that really describe the game, not every one that fits, or the filter stops meaning anything. “inne” (other) only when nothing fits. At least one, otherwise the refusal `rodzaj_spoza_listy`. The values are Polish identifiers, for example zrecznosciowa = arcade, logiczna = puzzle and logic, dopasuj-3 = match-3, obrona-wiezy = tower defense, strzelanka = shooter, wyscigi = racing, planszowa = board game, karcianka = card game, slowna = word game. Allowed: zrecznosciowa, logiczna, ukladanki, klocki, dopasuj-3, kulki, pamiec, sudoku, pasjans, fizyczna, escape, biegacz, jazda, zarzadzanie, tekstowa, rysowanie, dwie-osoby, platformowa, przygodowa, akcja, strzelanka, walka, wyscigi, sportowa, strategiczna, obrona-wiezy, symulacja, farma, rpg, roguelike, przetrwanie, horror, karcianka, planszowa, mahjong, slowna, quiz, edukacyjna, muzyczna, klikacz, ubieranki, gotowanie, szukanie, io, inne."
    • changedInput schema / properties / nastroje / description
      Previous value: -"Na co gracz ma ochotę — po przecinku, z listy: 5-minut, jeden-kciuk, rusz-glowa, adrenalina, klasyki, spokojne. To NIE jest rodzaj gry: rodzaj mówi, czym gra JEST, nastrój — na co trzeba mieć ochotę. Pomiń, jeśli nie wiesz."New value: +"What the player is in the mood for, separated by commas, from the list: 5-minut, jeden-kciuk, rusz-glowa, adrenalina, klasyki, spokojne (5-minut = five-minute fun, jeden-kciuk = one thumb, rusz-glowa = brain teaser, adrenalina = adrenaline, klasyki = classics, spokojne = calm). This is NOT the genre: the genre says what the game IS, the mood says what you need to feel like playing it. Omit if you do not know."
    • changedInput schema / properties / nazwa / description
      Previous value: -"SAMA nazwa gry, do 30 znaków (jak w Google Play i App Store), w JEDNYM języku (patrz `jezyk_tekstu`): „2048 Blockfall”, „Neon Coil: Family Arena”. BEZ hasła i zwrotów z wyszukiwarki („zagraj za darmo online”, „free online”) — to odrzucamy (`nazwa_z_haslem`), bo z nazwy powstaje adres gry i tytuł w Google w obu językach. Nie zaczynaj od cudzej marki."New value: +"ONLY the game's name, up to 30 characters (as in Google Play and the App Store), in ONE language (see `jezyk_tekstu`): “2048 Blockfall”, “Neon Coil: Family Arena”. NO tagline and no search phrases (“play free online”) in it: we reject that (`nazwa_z_haslem`), because the game's address and its Google title in both languages come from the name. Do not start with another company's brand."
    • changedInput schema / properties / opis / description
      Previous value: -"Opis dla gracza w DWÓCH wersjach, każda po swoim znaczniku: <en>…</en> po angielsku (WYMAGANA, MINIMUM 25 słów; bez niej odmowa `opis_en_wymagany`) i <pl>…</pl> po polsku (za nią właściciel dostaje +40 XP). W każdej wersji: co się robi w grze (pierwsze zdanie), jak wygląda partia i ile trwa, dla kogo jest, czym różni się od podobnych; do Google potrzeba około 220 słów — krótszy opis znaczy, że strona gry NIE wchodzi do wyszukiwarki. Pisz jak człowiek dla graczy: zwykła interpunkcja, bez „zanurz się / odkryj”, bez list i pogrubień, bez znaczników HTML. Inne języki (<de>, <es>…) tylko wtedy, gdy twórca NAPRAWDĘ napisał je sam; tłumaczenia od asystenta idą przez klyo_game_translate jako propozycje do przyjęcia."New value: +"Description for players in TWO versions, each in its own tag: <en>…</en> in English (REQUIRED, AT LEAST 25 words; without it the refusal `opis_en_wymagany`) and <pl>…</pl> in Polish (the owner gets +40 XP for it). In each version: what you do in the game (first sentence), what a round looks like and how long it takes, who it is for, how it differs from similar games; Google needs about 220 words, and a shorter description means the game page is NOT indexed. Write like a person writing for players: normal punctuation, no “dive into” or “discover”, no lists or bold, no HTML tags. Other languages (<de>, <es>…) only when the developer REALLY wrote them personally; translations from the assistant go through klyo_game_translate as proposals to approve."
    • addedInput schema / properties / przeglad
      Added value: +{
      +  "additionalProperties": false,
      +  "description": "Premium quality review, seven points with evidence. Required for stage `gotowa` and when no stage is given; may be omitted for `demo` and `w_budowie`. The server does not judge taste; it matches the declaration against traces in the code and shows it to the owner before “Release”.",
      +  "properties": {
      +    "animacja": {
      +      "additionalProperties": false,
      +      "description": "PASS means: Every state change has a 120 to 300 ms transition, screens enter and leave, there is a win and a lose animation. Motion switches off with prefers-reduced-motion.",
      +      "properties": {
      +        "dowod": {
      +          "description": "What exactly was done: file, function, what is visible on screen.",
      +          "maxLength": 400,
      +          "minLength": 20,
      +          "type": "string"
      +        },
      +        "stan": {
      +          "enum": [
      +            "pass"
      +          ],
      +          "type": "string"
      +        }
      +      },
      +      "required": [
      +        "stan",
      +        "dowod"
      +      ],
      +      "type": "object"
      +    },
      +    "dzwiek": {
      +      "additionalProperties": false,
      +      "description": "PASS means: Sound for every player action and every result (tap, error, win), mute in the settings, resumes after returning from the background.",
      +      "properties": {
      +        "dowod": {
      +          "description": "What exactly was done: file, function, what is visible on screen.",
      +          "maxLength": 400,
      +          "minLength": 20,
      +          "type": "string"
      +        },
      +        "stan": {
      +          "enum": [
      +            "pass"
      +          ],
      +          "type": "string"
      +        }
      +      },
      +      "required": [
      +        "stan",
      +        "dowod"
      +      ],
      +      "type": "object"
      +    },
      +    "grafika": {
      +      "additionalProperties": false,
      +      "description": "PASS means: One art direction: one palette, one style of outlines and corners, background, scene and elements from one skin (Klyo Kit: gra.skora, gra.rysuj, gra.generuj). No bare rectangles on a gradient. Readable on a phone in full sunlight.",
      +      "properties": {
      +        "dowod": {
      +          "description": "What exactly was done: file, function, what is visible on screen.",
      +          "maxLength": 400,
      +          "minLength": 20,
      +          "type": "string"
      +        },
      +        "stan": {
      +          "enum": [
      +            "pass"
      +          ],
      +          "type": "string"
      +        }
      +      },
      +      "required": [
      +        "stan",
      +        "dowod"
      +      ],
      +      "type": "object"
      +    },
      +    "informacja_zwrotna": {
      +      "additionalProperties": false,
      +      "description": "PASS means: Every action gets a response within 100 ms: picture and sound, and vibration on a phone. It is clear whose move it is, a move is previewed before it is released, and the reason a move is not allowed is shown.",
      +      "properties": {
      +        "dowod": {
      +          "description": "What exactly was done: file, function, what is visible on screen.",
      +          "maxLength": 400,
      +          "minLength": 20,
      +          "type": "string"
      +        },
      +        "stan": {
      +          "enum": [
      +            "pass"
      +          ],
      +          "type": "string"
      +        }
      +      },
      +      "required": [
      +        "stan",
      +        "dowod"
      +      ],
      +      "type": "object"
      +    },
      +    "jezyki": {
      +      "additionalProperties": false,
      +      "description": "PASS means: All texts from the translation table (at least Polish and English), the language from the device settings, no text written into the drawing code. `nie_dotyczy` (not applicable) only for a game without words.",
      +      "properties": {
      +        "dowod": {
      +          "description": "What exactly was done: file, function, what is visible on screen.",
      +          "maxLength": 400,
      +          "minLength": 20,
      +          "type": "string"
      +        },
      +        "stan": {
      +          "enum": [
      +            "pass",
      +            "nie_dotyczy"
      +          ],
      +          "type": "string"
      +        }
      +      },
      +      "required": [
      +        "stan",
      +        "dowod"
      +      ],
      +      "type": "object"
      +    },
      +    "motyw": {
      +      "additionalProperties": false,
      +      "description": "PASS means: Light and dark variant following prefers-color-scheme plus a switch in the settings; both checked on screenshots.",
      +      "properties": {
      +        "dowod": {
      +          "description": "What exactly was done: file, function, what is visible on screen.",
      +          "maxLength": 400,
      +          "minLength": 20,
      +          "type": "string"
      +        },
      +        "stan": {
      +          "enum": [
      +            "pass"
      +          ],
      +          "type": "string"
      +        }
      +      },
      +      "required": [
      +        "stan",
      +        "dowod"
      +      ],
      +      "type": "object"
      +    },
      +    "online": {
      +      "additionalProperties": false,
      +      "description": "PASS means: A game for two or more people: invitation by link, a “waiting for the opponent” state, disconnect and return, a rematch with one gesture. `nie_dotyczy` (not applicable) for a solo game, with the reason.",
      +      "properties": {
      +        "dowod": {
      +          "description": "What exactly was done: file, function, what is visible on screen.",
      +          "maxLength": 400,
      +          "minLength": 20,
      +          "type": "string"
      +        },
      +        "stan": {
      +          "enum": [
      +            "pass",
      +            "nie_dotyczy"
      +          ],
      +          "type": "string"
      +        }
      +      },
      +      "required": [
      +        "stan",
      +        "dowod"
      +      ],
      +      "type": "object"
      +    }
      +  },
      +  "required": [
      +    "grafika",
      +    "animacja",
      +    "dzwiek",
      +    "informacja_zwrotna",
      +    "motyw",
      +    "jezyki",
      +    "online"
      +  ],
      +  "type": "object"
      +}
    • changedInput schema / properties / przemoc_realistyczna / description
      Previous value: -"Starsze pole: Przemoc realistyczna, krew, okrucieństwo. Wolimy obiekt `ankieta` z kompletem pytań."New value: +"Legacy field: Realistic violence, blood or cruelty. Prefer the `ankieta` object with all the questions."
    • changedInput schema / properties / przemoc_rysunkowa / description
      Previous value: -"Starsze pole: Przemoc rysunkowa lub umowna, bez krwi. Wolimy obiekt `ankieta` z kompletem pytań."New value: +"Legacy field: Cartoon or abstract violence, no blood. Prefer the `ankieta` object with all the questions."
    • changedInput schema / properties / seks / description
      Previous value: -"Starsze pole: Nagość, treści seksualne lub sugestywne. Wolimy obiekt `ankieta` z kompletem pytań."New value: +"Legacy field: Nudity, sexual or suggestive content. Prefer the `ankieta` object with all the questions."
    • changedInput schema / properties / sklep_apple / description
      Previous value: -"Adres tej samej gry w App Store (https://apps.apple.com/…), jeśli jest też aplikacją na iPhone’a."New value: +"Address of the same game in the App Store (https://apps.apple.com/…), if it is also an iPhone app."
    • changedInput schema / properties / sklep_play / description
      Previous value: -"Adres tej samej gry w Google Play (https://play.google.com/store/apps/details?id=…), jeśli jest też aplikacją. Odznaka na stronie gry i w tekstach udostępnienia; pusto = brak odznaki."New value: +"Address of the same game in Google Play (https://play.google.com/store/apps/details?id=…), if it is also an app. A badge on the game page and in share texts; empty = no badge."
    • changedInput schema / properties / sterowanie_dotyk / description
      Previous value: -"Jak grać NA TELEFONIE, krótko i konkretnie („przesuń palcem po ekranie”), w języku `jezyk_tekstu`."New value: +"How to play ON A PHONE, short and concrete (“swipe across the screen”), in the `jezyk_tekstu` language."
    • changedInput schema / properties / sterowanie_klawiatura / description
      Previous value: -"Jak grać NA KOMPUTERZE („strzałki i spacja”), w języku `jezyk_tekstu`."New value: +"How to play ON A COMPUTER (“arrow keys and space”), in the `jezyk_tekstu` language."
    • changedInput schema / properties / strach / description
      Previous value: -"Starsze pole: Sceny, które mogą przestraszyć dzieci. Wolimy obiekt `ankieta` z kompletem pytań."New value: +"Legacy field: Scenes that may frighten children. Prefer the `ankieta` object with all the questions."
    • changedInput schema / properties / tagi / description
      Previous value: -"Półki katalogu po przecinku, opcjonalnie: logiczne, zrecznosciowe, platformowe, przygodowe, na-telefon, klasyki. Nieznane pomijamy bez błędu."New value: +"Catalogue shelves separated by commas, optional: logiczne (puzzle), zrecznosciowe (arcade), platformowe (platformers), przygodowe (adventure), na-telefon (for phones), klasyki (classics). Unknown ones are skipped without an error."
    • changedInput schema / properties / uklad / description
      Previous value: -"Układ gry: poziom (jak ekran komputera), pion (jak telefon) albo oba — gra dopasowuje się do obrotu ekranu."New value: +"Game layout: `poziom` = landscape (like a computer screen), `pion` = portrait (like a phone) or `oba` = both, the game adapts when the screen rotates."
    • changedInput schema / properties / uklad_pionowy / description
      Previous value: -"Starsze pole: true = gra pionowa. Wolimy `uklad`."New value: +"Legacy field: true = portrait game. Prefer `uklad`."
    • changedInput schema / properties / upload_id / description
      Previous value: -"Numer paczki wysłanej do klyo (patrz klyo_upload_package). Użyj TEGO, gdy masz plik na dysku — nie stawiaj tunelu."New value: +"ID of the package sent to klyo (see klyo_upload_package). Use THIS when the file is on disk; do not set up a tunnel."
    • changedInput schema / properties / wiek_min / description
      Previous value: -"Wiek graczy WEDŁUG TWÓRCY — może tylko PODNIEŚĆ etykietę ponad wynik ankiety (gra dla starszych z wyboru), nigdy obniżyć. Powyżej 12 gra nie wchodzi do aplikacji w sklepach. Pomiń, gdy ankieta wystarcza."New value: +"Player age ACCORDING TO THE DEVELOPER: it can only RAISE the label above the questionnaire result (a game for older players by choice), never lower it. Above 12 the game does not go into the store apps. Omit when the questionnaire is enough."
    • changedInput schema / properties / wulgaryzmy / description
      Previous value: -"Starsze pole: Wulgaryzmy lub obraźliwy język. Wolimy obiekt `ankieta` z kompletem pytań."New value: +"Legacy field: Strong or offensive language. Prefer the `ankieta` object with all the questions."
    • changedInput schema / properties / wynik_max / description
      Previous value: -"Najwyższy możliwy wynik w jednej partii — zapora przed nabijaniem punktów na tablicy. Pomiń, gdy gra nie ma wyniku albo górnej granicy."New value: +"The highest possible score in one round: a guard against inflated scores on the leaderboard. Omit it when the game has no score or no upper limit."
    • changedInput schema / properties / zip_url / description
      Previous value: -"Publiczny adres https do paczki ZIP (w środku index.html), do 100 MB. Tylko dla gry, która NAPRAWDĘ stoi już w sieci — np. przy przenoszeniu z itch.io."New value: +"Public https address of the ZIP package (index.html inside), up to 100 MB. Only for a game that REALLY is online already, for example when moving it from itch.io."
  4. Changed2 schema fields changed
    • changedInput schema / properties / jezyk_tekstu / description
      Previous value: -"Kod języka, w którym napisano nazwę, hasło i sterowanie (pl, en, de, fr, es, pt, it, ru, uk, tr). Podaj ZAWSZE. Opis ma własne wersje <en> (wymagana) i <pl> (+40 XP) — patrz `opis`. Tłumaczenia maszynowe są wstrzymane; asystent nie tłumaczy sam na języki, których twórca nie napisał."New value: +"Kod języka, w którym napisano nazwę, hasło i sterowanie (pl, en, de, fr, es, pt, it, ru, uk, tr). Podaj ZAWSZE. Opis ma własne wersje <en> (wymagana) i <pl> (+40 XP) — patrz `opis`. Pozostałe języki tłumaczy asystent właściciela przez klyo_game_translate (propozycje, które właściciel przyjmuje w studiu); klyo nie tłumaczy na własnym koncie."
    • changedInput schema / properties / opis / description
      Previous value: -"Opis dla gracza w DWÓCH wersjach, każda po swoim znaczniku: <en>…</en> po angielsku (WYMAGANA, MINIMUM 25 słów; bez niej odmowa `opis_en_wymagany`) i <pl>…</pl> po polsku (za nią właściciel dostaje +40 XP). W każdej wersji: co się robi w grze (pierwsze zdanie), jak wygląda partia i ile trwa, dla kogo jest, czym różni się od podobnych; do Google potrzeba około 220 słów — krótszy opis znaczy, że strona gry NIE wchodzi do wyszukiwarki. Pisz jak człowiek dla graczy: zwykła interpunkcja, bez „zanurz się / odkryj”, bez list i pogrubień, bez znaczników HTML. Inne języki (<de>, <es>…) tylko wtedy, gdy twórca NAPRAWDĘ napisał je sam — klyo nie tłumaczy maszynowo."New value: +"Opis dla gracza w DWÓCH wersjach, każda po swoim znaczniku: <en>…</en> po angielsku (WYMAGANA, MINIMUM 25 słów; bez niej odmowa `opis_en_wymagany`) i <pl>…</pl> po polsku (za nią właściciel dostaje +40 XP). W każdej wersji: co się robi w grze (pierwsze zdanie), jak wygląda partia i ile trwa, dla kogo jest, czym różni się od podobnych; do Google potrzeba około 220 słów — krótszy opis znaczy, że strona gry NIE wchodzi do wyszukiwarki. Pisz jak człowiek dla graczy: zwykła interpunkcja, bez „zanurz się / odkryj”, bez list i pogrubień, bez znaczników HTML. Inne języki (<de>, <es>…) tylko wtedy, gdy twórca NAPRAWDĘ napisał je sam; tłumaczenia od asystenta idą przez klyo_game_translate jako propozycje do przyjęcia."
  5. Added

TDQS

A4.4/5.0
Behavior5/5

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

Annotations flag a non-read-only, non-idempotent, open-world write, and the description adds substance beyond that: the package is downloaded and checked for size, files, third-party ads, malicious code, profanity and other companies' brands; the game lands in a waiting state at g-<slug>.klyo.pl; owner approval is required before 'Release'. These are real behavioral traits not captured by the annotations.

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 most sentences carry distinct information, with the critical 'IT DOES NOT PUBLISH' constraint given prominence. It is dense and occasionally crams several rules into one sentence (limits plus language rules plus address derivation), but the length is largely justified by a 29-parameter, nested-schema tool.

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?

There is no output schema, so the description carries the return-behavior burden and does so: it explains the resulting state (`oczekuje`), the generated address (g-<slug>.klyo.pl), and that the owner sees review evidence before release. Combined with full param coverage and a clear mutation/approval workflow, an agent has what it needs to call this correctly.

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 all 29 parameters in detail. The description adds cross-parameter constraints (name ≤30 chars, tagline ≤80, English description required with 25-word minimum and ~220 for indexing, all ten questionnaire answers, seven review points) but largely restates what the schema fields carry.

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 opens with a specific verb and resource ('Prepare a browser game for release on games.klyo.pl') and names related siblings (klyo_upload_package, klyo_game_translate, klyo_game_diagnostics). It does not explicitly distinguish itself from the closest functional siblings klyo_update_game and klyo_fill_game_form, though the 'studio wizard' framing implies a creation flow rather than an edit.

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 states the prerequisites (owner must have accepted developer terms at dev.klyo.pl), what the tool explicitly does NOT do ('IT DOES NOT PUBLISH', game sits in `oczekuje`), what to tell the user instead, when to include `przeglad` (stage `gotowa` or none), and which sibling to call for translation and diagnostics. This is unusually complete routing guidance.

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.