{"ok":true,"site":{"host":"sanchoi.app","url":"https://sanchoi.app/","type":"live","desc":"Sân Chơi","tools":[{"name":"list_games","kind":"answer","impl":"imperative","description":"List all available folk games in Sân Chơi with player counts and descriptions","annotations":{"readOnlyHint":true,"untrustedContentHint":false},"inputSchema":{"type":"object","properties":{}},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute"},{"name":"start_game","kind":"act","impl":"imperative","description":"Start a game by its ID","annotations":{"readOnlyHint":false,"untrustedContentHint":false},"inputSchema":{"type":"object","properties":{"game":{"type":"string","enum":["o-an-quan","bau-cua","water-puppet","gia-ngua","rong-ran","son-tinh","banh-chung","danh-quay"],"description":"Game ID"}},"required":["game"]},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute"},{"name":"set_music","kind":"act","impl":"imperative","description":"Control background folk music tracks","annotations":{"readOnlyHint":false,"untrustedContentHint":false},"inputSchema":{"type":"object","properties":{"track":{"type":"string","enum":["dan_bau","festive","gong","silent"]}},"required":["track"]},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute"},{"name":"save_progress","kind":"act","impl":"imperative","description":"Save progress and session note for the currently active game","annotations":{"readOnlyHint":false,"untrustedContentHint":false},"inputSchema":{"type":"object","properties":{"note":{"type":"string"}}},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute"},{"name":"o_an_quan_new_game","kind":"act","impl":"imperative","description":"Resets the Ô ăn quan board to starting position. 5 small pits per side, 2 quan pits, 5 seeds per small pit, 10 seeds per quan.","annotations":{"readOnlyHint":false,"untrustedContentHint":false},"inputSchema":{"type":"object","properties":{}},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute"},{"name":"o_an_quan_pick_bin","kind":"act","impl":"imperative","description":"Scoops seeds from a pit and distributes counter-clockwise. Only valid for the current player's non-empty small pits (0-4 for P1, 6-10 for P2).","annotations":{"readOnlyHint":false,"untrustedContentHint":false},"inputSchema":{"type":"object","properties":{"bin":{"type":"number","description":"Pit index (0-4 for Player 1, 6-10 for Player 2)"}},"required":["bin"]},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute"},{"name":"o_an_quan_state","kind":"answer","impl":"imperative","description":"Returns the current board state: pits, captured seeds, current player, and game status.","annotations":{"readOnlyHint":true,"untrustedContentHint":false},"inputSchema":{"type":"object","properties":{}},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute"},{"name":"o_an_quan_score","kind":"answer","impl":"imperative","description":"Returns current scores (captured seeds) for both players.","annotations":{"readOnlyHint":true,"untrustedContentHint":false},"inputSchema":{"type":"object","properties":{}},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute"},{"name":"bau_cua_place_bet","kind":"act","impl":"imperative","description":"Places a bet on a symbol for the current round. Can place multiple bets on different symbols. Requires the current stake.","annotations":{"readOnlyHint":false,"untrustedContentHint":false},"inputSchema":{"type":"object","properties":{"symbol":{"type":"string","enum":["bau","cua","tom","ca","ga","huou"],"description":"Symbol to bet on"},"points":{"type":"number","description":"Number of points to wager (fake points, kid-safe)"}},"required":["symbol","points"]},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute"},{"name":"bau_cua_roll","kind":"act","impl":"imperative","description":"Rolls 3 dice. Must have at least one bet placed. Returns the symbols that appeared.","annotations":{"readOnlyHint":false,"untrustedContentHint":false},"inputSchema":{"type":"object","properties":{}},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute"},{"name":"bau_cua_resolve","kind":"act","impl":"imperative","description":"Settles all bets against the current roll. Returns winnings/losses and updates points.","annotations":{"readOnlyHint":false,"untrustedContentHint":false},"inputSchema":{"type":"object","properties":{}},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute"},{"name":"bau_cua_state","kind":"answer","impl":"imperative","description":"Returns current game state: points, active bets, last roll, round number.","annotations":{"readOnlyHint":true,"untrustedContentHint":false},"inputSchema":{"type":"object","properties":{}},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute"},{"name":"water_puppet_list_tales","kind":"act","impl":"imperative","description":"Lists available tales to perform and their cast.","annotations":{"readOnlyHint":true,"untrustedContentHint":false},"inputSchema":{"type":"object","properties":{}},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute"},{"name":"water_puppet_start_show","kind":"act","impl":"imperative","description":"Starts a new puppet show for a specific tale.","annotations":{"readOnlyHint":false,"untrustedContentHint":false},"inputSchema":{"type":"object","properties":{"taleId":{"type":"string","description":"ID of the tale to perform ('coc-kien-troi', 'tam-cam', 'rong-ca')"}},"required":["taleId"]},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute"},{"name":"water_puppet_show_state","kind":"answer","impl":"imperative","description":"Gets current stage status, puppet positions, and applause meter.","annotations":{"readOnlyHint":true,"untrustedContentHint":false},"inputSchema":{"type":"object","properties":{}},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute"},{"name":"water_puppet_spawn_puppet","kind":"act","impl":"imperative","description":"Makes a puppet emerge from the water.","annotations":{"readOnlyHint":false,"untrustedContentHint":false},"inputSchema":{"type":"object","properties":{"puppetId":{"type":"string","description":"Unique identifier for the puppet"},"name":{"type":"string","description":"Display name of the puppet"},"asset":{"type":"string","description":"Asset name ('teu', 'dragon', 'fish', 'farmer') or any emoji (e.g. '🐸', '🌸', '👑')"},"x":{"type":"number","description":"Horizontal position on stage (0 to 100 percentage)"}},"required":["puppetId","name","asset","x"]},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute"},{"name":"water_puppet_move_puppet","kind":"act","impl":"imperative","description":"Moves a puppet across the stage.","annotations":{"readOnlyHint":false,"untrustedContentHint":false},"inputSchema":{"type":"object","properties":{"puppetId":{"type":"string","description":"ID of the puppet to move"},"targetX":{"type":"number","description":"Target horizontal position (0 to 100 percentage)"}},"required":["puppetId","targetX"]},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute"},{"name":"water_puppet_puppet_action","kind":"act","impl":"imperative","description":"Triggers a puppet action (e.g., 'jump', 'dance', 'dive').","annotations":{"readOnlyHint":false,"untrustedContentHint":false},"inputSchema":{"type":"object","properties":{"puppetId":{"type":"string","description":"ID of the puppet to perform the action"},"actionType":{"type":"string","description":"Action type: 'jump', 'dance', 'dive', 'emerge', 'splash'"}},"required":["puppetId","actionType"]},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute"},{"name":"water_puppet_trigger_effect","kind":"act","impl":"imperative","description":"Triggers a stage effect (e.g., splash, rain, fireworks) and SFX. Dramatically boosts applause.","annotations":{"readOnlyHint":false,"untrustedContentHint":false},"inputSchema":{"type":"object","properties":{"effectName":{"type":"string","description":"Name of stage effect: 'splash', 'rain', 'clear', 'fireworks', 'dance'"}},"required":["effectName"]},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute"},{"name":"water_puppet_speak","kind":"act","impl":"imperative","description":"Puppet or Narrator speaks a line to the audience.","annotations":{"readOnlyHint":false,"untrustedContentHint":false},"inputSchema":{"type":"object","properties":{"speaker":{"type":"string","description":"Name or ID of the speaker (e.g. \"Chú Tễu\", \"Người Xướng Trò\", \"Cô Tấm\")"},"message":{"type":"string","description":"The spoken dialogue or narration"}},"required":["speaker","message"]},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute"},{"name":"water_puppet_finish_show","kind":"act","impl":"imperative","description":"Ends the show, reveals the final applause score rating, and saves progress.","annotations":{"readOnlyHint":false,"untrustedContentHint":false},"inputSchema":{"type":"object","properties":{}},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute"},{"name":"gia_ngua_inspect","kind":"act","impl":"imperative","description":"Inspect the Iron Horse's current size, armor, hunger, and gear.","annotations":{"readOnlyHint":true,"untrustedContentHint":false},"inputSchema":{"type":"object","properties":{}},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute"},{"name":"gia_ngua_feed","kind":"act","impl":"imperative","description":"Feed the horse. \"com_ca\" grows it; \"pizza\"/\"nuoc_ngot\" makes it spit smoke.","annotations":{"readOnlyHint":false,"untrustedContentHint":false},"inputSchema":{"type":"object","properties":{"food":{"type":"string","enum":["com_ca","pizza","nuoc_ngot"],"description":"Food type: 'com_ca' (cơm cà), 'pizza', or 'nuoc_ngot' (nước ngọt)"}},"required":["food"]},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute"},{"name":"gia_ngua_equip","kind":"act","impl":"imperative","description":"Equip gear: bamboo_whip, iron_armor, iron_hat, iron_sword.","annotations":{"readOnlyHint":false,"untrustedContentHint":false},"inputSchema":{"type":"object","properties":{"item":{"type":"string","enum":["bamboo_whip","iron_armor","iron_hat","iron_sword"],"description":"Gear item: 'bamboo_whip' (roi tre), 'iron_armor' (giáp sắt), 'iron_hat' (mũ sắt), or 'iron_sword' (kiếm sắt)"}},"required":["item"]},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute"},{"name":"gia_ngua_test_fire","kind":"act","impl":"imperative","description":"Test fire breath (clamp duration 1-10s).","annotations":{"readOnlyHint":false,"untrustedContentHint":false},"inputSchema":{"type":"object","properties":{"duration_seconds":{"type":"number","minimum":1,"maximum":10,"description":"Duration of fire breath in seconds (1 to 10)"}},"required":["duration_seconds"]},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute"},{"name":"gia_ngua_state","kind":"answer","impl":"imperative","description":"Read full JSON state.","annotations":{"readOnlyHint":true,"untrustedContentHint":false},"inputSchema":{"type":"object","properties":{}},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute"},{"name":"gia_ngua_reset","kind":"act","impl":"imperative","description":"Reset run, keeps lifetime best size.","annotations":{"readOnlyHint":false,"untrustedContentHint":false},"inputSchema":{"type":"object","properties":{}},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute"},{"name":"rong_ran_start","kind":"act","impl":"imperative","description":"Spawns a new dragon chain of given length and initiates the chant: \"Rồng rắn lên mây...\"","annotations":{"readOnlyHint":false,"untrustedContentHint":false},"inputSchema":{"type":"object","properties":{"length":{"type":"number","minimum":4,"maximum":12,"description":"Length of dragon chain (4 to 12 kids)"}},"required":["length"]},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute"},{"name":"rong_ran_answer","kind":"act","impl":"imperative","description":"Call-and-response dialogue with the doctor (\"Có không?\" -> \"Không?\" or \"Có\")","annotations":{"readOnlyHint":false,"untrustedContentHint":false},"inputSchema":{"type":"object","properties":{"answer":{"type":"string","enum":["Có","Không","co","khong"],"description":"Doctor answer: 'Có' (doctor is home) or 'Không' (doctor is away)"}},"required":["answer"]},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute"},{"name":"rong_ran_chase","kind":"act","impl":"imperative","description":"Start the chase with a specific speed. Resolves deterministically based on speed vs length.","annotations":{"readOnlyHint":false,"untrustedContentHint":false},"inputSchema":{"type":"object","properties":{"speed":{"type":"string","enum":["cham","vua","nhanh"],"description":"Chase speed: 'cham' (slow), 'vua' (medium), or 'nhanh' (fast)"}},"required":["speed"]},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute"},{"name":"rong_ran_state","kind":"answer","impl":"imperative","description":"Read current game state, score, chain length, phase","annotations":{"readOnlyHint":true,"untrustedContentHint":false},"inputSchema":{"type":"object","properties":{}},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute"},{"name":"rong_ran_next_round","kind":"act","impl":"imperative","description":"Setup the next round. Caught kid becomes doctor. Score is rounds survived","annotations":{"readOnlyHint":false,"untrustedContentHint":false},"inputSchema":{"type":"object","properties":{}},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute"},{"name":"son_tinh_status","kind":"answer","impl":"imperative","description":"Current water level, mountain height, threat, points, inventory.","annotations":{"readOnlyHint":true,"untrustedContentHint":false},"inputSchema":{"type":"object","properties":{}},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute"},{"name":"son_tinh_deploy_defense","kind":"act","impl":"imperative","description":"Spend points raising the voxel mountain. Types: dirt (cheap/low), rock (pricey/strong), magic_net (rare/multiplier).","annotations":{"readOnlyHint":false,"untrustedContentHint":false},"inputSchema":{"type":"object","properties":{"type":{"type":"string","enum":["dirt","rock","magic_net"],"description":"Defense type: 'dirt' (+5m, 10pts), 'rock' (+10m, 25pts), or 'magic_net' (+15m, 50pts)"},"height_increase":{"type":"number","minimum":1,"maximum":5,"description":"Number of layers to build (1 to 5)"}},"required":["type","height_increase"]},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute"},{"name":"son_tinh_summon_gift","kind":"act","impl":"imperative","description":"Summon wedding-gift animal buff: voi_9_nga, ga_9_cua, ngua_thep, roi_that.","annotations":{"readOnlyHint":false,"untrustedContentHint":false},"inputSchema":{"type":"object","properties":{"animal":{"type":"string","enum":["voi_9_nga","ga_9_cua","ngua_thep","roi_that"],"description":"Wedding gift animal: 'voi_9_nga' (+15), 'ga_9_cua' (+10), 'ngua_thep' (+20), 'roi_that' (+5)"}},"required":["animal"]},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute"},{"name":"son_tinh_read_messages","kind":"act","impl":"imperative","description":"Read Thủy Tinh's angry texts.","annotations":{"readOnlyHint":true,"untrustedContentHint":false},"inputSchema":{"type":"object","properties":{}},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute"},{"name":"son_tinh_end_season","kind":"act","impl":"imperative","description":"End the current flood season. Survive waves → score. Submerged → funny defeat.","annotations":{"readOnlyHint":false,"untrustedContentHint":false},"inputSchema":{"type":"object","properties":{}},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute"},{"name":"son_tinh_reset","kind":"act","impl":"imperative","description":"Reset current flood run, keeps lifetime best waves.","annotations":{"readOnlyHint":false,"untrustedContentHint":false},"inputSchema":{"type":"object","properties":{}},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute"},{"name":"banh_chung_analyze","kind":"answer","impl":"imperative","description":"Read current % of each ingredient in bounds + fill level and total mass.","annotations":{"readOnlyHint":true,"untrustedContentHint":false},"inputSchema":{"type":"object","properties":{}},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute"},{"name":"banh_chung_drop_ingredient","kind":"act","impl":"imperative","description":"Spawns physical bodies above the box. Mass clamped per call 0.1-100kg.","annotations":{"readOnlyHint":false,"untrustedContentHint":false},"inputSchema":{"type":"object","properties":{"type":{"type":"string","enum":["nep","dau_xanh","thit_mo"],"description":"Ingredient type: 'nep' (gạo nếp), 'dau_xanh' (đậu xanh), or 'thit_mo' (thịt mỡ)"},"mass_kg":{"type":"number","minimum":0.1,"maximum":100,"description":"Mass in kilograms to add (clamped between 0.1 and 100 kg)"}},"required":["type","mass_kg"]},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute"},{"name":"banh_chung_fold_and_boil","kind":"act","impl":"imperative","description":"Evaluates current ingredients vs target ratio. Win if within 10% tolerance. Fails if overfilled.","annotations":{"readOnlyHint":false,"untrustedContentHint":false},"inputSchema":{"type":"object","properties":{}},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute"},{"name":"banh_chung_reset","kind":"act","impl":"imperative","description":"Clears the box for a new try, keeps lifetime stats.","annotations":{"readOnlyHint":false,"untrustedContentHint":false},"inputSchema":{"type":"object","properties":{}},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute"},{"name":"danh_quay_start","kind":"act","impl":"imperative","description":"Spawns a new spinning top with 30 initial energy.","annotations":{"readOnlyHint":false,"untrustedContentHint":false},"inputSchema":{"type":"object","properties":{}},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute"},{"name":"danh_quay_whip","kind":"act","impl":"imperative","description":"Whip the top to add energy. Power can be nhe (+5), vua (+12), manh (+22). Manh on near-max energy causes wobble. Overwhipping >100 causes fly-off.","annotations":{"readOnlyHint":false,"untrustedContentHint":false},"inputSchema":{"type":"object","properties":{"power":{"type":"string","enum":["nhe","vua","manh"],"description":"Whip power: 'nhe' (+5), 'vua' (+12), or 'manh' (+22)"}},"required":["power"]},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute"},{"name":"danh_quay_trick","kind":"act","impl":"imperative","description":"Perform a trick (nguoi_duc, bay_cao, qua_gam) costing 40 energy for applause points. 5 tricks in a row causes dizzy cooldown. Failing energy causes fall.","annotations":{"readOnlyHint":false,"untrustedContentHint":false},"inputSchema":{"type":"object","properties":{"trick":{"type":"string","enum":["nguoi_duc","bay_cao","qua_gam"],"description":"Trick type: 'nguoi_duc', 'bay_cao', or 'qua_gam'"}},"required":["trick"]},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute"},{"name":"danh_quay_state","kind":"answer","impl":"imperative","description":"Read current top state: energy, wobble, tricks landed, and score (seconds spun).","annotations":{"readOnlyHint":true,"untrustedContentHint":false},"inputSchema":{"type":"object","properties":{}},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute"},{"name":"danh_quay_finish","kind":"act","impl":"imperative","description":"Stop spinning and end the game. Saves final score and longest-spin record.","annotations":{"readOnlyHint":false,"untrustedContentHint":false},"inputSchema":{"type":"object","properties":{}},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute"}],"category":"Media & Personal","favicon":"/favicons/sanchoi.app.svg","apiSurface":"spec","toolCount":47}}