list_dangerous_abilities
Identify abilities that impact Pokemon battle outcomes by filtering categories like immunities, damage reduction, status reflection, damage boosts, and move priority.
Instructions
List abilities that can significantly affect battle outcomes (immunities, damage reduction, status reflection, etc.)
Input Schema
TableJSON Schema
| Name | Required | Description | Default |
|---|---|---|---|
| category | No | Category of abilities: 'immunity' (type immunities), 'defense' (damage reduction), 'reflect' (status reflection), 'offense' (damage boosts), 'priority' (move order), 'all' (default) | all |
Implementation Reference
- src/pokemon_server.py:288-301 (registration)Registers the 'list_dangerous_abilities' tool, including its description and input schema for the optional 'category' parameter.Tool( name="list_dangerous_abilities", description="List abilities that can significantly affect battle outcomes (immunities, damage reduction, status reflection, etc.)", inputSchema={ "type": "object", "properties": { "category": { "type": "string", "description": "Category of abilities: 'immunity' (type immunities), 'defense' (damage reduction), 'reflect' (status reflection), 'offense' (damage boosts), 'priority' (move order), 'all' (default)", "default": "all" } } } ),
- src/pokemon_server.py:401-472 (handler)The execution logic for the 'list_dangerous_abilities' tool. Hardcodes a dictionary of dangerous abilities by category and generates a formatted markdown list based on the input category (or all).elif name == "list_dangerous_abilities": category = arguments.get("category", "all").lower() DANGEROUS_ABILITIES = { "immunity": { "Levitate": "Immune to Ground moves", "Flash Fire": "Immune to Fire moves, boosts own Fire attacks", "Volt Absorb": "Immune to Electric, heals instead", "Water Absorb": "Immune to Water, heals instead", "Dry Skin": "Immune to Water (heals), weak to Fire", "Lightning Rod": "Immune to Electric, boosts Sp.Atk", "Motor Drive": "Immune to Electric, boosts Speed", "Storm Drain": "Immune to Water, boosts Sp.Atk", "Sap Sipper": "Immune to Grass, boosts Attack", "Earth Eater": "Immune to Ground, heals instead", "Wonder Guard": "Only super effective moves deal damage!", }, "defense": { "Fur Coat": "Doubles Defense (halves physical damage)", "Ice Scales": "Halves Special damage", "Fluffy": "Halves contact damage (but 2x Fire damage)", "Multiscale": "Halves damage at full HP", "Shadow Shield": "Halves damage at full HP", "Sturdy": "Survives any hit at full HP with 1 HP", "Filter": "Reduces super effective damage by 25%", "Solid Rock": "Reduces super effective damage by 25%", "Prism Armor": "Reduces super effective damage by 25%", "Thick Fat": "Halves Fire and Ice damage", "Heatproof": "Halves Fire damage", "Water Bubble": "Halves Fire damage, doubles Water attacks", "Unaware": "Ignores opponent's stat boosts", "Marvel Scale": "1.5x Defense when statused", }, "reflect": { "Magic Bounce": "Reflects status moves (Stealth Rock, Thunder Wave, etc.)", }, "offense": { "Huge Power": "Doubles Attack stat!", "Pure Power": "Doubles Attack stat!", "Adaptability": "STAB becomes 2x instead of 1.5x", "Technician": "1.5x boost to moves with 60 BP or less", "Tinted Lens": "Doubles 'not very effective' damage", "Protean": "Changes type to match used move (always STAB)", "Libero": "Changes type to match used move (always STAB)", }, "priority": { "Prankster": "+1 priority to status moves", "Gale Wings": "+1 priority to Flying moves at full HP", }, "contact": { "Rough Skin": "1/8 damage to attacker on contact", "Iron Barbs": "1/8 damage to attacker on contact", "Flame Body": "30% chance to burn on contact", "Static": "30% chance to paralyze on contact", "Poison Point": "30% chance to poison on contact", } } lines = ["## Dangerous Abilities\n"] categories_to_show = [category] if category != "all" else list(DANGEROUS_ABILITIES.keys()) for cat in categories_to_show: if cat in DANGEROUS_ABILITIES: lines.append(f"### {cat.title()}\n") for ability_name, desc in DANGEROUS_ABILITIES[cat].items(): lines.append(f"- **{ability_name}**: {desc}") lines.append("") if len(lines) == 1: return [TextContent(type="text", text=f"Unknown category: {category}. Use 'immunity', 'defense', 'reflect', 'offense', 'priority', 'contact', or 'all'.")] return [TextContent(type="text", text="\n".join(lines))]