klyo games: publish HTML5 browser games
Was dieses MCP kann
Creates, edits, tests, publishes, updates, and analyzes HTML5 browser games, including game files, SDK features, releases, and player statistics.
Tools
Eingabeschema
{'type': 'object', 'required': ['rodzaj', 'jezyk', 'tytul', 'tresc'], 'properties': {'link': {'type': 'string', 'description': 'Optional: address of the game in a store or on another site.'}, 'jezyk': {'enum': ['pl', 'en'], 'type': 'string', 'description': 'Language of the post.'}, 'tresc': {'type': 'string', 'description': 'Post text, at least 20 characters. Write like a person talking to people, without advertising slogans.'}, 'tytul': {'type': 'string', 'description': 'Post title, 6 to 120 characters.'}, 'rodzaj': {'enum': ['pytanie', 'test', 'premiera', 'pokaz'], 'type': 'string', 'description': '`pytanie` = question | `test` = request for playtesters | `premiera` = launch | `pokaz` = showcase.'}, 'gra_slug': {'type': 'string', 'description': 'Optional: the catalogue game the post is about.'}}, 'additionalProperties': False}
Eingabeschema
{'type': 'object', 'properties': {'haslo': {'type': 'string', 'maxLength': 400, 'description': 'One sentence up to 80 characters per language with no full stop; may have <pl>...</pl><en>...</en>, each version counted on its own. Omit to leave it as it is.'}, 'o_mnie': {'type': 'string', 'maxLength': 3000, 'description': '“About me” in the first person; two versions in tags <pl>…</pl><en>…</en>. Omit to only read.'}}, 'additionalProperties': False}
Eingabeschema
{'type': 'object', 'properties': {'slug': {'type': 'string', 'description': 'Game address in the catalogue, for example lantern-thief (from klyo_my_games).'}, 'upload_id': {'type': 'string', 'description': 'Package in the waiting room that never became a game (from klyo_upload_package or klyo_my_games → paczki).'}}, 'additionalProperties': False}
Eingabeschema
{'type': 'object', 'properties': {'pola': {'type': 'object', 'properties': {'etap': {'enum': ['w_budowie', 'demo', 'gotowa'], 'type': 'string', 'description': '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.'}, 'opis': {'type': 'string', 'maxLength': 4000, 'description': '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.'}, 'seks': {'type': 'boolean', 'description': 'Legacy field: Nudity, sexual or suggestive content. Prefer the `ankieta` object with all the questions.'}, 'haslo': {'type': 'string', 'maxLength': 900, 'description': '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`).'}, 'nazwa': {'type': 'string', 'maxLength': 400, 'description': "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."}, 'uklad': {'enum': ['poziom', 'pion', 'oba'], 'type': 'string', 'description': 'Game layout: `poziom` = landscape (like a computer screen), `pion` = portrait (like a phone) or `oba` = both, the game adapts when the screen rotates.'}, 'strach': {'type': 'boolean', 'description': 'Legacy field: Scenes that may frighten children. Prefer the `ankieta` object with all the questions.'}, 'etap_dni': {'enum': [7, 30], 'type': 'integer', 'description': '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.'}, 'nastroje': {'type': 'string', 'description': '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.'}, 'jezyki_ui': {'type': 'array', 'items': {'enum': ['aa', 'ab', 'ae', 'af', 'ak', 'am', 'an', 'ar', 'as', 'av', 'ay', 'az', 'ba', 'be', 'bg', 'bh', 'bi', 'bm', 'bn', 'bo', 'br', 'bs', 'ca', 'ce', 'ch', 'co', 'cr', 'cs', 'cu', 'cv', 'cy', 'da', 'de', 'dv', 'dz', 'ee', 'el', 'en', 'eo', 'es', 'et', 'eu', 'fa', 'ff', 'fi', 'fj', 'fo', 'fr', 'fy', 'ga', 'gd', 'gl', 'gn', 'gu', 'gv', 'ha', 'he', 'hi', 'ho', 'hr', 'ht', 'hu', 'hy', 'hz', 'ia', 'id', 'ie', 'ig', 'ii', 'ik', 'in', 'io', 'is', 'it', 'iu', 'iw', 'ja', 'ji', 'jv', 'jw', 'ka', 'kg', 'ki', 'kj', 'kk', 'kl', 'km', 'kn', 'ko', 'kr', 'ks', 'ku', 'kv', 'kw', 'ky', 'la', 'lb', 'lg', 'li', 'ln', 'lo', 'lt', 'lu', 'lv', 'mg', 'mh', 'mi', 'mk', 'ml', 'mn', 'mo', 'mr', 'ms', 'mt', 'my', 'na', 'nb', 'nd', 'ne', 'ng', 'nl', 'nn', 'no', 'nr', 'nv', 'ny', 'oc', 'oj', 'om', 'or', 'os', 'pa', 'pi', 'pl', 'ps', 'pt', 'qu', 'rm', 'rn', 'ro', 'ru', 'rw', 'sa', 'sc', 'sd', 'se', 'sg', 'sh', 'si', 'sk', 'sl', 'sm', 'sn', 'so', 'sq', 'sr', 'ss', 'st', 'su', 'sv', 'sw', 'ta', 'te', 'tg', 'th', 'ti', 'tk', 'tl', 'tn', 'to', 'tr', 'ts', 'tt', 'tw', 'ty', 'ug', 'uk', 'ur', 'uz', 've', 'vi', 'vo', 'wa', 'wo', 'xh', 'yi', 'yo', 'za', 'zh', 'zu', 'bez-tekstu'], 'type': 'string'}, 'description': '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.'}, 'kategoria': {'type': 'string', 'description': '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.'}, 'wynik_max': {'type': 'integer', 'minimum': 1, 'description': '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.'}, 'sklep_play': {'type': 'string', 'maxLength': 300, 'description': '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.'}, 'wulgaryzmy': {'type': 'boolean', 'description': 'Legacy field: Strong or offensive language. Prefer the `ankieta` object with all the questions.'}, 'czas_partii': {'type': 'string', 'maxLength': 40, 'description': 'How long one round takes (“2-5 minutes”), in the `jezyk_tekstu` language.'}, 'sklep_apple': {'type': 'string', 'maxLength': 300, 'description': 'Address of the same game in the App Store (https://apps.apple.com/…), if it is also an iPhone app.'}, 'jezyk_tekstu': {'enum': ['pl', 'en', 'de', 'fr', 'es', 'pt', 'it', 'ru', 'uk', 'tr'], 'type': 'string', 'description': "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."}, 'sterowanie_dotyk': {'type': 'string', 'maxLength': 300, 'description': 'How to play ON A PHONE, short and concrete (“swipe across the screen”), in the `jezyk_tekstu` language.'}, 'przemoc_rysunkowa': {'type': 'boolean', 'description': 'Legacy field: Cartoon or abstract violence, no blood. Prefer the `ankieta` object with all the questions.'}, 'przemoc_realistyczna': {'type': 'boolean', 'description': 'Legacy field: Realistic violence, blood or cruelty. Prefer the `ankieta` object with all the questions.'}, 'sterowanie_klawiatura': {'type': 'string', 'maxLength': 300, 'description': 'How to play ON A COMPUTER (“arrow keys and space”), in the `jezyk_tekstu` language.'}}, 'description': 'Fields to type in; omit to see what the form needs.', 'additionalProperties': False}}, 'additionalProperties': False}
Eingabeschema
{'type': 'object', 'required': ['slug'], 'properties': {'etap': {'enum': ['w_budowie', 'demo', 'gotowa'], 'type': 'string', 'description': '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.'}, 'opis': {'type': 'string', 'maxLength': 4000, 'description': '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.'}, 'seks': {'type': 'boolean', 'description': 'Legacy field: Nudity, sexual or suggestive content. Prefer the `ankieta` object with all the questions.'}, 'slug': {'type': 'string', 'description': 'Game address on the account, for example lantern-thief (from klyo_my_games).'}, 'tagi': {'type': 'string', 'description': '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.'}, 'haslo': {'type': 'string', 'maxLength': 900, 'description': '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`).'}, 'nazwa': {'type': 'string', 'maxLength': 400, 'description': "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."}, 'uklad': {'enum': ['poziom', 'pion', 'oba'], 'type': 'string', 'description': 'Game layout: `poziom` = landscape (like a computer screen), `pion` = portrait (like a phone) or `oba` = both, the game adapts when the screen rotates.'}, 'strach': {'type': 'boolean', 'description': 'Legacy field: Scenes that may frighten children. Prefer the `ankieta` object with all the questions.'}, 'ankieta': {'type': 'object', 'required': ['przemoc_rysunkowa', 'przemoc_realistyczna', 'strach', 'wulgaryzmy', 'seks', 'uzywki', 'hazard', 'interakcje', 'zakupy', 'lokalizacja'], 'properties': {'seks': {'type': 'boolean', 'description': 'Nudity, sexual or suggestive content'}, 'hazard': {'type': 'boolean', 'description': 'Gambling, loot boxes or simulated gambling'}, 'strach': {'type': 'boolean', 'description': 'Scenes that may frighten children'}, 'uzywki': {'type': 'boolean', 'description': 'Alcohol, tobacco or drugs'}, 'zakupy': {'type': 'boolean', 'description': 'In-game purchases'}, 'interakcje': {'type': 'boolean', 'description': 'Chat or interaction with other players'}, 'wulgaryzmy': {'type': 'boolean', 'description': 'Strong or offensive language'}, 'lokalizacja': {'type': 'boolean', 'description': 'The game asks for location, camera or microphone'}, 'przemoc_rysunkowa': {'type': 'boolean', 'description': 'Cartoon or abstract violence, no blood'}, 'przemoc_realistyczna': {'type': 'boolean', 'description': 'Realistic violence, blood or cruelty'}}, 'description': '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. Give all of them when you change it.', 'additionalProperties': False}, 'etap_dni': {'enum': [7, 30], 'type': 'integer', 'description': '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.'}, 'nastroje': {'type': 'string', 'description': '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.'}, 'wiek_min': {'enum': [3, 7, 12, 16, 18], 'type': 'integer', 'description': '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.'}, 'jezyki_ui': {'type': 'array', 'items': {'enum': ['aa', 'ab', 'ae', 'af', 'ak', 'am', 'an', 'ar', 'as', 'av', 'ay', 'az', 'ba', 'be', 'bg', 'bh', 'bi', 'bm', 'bn', 'bo', 'br', 'bs', 'ca', 'ce', 'ch', 'co', 'cr', 'cs', 'cu', 'cv', 'cy', 'da', 'de', 'dv', 'dz', 'ee', 'el', 'en', 'eo', 'es', 'et', 'eu', 'fa', 'ff', 'fi', 'fj', 'fo', 'fr', 'fy', 'ga', 'gd', 'gl', 'gn', 'gu', 'gv', 'ha', 'he', 'hi', 'ho', 'hr', 'ht', 'hu', 'hy', 'hz', 'ia', 'id', 'ie', 'ig', 'ii', 'ik', 'in', 'io', 'is', 'it', 'iu', 'iw', 'ja', 'ji', 'jv', 'jw', 'ka', 'kg', 'ki', 'kj', 'kk', 'kl', 'km', 'kn', 'ko', 'kr', 'ks', 'ku', 'kv', 'kw', 'ky', 'la', 'lb', 'lg', 'li', 'ln', 'lo', 'lt', 'lu', 'lv', 'mg', 'mh', 'mi', 'mk', 'ml', 'mn', 'mo', 'mr', 'ms', 'mt', 'my', 'na', 'nb', 'nd', 'ne', 'ng', 'nl', 'nn', 'no', 'nr', 'nv', 'ny', 'oc', 'oj', 'om', 'or', 'os', 'pa', 'pi', 'pl', 'ps', 'pt', 'qu', 'rm', 'rn', 'ro', 'ru', 'rw', 'sa', 'sc', 'sd', 'se', 'sg', 'sh', 'si', 'sk', 'sl', 'sm', 'sn', 'so', 'sq', 'sr', 'ss', 'st', 'su', 'sv', 'sw', 'ta', 'te', 'tg', 'th', 'ti', 'tk', 'tl', 'tn', 'to', 'tr', 'ts', 'tt', 'tw', 'ty', 'ug', 'uk', 'ur', 'uz', 've', 'vi', 'vo', 'wa', 'wo', 'xh', 'yi', 'yo', 'za', 'zh', 'zu', 'bez-tekstu'], 'type': 'string'}, 'description': '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.'}, 'kategoria': {'type': 'string', 'description': '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.'}, 'wynik_max': {'type': 'integer', 'minimum': 1, 'description': '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.'}, 'sklep_play': {'type': 'string', 'maxLength': 300, 'description': '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.'}, 'wulgaryzmy': {'type': 'boolean', 'description': 'Legacy field: Strong or offensive language. Prefer the `ankieta` object with all the questions.'}, 'czas_partii': {'type': 'string', 'maxLength': 40, 'description': 'How long one round takes (“2-5 minutes”), in the `jezyk_tekstu` language.'}, 'sklep_apple': {'type': 'string', 'maxLength': 300, 'description': 'Address of the same game in the App Store (https://apps.apple.com/…), if it is also an iPhone app.'}, 'jezyk_tekstu': {'enum': ['pl', 'en', 'de', 'fr', 'es', 'pt', 'it', 'ru', 'uk', 'tr'], 'type': 'string', 'description': "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."}, 'uklad_pionowy': {'type': 'boolean', 'description': 'Legacy field: true = portrait game. Prefer `uklad`.'}, 'sterowanie_dotyk': {'type': 'string', 'maxLength': 300, 'description': 'How to play ON A PHONE, short and concrete (“swipe across the screen”), in the `jezyk_tekstu` language.'}, 'przemoc_rysunkowa': {'type': 'boolean', 'description': 'Legacy field: Cartoon or abstract violence, no blood. Prefer the `ankieta` object with all the questions.'}, 'przemoc_realistyczna': {'type': 'boolean', 'description': 'Legacy field: Realistic violence, blood or cruelty. Prefer the `ankieta` object with all the questions.'}, 'sterowanie_klawiatura': {'type': 'string', 'maxLength': 300, 'description': 'How to play ON A COMPUTER (“arrow keys and space”), in the `jezyk_tekstu` language.'}}, 'additionalProperties': False}
Eingabeschema
{'type': 'object', 'required': ['slug'], 'properties': {'slug': {'type': 'string', 'description': 'Game address on the account, for example lantern-thief (from klyo_my_games).'}, 'klatka': {'type': 'integer', 'description': 'Number of the frame to set. OMIT it to get the list of frames to choose from first.'}}, 'additionalProperties': False}
Eingabeschema
{'type': 'object', 'properties': {'slug': {'type': 'string', 'description': 'Game address in the catalogue, for example lantern-thief (from klyo_my_games).'}, 'pelny': {'type': 'boolean', '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.'}, 'sesja': {'type': 'string', 'description': '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.'}, 'jezyki': {'type': 'array', 'items': {'type': 'string'}, 'maxItems': 12, '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`.'}, 'zmierz': {'type': 'boolean', '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 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_id': {'type': 'string', 'description': 'ID of a package in the waiting room (from the upload response or from the preview).'}}, 'additionalProperties': False}
Eingabeschema
{'type': 'object', 'properties': {'path': {'type': 'string', 'maxLength': 300, 'description': 'File to read, relative to the game, for example js/gra.js. Without this field you get the file list.'}, 'slug': {'type': 'string', 'description': 'Game address, for example lantern-thief (from klyo_my_games). Give this or `upload_id`.'}, 'lines': {'type': 'integer', 'maximum': 100000, 'minimum': 1, 'description': 'Maximum number of lines (reading stops at 200 KB anyway).'}, 'changes': {'type': 'boolean', 'description': 'Together with the list: what changed in the waiting version compared with the version players have.'}, 'from_line': {'type': 'integer', 'minimum': 1, 'description': 'Line to start reading from (default 1).'}, 'upload_id': {'type': 'string', 'description': 'A waiting-room package (from klyo_upload_package), when there is no game yet.'}}, 'additionalProperties': False}
Eingabeschema
{'type': 'object', 'required': [], 'properties': {'nowa': {'enum': ['plansza', 'zrecznosciowa', 'logiczna'], 'type': 'string', 'description': 'A game from scratch, without a ZIP: in the same call a package is created from the Klyo Kit skeleton (as in klyo_game_scaffold) and `edits` change it right away (you overwrite skeleton files without `expected_hash`). The response carries `upload_id` for the next calls. Instead of `slug` and `upload_id`. Values: `plansza` (board game with turns), `zrecznosciowa` (arcade), `logiczna` (puzzle).'}, 'slug': {'type': 'string', 'description': 'Game address (from klyo_my_games). Give this or `upload_id`.'}, 'edits': {'type': 'array', 'items': {'type': 'object', 'required': ['path'], 'properties': {'path': {'type': 'string', 'maxLength': 300, 'description': 'A text file relative to the game, for example js/gra.js.'}, 'delete': {'type': 'boolean', 'description': 'Delete the file (index.html always stays).'}, 'content': {'type': 'string', 'description': 'The whole new content of the file (a replacement or a new file).'}, 'new_string': {'type': 'string', 'description': 'The new fragment in place of `old_string`.'}, 'old_string': {'type': 'string', 'description': 'The exact fragment to replace (every character, including spaces and line ends).'}, 'from_upload': {'type': 'string', 'description': 'An image, sound, font or large file (up to 20 MB) sent with the ticket from klyo_upload_package: give its `upload_id` and it lands at `path`. The file signature must match the extension; the upload expires after use. No base64.'}, 'replace_all': {'type': 'boolean', 'description': 'Replace every occurrence of `old_string`, not just one.'}, 'expected_hash': {'type': 'string', 'description': '`hash` from klyo_game_files. Required when the file exists; omit when creating a new file.'}}, 'additionalProperties': False}, 'maxItems': 20, 'minItems': 1, 'description': 'Changes; applied all or none. Each: `path` and one of three: `old_string` with `new_string`, `content` or `delete: true`.'}, 'revert': {'type': 'string', 'maxLength': 40, 'description': 'Return the workshop to a checkpoint (`auto-N` from an edit response or a name from `checkpoint`; the list is in klyo_game_files). Stands alone, without `edits`. The state before the revert is saved as a checkpoint too. Players see nothing: this is not a release rollback.'}, 'discard': {'type': 'boolean', 'description': 'Abandon the workshop: the game loses the waiting version from the workshop (the version players have is untouched), a package returns to the files from its ZIP. Stands alone, without `edits`.'}, 'upload_id': {'type': 'string', 'description': 'A waiting-room package, when there is no game yet; klyo_publish_game later releases it with these edits.'}, 'checkpoint': {'type': 'string', 'maxLength': 40, 'description': 'A named workshop checkpoint (for example premium-ui-v1): a snapshot of the state BEFORE the changes of this call; may stand alone, without `edits`. An automatic `auto-N` checkpoint is created before every edit anyway.'}}, 'additionalProperties': False}
Eingabeschema
{'type': 'object', 'properties': {'slug': {'type': 'string', 'maxLength': 80, 'description': "Your game's address (from klyo_my_games). Give this or `upload_id`."}, 'close': {'type': 'boolean', 'description': "End the session and close the game on the owner's device."}, 'steps': {'type': 'array', 'items': {'type': 'object', 'required': ['type'], 'properties': {'x': {'type': 'number', 'maximum': 1, 'minimum': 0, 'description': 'Horizontal position, 0 = left edge of the game view, 1 = right edge.'}, 'y': {'type': 'number', 'maximum': 1, 'minimum': 0, 'description': 'Vertical position, 0 = top, 1 = bottom.'}, 'dx': {'type': 'integer', 'maximum': 4000, 'minimum': -4000, 'description': 'Relative mouse movement in CSS px (move) or scroll (wheel uses dy).'}, 'dy': {'type': 'integer', 'maximum': 4000, 'minimum': -4000}, 'ms': {'type': 'integer', 'maximum': 3000, 'minimum': 0, 'description': 'Duration of drag, move or wait.'}, 'key': {'type': 'string', 'maxLength': 24, 'description': 'KeyW, ArrowUp, Space, Enter, ShiftLeft or one character.'}, 'to_x': {'type': 'number', 'maximum': 1, 'minimum': 0, 'description': 'Drag end, horizontal.'}, 'to_y': {'type': 'number', 'maximum': 1, 'minimum': 0, 'description': 'Drag end, vertical.'}, 'type': {'enum': ['key', 'click', 'tap', 'drag', 'move', 'wheel', 'wait', 'screenshot'], 'type': 'string'}, 'at_ms': {'type': 'integer', 'maximum': 3000, 'minimum': 0, 'description': 'Start on the timeline, for steps in parallel.'}, 'count': {'enum': [1, 2], 'type': 'integer'}, 'button': {'enum': ['left', 'right', 'middle'], 'type': 'string'}, 'hold_ms': {'type': 'integer', 'maximum': 3000, 'minimum': 0, 'description': 'How long the key stays down (default 80).'}, 'pointer': {'enum': ['auto', 'mouse', 'touch'], 'type': 'string'}}, 'additionalProperties': False}, 'maxItems': 40, 'description': 'Input on one timeline of at most 3000 ms. Without `at_ms` a step starts when the previous one ends.'}, 'device': {'type': 'string', 'maxLength': 40, 'description': "Which of the owner's devices (`urzadzenie.id` from an earlier answer); default: the most recently switched on."}, 'screen': {'enum': ['device', 'phone_portrait', 'phone_landscape', 'tablet', 'desktop'], 'type': 'string', 'description': "Size of the game view on the owner's device (default: the whole device screen)."}, 'restart': {'type': 'boolean', 'description': 'Reload the game before the steps.'}, 'upload_id': {'type': 'string', 'maxLength': 80, 'description': 'A waiting-room package, when there is no game yet.'}, 'request_id': {'type': 'string', 'maxLength': 64, 'description': 'Your id for this call: a retry with the same id returns the same result without playing again.'}, 'screenshots': {'type': 'integer', 'maximum': 4, 'minimum': 0, 'description': 'Screenshots taken after the steps (default 1 when there is no screenshot step).'}}, 'additionalProperties': False}
Eingabeschema
{'type': 'object', 'properties': {}, 'additionalProperties': False}
Eingabeschema
{'type': 'object', 'properties': {'rodzaj': {'enum': ['plansza', 'zrecznosciowa', 'logiczna'], 'type': 'string', 'description': 'Shape of the game: `plansza` = board game with turns (solo against minimax, on one device, online); `zrecznosciowa` = arcade, a real-time loop steered by finger or keys; `logiczna` (default) = puzzle, taps on targets and a score.'}}, 'additionalProperties': False}
Eingabeschema
{'type': 'object', 'properties': {}, 'additionalProperties': False}
Eingabeschema
{'type': 'object', 'required': ['slug'], 'properties': {'dni': {'type': 'integer', 'maximum': 365, 'minimum': 1, 'description': 'How many days of the daily series (default 30).'}, 'slug': {'type': 'string', 'description': 'Game address in the catalogue, for example lantern-thief (from klyo_my_games).'}, 'sprawdz_google': {'type': 'boolean', 'description': "Ask Google about this game's pages now (URL Inspection), at most once an hour per game. Each page then carries `sprawdzono` (when we asked) and `odwiedziny` (Google's last crawl). Google has no API to request indexing of an ordinary page: the sitemap already submits it, and the Request indexing button lives in Search Console."}}, 'additionalProperties': False}
Eingabeschema
{'type': 'object', 'required': ['slug'], 'properties': {'slug': {'type': 'string', 'description': 'Game address, for example lantern-thief (from klyo_my_games).'}, 'tlumaczenia': {'type': 'object', 'description': 'Omit to see what to translate. When saving: language code (pl, en, de, fr, es, pt, it, ru, uk, tr) → an object with ALL the fields from `oryginal` (nazwa, haslo, opis, sterowanie_dotyk, sterowanie_klawiatura, czas_partii; only those the game has).', 'additionalProperties': {'type': 'object', 'additionalProperties': {'type': 'string', 'maxLength': 4000}}}}, 'additionalProperties': False}
Eingabeschema
{'type': 'object', 'properties': {}, 'additionalProperties': False}
Eingabeschema
{'type': 'object', 'required': ['nazwa', 'haslo', 'opis', 'kategoria', 'jezyk_tekstu', 'ankieta', 'bez_porno'], 'properties': {'etap': {'enum': ['w_budowie', 'demo', 'gotowa'], 'type': 'string', 'description': '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.'}, 'opis': {'type': 'string', 'maxLength': 4000, 'description': '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.'}, 'seks': {'type': 'boolean', 'description': 'Legacy field: Nudity, sexual or suggestive content. Prefer the `ankieta` object with all the questions.'}, 'tagi': {'type': 'string', 'description': '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.'}, 'haslo': {'type': 'string', 'maxLength': 900, 'description': '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`).'}, 'nazwa': {'type': 'string', 'maxLength': 400, 'description': "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."}, 'uklad': {'enum': ['poziom', 'pion', 'oba'], 'type': 'string', 'description': 'Game layout: `poziom` = landscape (like a computer screen), `pion` = portrait (like a phone) or `oba` = both, the game adapts when the screen rotates.'}, 'strach': {'type': 'boolean', 'description': 'Legacy field: Scenes that may frighten children. Prefer the `ankieta` object with all the questions.'}, 'ankieta': {'type': 'object', 'required': ['przemoc_rysunkowa', 'przemoc_realistyczna', 'strach', 'wulgaryzmy', 'seks', 'uzywki', 'hazard', 'interakcje', 'zakupy', 'lokalizacja'], 'properties': {'seks': {'type': 'boolean', 'description': 'Nudity, sexual or suggestive content'}, 'hazard': {'type': 'boolean', 'description': 'Gambling, loot boxes or simulated gambling'}, 'strach': {'type': 'boolean', 'description': 'Scenes that may frighten children'}, 'uzywki': {'type': 'boolean', 'description': 'Alcohol, tobacco or drugs'}, 'zakupy': {'type': 'boolean', 'description': 'In-game purchases'}, 'interakcje': {'type': 'boolean', 'description': 'Chat or interaction with other players'}, 'wulgaryzmy': {'type': 'boolean', 'description': 'Strong or offensive language'}, 'lokalizacja': {'type': 'boolean', 'description': 'The game asks for location, camera or microphone'}, 'przemoc_rysunkowa': {'type': 'boolean', 'description': 'Cartoon or abstract violence, no blood'}, 'przemoc_realistyczna': {'type': 'boolean', 'description': 'Realistic violence, blood or cruelty'}}, 'description': '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.', 'additionalProperties': False}, 'zip_url': {'type': 'string', 'description': '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.'}, 'etap_dni': {'enum': [7, 30], 'type': 'integer', 'description': '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.'}, 'nastroje': {'type': 'string', 'description': '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.'}, 'przeglad': {'type': 'object', 'required': ['grafika', 'animacja', 'dzwiek', 'informacja_zwrotna', 'motyw', 'jezyki', 'online'], 'properties': {'motyw': {'type': 'object', 'required': ['stan', 'dowod'], 'properties': {'stan': {'enum': ['pass'], 'type': 'string'}, 'dowod': {'type': 'string', 'maxLength': 400, 'minLength': 20, 'description': 'What exactly was done: file, function, what is visible on screen.'}}, 'description': 'PASS means: Light and dark variant following prefers-color-scheme plus a switch in the settings; both checked on screenshots.', 'additionalProperties': False}, 'dzwiek': {'type': 'object', 'required': ['stan', 'dowod'], 'properties': {'stan': {'enum': ['pass'], 'type': 'string'}, 'dowod': {'type': 'string', 'maxLength': 400, 'minLength': 20, 'description': 'What exactly was done: file, function, what is visible on screen.'}}, 'description': 'PASS means: Sound for every player action and every result (tap, error, win), mute in the settings, resumes after returning from the background.', 'additionalProperties': False}, 'jezyki': {'type': 'object', 'required': ['stan', 'dowod'], 'properties': {'stan': {'enum': ['pass', 'nie_dotyczy'], 'type': 'string'}, 'dowod': {'type': 'string', 'maxLength': 400, 'minLength': 20, 'description': 'What exactly was done: file, function, what is visible on screen.'}}, '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.', 'additionalProperties': False}, 'online': {'type': 'object', 'required': ['stan', 'dowod'], 'properties': {'stan': {'enum': ['pass', 'nie_dotyczy'], 'type': 'string'}, 'dowod': {'type': 'string', 'maxLength': 400, 'minLength': 20, 'description': 'What exactly was done: file, function, what is visible on screen.'}}, '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.', 'additionalProperties': False}, 'grafika': {'type': 'object', 'required': ['stan', 'dowod'], 'properties': {'stan': {'enum': ['pass'], 'type': 'string'}, 'dowod': {'type': 'string', 'maxLength': 400, 'minLength': 20, 'description': 'What exactly was done: file, function, what is visible on screen.'}}, '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.', 'additionalProperties': False}, 'animacja': {'type': 'object', 'required': ['stan', 'dowod'], 'properties': {'stan': {'enum': ['pass'], 'type': 'string'}, 'dowod': {'type': 'string', 'maxLength': 400, 'minLength': 20, 'description': 'What exactly was done: file, function, what is visible on screen.'}}, '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.', 'additionalProperties': False}, 'informacja_zwrotna': {'type': 'object', 'required': ['stan', 'dowod'], 'properties': {'stan': {'enum': ['pass'], 'type': 'string'}, 'dowod': {'type': 'string', 'maxLength': 400, 'minLength': 20, 'description': 'What exactly was done: file, function, what is visible on screen.'}}, '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.', '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”.', 'additionalProperties': False}, 'wiek_min': {'enum': [3, 7, 12, 16, 18], 'type': 'integer', 'description': '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.'}, 'bez_porno': {'type': 'boolean', 'description': '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.'}, 'jezyki_ui': {'type': 'array', 'items': {'enum': ['aa', 'ab', 'ae', 'af', 'ak', 'am', 'an', 'ar', 'as', 'av', 'ay', 'az', 'ba', 'be', 'bg', 'bh', 'bi', 'bm', 'bn', 'bo', 'br', 'bs', 'ca', 'ce', 'ch', 'co', 'cr', 'cs', 'cu', 'cv', 'cy', 'da', 'de', 'dv', 'dz', 'ee', 'el', 'en', 'eo', 'es', 'et', 'eu', 'fa', 'ff', 'fi', 'fj', 'fo', 'fr', 'fy', 'ga', 'gd', 'gl', 'gn', 'gu', 'gv', 'ha', 'he', 'hi', 'ho', 'hr', 'ht', 'hu', 'hy', 'hz', 'ia', 'id', 'ie', 'ig', 'ii', 'ik', 'in', 'io', 'is', 'it', 'iu', 'iw', 'ja', 'ji', 'jv', 'jw', 'ka', 'kg', 'ki', 'kj', 'kk', 'kl', 'km', 'kn', 'ko', 'kr', 'ks', 'ku', 'kv', 'kw', 'ky', 'la', 'lb', 'lg', 'li', 'ln', 'lo', 'lt', 'lu', 'lv', 'mg', 'mh', 'mi', 'mk', 'ml', 'mn', 'mo', 'mr', 'ms', 'mt', 'my', 'na', 'nb', 'nd', 'ne', 'ng', 'nl', 'nn', 'no', 'nr', 'nv', 'ny', 'oc', 'oj', 'om', 'or', 'os', 'pa', 'pi', 'pl', 'ps', 'pt', 'qu', 'rm', 'rn', 'ro', 'ru', 'rw', 'sa', 'sc', 'sd', 'se', 'sg', 'sh', 'si', 'sk', 'sl', 'sm', 'sn', 'so', 'sq', 'sr', 'ss', 'st', 'su', 'sv', 'sw', 'ta', 'te', 'tg', 'th', 'ti', 'tk', 'tl', 'tn', 'to', 'tr', 'ts', 'tt', 'tw', 'ty', 'ug', 'uk', 'ur', 'uz', 've', 'vi', 'vo', 'wa', 'wo', 'xh', 'yi', 'yo', 'za', 'zh', 'zu', 'bez-tekstu'], 'type': 'string'}, 'description': '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.'}, 'kategoria': {'type': 'string', 'description': '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.'}, 'upload_id': {'type': 'string', 'description': '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.'}, 'wynik_max': {'type': 'integer', 'minimum': 1, 'description': '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.'}, 'sklep_play': {'type': 'string', 'maxLength': 300, 'description': '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.'}, 'wulgaryzmy': {'type': 'boolean', 'description': 'Legacy field: Strong or offensive language. Prefer the `ankieta` object with all the questions.'}, 'czas_partii': {'type': 'string', 'maxLength': 40, 'description': 'How long one round takes (“2-5 minutes”), in the `jezyk_tekstu` language.'}, 'sklep_apple': {'type': 'string', 'maxLength': 300, 'description': 'Address of the same game in the App Store (https://apps.apple.com/…), if it is also an iPhone app.'}, 'jezyk_tekstu': {'enum': ['pl', 'en', 'de', 'fr', 'es', 'pt', 'it', 'ru', 'uk', 'tr'], 'type': 'string', 'description': "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."}, 'uklad_pionowy': {'type': 'boolean', 'description': 'Legacy field: true = portrait game. Prefer `uklad`.'}, 'sterowanie_dotyk': {'type': 'string', 'maxLength': 300, 'description': 'How to play ON A PHONE, short and concrete (“swipe across the screen”), in the `jezyk_tekstu` language.'}, 'przemoc_rysunkowa': {'type': 'boolean', 'description': 'Legacy field: Cartoon or abstract violence, no blood. Prefer the `ankieta` object with all the questions.'}, 'przemoc_realistyczna': {'type': 'boolean', 'description': 'Legacy field: Realistic violence, blood or cruelty. Prefer the `ankieta` object with all the questions.'}, 'sterowanie_klawiatura': {'type': 'string', 'maxLength': 300, 'description': 'How to play ON A COMPUTER (“arrow keys and space”), in the `jezyk_tekstu` language.'}}, 'additionalProperties': False}
Eingabeschema
{'type': 'object', 'required': ['slug'], 'properties': {'slug': {'type': 'string', 'description': 'Game address in the catalogue (from klyo_my_games).'}}, 'additionalProperties': False}
Eingabeschema
{'type': 'object', 'required': ['slug'], 'properties': {'slug': {'type': 'string', 'description': 'Game address on the account, for example lantern-thief (from klyo_my_games).'}, 'nowosc': {'type': 'string', 'maxLength': 140, 'description': 'What is new: one sentence for the clip card in the feed. Only with `funkcja`.'}, 'zmiana': {'enum': ['interfejs', 'funkcja', 'poprawka'], 'type': 'string', 'description': 'Kind of change: `poprawka` = fix (the clip stays) | `funkcja` = feature (the clip stays, `nowosc` goes to the feed) | `interfejs` = interface (the old clip is taken down until a new one is recorded). Omitted = the kind measured from the files (`podpowiedz` from klyo_update_game).'}, 'przeglad': {'type': 'object', 'required': ['grafika', 'animacja', 'dzwiek', 'informacja_zwrotna', 'motyw', 'jezyki', 'online'], 'properties': {'motyw': {'type': 'object', 'required': ['stan', 'dowod'], 'properties': {'stan': {'enum': ['pass'], 'type': 'string'}, 'dowod': {'type': 'string', 'maxLength': 400, 'minLength': 20, 'description': 'What exactly was done: file, function, what is visible on screen.'}}, 'description': 'PASS means: Light and dark variant following prefers-color-scheme plus a switch in the settings; both checked on screenshots.', 'additionalProperties': False}, 'dzwiek': {'type': 'object', 'required': ['stan', 'dowod'], 'properties': {'stan': {'enum': ['pass'], 'type': 'string'}, 'dowod': {'type': 'string', 'maxLength': 400, 'minLength': 20, 'description': 'What exactly was done: file, function, what is visible on screen.'}}, 'description': 'PASS means: Sound for every player action and every result (tap, error, win), mute in the settings, resumes after returning from the background.', 'additionalProperties': False}, 'jezyki': {'type': 'object', 'required': ['stan', 'dowod'], 'properties': {'stan': {'enum': ['pass', 'nie_dotyczy'], 'type': 'string'}, 'dowod': {'type': 'string', 'maxLength': 400, 'minLength': 20, 'description': 'What exactly was done: file, function, what is visible on screen.'}}, '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.', 'additionalProperties': False}, 'online': {'type': 'object', 'required': ['stan', 'dowod'], 'properties': {'stan': {'enum': ['pass', 'nie_dotyczy'], 'type': 'string'}, 'dowod': {'type': 'string', 'maxLength': 400, 'minLength': 20, 'description': 'What exactly was done: file, function, what is visible on screen.'}}, '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.', 'additionalProperties': False}, 'grafika': {'type': 'object', 'required': ['stan', 'dowod'], 'properties': {'stan': {'enum': ['pass'], 'type': 'string'}, 'dowod': {'type': 'string', 'maxLength': 400, 'minLength': 20, 'description': 'What exactly was done: file, function, what is visible on screen.'}}, '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.', 'additionalProperties': False}, 'animacja': {'type': 'object', 'required': ['stan', 'dowod'], 'properties': {'stan': {'enum': ['pass'], 'type': 'string'}, 'dowod': {'type': 'string', 'maxLength': 400, 'minLength': 20, 'description': 'What exactly was done: file, function, what is visible on screen.'}}, '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.', 'additionalProperties': False}, 'informacja_zwrotna': {'type': 'object', 'required': ['stan', 'dowod'], 'properties': {'stan': {'enum': ['pass'], 'type': 'string'}, 'dowod': {'type': 'string', 'maxLength': 400, 'minLength': 20, 'description': 'What exactly was done: file, function, what is visible on screen.'}}, '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.', 'additionalProperties': False}}, 'description': 'Premium quality review, seven points with evidence. Required unless `zmiana` is `poprawka` (a fix). The server does not judge taste; it matches the declaration against traces in the code and shows it to the owner before “Release”.', 'additionalProperties': False}}, 'additionalProperties': False}
Eingabeschema
{'type': 'object', 'properties': {}, 'additionalProperties': False}
Eingabeschema
{'type': 'object', 'required': ['slug'], 'properties': {'slug': {'type': 'string', 'description': 'Game address on the account, for example lantern-thief (from klyo_my_games).'}, 'zip_url': {'type': 'string', 'description': 'Public https address of the NEW ZIP package. Only when the package really is online.'}, 'upload_id': {'type': 'string', 'description': 'ID of the NEW package sent to klyo (see klyo_upload_package). Preferred when the file is on disk.'}}, 'additionalProperties': False}
Eingabeschema
{'type': 'object', 'properties': {}, 'additionalProperties': False}
Letzte Tool-Änderungen
Ähnliche MCP-Server
GripForge
Generates, rigs, animates, analyzes, and packages game characters, weapons, armor, effects, environments, and engine-ready assets.
spriteship
Generates and manages 2D game characters, assets, animations, tilesets, UI packs, maps, and engine-ready exports for multiple gam…
3DAssets.dev
Searches and delivers free CC0 GLB models and game asset packs, with licensing details, CDN links, scene layouts, and loader usag…
YouGame
Supports browser game documentation, build validation, multiplayer testing, staged uploads, publishing, updates, and remixes for …
AXIS Avatar Foundry
Generates, repairs, rigs, validates, retargets, compares, and exports production-ready 3D avatars and meshes for game platforms.
Agent Arcade
Provides contracts and workflows for creating, testing, certifying, publishing, and releasing server-authoritative AI-native game…
steamwebapi
Documents and executes read-only Steam and third-party game-market API endpoints, including product, inventory, pricing, and mark…
Agent Arcade Protocol 5
Provides protocol flows and validation tools for AI game creation, publishing, certification, release management, and feedback.