Skip to main content
Glama

klyo games: publish HTML5 browser games

Server Details

Publish HTML5 browser games from your AI assistant: own address, live stats, 70% ad share.

If you are the author of this connector, you can claim ownership by verifying the domain or GitHub account it belongs to. Claimed connector authors can inspect health checks, view analytics, and manage their listing.
Status
Healthy
Uptime
35.3% over 23 days
OAuth
Works in Glama
Last Tested
Transport
Streamable HTTP · MCP 2025-11-25
URL
Repository
krastranseu-lang/klyo-games-mcp
GitHub Stars
0

TDQS

A4.1/5.0

Scored across 22 tools

Disambiguation4/5

Tools are mostly distinct and descriptions actively differentiate overlapping ones (e.g. klyo_fix_game vs klyo_game_patch vs klyo_update_game, and klyo_publish_game vs klyo_update_game). The read-only doc trio klyo_game_requirements / klyo_game_scaffold / klyo_game_sdk is the closest overlap, but each covers a different artifact (contract, skeleton, runtime API). An agent should be able to route correctly with minimal confusion.

Naming Consistency4/5

Every tool uses the klyo_ prefix in consistent snake_case, which gives a predictable namespace. There is mild mixing of verb_noun (add_post, delete_game, update_game) and noun-only (game_sdk, game_stats, status, creator_card), but all remain readable and clearly grouped. No chaotic style clashes.

Tool Count4/5

22 tools is on the heavy side, but the domain genuinely spans distinct phases (produce, upload, patch, preview/play, diagnose, publish/update, release/rollback, translate, community, stats, status). Each tool seems to earn its place, though a couple of read-only doc tools could theoretically be consolidated.

Completeness4/5

The surface covers a full lifecycle: create (upload_package, publish_game), read (my_games, game_files, game_stats, status), update (fix_game, game_patch, update_game), delete (delete_game), plus versioning (release_version, release_rollback) and localization (game_translate). Minor gaps exist around community management (no edit/delete post, no listing of posts) and no tool to approve/handle translations beyond proposing.

Available Tools

22 tools
klyo_add_postPost in the games communityAInspect

Write a post in the klyo games community: a question, a request for playtesters, a launch or a game showcase. The post is visible immediately, with no moderation queue, and can be linked to a game from the catalogue (gra_slug); then readers get a “play” button.

Examples: • Write a post on klyo about my game's launch • Ask for playtesters for my game on klyo games • Add a showcase of lantern-thief to the community

ParametersJSON Schema
NameRequiredDescriptionDefault
linkNoOptional: address of the game in a store or on another site.
jezykYesLanguage of the post.
trescYesPost text, at least 20 characters. Write like a person talking to people, without advertising slogans.
tytulYesPost title, 6 to 120 characters.
rodzajYes`pytanie` = question | `test` = request for playtesters | `premiera` = launch | `pokaz` = showcase.
gra_slugNoOptional: the catalogue game the post is about.

TDQS

A4.3/5.0
Behavior4/5

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

Annotations only indicate non-read-only and non-destructive, leaving the tool's write nature implied. The description adds valuable behavioral details: the post appears immediately with no moderation queue, and linking to a game adds a play button. This goes beyond the annotations and helps the agent anticipate the outcome.

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 description is compact, with a clear main purpose stated first, followed by a key behavioral note and three illustrative examples. It avoids redundancy and is well-organized for quick scanning, though it could be slightly more streamlined.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a 6-parameter tool, the description covers the core purpose, the immediate visibility, the linking effect, and typical use cases. It does not detail error handling or return values, but the absence of an output schema and the simplicity of the operation make this acceptable. Overall, an agent can confidently invoke the tool.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so the baseline is 3. The description adds semantic value beyond the schema by explaining the effect of gra_slug (readers get a play button) and by contextualizing the post types with examples. This extra guidance justifies a 4.

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

Purpose5/5

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

The description clearly states the tool writes a post in the klyo games community and enumerates the specific post types (question, playtesters, launch, showcase). This is a distinct resource and verb, and it is unambiguous compared to sibling tools that all handle game management rather than community posting.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides concrete examples of when to use the tool (launch, playtesting, showcase) and explains the immediate visibility and linking behavior. It does not explicitly name alternative tools or exclusions, but since no sibling tool serves the same purpose, the usage context is sufficiently clear.

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

klyo_creator_cardWrite the creator's profile card (owner's own AI)A
Destructive
Inspect

The developer's profile card on games.klyo.pl: “about me” and the tagline under the name. YOU WRITE: the owner's assistant, on the owner's own AI plan; klyo runs no model. Without o_mnie and haslo we return the current card, the released games (the only material you may write from) and the rules. With them, we save through the same check as the studio; an omitted field stays unchanged. Saving changes the developer's public page immediately and replaces the previous text, so FIRST show the text to the owner and save only with their consent. Do not invent facts about the person.

Examples: • Write my developer profile card on klyo • Improve the tagline under my name on my developer page • What is in my profile card on games.klyo.pl now?

ParametersJSON Schema
NameRequiredDescriptionDefault
hasloNoOne 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_mnieNo“About me” in the first person; two versions in tags <pl>…</pl><en>…</en>. Omit to only read.

TDQS

A4.7/5.0
Behavior5/5

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

Beyond the annotations, it discloses the immediate public replacement of the previous text, the read-only fallback, the consent requirement, and the 'do not invent facts' constraint. This is consistent with destructiveHint=true and adds meaningful behavioral context.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

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

The description is dense and front-loaded: purpose, then mode behavior, then safety constraint, then examples. Every sentence adds operational or policy value; there is little wasted text.

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?

For a 2-parameter tool with no output schema, the description is complete: it explains what is returned in read mode, what happens on save, what the only allowed source material is, and what constraints apply. An agent has enough to select and invoke it correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so the baseline is 3, but the description adds important semantics: omitting both parameters means read-only, omitting one preserves its current value, and saving goes through the same check as the studio. These are not evident from the schema alone.

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

Purpose5/5

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

