FastMCP wrapper for the local Balatro MCP mod, providing tools to interact with the Balatro card game via HTTP and stdio transports
Balatro MCP has 22 tools with consistent naming (verb_noun pattern) and descriptions present for all tools. However, parameter descriptions are sparse or missing entirely for many tools. Input schemas are visible but lack depth, most parameters have type but minimal constraint documentation. Output schemas are not documented. Error handling is minimal. The server follows basic tool structure but lacks LLM-optimization patterns like enums, format constraints, and recovery guidance.
Execute an action in the game with optional parameters
Buy an item from the shop
Choose a blind by option ID or blind name
Choose an option from a pack screen or blind selection
Continue the current run by progressing through the current screen (menu, round eval, shop, pack, or game over)
Deselect a card in hand by index
Discard highlighted cards or specified card indices
Output schemas not documented. Tools return complex game state objects (get_game_state, get_raw_game_state, get_run_summary) but LLMs cannot see what fields to expect. This forces agents to guess at response structure and risks extraction errors.
Parameter descriptions are minimal or missing. 'area' in act() and buy_item() lacks explanation of valid values (e.g., 'shop_jokers', 'shop_consumables'). 'mode' in act() is undocumented. LLMs cannot infer valid inputs without explicit descriptions.
No enum constraints for categorical parameters. 'area' should be an enum (shop_jokers, shop_consumables, etc.). 'blind' in choose_blind() accepts 'Small'/'Big'/'Boss' but this is not formalized as an enum. Free-form strings invite hallucinated values.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | D | 59 | 2026-07-28+ | v2 |
End the current turn by cashing out, ending shop, skipping booster, or returning to menu depending on current screen
Get the history of executed actions with optional limit
Get the list of actions currently available in the game
Get the current game state including screen, stage, money, ante, hands left, discards left, chips, blind information, hand cards, selected cards, jokers, consumables, and shop items
Get the raw game state with all available data from the Balatro game
Get a summary of the current run including screen, stage, money, ante, hands left, discards left, chips, blind, hand cards, selected cards, jokers, consumables, and shop items
Check the health status of the Balatro MCP server and underlying game
Get the list of actions currently available in the game (alias for get_available_actions)
Play highlighted cards or specified card indices
Reroll the shop cards
Select a card in hand by index
Sell a joker by index
Skip the current choice (booster pack or blind)
Use a consumable card by index with optional card indices
Wait until the game becomes actionable with optional timeout and poll interval
Duplicate/redundant tools. list_legal_actions() is an alias for get_available_actions() with identical behavior. This wastes LLM reasoning cycles deciding between them. Consolidate to one canonical tool.
No error handling guidance. Tools lack recovery hints. If act() fails due to invalid action, the LLM receives no guidance on what to try next (e.g., 'Call get_available_actions() first'). Error responses should be actionable.