klyo games: publish HTML5 browser games
Server Details
Publish, play-test and fix HTML5 browser games from your AI assistant. Own address, 70% ad share.
- Status
- Healthy
- Uptime
- 100.0% over the last 24 hours
- OAuth
- Works in Glama
- Last Tested
- Transport
- Streamable HTTP · MCP 2025-11-25
- URL
- Repository
- krastranseu-lang/klyo-games-mcp
- GitHub Stars
- 1
- Server Listing
- klyo games MCP server
- ChatGPT
- –
- Claude
- –
TDQS
Scored across 23 tools
The descriptions explicitly carve boundaries between the easily-confused clusters: klyo_fill_game_form (browser draft) vs klyo_fix_game (metadata) vs klyo_game_patch (text files) vs klyo_update_game (package), and publish vs update vs release_version vs release_rollback. Still, several tools sound near-identical at the name level and the three reference tools (requirements/scaffold/sdk) plus stats/analytics overlap enough that an agent skimming names could misselect.
All names are snake_case with a uniform klyo_ prefix, which is good. The pattern splits into verb_noun actions (klyo_add_post, klyo_publish_game, klyo_release_version) and a resource-namespaced klyo_game_<noun> group (analytics, cover, diagnostics, files, patch, play, stats), which is readable but not one single convention.
At 23 tools this is on the heavy side for a game-publishing server, and a few could be consolidated (the requirements/scaffold/sdk documentation trio, and stats vs analytics). Each tool does map to a real pipeline step, so it is defensible but borderline.
The core lifecycle is fully covered: list, upload, publish, update, patch, read files, play, diagnose, release, rollback, delete, translate, cover, stats and analytics. Gaps are minor but real: community posts can only be added (no list/edit/delete), reviews are mentioned but not readable, and there is no revenue/earnings report despite stats feeding the ad-share calculation.
Available Tools
23 toolsklyo_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
| Name | Required | Description | Default |
|---|---|---|---|
| link | No | Optional: address of the game in a store or on another site. | |
| jezyk | Yes | Language of the post. | |
| tresc | Yes | Post text, at least 20 characters. Write like a person talking to people, without advertising slogans. | |
| tytul | Yes | Post title, 6 to 120 characters. | |
| rodzaj | Yes | `pytanie` = question | `test` = request for playtesters | `premiera` = launch | `pokaz` = showcase. | |
| gra_slug | No | Optional: the catalogue game the post is about. |
TDQS
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.
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.
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.
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.
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.
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)ADestructiveInspect
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. pseudonim sets the author name players see; klyo_publish_game needs it (error wymaga_nazwy): ask the owner for the name and save it here, then retry.
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?
| Name | Required | Description | Default |
|---|---|---|---|
| haslo | No | One sentence up to 80 characters per language with no full stop; may have <pl>...</pl><en>...</en>, each version counted on its own. Keep it short: the Google title of the page is “Free {name}: {tagline}” (Polish “{nazwa} za darmo: {haslo}”) and must fit 59 characters, otherwise the page gets the generic “{name}: play free online”; do not repeat free/za darmo, the template adds it. The tool answer `do_poprawy` shows the resulting title per language. Omit to leave it as it is. | |
| o_mnie | No | “About me” in the first person; two versions in tags <pl>…</pl><en>…</en>. Omit to only read. | |
| pseudonim | No | The name players see as the author of the developer's games, posts and clips (2 to 30 characters). Required before klyo_publish_game when the account has no name (error `wymaga_nazwy`). ASK THE OWNER for it, never make one up. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already flag destructiveHint=true and readOnlyHint=false; the description goes well beyond by stating the save replaces the previous text and changes the public page immediately, that saves pass through the same validation as the studio, and that the calling assistant (not klyo) authorizes the write. The read-mode behavior is also disclosed, resolving a real ambiguity left by the non-readOnly annotation.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loads the resource and then the write/read contract, with no filler sentences. It is dense — capitalized 'YOU WRITE', interleaved Polish field names, and a trailing example block make it slightly harder to scan than needed for a 3-parameter tool.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
No output schema exists, and the description compensates: it says exactly what the read mode returns (current card, the released games as the only permitted source material, and the rules) and references the `do_poprawy` response field. Combined with the consent gate and mutation warning, an agent has everything needed to call it safely.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% and the schema already documents the tagline length/title-template rules, the `<pl>/<en>` tagging, the omit-to-keep behavior, and the `wymaga_nazwy` requirement. The description restates these rather than adding new semantics, so the 3 baseline applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States the concrete resource (the developer profile card on games.klyo.pl: 'about me' plus the tagline) and immediately clarifies the dual mode — read when `o_mnie`/`haslo` are omitted, write when supplied. It does not explicitly contrast itself with siblings like `klyo_update_game` or `klyo_add_post`, but it does describe the handoff to `klyo_publish_game`, so an agent can place it.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives explicit mode selection rules (no fields = read, fields = save, omitted field = unchanged), a mandatory workflow gate ('FIRST show the text to the owner and save only with their consent'), a content constraint ('Do not invent facts about the person'), and a cross-tool retry instruction tied to `klyo_publish_game` error `wymaga_nazwy`.
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 portalADestructiveInspect
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
| Name | Required | Description | Default |
|---|---|---|---|
| slug | No | Game address in the catalogue, for example lantern-thief (from klyo_my_games). | |
| upload_id | No | Package in the waiting room that never became a game (from klyo_upload_package or klyo_my_games → paczki). |
TDQS
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.
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.
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.
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.
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.
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
| Name | Required | Description | Default |
|---|---|---|---|
| pola | No | Fields to type in; omit to see what the form needs. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations only declare readOnlyHint=false, destructiveHint=false, idempotentHint=false, openWorldHint=false. The description adds substantial context beyond them: the owner watches and submits, klyo runs no model and saves nothing (pure browser draft), and invalid fields return in `odrzucone` with reasons while `do_poprawy`/`formularz_otwarty` surface validation and form state. This tells the agent what actually happens on invocation.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the core purpose in the first sentence, followed by mode behavior, constraints and concrete examples — every paragraph earns its place. It is dense and the opening sentence is long, but there is no filler; a slightly tighter lead would make it a 5.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a tool with a 24-field nested schema, no output schema and no required params, the description covers the workflow (open form → fill → owner submits), the validation feedback keys, and the scope exclusions. The agent has everything needed to call it correctly and interpret the interactive result.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so baseline is 3; the description earns above baseline by explaining the two-mode semantics of `pola` (omit → discovery/field list, provide → live send) and the refusal/validation loop. It does not add field-level detail beyond the already exhaustive schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a precise verb and resource — types fields into the OPEN 'New game' form in the developer's studio — and immediately scopes it as a live draft the owner submits themselves. This distinguishes it behaviorally from the save/update siblings (klyo_update_game, klyo_game_patch) even without naming them. An agent can tell what this tool does and does not do.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicit two-mode guidance: without `pola` you get the field list, allowed values and `formularz_otwarty` (whether the form is open); with `pola` fields are sent live. It states what must NOT be filled (questionnaire, statements, consents) and how to send corrections ('same tool'). Routing to klyo_game_translate for other languages is named in the schema, so the alternative path is clear.
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 listingADestructiveInspect
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
| Name | Required | Description | Default |
|---|---|---|---|
| etap | No | Which stage the game is at: `w_budowie` = in development (still changing), `demo` (a finished slice of a bigger game), `gotowa` = finished (the full game). ASK THE DEVELOPER, do not guess. With `w_budowie` and `demo` players see a badge in the catalogue. | |
| opis | No | Description for players in TWO versions (up to 4000 characters EACH, as in the studio), 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. SUBHEADINGS: a line that starts with “## ” becomes a subheading on the game page; use them for the questions players really ask (“## How to play sudoku”, “## Sudoku tips for beginners”), each followed by a paragraph, and never as the first line (the first sentence is the lead). Other languages (<de>, <es>…) only when the developer REALLY wrote them personally; translations from the assistant go through klyo_game_translate as proposals to approve. | |
| seks | No | Legacy field: Nudity, sexual or suggestive content. Prefer the `ankieta` object with all the questions. | |
| slug | Yes | Game address on the account, for example lantern-thief (from klyo_my_games). | |
| tagi | No | Catalogue shelves separated by commas, optional: logiczne (puzzle), zrecznosciowe (arcade), platformowe (platformers), przygodowe (adventure), na-telefon (for phones), klasyki (classics). Unknown ones are skipped without an error. | |
| haslo | No | 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”). It stands under the name as the H2 and in the Google title of the page. Keep it short: the Google title of the page is “Free {name}: {tagline}” (Polish “{nazwa} za darmo: {haslo}”) and must fit 59 characters, otherwise the page gets the generic “{name}: play free online”; do not repeat free/za darmo, the template adds it. The tool answer `do_poprawy` shows the resulting title per language. REQUIRED for release: without it the server refuses (`brak_hasla`). | |
| nazwa | No | ONLY the game's name, up to 30 characters PER LANGUAGE (as in Google Play and the App Store): “2048 Blockfall”, “Neon Coil: Family Arena”. One language: plain text in `jezyk_tekstu`. Several: one version per tag, <en>Kulki: Glass Garden</en><pl>Kulki: Szklany Ogrod</pl>, and the 30-character limit counts each version on its own. NO tagline and no search phrases (“play free online”) in it: we reject that (`nazwa_z_haslem`), because the game's address and its Google title in both languages come from the name. Do not start with another company's brand. | |
| uklad | No | Game layout: `poziom` = landscape (like a computer screen), `pion` = portrait (like a phone), `oba` = both, the game adapts when the screen rotates, or `komputer` = computer only (mouse and keyboard, landscape): the portal hides the game on phones and its page tells phone visitors to play on a computer. Phone screen notes then warn instead of blocking the release. | |
| strach | No | Legacy field: Scenes that may frighten children. Prefer the `ankieta` object with all the questions. | |
| ankieta | No | 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. | |
| etap_dni | No | Only with `demo` and `w_budowie`: after how many days (7 or 30) we remind the developer to change the stage; after the grace period a game without a decision leaves the catalogue. | |
| nastroje | No | What the player is in the mood for, separated by commas, from the list: 5-minut, jeden-kciuk, rusz-glowa, adrenalina, klasyki, spokojne (5-minut = five-minute fun, jeden-kciuk = one thumb, rusz-glowa = brain teaser, adrenalina = adrenaline, klasyki = classics, spokojne = calm). This is NOT the genre: the genre says what the game IS, the mood says what you need to feel like playing it. Omit if you do not know. | |
| wiek_min | No | Player age ACCORDING TO THE DEVELOPER: it can only RAISE the label above the questionnaire result (a game for older players by choice), never lower it. Above 12 the game does not go into the store apps. Omit when the questionnaire is enough. | |
| jezyki_ui | No | Languages of the MENU AND TEXT INSIDE THE GAME, not of the description. Players choose which languages they want to see games in, so this decides who the game is shown to. A game without a single word (only numbers and shapes, like 2048): only ["bez-tekstu"] (no text). Do not guess: ask the owner or omit it. | |
| kategoria | No | Game genre from the list, UP TO THREE separated by commas (for example “platformowa,przygodowa” = platformer, adventure). Pick the ones that really describe the game, not every one that fits, or the filter stops meaning anything. “inne” (other) only when nothing fits. At least one, otherwise the refusal `rodzaj_spoza_listy`. The values are Polish identifiers, for example zrecznosciowa = arcade, logiczna = puzzle and logic, dopasuj-3 = match-3, obrona-wiezy = tower defense, strzelanka = shooter, wyscigi = racing, planszowa = board game, karcianka = card game, slowna = word game. Allowed: zrecznosciowa, logiczna, ukladanki, klocki, dopasuj-3, kulki, pamiec, sudoku, pasjans, fizyczna, escape, biegacz, jazda, zarzadzanie, tekstowa, rysowanie, dwie-osoby, platformowa, przygodowa, akcja, strzelanka, walka, wyscigi, sportowa, strategiczna, obrona-wiezy, symulacja, farma, rpg, roguelike, przetrwanie, horror, karcianka, planszowa, mahjong, slowna, quiz, edukacyjna, muzyczna, klikacz, ubieranki, gotowanie, szukanie, io, inne. | |
| wynik_max | No | The highest possible score in one round: a guard against inflated scores on the leaderboard. Omit it when the game has no score or no upper limit. | |
| sklep_play | No | Address of the same game in Google Play (https://play.google.com/store/apps/details?id=…), if it is also an app. A badge on the game page and in share texts; empty = no badge. | |
| wulgaryzmy | No | Legacy field: Strong or offensive language. Prefer the `ankieta` object with all the questions. | |
| czas_partii | No | How long one round takes (“2-5 minutes”), in the `jezyk_tekstu` language. | |
| sklep_apple | No | Address of the same game in the App Store (https://apps.apple.com/…), if it is also an iPhone app. | |
| jezyk_tekstu | No | Code of the language the name, tagline and controls are written in (pl, en, de, fr, es, pt, it, ru, uk, tr). ALWAYS give it. The description has its own <en> (required) and <pl> (+40 XP) versions, see `opis`. Other languages are translated by the owner's assistant through klyo_game_translate (proposals the owner approves in the studio); klyo does not translate on its own account. | |
| uklad_pionowy | No | Legacy field: true = portrait game. Prefer `uklad`. | |
| sterowanie_dotyk | No | How to play ON A PHONE, short and concrete (“swipe across the screen”), in the `jezyk_tekstu` language. | |
| przemoc_rysunkowa | No | Legacy field: Cartoon or abstract violence, no blood. Prefer the `ankieta` object with all the questions. | |
| przemoc_realistyczna | No | Legacy field: Realistic violence, blood or cruelty. Prefer the `ankieta` object with all the questions. | |
| sterowanie_klawiatura | No | How to play ON A COMPUTER (“arrow keys and space”), in the `jezyk_tekstu` language. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations declare destructiveHint=true and non-idempotent, and the description supplies the crucial detail behind that hint: 'Pass ONLY the fields you change... the fields you pass replace the current text.' It also discloses refusal codes (opis_en_wymagany, brak_hasla, nazwa_z_haslem) and that this path skips the safety check. It stops short of saying whether edits are reversible or take effect on the live page immediately, so a 4 rather than 5.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the differentiator (content, not package) before the language policy and examples, and the field enumeration is compact. The LANGUAGES paragraph partially repeats material that also lives in the `opis` and `jezyk_tekstu` schema descriptions, which is the only notable redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 26-parameter, nested-object mutation with no output schema, the description covers partial-update semantics, alternatives, language rules and failure modes. It does not describe the response shape (which matters since no output schema exists), though it does reference the `do_poprawy` and refusal identifiers.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
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 cross-parameter rules the schema does not state on its own: the <en> (required, ≥25 words) / <pl> (+40 XP) tag policy, the prohibition on non-developer translations, and the role of `jezyk_tekstu` for name/tagline/controls. It also lists the field groups being edited, giving a useful map across 26 parameters.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Opens with a specific verb+resource ('Change the CONTENT of a game that is already in the catalogue') and enumerates the exact fields it touches. It explicitly names the sibling it is not (`klyo_update_game`) and explains the boundary (package files vs. catalogue text), so an agent can route without opening either schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
States both when to use it ('a typo in the description should not cost' a re-run of the safety check) and when not to (replacing files → `klyo_update_game`; translating → `klyo_game_translate`). It also gives three concrete usage examples, which is more routing help than most definitions provide.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
klyo_game_analyticsWhy players leave: game analyticsARead-onlyIdempotentInspect
Game analytics for the developer, read _najpierw first: one verdict (wyrok, en.verdict) and the top tasks with a reason and a fix (dlaczego/jak, en.why/en.how). Then: lejek = the session funnel the klyo kit records with NO code in the game (wejscie = opened the game page, start = pressed Play, gotowa = klyo.ready() with average load ms for phone and computer, ruch = first real move, gra30 = 30 s of visible play, koniec = round finished (with or without a score), dalej = went on to the next game from the end screen, wynik = reached a score), each step with sesji, telefon, komputer and odpada (sessions lost at this step, the answer to WHERE players leave); poziomy from klyo.level(n, "start"|"complete"|"fail") with start, koniec (completed) and porazka (fail) per level; zdarzenia from klyo.event(name, value) with count and sum; mapa = click map on a 24 × 16 grid of the game screen (komorki = [cell index, clicks], index = row × 24 + column, separate portrait and landscape) collected by the kit with no code; sesje = the latest sessions WITHOUT any person (country, phone or computer, time, play seconds, rounds, score, returning; the player tag is stable only within this game); kraje and rozklad (how long sessions lasted). Fix what _najpierw says (klyo_fix_game, klyo_game_patch, a new version) and ask again after the next players. Read-only.
Examples: • Why do players leave my game? • On which level do people quit lantern-thief? • Where do players click in my game, and how long does it load on phones?
| Name | Required | Description | Default |
|---|---|---|---|
| dni | No | How many days of the daily series (default 30). | |
| slug | Yes | Game address in the catalogue, for example lantern-thief (from klyo_my_games). | |
| sprawdz_google | No | 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. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover readOnly/idempotent/non-destructive, so the description's 'Read-only' is redundant, but it adds real context beyond them: the rate limit on `sprawdz_google` ('at most once an hour per game'), the fact that funnel and click-map data are collected with NO code in the game, and the caveat that the player tag is stable only within this game. These are non-obvious behavioral traits that annotations do not carry.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
It is front-loaded with the verdict first and the follow-up action last, which is good. However the middle is a single dense wall of backticked Polish field names with no paragraph breaks or list structure, and some of it (e.g. re-explaining 'Read-only') does not earn its space. Readable but overstuffed.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
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 justifiably carries the full burden of documenting return values, and it does so thoroughly per dataset (each field's meaning, e.g. `odpada` = sessions lost at this step). The main gap is the lack of disambiguation from the similar `klyo_game_stats` sibling; otherwise it is complete enough to invoke correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so all three parameters are already documented in the schema (including `dni` and the URL-Inspection caveat on `sprawdz_google`). The description adds no parameter-level meaning beyond what the schema provides, so the baseline of 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description names a specific verb+resource (game analytics for the developer) and enumerates the concrete datasets returned: verdict, funnel (`lejek`), levels, events, click map, sessions, countries. That is far more specific than a title restatement. It does not, however, differentiate itself from the sibling `klyo_game_stats` or `klyo_game_diagnostics`, which an agent could easily confuse with this tool.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It gives explicit sequencing ('read `_najpierw` first') and a follow-up workflow ('Fix what `_najpierw` says (klyo_fix_game, klyo_game_patch, a new version) and ask again after the next players'), plus three example questions. It stops short of stating when NOT to use it or how it differs from the overlapping `klyo_game_stats` sibling.
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
| Name | Required | Description | Default |
|---|---|---|---|
| slug | Yes | Game address on the account, for example lantern-thief (from klyo_my_games). | |
| klatka | No | Number of the frame to set. OMIT it to get the list of frames to choose from first. |
TDQS
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.
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.
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.
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.
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.
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 workingBInspect
WAITING PACKAGE VERSIONS: with a new upload_id pass poprzednia_paczka (the currently selected upload_id) to append a version of the same draft. With an older upload_id pass przywroc: true to select it again. Ownership, conflicts and retention are checked by the server. The 3 most recently selected versions keep their 14-day lifetime; older ZIPs expire within 24 hours, previews have a 7-day cleanup grace period. Use klyo_update_game for games with a slug. Read _najpierw first: one object with what blocks the release (co), the parsed error (komunikat, miejsce file:line, biblioteka crate and version, urzadzenie device and browser), why (dlaczego, en.why) and how to fix it (jak_naprawic, en.how_to_fix). Each raw trace appears once, in bledy_przegladarki; bledy_rozbior[].linia points into it. Eyes inside the game: for a package in the waiting room (upload_id) or a game in the catalogue (slug) it returns the files the game asked for that are missing from the package, and the JavaScript errors from the preview in the browser, in the order they happened. Also: the package check result (size, third-party ads, malicious code, missing klyo kit), ready conclusions in wnioski, and dopasowanie: the fit measurement from publishing on four screens (phone portrait and landscape with touch, tablet, desktop): uwagi[] with the codes przewija (page scrolls) | maly_ekran (screen too small) | maly_tekst (text too small) | ciezka (too heavy) | dlugie_wczytanie (long load) | niski_fps (low frame rate) | male_cele_dotyku (small touch targets) | przycisk_bez_nazwy (button without a name), dotyk_nasluch and zrzut thumbnails; null = the game has not been measured yet (a measurement starts with every version release). VERDICT bramka.wynik: POPRAW (fix krytyczne), GOTOWA, GOTOWA_BEZ_POMIARU_EKRANOW, NIESPRAWDZONA (the game asked for 3D graphics, WebGL or WebGPU, and the measurement browser has none: the klyo server renders no 3D, so the gameplay was NOT seen; nie_sprawdzono, test it on a device with a graphics card) and POMIAR_NIEAKTUALNY (the measurement describes older files, dopasowanie.aktualny: false: order zmierz). Never report NIESPRAWDZONA or POMIAR_NIEAKTUALNY as ready. GOOGLE: widocznosc (game in the catalogue) says whether the game page is in Google search: w_google: false with problemy[] (kod podobny_opis: the page text repeats z by procent % above prog %, so the last catalogue build took the page out of Google with noindex), each with dlaczego/jak_naprawic and en.why/en.how_to_fix; with a passing gate the same shows in _najpierw.google. A green gate does not mean the page is in Google: rewrite the description in that language (klyo_fix_game) and it returns with the next build. fps is the GAME's frame rate, null when the game drew no frame (the page rhythm is in fps_strony); grafika_gry says what the game asked for, maszyna.grafika what the measurement browser can render. A thumbnail overwritten by a later measurement loses zrzut_adres (zrzut_z_innego_pomiaru: true). Read-only. YOUR BROWSER IS THE EYE HERE: we do not keep a browser farm and do not need one. Open the preview address on YOUR side (Playwright, Chrome, a phone), really play (click, swipe, wait for the second level) and our sensor on that page reports everything that crashed. Then ask with this tool. Order: open, play, ask; the other way round gives an empty answer, because errors are collected only once the game runs. Add ?s=<your marker> to the address and pass sesja with the same value to get only the errors from your own run. NO BROWSER (a conversation in claude.ai or ChatGPT)? Pass zmierz: true for a package or a waiting version: we open the preview for you, collect errors and thumbnails of four screens (zrzut_adres); one measurement runs at a time per account and one more waits in the queue and starts by itself; 6 per hour, a full measurement counts as two. Add pelny: true for the production profile (a slow phone and every declared language). A game with a waiting version (workshop) shows its files, errors and premium review (przeglad).
Examples: • Why does my game show a white screen? • Check the errors in the package preview • What is missing from the lantern-thief package?
| Name | Required | Description | Default |
|---|---|---|---|
| slug | No | Game address in the catalogue, for example lantern-thief (from klyo_my_games). | |
| pelny | No | With `zmierz: true`: the production profile you run before `etap: gotowa` and before any release other than `poprawka`. On top of the four screens it adds a slow phone (CPU ×4, 3G network: frames, stutter, memory, first frame) and every declared game language (`jezyki_ui`; a package without a declaration: the languages the game offers), with a thumbnail per language (`dopasowanie.jezyki.jezyki[].zrzut_adres`), untranslated keys, English fallback, cut-off text and text outside the screen. Takes 3 to 4 minutes and counts as two measurements of the limit. `pomiar_pelny` in the response says whether the current result has this profile. | |
| sesja | No | Your test marker (1 to 24 characters: letters, digits, - and _). Open the preview on your side with `?s=<the same marker>`, play, then pass it here: you get ONLY the errors from your own run, without those someone else left on the same game. | |
| jezyki | No | With `pelny: true`: the languages to check (for example ["pl","en","de"]) instead of the ones the game declares. A language the game does not show is `jezyk_niedostepny`. | |
| zmierz | No | 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`. | |
| przywroc | No | With an older waiting-room upload_id, select that version again. The original files remain intact. Do not use with slug or poprzednia_paczka. | |
| upload_id | No | ID of a package in the waiting room (from the upload response or from the preview). | |
| poprzednia_paczka | No | For an update before first publication: the currently selected upload_id of the same draft. Pass together with the new upload_id on its first preview. A stale parent is refused; reread klyo_my_games instead of creating another draft. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
It discloses a lot of genuine behavior: per-account concurrency (one measurement running, one queued), a 6-per-hour quota with a full measurement counting double, 14-day/24-hour/7-day retention rules, and the NIESPRAWDZONA/POMIAR_NIEAKTUALNY caveats. But it states 'Read-only.' while annotations declare readOnlyHint=false and the description itself documents `zmierz` starting a server-side measurement job that consumes quota — a self-inconsistent claim that can mislead an agent about side effects.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A ~600-word, single-block wall of text that is not front-loaded: it leads with draft-version bookkeeping rather than the tool's function. It mixes English prose with untranslated Polish field names and interleaves four distinct topics (version selection, error reading, gate verdicts, Google visibility, measurement), making it hard to scan.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For an 8-parameter tool with no output schema, the description does the heavy lifting: it enumerates the returned fields (`_najpierw`, `bledy_przegladarki`, `dopasowanie.uwagi[]` codes, `bramka.wynik` values, `widocznosc`) and explains what each verdict means. It is complete enough to call correctly, though disorganization and the 'Read-only' misstatement undercut it slightly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the baseline would be 3; the description adds cross-parameter semantics the schema does not spell out, e.g. `poprzednia_paczka` must accompany the new `upload_id` on its first preview, `sesja` must match the `?s=` marker used when opening the preview, and `pelny` only matters alongside `zmierz`. It leaves the odd 'klyo_update_game for games with a slug' line unexplained relative to the `slug` parameter.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The tool is a diagnostics reader for a waiting-room package (`upload_id`) or a catalogue game (`slug`), returning missing files, JS errors, gate verdicts and screen-fit measurements. That purpose is discoverable, but the description opens with 'WAITING PACKAGE VERSIONS' workflow mechanics instead of a statement of what the tool is for, so the agent must reconstruct the purpose from scattered fragments. Sibling differentiation is only partial and partly confusing ('Use klyo_update_game for games with a slug').
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It gives real routing guidance: the prescribed order ('Order: open, play, ask; the other way round gives an empty answer'), the no-browser fallback (`zmierz: true`), the session-isolation recipe (`?s=` + `sesja`), and a pointer to klyo_fix_game for Google visibility fixes. What is missing is an explicit statement of when NOT to call this tool or which sibling to use for pure error checking versus publishing.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
klyo_game_filesRead a game's filesARead-onlyIdempotentInspect
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?
| Name | Required | Description | Default |
|---|---|---|---|
| path | No | File to read, relative to the game, for example js/gra.js. Without this field you get the file list. | |
| slug | No | Game address, for example lantern-thief (from klyo_my_games). Give this or `upload_id`. | |
| lines | No | Maximum number of lines (reading stops at 200 KB anyway). | |
| changes | No | Together with the list: what changed in the waiting version compared with the version players have. | |
| from_line | No | Line to start reading from (default 1). | |
| upload_id | No | A waiting-room package (from klyo_upload_package), when there is no game yet. |
TDQS
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.
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.
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.
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.
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.
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 workshopADestructiveInspect
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
| Name | Required | Description | Default |
|---|---|---|---|
| nowa | No | A game from scratch, without a ZIP: in the same call a package is created from the Klyo Kit skeleton (as in klyo_game_scaffold) and `edits` change it right away (you overwrite skeleton files without `expected_hash`). The response carries `upload_id` for the next calls. Instead of `slug` and `upload_id`. Values: `plansza` (board game with turns), `zrecznosciowa` (arcade), `logiczna` (puzzle). | |
| slug | No | Game address (from klyo_my_games). Give this or `upload_id`. | |
| edits | No | Changes; applied all or none. Each: `path` and one of three: `old_string` with `new_string`, `content` or `delete: true`. | |
| revert | No | Return the workshop to a checkpoint (`auto-N` from an edit response or a name from `checkpoint`; the list is in klyo_game_files). Stands alone, without `edits`. The state before the revert is saved as a checkpoint too. Players see nothing: this is not a release rollback. | |
| discard | No | Abandon the workshop: the game loses the waiting version from the workshop (the version players have is untouched), a package returns to the files from its ZIP. Stands alone, without `edits`. | |
| inna_gra | No | Confirm that this edit really turns the game into a differently named one. Without it, an edit whose new index.html <title> shares no word with the game name (while the old title did) is refused with `inna_gra`: a different game is a new package (`nowa` or klyo_upload_package), not a version of this one. | |
| upload_id | No | A waiting-room package, when there is no game yet; klyo_publish_game later releases it with these edits. | |
| checkpoint | No | A named workshop checkpoint (for example premium-ui-v1): a snapshot of the state BEFORE the changes of this call; may stand alone, without `edits`. An automatic `auto-N` checkpoint is created before every edit anyway. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already flag destructive/non-idempotent writes, but the description adds substantial context beyond them: the workshop isolation model (players keep the old version), all-or-none application, conflict on `expected_hash` mismatch, integrity checks before release, and hard limits (1 MB/file, 256 KB/call, 20 edits, 3 workshops, 7-day expiry).
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the core operation and the workshop concept before edge cases. It is dense and some sentences pack several rules (limits, checks, undo) together, which costs a little scannability, but nothing is genuinely off-topic for a tool of this complexity.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
No output schema exists, and the description compensates by noting the response carries an `auto-N` checkpoint and, for `nowa`, a `upload_id`. Combined with the conflict, limit and undo semantics, an agent has everything needed to invoke this correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, yet the description still adds meaning the schema cannot: the three mutually exclusive edit shapes, that `old_string` must occur exactly once unless `replace_all`, that `expected_hash` is required for existing files, and what each of `nowa`/`revert`/`discard`/`checkpoint` does operationally.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Edits a game's text files'), lists the exact handled extensions, and names the target identifiers (`slug` / `upload_id`). It explicitly distinguishes itself from siblings such as klyo_release_version, klyo_publish_game, klyo_game_files and klyo_game_scaffold.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives explicit routing: use this for in-place text edits without ZIP, use `nowa` for a game from scratch, use klyo_upload_package + `from_upload` for binaries, use klyo_release_version/klyo_publish_game to release. It also names the undo path (`revert`/`discard`) and the conflict condition where edits are refused.
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
| Name | Required | Description | Default |
|---|---|---|---|
| slug | No | Your game's address (from klyo_my_games). Give this or `upload_id`. | |
| close | No | End the session and close the game on the owner's device. | |
| steps | No | Input on one timeline of at most 3000 ms. Without `at_ms` a step starts when the previous one ends. | |
| device | No | Which of the owner's devices (`urzadzenie.id` from an earlier answer); default: the most recently switched on. | |
| screen | No | Size of the game view on the owner's device (default: the whole device screen). | |
| restart | No | Reload the game before the steps. | |
| upload_id | No | A waiting-room package, when there is no game yet. | |
| request_id | No | Your id for this call: a retry with the same id returns the same result without playing again. | |
| screenshots | No | Screenshots taken after the steps (default 1 when there is no screenshot step). |
TDQS
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.
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.
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.
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.
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.
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)ARead-onlyIdempotentInspect
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, a catalogue of FREE game assets by genre (CC0 3D models, textures, sounds, fonts with direct download links and a credit line for each; propose a premium version of the game to the user with them), 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), and co_zatrzyma_wgranie: everything that stops a package at upload (nothing outside klyo: own login, PeerJS, third-party backends, payments and ads; files from public CDNs klyo pulls in by itself) with the fix for each. 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 • Where can I get free 3D models and sounds for my game?
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already establish read-only, idempotent, closed-world behavior, but the description adds substantial context the annotations cannot: the returned standard is in Polish, covers screens, input, game loop, free asset catalogue, social layers, testing, release stages, and upload blockers. For a zero-parameter informational tool with no output schema, it thoroughly discloses what the agent will receive and the downstream test-gate requirement.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
It is front-loaded with 'GAME PRODUCTION CONTRACT: CALL THIS FIRST', which is good, but the body is a very dense run-on enumeration separated by semicolons, covering nearly every aspect of the standard. Much of the list is useful context, but the sheer density makes it harder to scan than it needs to be.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a complex informational tool with no output schema and no parameters, the description explains what the standard contains, the language of the returned text, the testing gate, and why the user should not be asked routine setup questions. Nothing an agent needs in order to call it correctly or interpret the response appears to be missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
There are zero parameters, so the baseline is 4. The description confirms 'no parameters' and 'Read-only', which is consistent with the empty schema, but no additional parameter meaning is needed or supplied.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
It states a specific verb and resource ('Returns the studio quality standard') and explicitly positions itself as a prerequisite ('CALL THIS FIRST, before you design or write a single line of a game'). That distinguishes it from the many build/publish siblings such as klyo_game_scaffold and klyo_publish_game without opening their schemas.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It gives explicit when-to-use instructions ('CALL THIS FIRST'), a concrete example ('when the user writes "make a battleship game"'), and a use-avoidance rule ('do not ask them about phones, leaderboards or sound: it is all here'). It also adds a completion condition ('Do not say "done" until klyo-test passes without critical errors'), leaving little to inference.
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 fromARead-onlyIdempotentInspect
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?
| Name | Required | Description | Default |
|---|---|---|---|
| rodzaj | No | 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. |
TDQS
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.
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.
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.
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.
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.
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)ARead-onlyIdempotentInspect
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?
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
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.
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.
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.
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.
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.
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 statisticsARead-onlyIdempotentInspect
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
| Name | Required | Description | Default |
|---|---|---|---|
| dni | No | How many days of the daily series (default 30). | |
| slug | Yes | Game address in the catalogue, for example lantern-thief (from klyo_my_games). | |
| sprawdz_google | No | 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. |
TDQS
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.
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.
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.
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.
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.
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, the description at least 25 words with letters (opis_slow_min; a shorter one comes back with its word count), 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. PAGE ADDRESS PER LANGUAGE: every language page of the game has its own address in that language (/de/spider-solitaer/, /uk/pasians-pavuk/), never the Polish one. Send adres with the language, or we derive it from the translated name; it is approved together with the texts and then stays stable (a later name change does not move it). ORDER: translate BEFORE the release, while the game waits (klyo_publish_game status oczekuje) and ask the owner to approve them; then the very first catalogue build has every language ready and indexable. Translations sent after the release leave those language pages for a few minutes as an unchecked machine translation, kept out of Google until approved.
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
| Name | Required | Description | Default |
|---|---|---|---|
| slug | Yes | Game address, for example lantern-thief (from klyo_my_games). | |
| tlumaczenia | No | 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). Optional `adres` (languages other than pl and en): the game page address in that language, lowercase Latin letters, digits and single hyphens, 2 to 60 characters, from the translated name (German "Spider Solitär" → spider-solitaer, Ukrainian "Пасьянс Павук" → pasians-pavuk). Without it we build it from the translated `nazwa`. A taken or reserved address comes back in `odrzucone`; after the owner approves, the old address redirects 301 to the new one. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations declare readOnlyHint=false, idempotentHint=false, destructiveHint=false, openWorldHint=false, and the description goes well beyond them: outputs are PROPOSALS requiring owner approval, failed languages return in `odrzucone`, resending is the fix path, saved addresses redirect 301. However it does not state permission/auth requirements or rate limits, and the `idempotentHint=false` implication (re-sending is expected/normal) is only implicitly handled via the retry loop.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Dense but front-loaded: purpose first, then the two steps, then validation rules, then workflow and ordering. Every section carries operational information, though the PAGE ADDRESS and ORDER paragraphs make it longer than ideal for a two-parameter tool.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a nested, multi-step tool with no output schema, the description covers what each call returns (`oryginal`, `do_tlumaczenia` with state, check rules, `odrzucone` with reasons), the approval lifecycle, the address stability rule, and ordering relative to release. An agent has everything needed to invoke and interpret it correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% and the schema already documents slug, tlumaczenia structure and the adres format, so the baseline is 3. The description adds real meaning beyond the schema: the two-step sequence (call with only `slug` first), the requirement that ALL fields from `oryginal` be present, and the check rules applied per language. The overlap with the adres examples in the schema keeps it from a 5.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb+resource (translations of a game's texts into named klyo languages) and explicitly distinguishes itself from klyo_fix_game, which handles the developer's own texts. An agent can identify the tool and separate it from siblings 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.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives explicit when/when-not guidance: the two-step call pattern (slug-only to fetch, then slug+tlumaczenia to save), the recommended order (translate before release while klyo_publish_game status is `oczekuje`), and the alternative for editing developer texts (klyo_fix_game). It even warns against a specific wrong behavior (don't tell the user translations are live).
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 catalogueARead-onlyIdempotentInspect
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
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
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.
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.
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.
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.
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.
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. NEW GAME OR NEW VERSION: for a change to a game the account already has (see klyo_my_games), use klyo_update_game with its slug, never this tool; a package that shares most files or the series name with an existing game is refused unless nowa_gra: true. 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
| Name | Required | Description | Default |
|---|---|---|---|
| etap | No | Which stage the game is at: `w_budowie` = in development (still changing), `demo` (a finished slice of a bigger game), `gotowa` = finished (the full game). ASK THE DEVELOPER, do not guess. With `w_budowie` and `demo` players see a badge in the catalogue. | |
| opis | Yes | Description for players in TWO versions (up to 4000 characters EACH, as in the studio), 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. SUBHEADINGS: a line that starts with “## ” becomes a subheading on the game page; use them for the questions players really ask (“## How to play sudoku”, “## Sudoku tips for beginners”), each followed by a paragraph, and never as the first line (the first sentence is the lead). Other languages (<de>, <es>…) only when the developer REALLY wrote them personally; translations from the assistant go through klyo_game_translate as proposals to approve. | |
| seks | No | Legacy field: Nudity, sexual or suggestive content. Prefer the `ankieta` object with all the questions. | |
| tagi | No | Catalogue shelves separated by commas, optional: logiczne (puzzle), zrecznosciowe (arcade), platformowe (platformers), przygodowe (adventure), na-telefon (for phones), klasyki (classics). Unknown ones are skipped without an error. | |
| haslo | Yes | 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”). It stands under the name as the H2 and in the Google title of the page. Keep it short: the Google title of the page is “Free {name}: {tagline}” (Polish “{nazwa} za darmo: {haslo}”) and must fit 59 characters, otherwise the page gets the generic “{name}: play free online”; do not repeat free/za darmo, the template adds it. The tool answer `do_poprawy` shows the resulting title per language. REQUIRED for release: without it the server refuses (`brak_hasla`). | |
| nazwa | Yes | ONLY the game's name, up to 30 characters PER LANGUAGE (as in Google Play and the App Store): “2048 Blockfall”, “Neon Coil: Family Arena”. One language: plain text in `jezyk_tekstu`. Several: one version per tag, <en>Kulki: Glass Garden</en><pl>Kulki: Szklany Ogrod</pl>, and the 30-character limit counts each version on its own. NO tagline and no search phrases (“play free online”) in it: we reject that (`nazwa_z_haslem`), because the game's address and its Google title in both languages come from the name. Do not start with another company's brand. | |
| uklad | No | Game layout: `poziom` = landscape (like a computer screen), `pion` = portrait (like a phone), `oba` = both, the game adapts when the screen rotates, or `komputer` = computer only (mouse and keyboard, landscape): the portal hides the game on phones and its page tells phone visitors to play on a computer. Phone screen notes then warn instead of blocking the release. | |
| strach | No | Legacy field: Scenes that may frighten children. Prefer the `ankieta` object with all the questions. | |
| ankieta | Yes | 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. | |
| zip_url | No | Public https address of the ZIP package (index.html inside), up to 350 MB. Only for a game that REALLY is online already, for example when moving it from itch.io. | |
| etap_dni | No | Only with `demo` and `w_budowie`: after how many days (7 or 30) we remind the developer to change the stage; after the grace period a game without a decision leaves the catalogue. | |
| nastroje | No | 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. | |
| nowa_gra | No | Set `true` ONLY when this is really a second, separate game. If the package is a new version of a game the account already has, use klyo_update_game with its `slug`; without this flag we refuse a package that shares most files or the series name with an existing game and tell you which one. | |
| przeglad | No | 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”. | |
| wiek_min | No | Player age ACCORDING TO THE DEVELOPER: it can only RAISE the label above the questionnaire result (a game for older players by choice), never lower it. Above 12 the game does not go into the store apps. Omit when the questionnaire is enough. | |
| bez_porno | Yes | Statement by the account owner: the game has no nudity or sexual content. Must be `true`. We accept 18+ games for violence, but not sexual content: that is a condition of the catalogue, not a preference. | |
| jezyki_ui | No | Languages of the MENU AND TEXT INSIDE THE GAME, not of the description. Players choose which languages they want to see games in, so this decides who the game is shown to. A game without a single word (only numbers and shapes, like 2048): only ["bez-tekstu"] (no text). Do not guess: ask the owner or omit it. | |
| kategoria | Yes | Game genre from the list, UP TO THREE separated by commas (for example “platformowa,przygodowa” = platformer, adventure). Pick the ones that really describe the game, not every one that fits, or the filter stops meaning anything. “inne” (other) only when nothing fits. At least one, otherwise the refusal `rodzaj_spoza_listy`. The values are Polish identifiers, for example zrecznosciowa = arcade, logiczna = puzzle and logic, dopasuj-3 = match-3, obrona-wiezy = tower defense, strzelanka = shooter, wyscigi = racing, planszowa = board game, karcianka = card game, slowna = word game. Allowed: zrecznosciowa, logiczna, ukladanki, klocki, dopasuj-3, kulki, pamiec, sudoku, pasjans, fizyczna, escape, biegacz, jazda, zarzadzanie, tekstowa, rysowanie, dwie-osoby, platformowa, przygodowa, akcja, strzelanka, walka, wyscigi, sportowa, strategiczna, obrona-wiezy, symulacja, farma, rpg, roguelike, przetrwanie, horror, karcianka, planszowa, mahjong, slowna, quiz, edukacyjna, muzyczna, klikacz, ubieranki, gotowanie, szukanie, io, inne. | |
| upload_id | No | ID of the package sent to klyo (see klyo_upload_package). Use THIS when the file is on disk; do not set up a tunnel. | |
| wynik_max | No | The highest possible score in one round: a guard against inflated scores on the leaderboard. Omit it when the game has no score or no upper limit. | |
| sklep_play | No | Address of the same game in Google Play (https://play.google.com/store/apps/details?id=…), if it is also an app. A badge on the game page and in share texts; empty = no badge. | |
| wulgaryzmy | No | Legacy field: Strong or offensive language. Prefer the `ankieta` object with all the questions. | |
| czas_partii | No | How long one round takes (“2-5 minutes”), in the `jezyk_tekstu` language. | |
| sklep_apple | No | Address of the same game in the App Store (https://apps.apple.com/…), if it is also an iPhone app. | |
| jezyk_tekstu | Yes | Code of the language the name, tagline and controls are written in (pl, en, de, fr, es, pt, it, ru, uk, tr). ALWAYS give it. The description has its own <en> (required) and <pl> (+40 XP) versions, see `opis`. Other languages are translated by the owner's assistant through klyo_game_translate (proposals the owner approves in the studio); klyo does not translate on its own account. | |
| uklad_pionowy | No | Legacy field: true = portrait game. Prefer `uklad`. | |
| sterowanie_dotyk | No | How to play ON A PHONE, short and concrete (“swipe across the screen”), in the `jezyk_tekstu` language. | |
| przemoc_rysunkowa | No | Legacy field: Cartoon or abstract violence, no blood. Prefer the `ankieta` object with all the questions. | |
| przemoc_realistyczna | No | Legacy field: Realistic violence, blood or cruelty. Prefer the `ankieta` object with all the questions. | |
| sterowanie_klawiatura | No | How to play ON A COMPUTER (“arrow keys and space”), in the `jezyk_tekstu` language. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations only say it is a non-read-only, open-world, non-destructive write, so the description carries real weight and delivers: 'IT DOES NOT PUBLISH', the game lands at g-<slug>.klyo.pl in `oczekuje` until the owner clicks Release, the package is downloaded and scanned (ads, malware, brands), and a white-screen follow-up path exists. It does not describe response shape or what happens on partial failure, so it stops short of a 5.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The paragraph is dense and heavily capitalized but front-loads the action, then the crucial 'IT DOES NOT PUBLISH' correction, then routing rules and prerequisites, ending with concrete example utterances. For a 30-parameter tool with nested objects, nearly every sentence earns its place, though some restatement of schema limits could be trimmed.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given 30 parameters, nested questionnaires and reviews, no output schema, and high-stakes publishing, the description covers the outcome state, the address, the pre-call agreement requirement, the package review, the premium review gate, and the update-vs-create fork. Nothing an agent needs in order to call this correctly and set user expectations is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% and the schema text is extremely detailed (limits, refusal codes, questionnaire semantics), so the baseline is 3. The description adds a few cross-parameter rules (nowa_gra vs. update path, przeglad required for `gotowa`) but mostly restates constraints already in the schema and defers to it for limits.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Opens with a specific verb and resource and scope: 'Prepare a browser game for release on games.klyo.pl', then enumerates exactly which fields the call assembles. It explicitly distinguishes itself from klyo_update_game and points to klyo_upload_package for the package, so an agent can tell it apart from every sibling without opening a schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives explicit when-to-use and when-not-to-use: new game vs. new version of an existing game (use klyo_update_game with its slug), white screen → klyo_game_diagnostics, translations later via klyo_game_translate, owner must have accepted dev terms first. Alternatives and prerequisites are named, not implied.
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
| Name | Required | Description | Default |
|---|---|---|---|
| slug | Yes | Game address in the catalogue (from klyo_my_games). |
TDQS
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.
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.
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.
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.
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.
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
| Name | Required | Description | Default |
|---|---|---|---|
| slug | Yes | Game address on the account, for example lantern-thief (from klyo_my_games). | |
| nowosc | No | What is new: one sentence for the clip card in the feed. Only with `funkcja`. | |
| zmiana | No | Kind of change: `poprawka` = fix (the clip stays) | `funkcja` = feature (the clip stays, `nowosc` goes to the feed) | `interfejs` = interface (the old clip is taken down until a new one is recorded). Omitted = the kind measured from the files (`podpowiedz` from klyo_update_game). | |
| przeglad | No | 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”. |
TDQS
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.
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.
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.
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.
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.
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 statusARead-onlyIdempotentInspect
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?
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
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.
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.
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.
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.
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.
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 versionADestructiveInspect
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
| Name | Required | Description | Default |
|---|---|---|---|
| slug | Yes | Game address on the account, for example lantern-thief (from klyo_my_games). | |
| zip_url | No | Public https address of the NEW ZIP package. Only when the package really is online. | |
| upload_id | No | ID of the NEW package sent to klyo (see klyo_upload_package). Preferred when the file is on disk. |
TDQS
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.
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.
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.
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.
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.
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?
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
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.
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.
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.
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.
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.
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 tool update
- Changed
klyo_creator_card1 field changed- added
Input schema / properties / pseudonimAdded value: +{ + "description": "The name players see as the author of the developer's games, posts and clips (2 to 30 characters). Required before klyo_publish_game when the account has no name (error `wymaga_nazwy`). ASK THE OWNER for it, never make one up.", + "maxLength": 30, + "minLength": 2, + "type": "string" +}
1 tool update
- Changed
klyo_game_patch1 field changed- added
Input schema / properties / inna_graAdded value: +{ + "description": "Confirm that this edit really turns the game into a differently named one. Without it, an edit whose new index.html <title> shares no word with the game name (while the old title did) is refused with `inna_gra`: a different game is a new package (`nowa` or klyo_upload_package), not a version of this one.", + "type": "boolean" +}
1 tool update
- Changed
klyo_game_diagnostics2 fields changed- added
Input schema / properties / poprzednia_paczkaAdded value: +{ + "description": "For an update before first publication: the currently selected upload_id of the same draft. Pass together with the new upload_id on its first preview. A stale parent is refused; reread klyo_my_games instead of creating another draft.", + "maxLength": 128, + "type": "string" +} - added
Input schema / properties / przywrocAdded value: +{ + "description": "With an older waiting-room upload_id, select that version again. The original files remain intact. Do not use with slug or poprzednia_paczka.", + "type": "boolean" +}
1 tool update
- Changed
klyo_publish_game1 field changed- added
Input schema / properties / nowa_graAdded value: +{ + "description": "Set `true` ONLY when this is really a second, separate game. If the package is a new version of a game the account already has, use klyo_update_game with its `slug`; without this flag we refuse a package that shares most files or the series name with an existing game and tell you which one.", + "type": "boolean" +}
1 tool update
- Changed
klyo_game_translate1 field changed- changed
Input schema / properties / tlumaczenia / descriptionPrevious 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)."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). Optional `adres` (languages other than pl and en): the game page address in that language, lowercase Latin letters, digits and single hyphens, 2 to 60 characters, from the translated name (German \"Spider Solitär\" → spider-solitaer, Ukrainian \"Пасьянс Павук\" → pasians-pavuk). Without it we build it from the translated `nazwa`. A taken or reserved address comes back in `odrzucone`; after the owner approves, the old address redirects 301 to the new one."
1 tool update
- Added
klyo_game_analytics
4 tool updates
- Changed
klyo_creator_card1 field changed- changed
Input schema / properties / haslo / descriptionPrevious 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."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. Keep it short: the Google title of the page is “Free {name}: {tagline}” (Polish “{nazwa} za darmo: {haslo}”) and must fit 59 characters, otherwise the page gets the generic “{name}: play free online”; do not repeat free/za darmo, the template adds it. The tool answer `do_poprawy` shows the resulting title per language. Omit to leave it as it is."
- Changed
klyo_fill_game_form1 field changed- changed
Input schema / properties / pola / properties / haslo / descriptionPrevious 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`)."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”). It stands under the name as the H2 and in the Google title of the page. Keep it short: the Google title of the page is “Free {name}: {tagline}” (Polish “{nazwa} za darmo: {haslo}”) and must fit 59 characters, otherwise the page gets the generic “{name}: play free online”; do not repeat free/za darmo, the template adds it. The tool answer `do_poprawy` shows the resulting title per language. REQUIRED for release: without it the server refuses (`brak_hasla`)."
- Changed
klyo_fix_game1 field changed- changed
Input schema / properties / haslo / descriptionPrevious 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`)."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”). It stands under the name as the H2 and in the Google title of the page. Keep it short: the Google title of the page is “Free {name}: {tagline}” (Polish “{nazwa} za darmo: {haslo}”) and must fit 59 characters, otherwise the page gets the generic “{name}: play free online”; do not repeat free/za darmo, the template adds it. The tool answer `do_poprawy` shows the resulting title per language. REQUIRED for release: without it the server refuses (`brak_hasla`)."
- Changed
klyo_publish_game1 field changed- changed
Input schema / properties / haslo / descriptionPrevious 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`)."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”). It stands under the name as the H2 and in the Google title of the page. Keep it short: the Google title of the page is “Free {name}: {tagline}” (Polish “{nazwa} za darmo: {haslo}”) and must fit 59 characters, otherwise the page gets the generic “{name}: play free online”; do not repeat free/za darmo, the template adds it. The tool answer `do_poprawy` shows the resulting title per language. REQUIRED for release: without it the server refuses (`brak_hasla`)."
3 tool updates
- Changed
klyo_fill_game_form2 fields changed- changed
Input schema / properties / pola / properties / uklad / descriptionPrevious value: -"Game layout: `poziom` = landscape (like a computer screen), `pion` = portrait (like a phone) or `oba` = both, the game adapts when the screen rotates."New value: +"Game layout: `poziom` = landscape (like a computer screen), `pion` = portrait (like a phone), `oba` = both, the game adapts when the screen rotates, or `komputer` = computer only (mouse and keyboard, landscape): the portal hides the game on phones and its page tells phone visitors to play on a computer. Phone screen notes then warn instead of blocking the release." - changed
Input schema / properties / pola / properties / uklad / enumPrevious value: -[ - "poziom", - "pion", - "oba" -]New value: +[ + "poziom", + "pion", + "oba", + "komputer" +]
- Changed
klyo_fix_game2 fields changed- changed
Input schema / properties / uklad / descriptionPrevious value: -"Game layout: `poziom` = landscape (like a computer screen), `pion` = portrait (like a phone) or `oba` = both, the game adapts when the screen rotates."New value: +"Game layout: `poziom` = landscape (like a computer screen), `pion` = portrait (like a phone), `oba` = both, the game adapts when the screen rotates, or `komputer` = computer only (mouse and keyboard, landscape): the portal hides the game on phones and its page tells phone visitors to play on a computer. Phone screen notes then warn instead of blocking the release." - changed
Input schema / properties / uklad / enumPrevious value: -[ - "poziom", - "pion", - "oba" -]New value: +[ + "poziom", + "pion", + "oba", + "komputer" +]
- Changed
klyo_publish_game3 fields changed- changed
Input schema / properties / uklad / descriptionPrevious value: -"Game layout: `poziom` = landscape (like a computer screen), `pion` = portrait (like a phone) or `oba` = both, the game adapts when the screen rotates."New value: +"Game layout: `poziom` = landscape (like a computer screen), `pion` = portrait (like a phone), `oba` = both, the game adapts when the screen rotates, or `komputer` = computer only (mouse and keyboard, landscape): the portal hides the game on phones and its page tells phone visitors to play on a computer. Phone screen notes then warn instead of blocking the release." - changed
Input schema / properties / uklad / enumPrevious value: -[ - "poziom", - "pion", - "oba" -]New value: +[ + "poziom", + "pion", + "oba", + "komputer" +] - changed
Input schema / properties / zip_url / descriptionPrevious 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."New value: +"Public https address of the ZIP package (index.html inside), up to 350 MB. Only for a game that REALLY is online already, for example when moving it from itch.io."
3 tool updates
- Changed
klyo_fill_game_form2 fields changed- changed
Input schema / properties / pola / properties / opis / descriptionPrevious 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."New value: +"Description for players in TWO versions (up to 4000 characters EACH, as in the studio), 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. SUBHEADINGS: a line that starts with “## ” becomes a subheading on the game page; use them for the questions players really ask (“## How to play sudoku”, “## Sudoku tips for beginners”), each followed by a paragraph, and never as the first line (the first sentence is the lead). 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." - changed
Input schema / properties / pola / properties / opis / maxLengthPrevious value: -4000New value: +9000
- Changed
klyo_fix_game2 fields changed- changed
Input schema / properties / opis / descriptionPrevious 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."New value: +"Description for players in TWO versions (up to 4000 characters EACH, as in the studio), 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. SUBHEADINGS: a line that starts with “## ” becomes a subheading on the game page; use them for the questions players really ask (“## How to play sudoku”, “## Sudoku tips for beginners”), each followed by a paragraph, and never as the first line (the first sentence is the lead). 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." - changed
Input schema / properties / opis / maxLengthPrevious value: -4000New value: +9000
- Changed
klyo_publish_game2 fields changed- changed
Input schema / properties / opis / descriptionPrevious 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."New value: +"Description for players in TWO versions (up to 4000 characters EACH, as in the studio), 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. SUBHEADINGS: a line that starts with “## ” becomes a subheading on the game page; use them for the questions players really ask (“## How to play sudoku”, “## Sudoku tips for beginners”), each followed by a paragraph, and never as the first line (the first sentence is the lead). 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." - changed
Input schema / properties / opis / maxLengthPrevious value: -4000New value: +9000
1 tool update
- Added
klyo_game_play
1 tool update
- Changed
klyo_publish_game1 field changed- changed
Input schema / properties / zip_url / descriptionPrevious 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."
Related MCP Connectors
Publish HTML5 games in seconds from an AI agent: audience, monetization, analytics.
Publish AI-made browser games and get a shareable URL. Update, test and read player feedback.
Publish, test and share browser games on PlayDrop from your AI agent.
Build, publish and update browser games with saves, leaderboards and realtime multiplayer built in.
Related MCP Servers
- AlicenseAqualityBmaintenancePublish web games on Gamealia from your AI coding assistant: analyze the project, integrate the SDK (or migrate from Poki/CrazyGames), run a desktop and mobile browser autotest, write the listing and upload the build for review. Developers keep 60-70% of the ad revenue, no exclusivity.2262,284 npmMIT
- AlicenseNot gradedqualityCmaintenanceEnables AI agents to create and iteratively edit browser games, web apps, and websites from natural-language prompts, track builds, preview results, and request publication.MIT
- FlicenseNot gradedqualityBmaintenanceBuild three.js browser games on GrowBlocks with an AI assistant: read the API, play the game headless and see a screenshot after every change, reuse community blocks, and push an unlisted test build.-
- AlicenseAqualityBmaintenanceLet coding agents play, test and tune your 2D web game. The debuff MCP server attaches to the game you have open (or runs a headless copy) and gives agents live state, explained and source-mapped errors, frame timings, typed params, deterministic replays and rewind, scenario tests and fuzz playtesting. Everything an agent does shows in your dev panel, where you can undo it.2112MIT
Glama MCP Gateway
Add one secure layer between your agents and this server.