The description identifies a specific resource ('the developer's profile card on games.klyo.pl') and the concrete actions: read or write the 'about me' text and tagline. The 'YOU WRITE' context and profile-card scope clearly separate it from the game-management sibling tools.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description gives explicit conditions: without `o_mnie` and `haslo` it reads; with them it saves, and an omitted field stays unchanged. It also adds a strong usage rule: show the owner the text first and save only with consent. It doesn't explicitly name alternatives, but no sibling tool covers the profile card.

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

klyo_delete_gameTake your game off the portalA
Destructive
Inspect

Take this account's game (slug) off the portal. The first call removes it from the catalogue and takes its page down; the address stays yours and you can upload the game there again. A second call on a game that is already taken down removes it from your list for good. Scores and reviews stay attached to the address and are never handed to another game. Use it to clean up after a failed attempt, for example when two entries of the same game ended up in the waiting room. A package that never became a game (only upload_id in the waiting room, from klyo_upload_package or klyo_my_games) is deleted with upload_id instead of slug: its file and preview are removed for good.

Examples: • Delete my game neon-coil-arena • Remove the failed entry from the waiting room • Delete the older copy of the same game

ParametersJSON Schema
NameRequiredDescriptionDefault
slugNoGame address in the catalogue, for example lantern-thief (from klyo_my_games).
upload_idNoPackage in the waiting room that never became a game (from klyo_upload_package or klyo_my_games → paczki).

TDQS

A4.7/5.0
Behavior5/5

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

Annotations already indicate destructiveHint:true and readOnlyHint:false, but the description adds substantial behavioral detail: the first call removes from catalogue and takes the page down while keeping the address, a second call removes it for good, and scores/reviews remain tied to the address. It also explains the non-game package path via `upload_id`, which is beyond what annotations convey.

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 description is a well-structured paragraph with examples, front-loaded with the primary action. It is somewhat verbose but every sentence contributes meaning—covering the two-step process, data persistence, and parameter selection. The examples at the end aid comprehension without redundancy.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a destructive tool with no output schema, the description covers the key behavioral aspects: what happens on first and second calls, what data persists, and how to handle packages. A minor gap is that it does not explicitly state that `slug` and `upload_id` are mutually exclusive or that at least one is required, though the description strongly implies it. Overall, it provides sufficient guidance for an agent to call correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100% (both parameters have descriptions), but the tool description goes further by explaining the provenance of each parameter (e.g., `slug` from klyo_my_games, `upload_id` from klyo_upload_package) and the conditions under which each is used. This adds contextual value beyond the schema's own descriptions.

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

Purpose5/5

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

The description states a specific action: 'Take this account's game (`slug`) off the portal.' It clearly distinguishes this from siblings like klyo_update_game or klyo_publish_game by focusing on removal. The two-step deletion process is explained, making the tool's purpose unambiguous.

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?

The description gives explicit usage context: 'Use it to clean up after a failed attempt, for example when two entries of the same game ended up in the waiting room.' It also clarifies when to use `slug` vs `upload_id` and notes that a second call on an already-down game permanently removes it. Examples illustrate common scenarios, leaving no ambiguity about when to invoke this tool.

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

klyo_fill_game_formFill the open New game form live (owner's own AI)AInspect

Types fields into the OPEN “New game” form in the developer's studio (dev.klyo.pl); the owner watches them fill in, corrects them and submits the form THEMSELVES. You write, on the owner's own AI plan; klyo runs no model and saves nothing: it is a draft in their browser. Without pola you get the list of fields, the allowed genres and moods, the rules and formularz_otwarty (whether the form is open). With pola we send them live; invalid ones (too long, a genre outside the list, no English description, profanity) come back in odrzucone with the reason. You do NOT fill in the content questionnaire, statements or consents: those are the owner's declarations. Send corrections with the same tool.

Examples: • Fill in the new game form on klyo • Add the English and Polish descriptions in my game's form • Change the tagline in the form to a shorter one

ParametersJSON Schema
NameRequiredDescriptionDefault
polaNoFields to type in; omit to see what the form needs.

TDQS

A4.5/5.0
Behavior5/5

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

Annotations are minimal (readOnlyHint=false, destructiveHint=false, idempotentHint=false), so the description carries the full behavioral burden—and it succeeds. It discloses that the owner watches and submits themselves, klyo runs no model and saves nothing, invalid fields return in `odrzucone` with reasons, and certain sections (questionnaire, statements, consents) are intentionally not filled. This is far beyond what annotations provide.

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 description is long but each paragraph adds necessary operational detail: live nature, with/without `pola` behavior, exclusions, and examples. It front-loads the core purpose and then structures the details. It is dense but not wasteful; the examples are practical. A slightly shorter version could exist, but the complexity justifies the length.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The description covers usage, limitations, validation, privacy, and return indicators (`odrzucone`, `formularz_otwarty`). It does not fully specify the output structure, but since there is no output schema, the description gives enough for an agent to understand the response flow. The nested parameters are exhaustively documented in the schema, so the description complements rather than duplicates.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The schema already provides 100% description coverage for the `pola` parameter and all nested fields. The tool description adds meaningful behavior beyond the schema: omitting `pola` returns the field list, allowed genres/moods, rules, and `formularz_otwarty`; providing it sends values live and invalid ones come back in `odrzucone`. This clarifies the interactive contract and response handling.

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

Purpose5/5

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

The description uses a specific verb and resource: 'Types fields into the OPEN “New game” form in the developer's studio (dev.klyo.pl)'. It clearly distinguishes itself from siblings by emphasizing the live, owner-watched nature and explicitly excludes filling content questionnaire, statements, or consents. An agent can easily tell this apart from update_game or delete_game.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It provides explicit examples of when to use the tool ('Fill in the new game form on klyo') and negative guidance ('You do NOT fill in the content questionnaire...'). It explains the conditional behavior with and without `pola`, and states corrections are sent with the same tool. However, it does not explicitly name sibling alternatives like klyo_update_game for existing games, leaving that distinction somewhat implicit.

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

klyo_fix_gameFix a game's catalogue listingA
Destructive
Inspect

Change the CONTENT of a game that is already in the catalogue: name, tagline, description, how to play on a phone and on a computer, round length, genre, shelves, mood, game languages, screen layout, score limit, stage, store links, content questionnaire and age. It does NOT touch the package: replacing files is klyo_update_game, which runs the game through the safety check again. A typo in the description should not cost that, which is why these are two tools. LANGUAGES (since 2026-09-18): the description has TWO versions in tags: … in English (REQUIRED, at least 25 words) and … in Polish (the owner gets +40 XP for it). Put versions in other languages here only if the developer wrote them personally; what YOU translate goes through klyo_game_translate as a proposal the owner approves in the studio. klyo does not translate on its own account. jezyk_tekstu says which language the name, tagline and controls are in. Pass ONLY the fields you change: everything else stays as it is, and the fields you pass replace the current text.

Examples: • Add to my game how to play it on a phone • Fix the description of lantern-thief and add an English version • Set the round length to 2 to 5 minutes in slice-rush

ParametersJSON 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.
opisNoDescription 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.
slugYesGame address on the account, for example lantern-thief (from klyo_my_games).
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.
hasloNoTagline 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`).
nazwaNoONLY 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.
ankietaNoContent 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.
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.
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.
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.
kategoriaNoGame 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_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_tekstuNoCode 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.

TDQS

A4.5/5.0
Behavior5/5

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

Annotations declare destructiveHint=true, and the description's mutation semantics align with that (no contradiction). The description adds substantial behavior beyond annotations: patch semantics ('everything else stays as it is'), the language policy (required <en> of at least 25 words, +40 XP for <pl>, translations going through klyo_game_translate as owner-approved proposals, klyo not translating on its own account), and the refusal behaviors (nazwa_z_haslem, brak_hasla, opis_en_wymagany). This is rich, non-redundant behavioral context.

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 description is long but every section earns its place: the core purpose and sibling distinction are front-loaded, the language rules are critical for a multilingual catalog, and the examples at the end are genuinely illustrative. It is well-paragraphed with clear topic breaks. Slightly dense, but not padded.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a 26-parameter tool with nested objects and no output schema, the description covers the most important cross-cutting behaviors: patch semantics, the content-vs-package split, the translation pipeline, and the language-tag requirements. The schema handles per-parameter detail. The only minor gap is that the description doesn't describe return values, but for a patch-style update tool this is acceptable given the schema richness.

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 26 parameters in detail. The description does add one cross-parameter behavior — the 'pass ONLY the fields you change' replace semantics — but it does not add per-parameter meaning beyond the schema. Baseline 3 is appropriate when the schema carries the burden.

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

Purpose5/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 ('Change the CONTENT of a game that is already in the catalogue') and enumerates the affected fields (name, tagline, description, controls, round length, genre, shelves, mood, languages, layout, score limit, stage, store links, questionnaire, age). It explicitly names the sibling it is not (klyo_update_game for the package), so an agent can select it correctly without opening the schema.

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?

The description explicitly distinguishes this tool from klyo_update_game ('It does NOT touch the package: replacing files is klyo_update_game'), explains WHY they are separate ('A typo in the description should not cost that'), and adds the critical patch semantics ('Pass ONLY the fields you change'). It also gives three concrete usage examples that show when the tool applies.

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

klyo_game_coverGame cover in the catalogueAInspect

Set the tile players recognise the game by in the catalogue. Frames are screenshots FROM YOUR RUNNING GAME: we take them ourselves once the game is live at its own address, so they appear only AFTER release (klyo_publish_game), not during it. Call without klatka to get the list of available frames with their addresses; show them to the account owner, or look at them yourself and pick one that shows gameplay rather than the title screen. Then call again with its number. We deliberately do not accept a custom image: the cover must show what the player will really see after clicking. Retouched art that does not match the game is a reason for taking the game down.

Examples: • Show frames to choose from for the cover of lantern-thief • Set the second frame as my game's cover • My game has no image in the catalogue, fix it

ParametersJSON Schema
NameRequiredDescriptionDefault
slugYesGame address on the account, for example lantern-thief (from klyo_my_games).
klatkaNoNumber of the frame to set. OMIT it to get the list of frames to choose from first.

TDQS

A4.8/5.0
Behavior5/5

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

Beyond the annotations' readOnlyHint=false, the description discloses key behavior: frames are captured by the system once the game is live, the first call lists rather than mutates, and setting a mismatched cover can lead to the game being taken down. It also makes the no-custom-image policy explicit, which is a constraint an agent could not infer from the schema.

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 description is longer than minimal, but every sentence contributes a distinct fact: purpose, release timing, selection workflow, and content policy. It is front-loaded with the action and uses examples compactly; it could be tightened slightly, but nothing is filler.

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?

For a two-parameter tool with no output schema, this definition covers the full call sequence, prerequisites, the source of frames, and the policy that governs acceptable covers. The examples also show natural user phrasings, leaving little ambiguity about how to invoke the tool.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The schema already covers both parameters at 100%, so the baseline is 3. The description adds value by explaining that omitting 'klatka' returns a list of frame addresses and that the number selects one of those frames, with an example showing 'the second frame' as the argument.

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

Purpose5/5

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

The description names a specific action ('Set') and resource ('the tile players recognise the game by in the catalogue'), so the role of the tool is immediately clear. It also distinguishes klyo_game_cover from generic update tools by explaining its unique mechanism: covers must be screenshots from the running game, never custom images.

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 gives an explicit two-phase workflow: call without 'klatka' to list available frames, then call again with the chosen frame number. It also states the temporal precondition (frames exist only after klyo_publish_game) and the hard exclusion (no custom images), giving the agent clear when-to and when-not-to guidance.

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

klyo_game_diagnosticsWhy the game is not workingA
Read-onlyIdempotent
Inspect

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

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

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

TDQS

A4/5.0
Behavior5/5

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

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

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness2/5

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

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

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

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

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

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

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

Purpose4/5

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

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

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

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

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

klyo_game_filesRead a game's filesA
Read-onlyIdempotent
Inspect

Your game's files to read, without a ZIP from the owner. Target: a game's slug or a waiting-room package's upload_id. Without path you get the list (path, size, whether it is text, hash); with path, the content of one text file, up to 200 KB at a time (read further with from_line, narrow with lines); with changes: true, what changed in the waiting version compared with the version players have: how much code, visuals and sound (the same numbers the studio shows at “Release”) and the line differences. When the game has a waiting version (a workshop from klyo_game_patch or a new package) you read that one; otherwise the version players are playing. Pass the hash field as expected_hash to klyo_game_patch. Images and sounds are not returned as content, only their size. Read-only.

Examples: • Show the files of my game czworki • Read js/gra.js from lantern-thief starting at line 200 • What changed in the waiting version of slice-rush?

ParametersJSON Schema
NameRequiredDescriptionDefault
pathNoFile to read, relative to the game, for example js/gra.js. Without this field you get the file list.
slugNoGame address, for example lantern-thief (from klyo_my_games). Give this or `upload_id`.
linesNoMaximum number of lines (reading stops at 200 KB anyway).
changesNoTogether with the list: what changed in the waiting version compared with the version players have.
from_lineNoLine to start reading from (default 1).
upload_idNoA waiting-room package (from klyo_upload_package), when there is no game yet.

TDQS

A4.5/5.0
Behavior4/5

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

Annotations already declare readOnlyHint, idempotentHint, and destructiveHint as safe, so the description adds value by explaining exactly what is read (text files, not images/sounds), size limits (200 KB), pagination (from_line, lines), and how it selects the version (waiting vs. players). This goes beyond the annotations without contradiction.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

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

The description is well-structured: it starts with the core purpose, explains the different modes, then provides concrete examples. Every sentence adds value, and the examples are practical for an agent to understand the tool's usage patterns.

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?

For a read-only tool with comprehensive schema descriptions, the description covers all essential behavioral details: file list format, content reading constraints, changes comparison, version selection, and hash usage. No output schema exists, but the tool's return values are implicitly described, making it complete for agent invocation.

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?

The schema covers all parameters with descriptions (100% coverage), so the description doesn't need to repeat them. However, it adds context about how parameters interact (e.g., path vs. no path, changes with list, hash usage) and clarifies optionality, which slightly exceeds the schema's baseline.

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

Purpose5/5

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

The description clearly states the tool reads a game's files, with a specific verb and resource, and distinguishes between reading the file list vs. file content vs. changes. It also differentiates from siblings by focusing on reading rather than patching or uploading.

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?

The description explicitly explains when to use the tool (to read files from a game or waiting-room package), how to use it (with slug or upload_id, with or without path), and provides examples for common use cases. It does not explicitly mention alternatives, but its unique purpose is clear given the sibling list.

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

klyo_game_patchEdit a game's files in a workshopA
Destructive
Inspect

Edits a game's text files (html, htm, js, mjs, css, json, svg, txt, xml, webmanifest) without a ZIP. Target: a game's slug or a waiting-room package's upload_id. The first edit opens a WORKSHOP: a copy of the game next to the version players have, with its own preview address. Players keep playing the previous version until you release the new one (klyo_release_version for a game, klyo_publish_game for a package); the owner sees it in the studio as “New version waiting”. Each item of edits has a path and one of three: old_string with new_string (an exact fragment that must occur once, or add replace_all), content (the whole file or a new file), or delete: true. For a file that exists, pass expected_hash from klyo_game_files: if someone changed the file in the meantime you get a conflict and nothing is saved. The changes of one call are applied all or none. Every changed file goes through the klyo check (malicious code, third-party ads, nothing from outside klyo), and the whole game once more before release. Send an image, sound, font or large file (up to 20 MB) with the ticket from klyo_upload_package and reference it in the edit with from_upload (no base64). GAME FROM SCRATCH: nowa (plansza, zrecznosciowa, logiczna) instead of a target creates a package from the Klyo Kit skeleton and applies edits right away; the response carries upload_id. UNDO: before every edit a checkpoint auto-N is created (it is in the response); revert goes back to it or to a named checkpoint, discard abandons the whole workshop for good; players see none of this. Limits: a file from content up to 1 MB, a call up to 256 KB and 20 edits, 3 open workshops per account; a workshop with no changes for 7 days expires, and the version players have stays untouched.

Examples: • Change the board colour in style.css of my game czworki • In js/gra.js of slice-rush change the speed from 4 to 6 • Add a levels.json file with three levels to the package in the waiting room

ParametersJSON Schema
NameRequiredDescriptionDefault
nowaNoA 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).
slugNoGame address (from klyo_my_games). Give this or `upload_id`.
editsNoChanges; applied all or none. Each: `path` and one of three: `old_string` with `new_string`, `content` or `delete: true`.
revertNoReturn 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.
discardNoAbandon 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_idNoA waiting-room package, when there is no game yet; klyo_publish_game later releases it with these edits.
checkpointNoA 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.

TDQS

A4.7/5.0
Behavior5/5

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

Annotations only say the tool is destructive and not read-only. The description goes far beyond this: it explains the workshop copy, that players keep the old version until release, all-or-nothing application, conflict behavior with `expected_hash`, the klyo check, checkpoint/revert/discard semantics, expiry, and limits. This is rich, useful behavioral disclosure.

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 description is long but dense and well-organized, with labeled sections (UNDO, Limits) and examples at the end. It front-loads the core editing behavior before alternates and edge cases. Some repetition with the schema exists, but most content earns its place.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a complex 7-parameter tool with no output schema, this description is nearly complete: it covers target selection, edit modes, uploads, atomicity, conflict handling, undo, release flow, and limits. It names the key response artifacts (`upload_id`, `auto-N` checkpoint) but does not fully describe the response shape, which is the main gap.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The input schema already covers 100% of parameters with detailed descriptions, so the baseline is 3. The description adds extra semantic value by explaining relationships: `slug` vs `upload_id`, `expected_hash` conflict prevention, `from_upload` as a no-base64 alternative, and `nowa` applying edits in the same call. It doesn't enumerate every parameter, but the schema handles that.

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

Purpose5/5

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

The description states a specific verb and resource: 'Edits a game's text files... without a ZIP' and defines the targets (`slug` or `upload_id`). It also differentiates this from release, publish, and upload tools by explaining the workshop workflow. The examples reinforce the intended actions clearly.

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?

The description explicitly routes usage: game `slug`, waiting-room `upload_id`, or `nowa` for a game from scratch. It names the follow-up tools (klyo_release_version, klyo_publish_game) and the upload mechanism (klyo_upload_package), giving an agent clear when-to-use and when-to-hand-off guidance.

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

klyo_game_playPlay your game on your own deviceAInspect

Really play your game and see it: you send input steps, you get screenshots (image content) and the game state. It runs on the OWNER'S device, never on the klyo server: the owner opens the klyo studio (https://dev.klyo.pl/) on a computer or phone and clicks "Allow" under "Your assistant wants to play …" (your call puts that request on the studio, also on one opened within 10 minutes); they see every move and can stop it. Real graphics card, real screen, so 3D games work. Target: slug or upload_id; you play the same version klyo_game_files reads (the waiting version or package under its preview, otherwise the version players have). The first call opens the game, next calls continue it, restart reloads it, close ends the session. steps run on one timeline of at most 3000 ms: each step starts when the previous one ends, or at at_ms to run in parallel (run + turn the camera + jump). Types: key (key like KeyW, ArrowUp, Space, Enter, hold_ms), click (x, y, button, count), tap (x, y), drag (x, y, to_x, to_y, ms, pointer), move (relative mouse dx, dy, ms, for a mouse-look camera), wheel (dy), wait (ms), screenshot. Coordinates are fractions 0 to 1 of the game view. Up to 40 steps and 4 screenshots per call (screenshots adds them at the end, default 1). Input is synthetic (not trusted events): pointer lock is simulated for mouse-look games. request_id makes a retry return the same result without playing twice. stan: ok | brak_urzadzenia (ask the owner to open the studio and click "Allow", then call again) | karta_w_tle (the studio tab is hidden and the browser pauses the game) | urzadzenie_nie_odpowiada | zatrzymane (the owner stopped it) | w_toku. Errors from this session: klyo_game_diagnostics with sesja = sesja.znacznik. Evidence: a play of a waiting version or package in which the game drew at least 10 frames on a hardware graphics card is saved for those exact files (dowod_urzadzenia in the answer); klyo_game_diagnostics then lists it under bramka.sprawdzono_na_urzadzeniu instead of NIESPRAWDZONA, until the files change.

Examples: • Play klyo-blocks: walk forward for a second, look right and take a screenshot • Tap the start button in the middle of my game and show me the first level • Open the waiting version of slice-rush on my phone and swipe left twice

ParametersJSON Schema
NameRequiredDescriptionDefault
slugNoYour game's address (from klyo_my_games). Give this or `upload_id`.
closeNoEnd the session and close the game on the owner's device.
stepsNoInput on one timeline of at most 3000 ms. Without `at_ms` a step starts when the previous one ends.
deviceNoWhich of the owner's devices (`urzadzenie.id` from an earlier answer); default: the most recently switched on.
screenNoSize of the game view on the owner's device (default: the whole device screen).
restartNoReload the game before the steps.
upload_idNoA waiting-room package, when there is no game yet.
request_idNoYour id for this call: a retry with the same id returns the same result without playing again.
screenshotsNoScreenshots taken after the steps (default 1 when there is no screenshot step).

TDQS

A4.6/5.0
Behavior5/5

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

With annotations already declaring readOnly=false/openWorld=false/idempotent=false, the description adds substantial context beyond them: execution happens on the owner's device, the owner must click 'Allow' in the studio, they can watch and stop it, input is synthetic (not trusted events), pointer lock is simulated, and `request_id` makes retries idempotent. It also enumerates the `stan` status codes (brak_urzadzenia, karta_w_tle, zatrzymane, etc.) and the evidence/dowod_urzadzenia outcome.

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 opening sentence front-loads the purpose and the target/session model follows logically. It is dense and long, with a status-code list and evidence paragraph that tax readability, but for a 9-parameter tool with a nested step timeline most sentences carry real information.

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?

No output schema exists, so the description must carry the return-value burden — and it does: screenshots as image content, game state, `stan` codes, `dowod_urzadzenia` evidence, and how klyo_game_diagnostics surfaces it. Combined with the permission/Allow prerequisite and session lifecycle, an agent has everything needed to invoke it correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so the baseline is 3, but the description meaningfully complements it by explaining the step grammar: steps run on one timeline of at most 3000 ms, each starts when the previous ends or at `at_ms` for parallelism, coordinates are fractions 0-1, up to 40 steps and 4 screenshots, and it lists the fields per step type. This composition semantics goes beyond the per-field schema text.

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

Purpose5/5

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

The description names a specific verb+resource ('Really play your game and see it: you send input steps, you get screenshots (image content) and the game state') and explicitly frames the mode as remote-on-owner's-device. It also distinguishes itself from siblings by tying its target to 'the same version klyo_game_files reads' and routing failures to klyo_game_diagnostics.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The session lifecycle is spelled out clearly ('The first call opens the game, next calls continue it, `restart` reloads it, `close` ends the session'), and the error path names an alternative ('Errors from this session: klyo_game_diagnostics with `sesja` = `sesja.znacznik`'). It does not state explicit when-NOT-to-use conditions versus siblings like klyo_game_files, so it stops short of a 5.

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

klyo_game_requirementsKlyo game production standard (call first)A
Read-onlyIdempotent
Inspect

GAME PRODUCTION CONTRACT: CALL THIS FIRST, before you design or write a single line of a game for klyo. Returns the “studio quality” standard: screens (phone, tablet, desktop, portrait and landscape, resize), input (touch, mouse and keyboard), game loop, minimum content, sound, graphics, social layer (leaderboard, saves, clips; multiplayer only when it makes sense), brands and law, the LOCAL test klyo-test (the same one the server runs on publishing) with a fix-and-test loop, the quality gate and the release stages (preview, demo, finished, new version). The text of the standard is in Polish. Read-only, no parameters. When the user writes “make a battleship game”, do not ask them about phones, leaderboards or sound: it is all here. Do not say “done” until klyo-test passes without critical errors.

Examples: • Make me a battleship game • What are the requirements for a game on klyo? • Build a puzzle game for phone and desktop

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A4.9/5.0
Behavior5/5

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

Annotations already mark this as read-only, idempotent, and non-destructive, and the description adds meaningful behavioral context: the standard is in Polish, includes a local test that mirrors the server's publish test, and covers specific areas like screens, input, social layer, and legal/brand concerns. No contradiction exists.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

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

The description is dense but well-structured: it front-loads the critical call-first instruction, then summarizes the standard's contents, then gives usage examples and a completion gate. Each sentence earns its place without fluff.

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?

For a no-parameter, read-only tool with no output schema, the description fully covers what the agent needs: when to call it, what it returns, what the returned standard contains, that it is in Polish, and how to know when the game is actually done.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The tool has zero parameters and 100% schema coverage, so there is no parameter-level detail to add. The description reinforces this by saying 'Read-only, no parameters,' which is sufficient for a schema with an empty properties object.

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

Purpose5/5

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

The description clearly states the tool returns the 'studio quality' game production standard and opens with 'CALL THIS FIRST'. It distinguishes itself from siblings by being the requirements/contract tool rather than a scaffold, form, or publish tool.

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 explicitly instructs the agent to call this before designing or writing any game code, and gives a concrete example: when the user says 'make a battleship game', the agent should not ask about phones, leaderboards, or sound. It also sets the completion condition: do not say 'done' until `klyo-test` passes.

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

klyo_game_scaffoldKlyo Kit: game skeleton to start fromA
Read-onlyIdempotent
Inspect

GAME SKELETON ON KLYO KIT: call after klyo_game_requirements, before you write code. Returns two starter files (index.html, gra.js) to copy and the full kit API: game loop (menu, play and pause, game over, play again), touch, mouse, keyboard and gamepad input as one event, a canvas for any screen with safe areas, synthesized sound with no files (resumed after the app comes back from the background), juice (tweens, shake, particles, flash), light and dark theme, saves across devices, a score to the leaderboard with rank, modes solo, on one device or online by link, PL and EN, accessibility. You write ONLY the gameplay. Read-only. Optional rodzaj: plansza (board game with turns), zrecznosciowa (arcade) or logiczna (puzzle, the default). Reference game: Battleships.

Examples: • Start a game on Klyo Kit • Give me a game skeleton with a menu, pause and a leaderboard • How do I make an online game that friends join by link on klyo?

ParametersJSON Schema
NameRequiredDescriptionDefault
rodzajNoShape 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.

TDQS

A4.1/5.0
Behavior4/5

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

Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false, and the description repeats 'Read-only' (redundant). However, it adds substantial behavioral context beyond annotations: the kit includes sound that resumes after backgrounding, safe areas, input handling unified, and the constraint 'You write ONLY the gameplay'. These are useful behavioral traits not in 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 description is long but front-loaded with the purpose and workflow, then efficiently lists features in a colon-separated list. It includes examples at the end. Every sentence contributes to informing the agent about what the tool returns and when to use it, though it could be trimmed slightly without losing value.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool has one optional parameter and no output schema, the description covers the return (two files and the API), the usage sequence, the parameter options, and example queries. It does not specify the exact format of the returned API, but that is likely in the files. The description is sufficient for an agent to decide when and how to call it.

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?

The schema has 100% coverage for the single parameter `rodzaj`, with detailed descriptions of each enum value. The description repeats these explanations and adds a reference game ('Reference game: Battleships'), but this is a minor addition. It does not compensate significantly beyond what the schema already provides.

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

Purpose5/5

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

States a specific verb ('returns') and resource (two starter files and the kit API) with a clear header 'GAME SKELETON ON KLYO KIT'. It distinguishes itself by explicitly placing it in the workflow: 'call after klyo_game_requirements, before you write code', which separates it from siblings like klyo_game_requirements and klyo_game_sdk.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Provides explicit when-to-use guidance: 'call after klyo_game_requirements, before you write code' and includes three example prompts that would trigger this tool. It does not explicitly list alternatives or when-not-to-use, but the sequence and examples give clear context for an agent.

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

klyo_game_sdkWhat a game can call (klyo game SDK)A
Read-onlyIdempotent
Inspect

Full description of the klyo-gry-sdk.js kit: how a game embedded in the catalogue sends a score to the leaderboard, saves progress on the server, asks for full screen, inserts an ad break, offers a REWARDED ad and lets the player record a clip. Read-only, needs no input. CALL THIS RIGHT AFTER klyo_game_requirements, BEFORE YOU WRITE A GAME FOR klyo. Without it you will build a game with no leaderboard, no saves across devices and without the only allowed way to show ads, and the package will bounce off the check if you put another ad network in it.

Examples: • How do I add a rewarded ad to a game on klyo? • What can a game embedded in klyo games call? • How do I save player progress across devices?

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A4.6/5.0
Behavior4/5

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

Annotations already cover read-only, idempotent, non-destructive. The description adds that it 'needs no input' and describes the content scope. It doesn't contradict annotations and provides useful context about what to expect (a full description), though it doesn't detail return format or pagination – minor for an info tool.

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 description is longer than minimal, but every sentence earns its place: content enumeration, read-only note, usage ordering, consequences, and example queries. It is front-loaded with what the tool does and provides actionable guidance. Slight verbosity prevents a 5.

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?

Given the tool has no parameters and no output schema, the description is fully sufficient for an agent to decide when and how to call it. It covers purpose, prerequisites, and example triggers.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

With 0 parameters and 100% schema coverage, the baseline is 4. The description explicitly states 'needs no input,' reinforcing the schema. No further parameter explanation is needed.

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

Purpose5/5

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

The description clearly states this tool provides the full SDK kit description, enumerating specific capabilities (leaderboard, saves, full screen, ad break, rewarded ad, clip recording). It distinguishes itself from siblings by explicitly ordering it after klyo_game_requirements and before game development.

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?

Gives explicit when-to-use guidance: 'CALL THIS RIGHT AFTER klyo_game_requirements, BEFORE YOU WRITE A GAME FOR klyo.' Also explains the negative consequences of skipping it (no leaderboard, no cross-device saves, ads will fail checks). This leaves no ambiguity about when to invoke this tool.

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

klyo_game_statsGame statisticsA
Read-onlyIdempotent
Inspect

Visits to the game page and plays, day by day, for the given game (slug). Read-only. The developer's share of ad revenue is calculated from this.

Examples: • How many people played my game this week? • Stats for lantern-thief • Show plays day by day

ParametersJSON Schema
NameRequiredDescriptionDefault
dniNoHow many days of the daily series (default 30).
slugYesGame address in the catalogue, for example lantern-thief (from klyo_my_games).
sprawdz_googleNoAsk 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.

TDQS

A3.8/5.0
Behavior3/5

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

Annotations already declare readOnlyHint, idempotentHint, and destructiveHint, so the description carries little safety burden. It adds the 'day by day' granularity and the revenue context, but it does not describe response format or behavior beyond what the schema's sprawdz_google parameter already explains.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

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

The core purpose is front-loaded in the first sentence, and the examples are compact and useful. There is no fluff or repetition of schema-level detail.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a read-only, idempotent stats tool with fully described parameters and no output schema, this is nearly complete: it states the metrics, granularity, scope, and safety. It lacks only an explicit note on response shape or pagination, which is a minor gap.

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 all parameters are fully documented in the schema. The description's examples illustrate slug use but add no meaning beyond the schema.

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

Purpose4/5

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

The description clearly identifies what the tool returns: daily visits and plays for a specific game, with example queries showing intended use. It does not explicitly contrast this with siblings such as klyo_game_diagnostics, so some differentiation is left to inference.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The examples like 'How many people played my game this week?' and the mention that ad revenue share is calculated from this data give clear usage context. It does not state explicit exclusions or alternatives, but the intended scenarios are easy to infer.

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

klyo_game_translateTranslate a game's texts (owner's own AI)AInspect

Translations of a game's texts into the klyo languages (pl, en, de, fr, es, pt, it, ru, uk, tr). YOU TRANSLATE: the owner's assistant, on the owner's own AI plan; klyo runs no model and does not pay for translation. Two steps in one tool: (1) call with only slug to get the original field by field (oryginal), the original language, the languages still to do (do_tlumaczenia, with their state) and the check rules; (2) call with slug and tlumaczenia = { language code: { field: text } } with ALL the fields from oryginal. Each language goes through the same check as the developer's own text: long dashes and the ellipsis character are replaced with plain ones, no markup, no longer than twice the original, name and tagline on one line up to 80 characters, the text must be in that language, no disallowed words. A language that fails comes back in odrzucone with the reason: fix it and send it again; good languages are saved. What is saved are PROPOSALS: the owner approves them in the studio (dev.klyo.pl, the game, Translations) and only approved ones count for Google. Do not tell the user the translations are already on the page. This tool does not change the developer's own texts (English required, Polish for XP); that is klyo_fix_game.

Examples: • Translate my game into all klyo languages • What is missing in the translations of lantern-thief? • Add German and French versions of my game's description

ParametersJSON Schema
NameRequiredDescriptionDefault
slugYesGame address, for example lantern-thief (from klyo_my_games).
tlumaczeniaNoOmit 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).

TDQS

A4.8/5.0
Behavior5/5

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

Despite no annotations (readOnlyHint=false, etc.), the description fully discloses the non-destructive proposal nature, the check rules, failure handling, and that nothing is saved as final until owner approval. It also clarifies that klyo runs no model and the owner pays for translation.

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 description is long but well structured with clear steps and rules. It is front-loaded with the purpose and key constraints. However, some repetition of check rules could be condensed, but overall it is organized and each part adds value.

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?

Given the complexity (two-step, multiple languages, validation rules), the description provides all necessary information: the workflow, the fields, the checks, the failure handling, and the approval process. No output schema exists, but the description explains what comes back (odrzucone, saved proposals).

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The schema covers the parameters well (100% coverage). The description adds context on the structure of tlumaczenia (all fields from oryginal) and the meaning of languages, but does not add new parameter-specific syntax details beyond schema.

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

Purpose5/5

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

The description states a specific verb ('translate') and resource ('a game's texts'), and explains the two-step process. It clearly distinguishes from sibling klyo_fix_game by noting it does not change the developer's own texts.

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 explicitly defines the two-step workflow, when to call with only slug vs with tlumaczenia, and provides example queries. It also states what not to do ('Do not tell the user the translations are already on the page').

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

klyo_my_gamesMy games in the catalogueA
Read-onlyIdempotent
Inspect

List this account's games in the klyo games catalogue: name, address (slug), state (published, or rejected with the reason), size, visits and plays. Read-only. Call this FIRST to learn the slug the other tools need.

Examples: • Which games do I have on klyo? • Is my game published yet? • Show the state of my games

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A4.4/5.0
Behavior4/5

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

Annotations already declare readOnlyHint=true and destructiveHint=false, and the description reinforces this with a plain 'Read-only.' Beyond the annotations, it explains output content (e.g., 'state (published, or rejected with the reason)') and the tool's role as a prerequisite for other tools, adding useful behavioral context without needing to repeat safety metadata.

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 description is front-loaded with the primary action and output fields, followed by a crisp 'Read-only.' and the crucial first-step note. The three example questions are helpful but slightly redundant—they restate use cases already implied—yet they do not bloat the text excessively.

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?

For a tool with no parameters, no output schema, and full annotation coverage, the description is complete: it tells the agent what the tool does, what results to expect (fields include slug, state, rejection reason), and when to invoke it. An agent can decide to call this first without needing additional details.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

There are zero parameters, so the empty schema already fully describes the input contract. The description adds no parameter details because none exist; per rubric, a zero-parameter tool receives a baseline of 4, as the description cannot add value beyond the schema.

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

Purpose5/5

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

The description states a specific action ('List this account's games') and a clear resource ('klyo games catalogue'), and enumerates the returned fields (name, slug, state, size, visits, plays). It differentiates from siblings by positioning itself as the tool to call FIRST to obtain the slug needed by other tools, so an agent can distinguish it without opening schemas.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description gives explicit when-to-use guidance: 'Call this FIRST to learn the `slug` the other tools need.' This clearly places it before other catalogue tools, and the example questions illustrate typical use cases. It does not name dispreferred alternatives or conditions to avoid, hence the absence of explicit exclusions.

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

klyo_publish_gamePublish a game to the catalogueAInspect

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

ParametersJSON 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.

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.

klyo_release_rollbackRoll back to the previous version of a gameAInspect

Roll a game (slug) back to the previous version, the one before the last klyo_release_version. Same move as “Restore” in the studio: the previous version's files are kept next to the current ones and come back with one switch, without uploading; the version we take down stays next to it (rolling back again swaps them). The game's address, scores and stats do not change. Refused with brak_poprzedniej when the game has only one version. Use it when the owner reports that a new version breaks the game; then fix locally, run klyo-test, klyo_update_game, klyo_release_version.

Examples: • Roll lantern-thief back to the previous version • The new version breaks the game, restore the previous one

ParametersJSON Schema
NameRequiredDescriptionDefault
slugYesGame address in the catalogue (from klyo_my_games).

TDQS

A4.5/5.0
Behavior4/5

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

Annotations already indicate readOnlyHint=false, destructiveHint=false, and idempotentHint=false, so the description doesn't need to restate those. It adds valuable behavioral context: the previous version's files are kept next to current ones, rolling back again swaps them, and the game's address/scores/stats do not change. It also discloses the refusal condition (brak_poprzedniej). This goes beyond the annotations and helps the agent predict side effects.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

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

The description is a single paragraph with a clear first sentence stating the action, followed by behavioral details and a usage scenario. It is front-loaded and every sentence adds information. It could be slightly more concise, but the length is justified by the need to explain the swap behavior and error condition.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a single-parameter tool with no output schema, the description covers the action, side effects, error condition, and a recommended workflow. It doesn't describe the return value or output format, but since there is no output schema and the tool is a mutation, that is a minor gap. The description is complete enough for an agent to invoke it correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The schema already covers the single parameter (slug) with a description, so baseline is 3. The description adds context by explaining that slug is the game address in the catalogue and referencing klyo_my_games as the source, which helps the agent know where to get the value. This is a modest but real addition beyond the schema.

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

Purpose5/5

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

The description clearly states the tool rolls a game back to the previous version, identifies the resource (game slug), and distinguishes it from related operations like klyo_release_version. It also explains the mechanism (files kept, switch without uploading) and the error condition, making the purpose unambiguous.

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?

The description explicitly says when to use it: when the owner reports a new version breaks the game. It also provides a workflow after rollback (fix locally, run klyo-test, klyo_update_game, klyo_release_version), which is strong usage guidance. It doesn't explicitly name alternatives, but the context and workflow make the appropriate use clear.

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

klyo_release_versionRelease the waiting version of a gameAInspect

Release to players the version waiting after klyo_update_game (slug). Same step as the “Release” button in the studio: players get the new version at once (anyone in the middle of a round sees a bar “update or finish the round”), the previous version stays with us, the game page is rebuilt and the developer's followers are notified. You may omit the kind of change (zmiana); then we use the one measured from the files. Effect on the clip: poprawka (fix): the clip stays; funkcja (feature): the clip stays and nowosc (one sentence) goes to the feed as “New”; interfejs (interface): the old clip leaves the tile and the feed until a person records a new one in the studio (the assistant does not record clips). Release only when the owner has confirmed that they played the new version, or deliberately wants to release it without playing. PREMIUM REVIEW: for any change other than poprawka, pass przeglad (seven points with evidence, listed in the schema and in klyo_game_requirements); before the swap the whole game goes through the check again.

Examples: • Release the new version of lantern-thief, it is a fix • I played it and it works: release the version with the new feature, a daily mode • Release the waiting version of my game

ParametersJSON Schema
NameRequiredDescriptionDefault
slugYesGame address on the account, for example lantern-thief (from klyo_my_games).
nowoscNoWhat is new: one sentence for the clip card in the feed. Only with `funkcja`.
zmianaNoKind 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).
przegladNoPremium 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”.

TDQS

A4.6/5.0
Behavior5/5

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

Beyond the minimal annotations, the description discloses rich behavioral effects: players immediately get the new version, mid-round players see an update bar, the previous version stays, the game page is rebuilt, followers are notified, and clip behavior changes per `zmiana` type. It also describes the review re-check before the swap. This is exactly the kind of context annotations cannot convey.

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 description is long but well-organized: core operation, then parameter effects, then gating conditions, then the review requirement, then examples. Some material repeats schema content, but for a complex release operation that reinforcement is useful rather than wasteful.

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?

Despite having no output schema, the description fully covers what the agent needs to call the tool correctly: the prerequisite (waiting version from klyo_update_game), the eligibility condition (owner confirmation), when evidence is required, and all user-visible side effects. Nothing critical for invocation is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The schema already provides detailed parameter descriptions and covers 100% of parameters, so the baseline is 3. The description adds value by explaining the default for omitted `zmiana`, the clip consequences for each change type, the `nowosc` feed behavior, and the condition under which `przeglad` is mandatory.

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

Purpose5/5

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

The description opens with a specific action on a specific resource: 'Release to players the version waiting after klyo_update_game (`slug`)'. It clearly identifies this as the update-release step and distinguishes it from other game lifecycle tools by pointing at the upstream update tool.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It gives clear usage context: this tool is for releasing the waiting version after an update, and only when the owner has played the new version or deliberately waived that. It also states when a premium review is required. However, it does not explicitly tell the agent when not to use it or name alternatives such as klyo_publish_game or klyo_release_rollback.

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

klyo_statusConnection statusA
Read-onlyIdempotent
Inspect

State of this connection to klyo: server version, key scope, account role, how many tools you see and whether you may write, plus the state of integrations (Google Search Console, Google Ads, AdMob, and for the owner also Cloudflare), each as ok, not_connected, auth_error or no_data, with what to do. Call it at the start of work and before you base a decision on a report whose section may not have loaded. Read-only.

Examples: • Is my connection to klyo working and what can I do? • Which integrations are connected? • Which version is the klyo server?

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A4.4/5.0
Behavior4/5

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

Annotations already establish read-only/idempotent/no-destructive hints. The description adds value by specifying the payload contents (server version, key scope, account role, tool count, write permission) and the semantics of integration statuses (`ok`, `not_connected`, `auth_error`, `no_data`) plus embedded remediation guidance. It does not contradict 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 description is dense but arguably a little padded: 'Read-only' duplicates the annotation, and the three example questions are helpful but not strictly necessary. Core purpose and usage are front-loaded, and each remaining sentence contributes unique information.

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?

For a zero-parameter read-only status tool with no output schema, the description fully covers what the agent will receive and when to call it. It includes the list of integrations, possible status values, and directs the agent to use it before critical decisions. Nothing essential is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The tool takes zero parameters, and the schema has no properties, so there is no parameter-level semantics to document. Baseline 4 for 0-param tools; the description appropriately focuses on output and usage instead.

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

Purpose5/5

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

States a specific verb and resource: it reports the state of the klyo connection, enumerating server version, key scope, account role, tool count, write permission, and integration statuses with action items. The example questions make it unambiguous that this is a status/health-check tool, clearly distinct from the mutating sibling tools.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicitly instructs to call it at the start of work and before relying on a possibly-unloaded report section, giving clear timing. It does not name alternatives or when-not conditions, but the sibling set makes the status role obvious and the examples reinforce the intended use cases.

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

klyo_update_gameUpdate a game with a new versionA
Destructive
Inspect

Upload a NEW VERSION of a game that is already on the account (slug): from a file (upload_id from klyo_upload_package) or from a public zip_url. The game keeps its address, name, description, scores and hearts; only the files change. Do not create a second game to ship a fix: that splits players and records between two addresses. A published game does NOT change right away: the new version goes to a waiting room with its own preview address and replaces any version that was already waiting there, including an open workshop from klyo_game_patch; the response carries a measurement of the files (zmiana: how much code, visuals and sound changed, new files and texts, and a suggested kind: poprawka fix | funkcja feature | interfejs interface). A game that is not in the catalogue yet gets the new files at once. Then two ways: the owner plays the preview and clicks “Release” in the studio, OR you call klyo_release_version. A clip for the new version is recorded by a person in the studio; the assistant does not record.

Examples: • Upload the fixed version of lantern-thief from this address • Replace my game's package with the new one, I fixed a bug • Update the game without changing its address or name

ParametersJSON Schema
NameRequiredDescriptionDefault
slugYesGame address on the account, for example lantern-thief (from klyo_my_games).
zip_urlNoPublic https address of the NEW ZIP package. Only when the package really is online.
upload_idNoID of the NEW package sent to klyo (see klyo_upload_package). Preferred when the file is on disk.

TDQS

A4.6/5.0
Behavior5/5

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

Annotations establish that this is a mutating, destructive, non-read-only tool, and the description adds substantial side-effect detail beyond that: a published game does not change immediately, the new version replaces any version already waiting in the waiting room, an unpublished game gets the new files at once, and a human must record the clip. No contradiction with annotations exists.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

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

The description is long but appropriately dense: the main operation is front-loaded in the first sentence, and subsequent sentences each add critical workflow, side-effect, or exclusion information. The natural-language examples are compact and help an agent recognize user intent. There is no filler or repetition of the title.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a complex mutation with no output schema, the description covers almost everything an agent needs: inputs, when changes become visible, the waiting-room replacement behavior, the zmiana response field, the release workflow, and the human-only clip recording. The main gap is that it never crisply states the one-of-upload_id/zip_url requirement or the behavior if both are supplied, which is a small but real omission.

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 baseline is 3. The description does reinforce the file-vs-url source choice by mentioning klyo_upload_package and 'public zip_url', but it mostly restates the schema fields. It does not explicitly state that exactly one of upload_id or zip_url should be supplied or what should happen if both are provided, so it adds only moderate value beyond the schema.

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

Purpose5/5

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

The description opens with a concrete verb and resource: 'Upload a NEW VERSION of a game that is already on the account (`slug`)' and then names the two allowed package sources. It clearly differentiates this action from related siblings by stating the game 'keeps its address, name, description, scores and hearts; only the files change', which is not a tautology.

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?

The description gives explicit when-to-use guidance: 'Do not create a second game to ship a fix: that splits players and records between two addresses.' It also explains the staged workflow, names klyo_release_version as the alternative release path, and notes when upload_id is preferred over zip_url. An agent gets clear decision rules rather than having to infer them.

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

klyo_upload_packageUpload a package from disk (no public URL needed)AInspect

The way to release a game from a file on disk, with no tunnel and without exposing an unreleased game publicly. Returns three things at once: (1) paczki_w_poczekalni: packages already on the account that have not become a game yet, each with its upload_id; (2) bilet: a token valid for one hour ONLY for sending files, which you put in the Authorization: Bearer header (it opens no tool; you do not have it in your configuration, which is why you get it here); (3) a recipe: if you have a shell (curl), send the file with the ticket in two HTTP requests; if you do not, ask the owner to upload the ZIP in the studio at https://dev.klyo.pl/ (it lands in the waiting room, nothing is published) and call this tool again: the package will appear in paczki_w_poczekalni. Pass the returned upload_id to klyo_publish_game or klyo_update_game instead of zip_url. Do not save the ticket in project files.

Examples: • How do I send a ZIP from my disk to klyo? • Publish this game, the file is on my computer • The owner uploaded a package in the studio, which one should I publish? • I don't want to expose the game publicly, how do I upload the package?

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A4.8/5.0
Behavior5/5

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

Annotations are minimal (only four boolean hints), so the description carries the burden — and it delivers richly: the ticket is valid for one hour ONLY, opens no tool, must not be saved in project files, uploads land in a waiting room with nothing published, and the tool must be called again after manual upload. This far exceeds what the annotations disclose.

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 description is front-loaded with the core purpose and well-structured via a numbered three-part return list and a clear recipe. It is long (~230 words) and contains some parenthetical asides that could be tightened (e.g., 'it opens no tool; you do not have it in your configuration, which is why you get it here'), and the four examples slightly repeat stated use cases — but nearly every sentence earns its place.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With no output schema, the description must explain return values, and it does comprehensively: all three returned items, the ticket's purpose and expiry, two execution paths (curl vs. owner upload), the re-call flow, and integration with sibling tools. The full lifecycle from disk file to publishable upload_id is covered with no critical gaps.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

With 0 parameters, the baseline is 4 and there is nothing for the description to explain about schema fields. It does add useful invocation semantics by specifying where the returned ticket goes (Authorization: Bearer header) and what upload_id is for, which is context the empty schema cannot convey.

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

Purpose5/5

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

The opening sentence states a specific verb and resource: "release a game from a file on disk, with no tunnel and without exposing an unreleased game publicly." The title reinforces the differentiator ('no public URL needed'), and the description names klyo_publish_game/klyo_update_game as the next step, making clear this is the disk-upload entry point rather than a publish/update tool.

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?

The description explicitly routes the agent: pass the returned upload_id to klyo_publish_game or klyo_update_game instead of zip_url, and call the tool again after the owner uploads manually. The four examples map directly to trigger scenarios (disk file, owner uploaded in studio, avoid public exposure), leaving no ambiguity about when to choose this tool.

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

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections.

  1. 1 tool update
    • Addedklyo_game_play
  2. 1 tool update
    • Changedklyo_publish_game1 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."
  3. 5 tool updates
    • Changedklyo_creator_card2 fields changed
      • changedInput schema / properties / haslo / description
        Previous value: -"One sentence up to 80 characters with no full stop; may have <pl>…</pl><en>…</en>. Omit to leave it as it is."New value: +"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."
      • changedInput schema / properties / haslo / maxLength
        Previous value: -90New value: +400
    • Changedklyo_fill_game_form4 fields changed
      • changedInput schema / properties / pola / 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 / pola / properties / haslo / maxLength
        Previous value: -80New value: +900
      • changedInput schema / properties / pola / 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 / pola / properties / nazwa / maxLength
        Previous value: -30New value: +400
    • Changedklyo_fix_game4 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
    • Changedklyo_game_diagnostics1 field changed
      • changedInput schema / properties / zmierz / description
        Previous value: -"Measurement on request for a waiting-room package or a waiting version (workshop): we open the preview on four screens, collect errors and take thumbnails (`dopasowanie.ekrany[].zrzut_adres`). For an assistant without a browser these are the only eyes. Safeguards: files unchanged since the last measurement = the stored result without a browser, one measurement at a time per account, 6 per hour. The `pomiar` field says what happened; you see the result in the next call without `zmierz`."New value: +"Measurement on request for a waiting-room package or a waiting version (workshop): we open the preview on four screens, collect errors and take thumbnails (`dopasowanie.ekrany[].zrzut_adres`). For an assistant without a browser these are the only eyes. Safeguards: files unchanged since the last measurement = the stored result without a browser, one measurement runs at a time per account and one more waits in the queue and starts by itself; 6 per hour, a full measurement counts as two. The `pomiar` field says what happened; you see the result in the next call without `zmierz`."
    • Changedklyo_publish_game4 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
  4. 3 tool updates
    • Changedklyo_delete_game2 fields changed
      • addedInput schema / properties / upload_id
        Added value: +{
        +  "description": "Package in the waiting room that never became a game (from klyo_upload_package or klyo_my_games → paczki).",
        +  "type": "string"
        +}
      • removedInput schema / required
        Removed value: -[
        -  "slug"
        -]
    • Changedklyo_game_diagnostics1 field changed
      • addedInput schema / properties / jezyki
        Added value: +{
        +  "description": "With `pelny: true`: the languages to check (for example [\"pl\",\"en\",\"de\"]) instead of the ones the game declares. A language the game does not show is `jezyk_niedostepny`.",
        +  "items": {
        +    "type": "string"
        +  },
        +  "maxItems": 12,
        +  "type": "array"
        +}
    • Changedklyo_game_stats2 fields changed
      • addedInput schema / properties / dni
        Added value: +{
        +  "description": "How many days of the daily series (default 30).",
        +  "maximum": 365,
        +  "minimum": 1,
        +  "type": "integer"
        +}
      • addedInput schema / properties / sprawdz_google
        Added value: +{
        +  "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.",
        +  "type": "boolean"
        +}
  5. 16 tool updates
    • Changedklyo_add_post6 fields changed
      • changedInput schema / properties / gra_slug / description
        Previous value: -"Opcjonalnie: gra z katalogu, do której wpis się odnosi."New value: +"Optional: the catalogue game the post is about."
      • changedInput schema / properties / jezyk / description
        Previous value: -"Język wpisu."New value: +"Language of the post."
      • changedInput schema / properties / link / description
        Previous value: -"Opcjonalnie: adres gry w sklepie albo na innej stronie."New value: +"Optional: address of the game in a store or on another site."
      • changedInput schema / properties / rodzaj / description
        Previous value: -"pytanie | test (prośba o testy) | premiera | pokaz."New value: +"`pytanie` = question | `test` = request for playtesters | `premiera` = launch | `pokaz` = showcase."
      • changedInput schema / properties / tresc / description
        Previous value: -"Treść wpisu, od 20 znaków. Pisz jak człowiek do ludzi, bez haseł reklamowych."New value: +"Post text, at least 20 characters. Write like a person talking to people, without advertising slogans."
      • changedInput schema / properties / tytul / description
        Previous value: -"Tytuł wpisu, 6–120 znaków."New value: +"Post title, 6 to 120 characters."
    • Changedklyo_creator_card2 fields changed
      • changedInput schema / properties / haslo / description
        Previous value: -"Jedno zdanie do 80 znaków bez kropki; może mieć <pl>…</pl><en>…</en>. Pomiń, żeby zostało, jak jest."New value: +"One sentence up to 80 characters with no full stop; may have <pl>…</pl><en>…</en>. Omit to leave it as it is."
      • changedInput schema / properties / o_mnie / description
        Previous value: -"„O mnie” w pierwszej osobie; dwie wersje w znacznikach <pl>…</pl><en>…</en>. Pomiń, żeby tylko odczytać."New value: +"“About me” in the first person; two versions in tags <pl>…</pl><en>…</en>. Omit to only read."
    • Changedklyo_delete_game1 field changed
      • changedInput schema / properties / slug / description
        Previous value: -"Adres gry w katalogu, np. lantern-thief (z klyo_my_games)."New value: +"Game address in the catalogue, for example lantern-thief (from klyo_my_games)."
    • Changedklyo_fill_game_form22 fields changed
      • changedInput schema / properties / pola / description
        Previous value: -"Pola do wpisania; pomiń, żeby zobaczyć, czego formularz potrzebuje."New value: +"Fields to type in; omit to see what the form needs."
      • changedInput schema / properties / pola / 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 / pola / 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 / pola / 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 / pola / 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 / pola / 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 / pola / 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 / pola / 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 / pola / 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 / pola / 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 / pola / 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."
      • changedInput schema / properties / pola / 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 / pola / 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 / pola / 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 / pola / 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 / pola / 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 / pola / 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 / pola / 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 / pola / 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 / pola / 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 / pola / 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 / pola / 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."
    • Changedklyo_fix_game36 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. Podaj komplet, gdy zmieniasz."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. Give all of them when you change it."
      • 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 / 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."
      • 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 / slug / description
        Previous value: -"Adres gry na koncie, np. lantern-thief (z klyo_my_games)."New value: +"Game address on the account, for example lantern-thief (from klyo_my_games)."
      • 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 / 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."
    • Changedklyo_game_cover2 fields changed
      • changedInput schema / properties / klatka / description
        Previous value: -"Numer klatki do ustawienia. POMIŃ, żeby najpierw dostać listę klatek do wyboru."New value: +"Number of the frame to set. OMIT it to get the list of frames to choose from first."
      • changedInput schema / properties / slug / description
        Previous value: -"Adres gry na koncie, np. lantern-thief (z klyo_my_games)."New value: +"Game address on the account, for example lantern-thief (from klyo_my_games)."
    • Changedklyo_game_diagnostics5 fields changed
      • addedInput schema / properties / pelny
        Added value: +{
        +  "description": "With `zmierz: true`: the production profile you run before `etap: gotowa` and before any release other than `poprawka`. On top of the four screens it adds a slow phone (CPU ×4, 3G network: frames, stutter, memory, first frame) and every declared game language (`jezyki_ui`; a package without a declaration: the languages the game offers), with a thumbnail per language (`dopasowanie.jezyki.jezyki[].zrzut_adres`), untranslated keys, English fallback, cut-off text and text outside the screen. Takes 3 to 4 minutes and counts as two measurements of the limit. `pomiar_pelny` in the response says whether the current result has this profile.",
        +  "type": "boolean"
        +}
      • changedInput schema / properties / sesja / description
        Previous value: -"Twój znacznik testu (1–24 znaki: litery, cyfry, - i _). Otwórz podgląd u siebie z `?s=<ten sam znacznik>`, pograj, a potem podaj go tutaj — dostaniesz TYLKO błędy ze swojego przebiegu, bez tych, które zostawił ktoś inny na tej samej grze."New value: +"Your test marker (1 to 24 characters: letters, digits, - and _). Open the preview on your side with `?s=<the same marker>`, play, then pass it here: you get ONLY the errors from your own run, without those someone else left on the same game."
      • changedInput schema / properties / slug / description
        Previous value: -"Adres gry w katalogu, np. lantern-thief (z klyo_my_games)."New value: +"Game address in the catalogue, for example lantern-thief (from klyo_my_games)."
      • changedInput schema / properties / upload_id / description
        Previous value: -"Identyfikator paczki z poczekalni (z odpowiedzi wgrania albo z podglądu)."New value: +"ID of a package in the waiting room (from the upload response or from the preview)."
      • addedInput schema / properties / zmierz
        Added value: +{
        +  "description": "Measurement on request for a waiting-room package or a waiting version (workshop): we open the preview on four screens, collect errors and take thumbnails (`dopasowanie.ekrany[].zrzut_adres`). For an assistant without a browser these are the only eyes. Safeguards: files unchanged since the last measurement = the stored result without a browser, one measurement at a time per account, 6 per hour. The `pomiar` field says what happened; you see the result in the next call without `zmierz`.",
        +  "type": "boolean"
        +}
    • Addedklyo_game_files
    • Addedklyo_game_patch
    • Changedklyo_game_scaffold1 field changed
      • changedInput schema / properties / rodzaj / description
        Previous value: -"Kształt gry: `plansza` — na tury (solo z minimax, na jednym urządzeniu, online); `zrecznosciowa` — pętla czasu, prowadzenie palcem/klawiszami; `logiczna` (domyślnie) — stuknięcia w cele, wynik."New value: +"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."
    • Changedklyo_game_stats1 field changed
      • changedInput schema / properties / slug / description
        Previous value: -"Adres gry w katalogu, np. lantern-thief (z klyo_my_games)."New value: +"Game address in the catalogue, for example lantern-thief (from klyo_my_games)."
    • Changedklyo_game_translate2 fields changed
      • changedInput schema / properties / slug / description
        Previous value: -"Adres gry, np. lantern-thief (z klyo_my_games)."New value: +"Game address, for example lantern-thief (from klyo_my_games)."
      • changedInput schema / properties / tlumaczenia / description
        Previous value: -"Pomiń, żeby zobaczyć, co przetłumaczyć. Przy zapisie: kod języka (pl, en, de, fr, es, pt, it, ru, uk, tr) → obiekt z KOMPLETEM pól z `oryginal` (nazwa, haslo, opis, sterowanie_dotyk, sterowanie_klawiatura, czas_partii — tylko te, które gra ma)."New value: +"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)."
    • Changedklyo_publish_game39 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."
    • Changedklyo_release_rollback1 field changed
      • changedInput schema / properties / slug / description
        Previous value: -"Adres gry w katalogu (z klyo_my_games)."New value: +"Game address in the catalogue (from klyo_my_games)."
    • Changedklyo_release_version4 fields changed
      • changedInput schema / properties / nowosc / description
        Previous value: -"Co nowego — jedno zdanie na kartę klipu w feedzie. Tylko przy `funkcja`."New value: +"What is new: one sentence for the clip card in the feed. Only with `funkcja`."
      • addedInput schema / properties / przeglad
        Added value: +{
        +  "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”.",
        +  "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 / slug / description
        Previous value: -"Adres gry na koncie, np. lantern-thief (z klyo_my_games)."New value: +"Game address on the account, for example lantern-thief (from klyo_my_games)."
      • changedInput schema / properties / zmiana / description
        Previous value: -"Rodzaj zmiany: poprawka (klip zostaje) | funkcja (klip zostaje, `nowosc` do feedu) | interfejs (stary klip schodzi do czasu nagrania nowego). Pominięte = rodzaj zmierzony z plików (`podpowiedz` z klyo_update_game)."New value: +"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)."
    • Changedklyo_update_game3 fields changed
      • changedInput schema / properties / slug / description
        Previous value: -"Adres gry na koncie, np. lantern-thief (z klyo_my_games)."New value: +"Game address on the account, for example lantern-thief (from klyo_my_games)."
      • changedInput schema / properties / upload_id / description
        Previous value: -"Numer NOWEJ paczki wysłanej do klyo (patrz klyo_upload_package). Preferowane, gdy plik jest na dysku."New value: +"ID of the NEW package sent to klyo (see klyo_upload_package). Preferred when the file is on disk."
      • changedInput schema / properties / zip_url / description
        Previous value: -"Publiczny adres https do NOWEJ paczki ZIP. Tylko gdy paczka naprawdę stoi w sieci."New value: +"Public https address of the NEW ZIP package. Only when the package really is online."
  6. 1 tool update
    • Addedklyo_fill_game_form
  7. 1 tool update
    • Addedklyo_creator_card
  8. 3 tool updates
    • Changedklyo_fix_game2 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."
    • Addedklyo_game_translate
    • Changedklyo_publish_game2 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."
  9. 9 tool updates
    • Addedklyo_add_post
    • Addedklyo_delete_game
    • Addedklyo_fix_game
    • Addedklyo_game_cover
    • Addedklyo_publish_game
    • Addedklyo_release_rollback
    • Addedklyo_release_version
    • Addedklyo_update_game
    • Addedklyo_upload_package
  10. 17 tool updates
    • Removedklyo_admob_analysis
    • Removedklyo_ads_account
    • Removedklyo_ads_analysis
    • Removedklyo_ads_ideas
    • Removedklyo_adsense_check
    • Removedklyo_check_urls
    • Removedklyo_fix_site_code
    • Removedklyo_ga4_analysis
    • Removedklyo_inspect_site
    • Removedklyo_keyword_map
    • Removedklyo_list_sites
    • Removedklyo_preview_diff
    • Removedklyo_preview_file
    • Removedklyo_preview_status
    • Removedklyo_read_conversations
    • Removedklyo_search_rankings
    • Removedklyo_seo_insights
  11. 24 tool updates
    • First observedklyo_admob_analysis
    • First observedklyo_ads_account
    • First observedklyo_ads_analysis
    • First observedklyo_ads_ideas
    • First observedklyo_adsense_check
    • First observedklyo_check_urls
    • First observedklyo_fix_site_code
    • First observedklyo_ga4_analysis
    • First observedklyo_game_diagnostics
    • First observedklyo_game_requirements
    • First observedklyo_game_scaffold
    • First observedklyo_game_sdk
    • First observedklyo_game_stats
    • First observedklyo_inspect_site
    • First observedklyo_keyword_map
    • First observedklyo_list_sites
    • First observedklyo_my_games
    • First observedklyo_preview_diff
    • First observedklyo_preview_file
    • First observedklyo_preview_status
    • First observedklyo_read_conversations
    • First observedklyo_search_rankings
    • First observedklyo_seo_insights
    • First observedklyo_status

Related MCP Connectors

Related MCP Servers

  • A
    license
    A
    quality
    C
    maintenance
    Enables AI agents to deploy multiplayer web games as playable URLs with rooms, live state sync, and leaderboards, all through a single tool call.
    4
    116 npm
    5
    -
  • A
    license
    Not graded
    quality
    C
    maintenance
    Turn the AI you already use into a game studio. Describe a game and Claude or Cursor builds it as a real 3D browser game: playable immediately, hosted on its own link, shareable with anyone. No engine, no build step, no code knowledge, nothing to export. Your AI ships the whole thing: it pulls free 3D assets, rigs characters, and playtests its own build until the game works. Free to start.
    MIT
Try in Browser

Glama MCP Gateway

Add one secure layer between your agents and this server.