Tool tree
gradeNot graded
how_to_playAction
Return a primer on Open Mercy rules, card types, and basic tactics.
View tool JSON
{
"name": "how_to_play",
"kind": "act",
"impl": "imperative",
"description": "Return a primer on Open Mercy rules, card types, and basic tactics.",
"inputSchema": {
"type": "object",
"properties": {}
},
"page": "/"
}get_stateAnswer
Snapshot of the current game from your seat: your hand, the public table state, whose turn it is, what action is required of you now, and the exact legal moves. Opponent hands are never revealed. Read this before every move.
View tool JSON
{
"name": "get_state",
"kind": "answer",
"impl": "imperative",
"description": "Snapshot of the current game from your seat: your hand, the public table state, whose turn it is, what action is required of you now, and the exact legal moves. Opponent hands are never revealed. Read this before every move.",
"inputSchema": {
"type": "object",
"properties": {}
},
"page": "/"
}wait_for_turnAction
Block until it is your turn or an action is required of you, then return the fresh state. Use this instead of polling. Resolves immediately if you can already act. A long wait never hangs the call: it returns still_waiting:true (with the current state) about every 25s so the transport can breathe — re-issue wait_for_turn to keep waiting; timed_out:true only appears once the full timeout_ms elapses.
View tool JSON
{
"name": "wait_for_turn",
"kind": "act",
"impl": "imperative",
"description": "Block until it is your turn or an action is required of you, then return the fresh state. Use this instead of polling. Resolves immediately if you can already act. A long wait never hangs the call: it returns still_waiting:true (with the current state) about every 25s so the transport can breathe — re-issue wait_for_turn to keep waiting; timed_out:true only appears once the full timeout_ms elapses.",
"inputSchema": {
"type": "object",
"properties": {
"timeout_ms": {
"type": "number",
"description": "Max wait in ms (default 60000)."
}
}
},
"page": "/"
}start_single_playerAction
Start an offline game against the bot, exactly like the in-app vs-bot game: you versus one bot ("Terminator"). Deals hands and begins play.
View tool JSON
{
"name": "start_single_player",
"kind": "act",
"impl": "imperative",
"description": "Start an offline game against the bot, exactly like the in-app vs-bot game: you versus one bot (\"Terminator\"). Deals hands and begins play.",
"inputSchema": {
"type": "object",
"properties": {}
},
"page": "/"
}create_multiplayer_gameAction
Create an online room and become the host. Returns the room code to share.
View tool JSON
{
"name": "create_multiplayer_game",
"kind": "act",
"impl": "imperative",
"description": "Create an online room and become the host. Returns the room code to share.",
"inputSchema": {
"type": "object",
"properties": {}
},
"page": "/"
}join_multiplayer_gameAction
Join an online room by its 6-character room code.
View tool JSON
{
"name": "join_multiplayer_game",
"kind": "act",
"impl": "imperative",
"description": "Join an online room by its 6-character room code.",
"inputSchema": {
"type": "object",
"properties": {
"room_code": {
"type": "string"
}
},
"required": [
"room_code"
]
},
"page": "/"
}start_multiplayer_gameAction
Start the multiplayer game you host. Requires at least 2 players.
View tool JSON
{
"name": "start_multiplayer_game",
"kind": "act",
"impl": "imperative",
"description": "Start the multiplayer game you host. Requires at least 2 players.",
"inputSchema": {
"type": "object",
"properties": {}
},
"page": "/"
}play_cardAction
Play a card from your hand by id. For wild cards (EXCEPT a wild Color Roulette, whose color the victim names after the play) you must also pass a color. The move is rejected if it is not in your current legal moves. For a discardAll card you may pass discard_all_dump: the ids of the SAME-COLORED hand cards to discard along with it (any subset; empty list = the discardAll goes out alone; omit it = take every same-colored card). A card you just DREW (required_action play_or_pass_drawn) always goes out alone — discard_all_dump is ignored for it.
View tool JSON
{
"name": "play_card",
"kind": "act",
"impl": "imperative",
"description": "Play a card from your hand by id. For wild cards (EXCEPT a wild Color Roulette, whose color the victim names after the play) you must also pass a color. The move is rejected if it is not in your current legal moves. For a discardAll card you may pass discard_all_dump: the ids of the SAME-COLORED hand cards to discard along with it (any subset; empty list = the discardAll goes out alone; omit it = take every same-colored card). A card you just DREW (required_action play_or_pass_drawn) always goes out alone — discard_all_dump is ignored for it.",
"inputSchema": {
"type": "object",
"properties": {
"card_id": {
"type": "string"
},
"color": {
"type": "string",
"enum": [
"red",
"blue",
"green",
"yellow"
],
"description": "Required for wild cards (not wildColorRoulette)."
},
"discard_all_dump": {
"type": "array",
"items": {
"type": "string"
},
"description": "Same-colored hand card ids to dump along with a discardAll (subset, optional)."
}
},
"required": [
"card_id"
]
},
"page": "/"
}multi_playAction
Play SEVERAL chainable cards from your hand as one chain action (house rule): same value for number cards (0/7 excluded), same type for skip/reverse/skipEveryone, same draw value for draw cards. Pass top_card_id (one of card_ids — the last card in the chain) and, when the chain top is a wild card (not wildColorRoulette), the color. Set use_dragon=true to turn a chain of 4+ number cards into a Dragon: draw up to 24 cards and keep the turn for one more play (winning immediately still wins; no-op if your hand is already at 24). get_state.required_action lists viable chains under options.chains.
View tool JSON
{
"name": "multi_play",
"kind": "act",
"impl": "imperative",
"description": "Play SEVERAL chainable cards from your hand as one chain action (house rule): same value for number cards (0/7 excluded), same type for skip/reverse/skipEveryone, same draw value for draw cards. Pass top_card_id (one of card_ids — the last card in the chain) and, when the chain top is a wild card (not wildColorRoulette), the color. Set use_dragon=true to turn a chain of 4+ number cards into a Dragon: draw up to 24 cards and keep the turn for one more play (winning immediately still wins; no-op if your hand is already at 24). get_state.required_action lists viable chains under options.chains.",
"inputSchema": {
"type": "object",
"properties": {
"card_ids": {
"type": "array",
"items": {
"type": "string"
},
"minItems": 2,
"description": "Two or more card ids from your hand, in play order."
},
"top_card_id": {
"type": "string",
"description": "The last card of the chain (its effect color/type resolves)."
},
"color": {
"type": "string",
"enum": [
"red",
"blue",
"green",
"yellow"
],
"description": "Required when the chain top is a wild card (not wildColorRoulette)."
},
"use_dragon": {
"type": "boolean",
"description": "Dragon skill for 4+ number chains: draw to 24 and keep the turn."
}
},
"required": [
"card_ids",
"top_card_id"
]
},
"page": "/"
}accept_skip_stackAction
Accept ONE skip token when a skip stack is travelling to you (STACKING_SKIP). Your turn passes; remaining tokens keep travelling. The alternative is to counter with a skip card (or a reverse in 2p) via play_card / multi_play.
View tool JSON
{
"name": "accept_skip_stack",
"kind": "act",
"impl": "imperative",
"description": "Accept ONE skip token when a skip stack is travelling to you (STACKING_SKIP). Your turn passes; remaining tokens keep travelling. The alternative is to counter with a skip card (or a reverse in 2p) via play_card / multi_play.",
"inputSchema": {
"type": "object",
"properties": {}
},
"page": "/"
}draw_cardAction
Draw from the deck. If a draw stack is active you take the penalty; otherwise you draw one card and may play it (only that card) or pass it. Waits for the server snapshot, so the returned state reflects the draw.
View tool JSON
{
"name": "draw_card",
"kind": "act",
"impl": "imperative",
"description": "Draw from the deck. If a draw stack is active you take the penalty; otherwise you draw one card and may play it (only that card) or pass it. Waits for the server snapshot, so the returned state reflects the draw.",
"inputSchema": {
"type": "object",
"properties": {}
},
"page": "/"
}call_unoAction
Call MERCY (the last-card call). Do this when you are about to be left with one card to avoid a penalty.
View tool JSON
{
"name": "call_uno",
"kind": "act",
"impl": "imperative",
"description": "Call MERCY (the last-card call). Do this when you are about to be left with one card to avoid a penalty.",
"inputSchema": {
"type": "object",
"properties": {}
},
"page": "/"
}swap_handsAction
After playing a number 7 — a mandatory swap — swap your entire hand with the chosen opponent. The swap is MUTUAL: the target takes your whole hand, so both sides see each other's cards. get_state.your_hand reflects the new hand afterwards.
View tool JSON
{
"name": "swap_hands",
"kind": "act",
"impl": "imperative",
"description": "After playing a number 7 — a mandatory swap — swap your entire hand with the chosen opponent. The swap is MUTUAL: the target takes your whole hand, so both sides see each other's cards. get_state.your_hand reflects the new hand afterwards.",
"inputSchema": {
"type": "object",
"properties": {
"target_player_id": {
"type": "string"
}
},
"required": [
"target_player_id"
]
},
"page": "/"
}set_roulette_colorAction
Choose the target color when you are the victim of a wild color roulette.
View tool JSON
{
"name": "set_roulette_color",
"kind": "act",
"impl": "imperative",
"description": "Choose the target color when you are the victim of a wild color roulette.",
"inputSchema": {
"type": "object",
"properties": {
"color": {
"type": "string",
"enum": [
"red",
"blue",
"green",
"yellow"
]
}
},
"required": [
"color"
]
},
"page": "/"
}choose_dealer_wild_colorAction
House rule: name the opening color when you are the dealer and the first discard is a wild draw (draw6/draw10/wildReverseDraw4). The opening stack then lands on the player facing it.
View tool JSON
{
"name": "choose_dealer_wild_color",
"kind": "act",
"impl": "imperative",
"description": "House rule: name the opening color when you are the dealer and the first discard is a wild draw (draw6/draw10/wildReverseDraw4). The opening stack then lands on the player facing it.",
"inputSchema": {
"type": "object",
"properties": {
"color": {
"type": "string",
"enum": [
"red",
"blue",
"green",
"yellow"
]
}
},
"required": [
"color"
]
},
"page": "/"
}pass_drawn_cardAction
Decline the card you just drew and pass your turn (the drawn card stays in your hand).
View tool JSON
{
"name": "pass_drawn_card",
"kind": "act",
"impl": "imperative",
"description": "Decline the card you just drew and pass your turn (the drawn card stays in your hand).",
"inputSchema": {
"type": "object",
"properties": {}
},
"page": "/"
}leave_gameAction
Leave the current game and return to the lobby.
View tool JSON
{
"name": "leave_game",
"kind": "act",
"impl": "imperative",
"description": "Leave the current game and return to the lobby.",
"inputSchema": {
"type": "object",
"properties": {}
},
"page": "/"
}