What this MCP does
Supports browser game documentation, build validation, multiplayer testing, staged uploads, publishing, updates, and remixes for YouGame.
Tools
Input schema
{'type': 'object', 'required': ['files'], 'properties': {'files': {'type': 'array', 'items': {'type': 'object', 'required': ['path'], 'properties': {'path': {'type': 'string', 'description': 'Path relative to the build folder, e.g. assets/player.png'}, 'size': {'type': 'number', 'description': 'Size in bytes (optional, enables the size checks)'}, 'text': {'type': 'string', 'description': 'File contents for index.html and other text files worth scanning (optional)'}}}, 'minItems': 1, 'description': 'Every file in the build folder.'}}}
Input schema
{'type': 'object', 'required': ['sessionId'], 'properties': {'sessionId': {'type': 'string'}}, 'additionalProperties': False}
Input schema
{'type': 'object', 'required': ['id'], 'properties': {'id': {'type': 'string', 'description': 'Section id from search, e.g. sdk#leaderboards'}}}
Input schema
{'type': 'object', 'properties': {}, 'additionalProperties': False}
Input schema
{'type': 'object', 'properties': {}, 'additionalProperties': False}
Input schema
{'type': 'object', 'properties': {}, 'additionalProperties': False}
Input schema
{'type': 'object', 'required': ['uploadId', 'title', 'description', 'genres', 'controls', 'play_mode', 'mobile', 'mature'], 'properties': {'kind': {'enum': ['game', 'patch', 'mod'], 'type': 'string', 'description': '"game" (default). "patch": a remix of a game the player already owns and that YouGame must never host, such as an N64 ROM or a disc image: a port, a balance patch, new characters, an engine like OpenSmash64. Anything that changes how the game plays, however slightly, is a remix. It is listed as a Remix of the base game (its own page, online play and ladder; remixes are not compatible with each other online), the player picks their own copy of the base game once on the site (hashed and kept in their browser, never uploaded), and the build asks for the bytes with YouGame.baseGame() at launch. "mod": a cosmetic (skins, textures, stage art, music, HUD) a remix loads on top through YouGame.cosmetics(); it changes looks and sounds only, has no build to run (no index.html), players add it from the base game\'s hub, and it never changes a match. Both need base_game, must contain none of the base game\'s data (uploads are scanned for game images), and have no money on them: no paywalls, tips or remix fees.'}, 'notes': {'type': 'string', 'description': 'Up to 2000 characters, shown to the creator above the form: what you chose and why, and what you assumed (the genres, the score kind, the max score, why mobile is off).'}, 'remix': {'type': 'object', 'properties': {'fee': {'type': 'number', 'description': 'The play fee: coins every player pays once, to the creator, before playing any remix of the game (paid in gold as creator earnings, like a paywall). 0 to 5000; default 0. Making a remix itself costs nothing.'}, 'merge': {'enum': ['no', 'free', 'flat', 'negotiated'], 'type': 'string', 'description': 'Whether a remixer may propose their build as the original\'s next version: "free" (default: yes, for nothing), "no", "flat" (the creator pays merge_fee gold, above 0, when they accept), or "negotiated" (the remixer names a price; either side may counter until the creator accepts).'}, 'charge': {'type': 'boolean', 'description': 'May a remix add paywalls of its own. Default false.'}, 'allowed': {'type': 'boolean', 'description': 'May anyone remix the game at all. Default false.'}, 'merge_fee': {'type': 'number', 'description': 'With merge "flat": gold the creator pays the remixer on accepting a merge, 1 to 100000 (0 means "free").'}, 'royalty_bps': {'type': 'number', 'description': "The creator's share of every gold purchase inside a remix, in basis points (250 = 2.5%). Only with charge. Default 0."}, 'royalty_flat': {'type': 'number', 'description': 'A flat gold amount the creator gets per purchase inside a remix, 0 to 5000, on top of the share. Only with charge. Default 0.'}}, 'description': "Whether other people may remix this game (copy its build, change it, and publish the result as their own game) and on what terms. Ask the creator; leave it out for the default, no remixes. The terms bind every remix made while they stand: the original's paywalls stay inside every remix and keep paying its creator whatever else is set; a remix made under given terms keeps them even if the creator changes them later.", 'additionalProperties': False}, 'title': {'type': 'string', 'description': '1–80 characters.'}, 'genres': {'type': 'array', 'items': {'enum': ['Action', 'Adventure', 'RPG', 'Arcade', 'Puzzle', 'Platformer', 'Shooter', 'Fighting', 'Strategy', 'Simulation', 'Sports', 'Racing', 'Party', 'Horror', 'Roguelike', 'Card', 'Idle', 'Rhythm', 'Tower defense', 'Word', 'Other'], 'type': 'string'}, 'description': 'Up to 3; the first is the main one.'}, 'ladder': {'type': 'boolean', 'description': 'The ranked ladder that ranked online matches feed (findMatch with ranked: true), shown on the game page. Default true; only matters for a game with online multiplayer.'}, 'mature': {'type': 'boolean', 'description': "True when the game is for adults only (blood and gore, realistic violence against people such as real-looking people hurt or killed or a realistic war setting, strong language, mature themes, casino-style gambling such as poker, slots or roulette even with play money). Cartoon, fantasy and stylized combat is not mature. Ask the creator if the game's content leaves it unclear."}, 'mobile': {'type': 'boolean', 'description': 'True only when you played the whole game with touch: every menu and action by tap or through YouGame.input, the layout right after fullscreen and rotation at 390×844 and 1024×768 (an iPad), no page scroll or zoom. Phones and iPads list only games with this on and Play there is the whole experience, so a wrong true puts an unplayable game in front of everyone it is shown to. The check report says what input the source handles; a keyboard-only or mouse-only build is false. Not sure, or could not run it on a touch screen or emulator: false, and say why in notes. A ROM mod (kind "patch" with base_game.rom_patch) is the exception: it runs in the site\'s emulator, which has its own on-screen controls, so pass true unless the mod cannot be played that way.'}, 'controls': {'enum': ['Keyboard', 'Mouse', 'Keyboard + Mouse', 'Touch', 'Gamepad'], 'type': 'string', 'description': 'How the game is played. Default Keyboard.'}, 'paywalls': {'type': 'array', 'items': {'type': 'object', 'required': ['key', 'label', 'price', 'kind'], 'properties': {'key': {'type': 'string', 'description': 'The key the game passes to YouGame.coins.charge.'}, 'kind': {'enum': ['unlock', 'play'], 'type': 'string', 'description': 'unlock: pay once, owned forever. play: pay every time.'}, 'label': {'type': 'string', 'description': 'What the player sees on the purchase sheet, up to 60 characters.'}, 'price': {'type': 'number', 'description': 'Whole coins, 1 to 5000.'}}}, 'maxItems': 20, 'description': 'The paywalls the build charges with YouGame.coins.charge(key), each priced by the creator: ask them for the price and kind. Leave it out when the game charges nothing.'}, 'uploadId': {'type': 'string', 'description': 'From the upload reply (32 hex characters).'}, 'base_game': {'type': 'object', 'required': ['key', 'name'], 'properties': {'key': {'type': 'string', 'description': 'Groups patches of the same base so one stored copy serves them all: "n64/ssb-usa". 2–64 characters of a-z, 0-9, /, _ or -.'}, 'mod': {'type': 'object', 'required': ['category', 'format'], 'properties': {'format': {'type': 'string', 'description': 'The package format a remix has to list in mod_formats to load it, like "texture-pack".'}, 'ranked': {'type': 'boolean', 'description': 'false when the cosmetic shows information other players do not see (hitboxes, frame data, a radar): players cannot have it on in a ranked match. Omit otherwise.'}, 'category': {'enum': ['characters', 'stages', 'music', 'hud', 'textures'], 'type': 'string', 'description': 'What the cosmetic changes; the hub filters by it.'}}, 'description': 'A cosmetic only: what it changes and its package format.'}, 'name': {'type': 'string', 'description': 'What the player must own, up to 80 characters: "Super Smash Bros. (N64)".'}, 'system': {'enum': ['n64', 'snes', 'nes', 'gb', 'gbc', 'gba', 'genesis', 'sms', 'gg', 'gamecube', 'wii', 'ps1', 'ps2', 'psp', 'dreamcast', 'nds', 'file'], 'type': 'string', 'description': '"n64": the file is an N64 ROM; .z64, .v64 and .n64 byte orders and a copier header are normalised before hashing, so list the big-endian (.z64) SHA-1. "file" (default): the bytes are hashed as they are.'}, 'catalog': {'type': 'string', 'description': 'The game\'s Wikidata id in YouGame\'s game catalog, like "Q870981" for Super Smash Bros.: a base game has to be a known game. Search the catalog over plain HTTP, no sign-in: GET https://yougame.co/api/base/search?q=<title> (each match lists the base games already defined for it: reuse one\'s key and this can be left out). A new key without it is accepted only when name, less any "(System, Region)" tail, is exactly one catalog game\'s name.'}, 'accepted': {'type': 'array', 'items': {'type': 'object', 'required': ['sha1', 'name', 'size'], 'properties': {'name': {'type': 'string', 'description': 'What the player sees when it matched: "Super Smash Bros. (USA)".'}, 'sha1': {'type': 'string', 'description': '40 hex characters.'}, 'size': {'type': 'number', 'description': 'Bytes of the canonical image.'}}}, 'maxItems': 16, 'description': 'The dumps the patch runs on (No-Intro or Redump hashes of the canonical image).'}, 'emulator': {'type': 'boolean', 'description': 'A version with a build of its own only: false keeps the system\'s emulator (the browser runtime and RetroArch) off the page, so players only get the build; for a build with online play the emulator lacks. Omit to offer both. A ROM mod (kind "patch" with base_game.rom_patch) cannot turn it off.'}, 'rejected': {'type': 'array', 'items': {'type': 'object', 'required': ['sha1', 'name', 'size', 'reason'], 'properties': {'name': {'type': 'string'}, 'sha1': {'type': 'string'}, 'size': {'type': 'number'}, 'reason': {'type': 'string', 'description': 'Up to 200 characters: "the Europe release; only the USA ROM is supported".'}}}, 'maxItems': 32, 'description': 'Real dumps the patch recognises but cannot use (other regions, revisions), each with the reason the player reads.'}, 'extensions': {'type': 'array', 'items': {'type': 'string'}, 'maxItems': 8, 'description': 'File extensions the picker offers, without dots: ["z64", "n64", "v64"].'}, 'plays_with': {'type': 'string', 'description': "The slug of your own full listing this patch is the same game as: with the player's base game applied it runs the same simulation, so the two listings share one set of online rooms, ratings and ladders and their players match each other. Both builds must come from the same source and use the same multiplayer compatibility string. The full listing must be published first, public, with online play on. Omit when the patch stands alone, and send it again whenever you resend base_game: the spec is replaced as a whole."}, 'mod_formats': {'type': 'array', 'items': {'type': 'string'}, 'maxItems': 8, 'description': 'A remix only: the cosmetic package formats its build loads through YouGame.cosmetics(), short handles like "texture-pack" or "o2r-overlay" (1–32 characters of a-z, 0-9, -). Cosmetics on the base game with one of these formats are offered to its players. Omit for none.'}}, 'description': 'With kind "patch" or "mod": the base game the player must own. For a remix, the player\'s file is normalised for the system and its SHA-1 compared with `accepted`; a match in `rejected` tells the player why that dump will not do. For a cosmetic only key, name and system matter, plus `mod`.'}, 'max_score': {'type': 'number', 'description': 'Optional: the highest score the game can produce (a points board), or the fastest run it can possibly produce in milliseconds (a time board). Scores past it are refused. Work it out from the game, or leave it out.'}, 'play_mode': {'enum': ['single', 'multiplayer', 'both'], 'type': 'string', 'description': 'single (solo only), multiplayer (online only), or both. Default: multiplayer when the build calls findMatch, else single.'}, 'thumbnail': {'type': 'string', 'description': "The path, inside the build, of a 16:9 PNG/JPG/WebP/GIF under 8 MB for the game's card. Not needed again once one was sent with PUT /api/agent/media."}, 'score_kind': {'enum': ['points', 'time', 'none'], 'type': 'string', 'description': 'The leaderboard this game gets, if any. "points" (default): the game calls YouGame.gameOver(score) with whatever it counts, higher is better. "time": a game against the clock (a speedrun, a level or puzzle to finish fast) calls YouGame.gameOver(elapsedMs) with the run in milliseconds; the board ranks fastest first and shows runs as times (1:23.45). Pick "time" whenever the build posts a time. "none": no leaderboard at all, which is the right answer for a head-to-head game (a fighter, a chess clone, anything only ever played one against one) that has no solo run worth ranking; the game page shows its ranked ladder instead. Never invent points so a game can have a board. Who sees a points or time board is the creator\'s call, carried by leaderboard and friends_board below; the ranked ladder by ladder.'}, 'visibility': {'enum': ['public', 'private'], 'type': 'string', 'description': '"public" (default) lists the game everywhere at once. "private" is a private launch: the game is published but nothing on YouGame lists it, and only the creator and people who open one of its invite links can see or play it (an alpha or beta for testers before the public launch). Publishing makes the first invite link; the creator makes more, sees who joined, and launches publicly from the game\'s Manage page. Pick it when the creator says the build is for testers, a private group, or not ready for everyone.'}, 'description': {'type': 'string', 'description': 'Up to 1000 characters, but keep it to two or three short, casual sentences a player reads on the game page: what the game is and what makes it fun (online play, a leaderboard). No control lists, rules tables, tech details or how YouGame works. Write it from the game.'}, 'leaderboard': {'type': 'boolean', 'description': 'The everyone leaderboard: every player ranked together, and the top score on the game\'s card. Default true with a points or time board. false with friends_board true is a friends-only board, the right pick for a game meant to be played among friends. score_kind "none" turns both switches off whatever is sent.'}, 'screenshots': {'type': 'array', 'items': {'type': 'string'}, 'description': 'Optional: up to 8 image paths inside the build.'}, 'friends_board': {'type': 'boolean', 'description': 'The friends leaderboard: the same scores, each signed-in player seeing only themself and their friends. Default true with a points or time board. Needs no game code: the one gameOver call feeds both boards.'}, 'voice_everyone': {'type': 'boolean', 'description': 'Voice chat with everyone in a match, not just friends. Default false: players hear only their friends (and everyone in a friends lobby), which is right for almost every game. true only when the creator asked for it, for a game built around talking to other players (proximity chat as a core mechanic, social deduction): then every signed-in player seated in a match can hear every other one, matched by the queue or not. Needs no game code; blocked players stay muted and nobody is on the mic until they join. Covers match rooms (the first ten players seated in each), not worlds.'}}, 'additionalProperties': False}
Input schema
{'type': 'object', 'required': ['uploadId', 'creator_approved'], 'properties': {'kind': {'enum': ['game', 'patch', 'mod'], 'type': 'string', 'description': '"game" (default). "patch": a remix of a game the player already owns and that YouGame must never host, such as an N64 ROM or a disc image: a port, a balance patch, new characters, an engine like OpenSmash64. Anything that changes how the game plays, however slightly, is a remix. It is listed as a Remix of the base game (its own page, online play and ladder; remixes are not compatible with each other online), the player picks their own copy of the base game once on the site (hashed and kept in their browser, never uploaded), and the build asks for the bytes with YouGame.baseGame() at launch. "mod": a cosmetic (skins, textures, stage art, music, HUD) a remix loads on top through YouGame.cosmetics(); it changes looks and sounds only, has no build to run (no index.html), players add it from the base game\'s hub, and it never changes a match. Both need base_game, must contain none of the base game\'s data (uploads are scanned for game images), and have no money on them: no paywalls, tips or remix fees.'}, 'save': {'type': 'boolean', 'description': "Put the game in the creator's Saved games. Default true; pass false only when the creator asked not to."}, 'remix': {'type': 'object', 'properties': {'fee': {'type': 'number', 'description': 'The play fee: coins every player pays once, to the creator, before playing any remix of the game (paid in gold as creator earnings, like a paywall). 0 to 5000; default 0. Making a remix itself costs nothing.'}, 'merge': {'enum': ['no', 'free', 'flat', 'negotiated'], 'type': 'string', 'description': 'Whether a remixer may propose their build as the original\'s next version: "free" (default: yes, for nothing), "no", "flat" (the creator pays merge_fee gold, above 0, when they accept), or "negotiated" (the remixer names a price; either side may counter until the creator accepts).'}, 'charge': {'type': 'boolean', 'description': 'May a remix add paywalls of its own. Default false.'}, 'allowed': {'type': 'boolean', 'description': 'May anyone remix the game at all. Default false.'}, 'merge_fee': {'type': 'number', 'description': 'With merge "flat": gold the creator pays the remixer on accepting a merge, 1 to 100000 (0 means "free").'}, 'royalty_bps': {'type': 'number', 'description': "The creator's share of every gold purchase inside a remix, in basis points (250 = 2.5%). Only with charge. Default 0."}, 'royalty_flat': {'type': 'number', 'description': 'A flat gold amount the creator gets per purchase inside a remix, 0 to 5000, on top of the share. Only with charge. Default 0.'}}, 'description': "Whether other people may remix this game (copy its build, change it, and publish the result as their own game) and on what terms. Ask the creator; leave it out for the default, no remixes. The terms bind every remix made while they stand: the original's paywalls stay inside every remix and keep paying its creator whatever else is set; a remix made under given terms keeps them even if the creator changes them later.", 'additionalProperties': False}, 'title': {'type': 'string', 'description': '1–80 characters.'}, 'genres': {'type': 'array', 'items': {'enum': ['Action', 'Adventure', 'RPG', 'Arcade', 'Puzzle', 'Platformer', 'Shooter', 'Fighting', 'Strategy', 'Simulation', 'Sports', 'Racing', 'Party', 'Horror', 'Roguelike', 'Card', 'Idle', 'Rhythm', 'Tower defense', 'Word', 'Other'], 'type': 'string'}, 'description': 'Up to 3; the first is the main one.'}, 'ladder': {'type': 'boolean', 'description': 'The ranked ladder that ranked online matches feed (findMatch with ranked: true), shown on the game page. Default true; only matters for a game with online multiplayer.'}, 'mature': {'type': 'boolean', 'description': "True when the game is for adults only (blood and gore, realistic violence against people such as real-looking people hurt or killed or a realistic war setting, strong language, mature themes, casino-style gambling such as poker, slots or roulette even with play money). Cartoon, fantasy and stylized combat is not mature. Ask the creator if the game's content leaves it unclear."}, 'mobile': {'type': 'boolean', 'description': 'True only when you played the whole game with touch: every menu and action by tap or through YouGame.input, the layout right after fullscreen and rotation at 390×844 and 1024×768 (an iPad), no page scroll or zoom. Phones and iPads list only games with this on and Play there is the whole experience, so a wrong true puts an unplayable game in front of everyone it is shown to. The check report says what input the source handles; a keyboard-only or mouse-only build is false. Not sure, or could not run it on a touch screen or emulator: false, and say why in notes. A ROM mod (kind "patch" with base_game.rom_patch) is the exception: it runs in the site\'s emulator, which has its own on-screen controls, so pass true unless the mod cannot be played that way.'}, 'controls': {'enum': ['Keyboard', 'Mouse', 'Keyboard + Mouse', 'Touch', 'Gamepad'], 'type': 'string', 'description': 'How the game is played. Default Keyboard.'}, 'paywalls': {'type': 'array', 'items': {'type': 'object', 'required': ['key', 'label', 'price', 'kind'], 'properties': {'key': {'type': 'string', 'description': 'The key the game passes to YouGame.coins.charge.'}, 'kind': {'enum': ['unlock', 'play'], 'type': 'string', 'description': 'unlock: pay once, owned forever. play: pay every time.'}, 'label': {'type': 'string', 'description': 'What the player sees on the purchase sheet, up to 60 characters.'}, 'price': {'type': 'number', 'description': 'Whole coins, 1 to 5000.'}}}, 'maxItems': 20, 'description': 'The paywalls the build charges with YouGame.coins.charge(key), each priced by the creator: ask them for the price and kind. Leave it out when the game charges nothing.'}, 'uploadId': {'type': 'string', 'description': 'From the upload reply (32 hex characters).'}, 'base_game': {'type': 'object', 'required': ['key', 'name'], 'properties': {'key': {'type': 'string', 'description': 'Groups patches of the same base so one stored copy serves them all: "n64/ssb-usa". 2–64 characters of a-z, 0-9, /, _ or -.'}, 'mod': {'type': 'object', 'required': ['category', 'format'], 'properties': {'format': {'type': 'string', 'description': 'The package format a remix has to list in mod_formats to load it, like "texture-pack".'}, 'ranked': {'type': 'boolean', 'description': 'false when the cosmetic shows information other players do not see (hitboxes, frame data, a radar): players cannot have it on in a ranked match. Omit otherwise.'}, 'category': {'enum': ['characters', 'stages', 'music', 'hud', 'textures'], 'type': 'string', 'description': 'What the cosmetic changes; the hub filters by it.'}}, 'description': 'A cosmetic only: what it changes and its package format.'}, 'name': {'type': 'string', 'description': 'What the player must own, up to 80 characters: "Super Smash Bros. (N64)".'}, 'system': {'enum': ['n64', 'snes', 'nes', 'gb', 'gbc', 'gba', 'genesis', 'sms', 'gg', 'gamecube', 'wii', 'ps1', 'ps2', 'psp', 'dreamcast', 'nds', 'file'], 'type': 'string', 'description': '"n64": the file is an N64 ROM; .z64, .v64 and .n64 byte orders and a copier header are normalised before hashing, so list the big-endian (.z64) SHA-1. "file" (default): the bytes are hashed as they are.'}, 'catalog': {'type': 'string', 'description': 'The game\'s Wikidata id in YouGame\'s game catalog, like "Q870981" for Super Smash Bros.: a base game has to be a known game. Search the catalog over plain HTTP, no sign-in: GET https://yougame.co/api/base/search?q=<title> (each match lists the base games already defined for it: reuse one\'s key and this can be left out). A new key without it is accepted only when name, less any "(System, Region)" tail, is exactly one catalog game\'s name.'}, 'accepted': {'type': 'array', 'items': {'type': 'object', 'required': ['sha1', 'name', 'size'], 'properties': {'name': {'type': 'string', 'description': 'What the player sees when it matched: "Super Smash Bros. (USA)".'}, 'sha1': {'type': 'string', 'description': '40 hex characters.'}, 'size': {'type': 'number', 'description': 'Bytes of the canonical image.'}}}, 'maxItems': 16, 'description': 'The dumps the patch runs on (No-Intro or Redump hashes of the canonical image).'}, 'emulator': {'type': 'boolean', 'description': 'A version with a build of its own only: false keeps the system\'s emulator (the browser runtime and RetroArch) off the page, so players only get the build; for a build with online play the emulator lacks. Omit to offer both. A ROM mod (kind "patch" with base_game.rom_patch) cannot turn it off.'}, 'rejected': {'type': 'array', 'items': {'type': 'object', 'required': ['sha1', 'name', 'size', 'reason'], 'properties': {'name': {'type': 'string'}, 'sha1': {'type': 'string'}, 'size': {'type': 'number'}, 'reason': {'type': 'string', 'description': 'Up to 200 characters: "the Europe release; only the USA ROM is supported".'}}}, 'maxItems': 32, 'description': 'Real dumps the patch recognises but cannot use (other regions, revisions), each with the reason the player reads.'}, 'extensions': {'type': 'array', 'items': {'type': 'string'}, 'maxItems': 8, 'description': 'File extensions the picker offers, without dots: ["z64", "n64", "v64"].'}, 'plays_with': {'type': 'string', 'description': "The slug of your own full listing this patch is the same game as: with the player's base game applied it runs the same simulation, so the two listings share one set of online rooms, ratings and ladders and their players match each other. Both builds must come from the same source and use the same multiplayer compatibility string. The full listing must be published first, public, with online play on. Omit when the patch stands alone, and send it again whenever you resend base_game: the spec is replaced as a whole."}, 'mod_formats': {'type': 'array', 'items': {'type': 'string'}, 'maxItems': 8, 'description': 'A remix only: the cosmetic package formats its build loads through YouGame.cosmetics(), short handles like "texture-pack" or "o2r-overlay" (1–32 characters of a-z, 0-9, -). Cosmetics on the base game with one of these formats are offered to its players. Omit for none.'}}, 'description': 'With kind "patch" or "mod": the base game the player must own. For a remix, the player\'s file is normalised for the system and its SHA-1 compared with `accepted`; a match in `rejected` tells the player why that dump will not do. For a cosmetic only key, name and system matter, plus `mod`.'}, 'max_score': {'type': 'number', 'description': 'Optional: the highest score the game can produce (a points board), or the fastest run it can possibly produce in milliseconds (a time board). Scores past it are refused. Work it out from the game, or leave it out.'}, 'play_mode': {'enum': ['single', 'multiplayer', 'both'], 'type': 'string', 'description': 'single (solo only), multiplayer (online only), or both. Default: multiplayer when the build calls findMatch, else single.'}, 'thumbnail': {'type': 'string', 'description': "The path, inside the build, of a 16:9 PNG/JPG/WebP/GIF under 8 MB for the game's card. Not needed again once one was sent with PUT /api/agent/media."}, 'score_kind': {'enum': ['points', 'time', 'none'], 'type': 'string', 'description': 'The leaderboard this game gets, if any. "points" (default): the game calls YouGame.gameOver(score) with whatever it counts, higher is better. "time": a game against the clock (a speedrun, a level or puzzle to finish fast) calls YouGame.gameOver(elapsedMs) with the run in milliseconds; the board ranks fastest first and shows runs as times (1:23.45). Pick "time" whenever the build posts a time. "none": no leaderboard at all, which is the right answer for a head-to-head game (a fighter, a chess clone, anything only ever played one against one) that has no solo run worth ranking; the game page shows its ranked ladder instead. Never invent points so a game can have a board. Who sees a points or time board is the creator\'s call, carried by leaderboard and friends_board below; the ranked ladder by ladder.'}, 'visibility': {'enum': ['public', 'private'], 'type': 'string', 'description': '"public" (default) lists the game everywhere at once. "private" is a private launch: the game is published but nothing on YouGame lists it, and only the creator and people who open one of its invite links can see or play it (an alpha or beta for testers before the public launch). Publishing makes the first invite link; the creator makes more, sees who joined, and launches publicly from the game\'s Manage page. Pick it when the creator says the build is for testers, a private group, or not ready for everyone.'}, 'description': {'type': 'string', 'description': 'Up to 1000 characters, but keep it to two or three short, casual sentences a player reads on the game page: what the game is and what makes it fun (online play, a leaderboard). No control lists, rules tables, tech details or how YouGame works. Write it from the game.'}, 'leaderboard': {'type': 'boolean', 'description': 'The everyone leaderboard: every player ranked together, and the top score on the game\'s card. Default true with a points or time board. false with friends_board true is a friends-only board, the right pick for a game meant to be played among friends. score_kind "none" turns both switches off whatever is sent.'}, 'screenshots': {'type': 'array', 'items': {'type': 'string'}, 'description': 'Optional: up to 8 image paths inside the build.'}, 'friends_board': {'type': 'boolean', 'description': 'The friends leaderboard: the same scores, each signed-in player seeing only themself and their friends. Default true with a points or time board. Needs no game code: the one gameOver call feeds both boards.'}, 'voice_everyone': {'type': 'boolean', 'description': 'Voice chat with everyone in a match, not just friends. Default false: players hear only their friends (and everyone in a friends lobby), which is right for almost every game. true only when the creator asked for it, for a game built around talking to other players (proximity chat as a core mechanic, social deduction): then every signed-in player seated in a match can hear every other one, matched by the queue or not. Needs no game code; blocked players stay muted and nobody is on the mic until they join. Covers match rooms (the first ten players seated in each), not worlds.'}, 'creator_approved': {'type': 'boolean', 'description': 'True only when the creator explicitly told you, in their own words, to publish this game without opening the review page. Approval of a draft summary in chat does not count. Never assume it; the tool refuses without it.'}}, 'additionalProperties': False}
Input schema
{'type': 'object', 'required': ['sessionId', 'evidence'], 'properties': {'evidence': {'type': 'array', 'items': {'type': 'object', 'required': ['case', 'status', 'detail'], 'properties': {'case': {'enum': ['boot', 'desktop_controls', 'phone_controls', 'layout', 'restart', 'audio', 'scores', 'friends_board', 'saves', 'casual', 'ranked', 'friends_invite', 'ready', 'result', 'rematch', 'disconnect', 'friend_request', 'chat', 'notifications', 'presence', 'worlds', 'ux'], 'type': 'string'}, 'detail': {'type': 'string', 'maxLength': 4000, 'minLength': 1}, 'status': {'enum': ['passed', 'failed', 'not_run'], 'type': 'string'}, 'artifacts': {'type': 'array', 'items': {'type': 'string', 'maxLength': 2000}, 'maxItems': 8}}, 'additionalProperties': False}, 'maxItems': 22}, 'sessionId': {'type': 'string'}}, 'additionalProperties': False}
Input schema
{'type': 'object', 'required': ['slug'], 'properties': {'slug': {'type': 'string', 'description': 'The game to remix: the last part of its URL, https://yougame.co/g/<slug>.'}, 'title': {'type': 'string', 'description': "The remix's title, 1–80 characters. Default: the original's title followed by “remix”."}}, 'additionalProperties': False}
Input schema
{'type': 'object', 'required': ['query'], 'properties': {'query': {'type': 'string', 'description': 'What to look for, e.g. "submit a score" or "Unity compression"'}}}
Input schema
{'type': 'object', 'required': ['uploadId'], 'properties': {'listing': {'type': 'object', 'required': ['title'], 'properties': {'kind': {'enum': ['game', 'patch', 'mod'], 'type': 'string', 'description': '"game" (default). "patch": a remix of a game the player already owns and that YouGame must never host, such as an N64 ROM or a disc image: a port, a balance patch, new characters, an engine like OpenSmash64. Anything that changes how the game plays, however slightly, is a remix. It is listed as a Remix of the base game (its own page, online play and ladder; remixes are not compatible with each other online), the player picks their own copy of the base game once on the site (hashed and kept in their browser, never uploaded), and the build asks for the bytes with YouGame.baseGame() at launch. "mod": a cosmetic (skins, textures, stage art, music, HUD) a remix loads on top through YouGame.cosmetics(); it changes looks and sounds only, has no build to run (no index.html), players add it from the base game\'s hub, and it never changes a match. Both need base_game, must contain none of the base game\'s data (uploads are scanned for game images), and have no money on them: no paywalls, tips or remix fees.'}, 'remix': {'type': 'object', 'properties': {'fee': {'type': 'number', 'description': 'The play fee: coins every player pays once, to the creator, before playing any remix of the game (paid in gold as creator earnings, like a paywall). 0 to 5000; default 0. Making a remix itself costs nothing.'}, 'merge': {'enum': ['no', 'free', 'flat', 'negotiated'], 'type': 'string', 'description': 'Whether a remixer may propose their build as the original\'s next version: "free" (default: yes, for nothing), "no", "flat" (the creator pays merge_fee gold, above 0, when they accept), or "negotiated" (the remixer names a price; either side may counter until the creator accepts).'}, 'charge': {'type': 'boolean', 'description': 'May a remix add paywalls of its own. Default false.'}, 'allowed': {'type': 'boolean', 'description': 'May anyone remix the game at all. Default false.'}, 'merge_fee': {'type': 'number', 'description': 'With merge "flat": gold the creator pays the remixer on accepting a merge, 1 to 100000 (0 means "free").'}, 'royalty_bps': {'type': 'number', 'description': "The creator's share of every gold purchase inside a remix, in basis points (250 = 2.5%). Only with charge. Default 0."}, 'royalty_flat': {'type': 'number', 'description': 'A flat gold amount the creator gets per purchase inside a remix, 0 to 5000, on top of the share. Only with charge. Default 0.'}}, 'description': "Whether other people may remix this game (copy its build, change it, and publish the result as their own game) and on what terms. Ask the creator; leave it out for the default, no remixes. The terms bind every remix made while they stand: the original's paywalls stay inside every remix and keep paying its creator whatever else is set; a remix made under given terms keeps them even if the creator changes them later.", 'additionalProperties': False}, 'title': {'type': 'string', 'description': '1–80 characters.'}, 'genres': {'type': 'array', 'items': {'enum': ['Action', 'Adventure', 'RPG', 'Arcade', 'Puzzle', 'Platformer', 'Shooter', 'Fighting', 'Strategy', 'Simulation', 'Sports', 'Racing', 'Party', 'Horror', 'Roguelike', 'Card', 'Idle', 'Rhythm', 'Tower defense', 'Word', 'Other'], 'type': 'string'}, 'description': 'Up to 3; the first is the main one.'}, 'ladder': {'type': 'boolean', 'description': 'The ranked ladder that ranked online matches feed (findMatch with ranked: true), shown on the game page. Default true; only matters for a game with online multiplayer.'}, 'mature': {'type': 'boolean', 'description': "True when the game is for adults only (blood and gore, realistic violence against people such as real-looking people hurt or killed or a realistic war setting, strong language, mature themes, casino-style gambling such as poker, slots or roulette even with play money). Cartoon, fantasy and stylized combat is not mature. Ask the creator if the game's content leaves it unclear."}, 'mobile': {'type': 'boolean', 'description': 'True only when you played the whole game with touch: every menu and action by tap or through YouGame.input, the layout right after fullscreen and rotation at 390×844 and 1024×768 (an iPad), no page scroll or zoom. Phones and iPads list only games with this on and Play there is the whole experience, so a wrong true puts an unplayable game in front of everyone it is shown to. The check report says what input the source handles; a keyboard-only or mouse-only build is false. Not sure, or could not run it on a touch screen or emulator: false, and say why in notes. A ROM mod (kind "patch" with base_game.rom_patch) is the exception: it runs in the site\'s emulator, which has its own on-screen controls, so pass true unless the mod cannot be played that way.'}, 'controls': {'enum': ['Keyboard', 'Mouse', 'Keyboard + Mouse', 'Touch', 'Gamepad'], 'type': 'string', 'description': 'How the game is played. Default Keyboard.'}, 'paywalls': {'type': 'array', 'items': {'type': 'object', 'required': ['key', 'label', 'price', 'kind'], 'properties': {'key': {'type': 'string', 'description': 'The key the game passes to YouGame.coins.charge.'}, 'kind': {'enum': ['unlock', 'play'], 'type': 'string', 'description': 'unlock: pay once, owned forever. play: pay every time.'}, 'label': {'type': 'string', 'description': 'What the player sees on the purchase sheet, up to 60 characters.'}, 'price': {'type': 'number', 'description': 'Whole coins, 1 to 5000.'}}}, 'maxItems': 20, 'description': 'The paywalls the build charges with YouGame.coins.charge(key), each priced by the creator: ask them for the price and kind. Leave it out when the game charges nothing.'}, 'base_game': {'type': 'object', 'required': ['key', 'name'], 'properties': {'key': {'type': 'string', 'description': 'Groups patches of the same base so one stored copy serves them all: "n64/ssb-usa". 2–64 characters of a-z, 0-9, /, _ or -.'}, 'mod': {'type': 'object', 'required': ['category', 'format'], 'properties': {'format': {'type': 'string', 'description': 'The package format a remix has to list in mod_formats to load it, like "texture-pack".'}, 'ranked': {'type': 'boolean', 'description': 'false when the cosmetic shows information other players do not see (hitboxes, frame data, a radar): players cannot have it on in a ranked match. Omit otherwise.'}, 'category': {'enum': ['characters', 'stages', 'music', 'hud', 'textures'], 'type': 'string', 'description': 'What the cosmetic changes; the hub filters by it.'}}, 'description': 'A cosmetic only: what it changes and its package format.'}, 'name': {'type': 'string', 'description': 'What the player must own, up to 80 characters: "Super Smash Bros. (N64)".'}, 'system': {'enum': ['n64', 'snes', 'nes', 'gb', 'gbc', 'gba', 'genesis', 'sms', 'gg', 'gamecube', 'wii', 'ps1', 'ps2', 'psp', 'dreamcast', 'nds', 'file'], 'type': 'string', 'description': '"n64": the file is an N64 ROM; .z64, .v64 and .n64 byte orders and a copier header are normalised before hashing, so list the big-endian (.z64) SHA-1. "file" (default): the bytes are hashed as they are.'}, 'catalog': {'type': 'string', 'description': 'The game\'s Wikidata id in YouGame\'s game catalog, like "Q870981" for Super Smash Bros.: a base game has to be a known game. Search the catalog over plain HTTP, no sign-in: GET https://yougame.co/api/base/search?q=<title> (each match lists the base games already defined for it: reuse one\'s key and this can be left out). A new key without it is accepted only when name, less any "(System, Region)" tail, is exactly one catalog game\'s name.'}, 'accepted': {'type': 'array', 'items': {'type': 'object', 'required': ['sha1', 'name', 'size'], 'properties': {'name': {'type': 'string', 'description': 'What the player sees when it matched: "Super Smash Bros. (USA)".'}, 'sha1': {'type': 'string', 'description': '40 hex characters.'}, 'size': {'type': 'number', 'description': 'Bytes of the canonical image.'}}}, 'maxItems': 16, 'description': 'The dumps the patch runs on (No-Intro or Redump hashes of the canonical image).'}, 'emulator': {'type': 'boolean', 'description': 'A version with a build of its own only: false keeps the system\'s emulator (the browser runtime and RetroArch) off the page, so players only get the build; for a build with online play the emulator lacks. Omit to offer both. A ROM mod (kind "patch" with base_game.rom_patch) cannot turn it off.'}, 'rejected': {'type': 'array', 'items': {'type': 'object', 'required': ['sha1', 'name', 'size', 'reason'], 'properties': {'name': {'type': 'string'}, 'sha1': {'type': 'string'}, 'size': {'type': 'number'}, 'reason': {'type': 'string', 'description': 'Up to 200 characters: "the Europe release; only the USA ROM is supported".'}}}, 'maxItems': 32, 'description': 'Real dumps the patch recognises but cannot use (other regions, revisions), each with the reason the player reads.'}, 'extensions': {'type': 'array', 'items': {'type': 'string'}, 'maxItems': 8, 'description': 'File extensions the picker offers, without dots: ["z64", "n64", "v64"].'}, 'plays_with': {'type': 'string', 'description': "The slug of your own full listing this patch is the same game as: with the player's base game applied it runs the same simulation, so the two listings share one set of online rooms, ratings and ladders and their players match each other. Both builds must come from the same source and use the same multiplayer compatibility string. The full listing must be published first, public, with online play on. Omit when the patch stands alone, and send it again whenever you resend base_game: the spec is replaced as a whole."}, 'mod_formats': {'type': 'array', 'items': {'type': 'string'}, 'maxItems': 8, 'description': 'A remix only: the cosmetic package formats its build loads through YouGame.cosmetics(), short handles like "texture-pack" or "o2r-overlay" (1–32 characters of a-z, 0-9, -). Cosmetics on the base game with one of these formats are offered to its players. Omit for none.'}}, 'description': 'With kind "patch" or "mod": the base game the player must own. For a remix, the player\'s file is normalised for the system and its SHA-1 compared with `accepted`; a match in `rejected` tells the player why that dump will not do. For a cosmetic only key, name and system matter, plus `mod`.'}, 'max_score': {'type': 'number', 'description': 'Optional: the highest score the game can produce (a points board), or the fastest run it can possibly produce in milliseconds (a time board). Scores past it are refused. Work it out from the game, or leave it out.'}, 'play_mode': {'enum': ['single', 'multiplayer', 'both'], 'type': 'string', 'description': 'single (solo only), multiplayer (online only), or both. Default: multiplayer when the build calls findMatch, else single.'}, 'thumbnail': {'type': 'string', 'description': "The path, inside the build, of a 16:9 PNG/JPG/WebP/GIF under 8 MB for the game's card. Not needed again once one was sent with PUT /api/agent/media."}, 'score_kind': {'enum': ['points', 'time', 'none'], 'type': 'string', 'description': 'The leaderboard this game gets, if any. "points" (default): the game calls YouGame.gameOver(score) with whatever it counts, higher is better. "time": a game against the clock (a speedrun, a level or puzzle to finish fast) calls YouGame.gameOver(elapsedMs) with the run in milliseconds; the board ranks fastest first and shows runs as times (1:23.45). Pick "time" whenever the build posts a time. "none": no leaderboard at all, which is the right answer for a head-to-head game (a fighter, a chess clone, anything only ever played one against one) that has no solo run worth ranking; the game page shows its ranked ladder instead. Never invent points so a game can have a board. Who sees a points or time board is the creator\'s call, carried by leaderboard and friends_board below; the ranked ladder by ladder.'}, 'visibility': {'enum': ['public', 'private'], 'type': 'string', 'description': '"public" (default) lists the game everywhere at once. "private" is a private launch: the game is published but nothing on YouGame lists it, and only the creator and people who open one of its invite links can see or play it (an alpha or beta for testers before the public launch). Publishing makes the first invite link; the creator makes more, sees who joined, and launches publicly from the game\'s Manage page. Pick it when the creator says the build is for testers, a private group, or not ready for everyone.'}, 'description': {'type': 'string', 'description': 'Up to 1000 characters, but keep it to two or three short, casual sentences a player reads on the game page: what the game is and what makes it fun (online play, a leaderboard). No control lists, rules tables, tech details or how YouGame works. Write it from the game.'}, 'leaderboard': {'type': 'boolean', 'description': 'The everyone leaderboard: every player ranked together, and the top score on the game\'s card. Default true with a points or time board. false with friends_board true is a friends-only board, the right pick for a game meant to be played among friends. score_kind "none" turns both switches off whatever is sent.'}, 'screenshots': {'type': 'array', 'items': {'type': 'string'}, 'description': 'Optional: up to 8 image paths inside the build.'}, 'friends_board': {'type': 'boolean', 'description': 'The friends leaderboard: the same scores, each signed-in player seeing only themself and their friends. Default true with a points or time board. Needs no game code: the one gameOver call feeds both boards.'}, 'voice_everyone': {'type': 'boolean', 'description': 'Voice chat with everyone in a match, not just friends. Default false: players hear only their friends (and everyone in a friends lobby), which is right for almost every game. true only when the creator asked for it, for a game built around talking to other players (proximity chat as a core mechanic, social deduction): then every signed-in player seated in a match can hear every other one, matched by the queue or not. Needs no game code; blocked players stay muted and nobody is on the mic until they join. Covers match rooms (the first ten players seated in each), not worlds.'}}}, 'players': {'type': 'integer', 'maximum': 10, 'minimum': 2}, 'uploadId': {'type': 'string'}, 'relationships': {'enum': ['friends', 'strangers'], 'type': 'string'}}, 'additionalProperties': False}
Input schema
{'type': 'object', 'required': ['slug'], 'properties': {'slug': {'type': 'string', 'description': "The remix's slug: the last part of its URL, https://yougame.co/g/<slug>."}, 'apply': {'type': 'boolean', 'description': 'false to only report the plan (what would be taken, kept, dropped, and the conflicts) without shipping anything. Default true.'}, 'resolve': {'enum': ['stop', 'mine', 'theirs'], 'type': 'string', 'description': "What to do with files changed on both sides: stop (default: report them, change nothing), mine (keep the remix's), theirs (take the original's)."}}, 'additionalProperties': False}
Input schema
{'type': 'object', 'required': ['sessionId'], 'properties': {'sessionId': {'type': 'string'}}, 'additionalProperties': False}
Input schema
{'type': 'object', 'required': ['slug', 'uploadId'], 'properties': {'kind': {'enum': ['major', 'minor'], 'type': 'string', 'description': 'major (big change, players are notified) or minor (fixes, silent). Default minor.'}, 'slug': {'type': 'string', 'description': "The game's slug: the last part of its URL, https://yougame.co/g/<slug>."}, 'notes': {'type': 'string', 'description': 'Patch notes, up to 2000 characters: what changed, for players. Shown on the game page and, for a major update, in the notification.'}, 'uploadId': {'type': 'string', 'description': 'The new build, from the upload reply (32 hex characters).'}, 'upstream': {'type': 'string', 'description': "For a remix whose build was merged by hand after sync_remix reported conflicts: the original's build id the merge took (origin.upload_id in that reply), recorded as the remix's new base."}, 'thumbnail': {'type': 'string', 'description': 'Optional: a new thumbnail, as a path inside the new build (16:9 PNG/JPG/WebP/GIF under 8 MB). Omit to keep the current one.'}, 'screenshots': {'type': 'array', 'items': {'type': 'string'}, 'description': 'Optional: new screenshots, as paths inside the new build. Omit to keep the current ones.'}}, 'additionalProperties': False}
Input schema
{'type': 'object', 'properties': {}, 'additionalProperties': False}
Recent tool changes
Similar MCP servers
GripForge
Generates, rigs, animates, analyzes, and packages game characters, weapons, armor, effects, environments, and engine-ready assets.
spriteship
Generates and manages 2D game characters, assets, animations, tilesets, UI packs, maps, and engine-ready exports for multiple gam…
klyo games: publish HTML5 browser games
Creates, edits, tests, publishes, updates, and analyzes HTML5 browser games, including game files, SDK features, releases, and pl…
3DAssets.dev
Searches and delivers free CC0 GLB models and game asset packs, with licensing details, CDN links, scene layouts, and loader usag…
AXIS Avatar Foundry
Generates, repairs, rigs, validates, retargets, compares, and exports production-ready 3D avatars and meshes for game platforms.
Agent Arcade
Provides contracts and workflows for creating, testing, certifying, publishing, and releasing server-authoritative AI-native game…
steamwebapi
Documents and executes read-only Steam and third-party game-market API endpoints, including product, inventory, pricing, and mark…
Agent Arcade Protocol 5
Provides protocol flows and validation tools for AI game creation, publishing, certification, release management, and feedback.