Skip to main content
Glama

Analyze Team

analyze_team
Read-onlyIdempotent

Assess a Pokémon Champions team: run synergy to reveal stacked weaknesses, coverage gaps, and speed placement, or diagnose to get evidence-backed spread, move, item, and member fixes.

Instructions

Pokémon Champions team analysis, dispatching on mode: "synergy" for the type-synergy read (stacked weaknesses, coverage gaps, speed placement, heuristic score, and battle-math answerClass verdicts against the meta when a regulation and moves are supplied), "diagnose" for the coaching read ("fix my team": problems with evidence, then concrete spread/move/item/member changes). Each mode carries the same documented fields the dedicated tools had. Read-only and offline.

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
goalNoWhat the caller is trying to achieve, e.g. "improve against the current meta"; carried into the result verbatim, the analysis itself is always meta-coverage-first.
modeYesWhich operation to run: "synergy", "diagnose".
teamNo
detailNoHow much detail to return: "compact" (default) gives conclusions and the numbers needed to reason; "evidence" adds ranges, benchmarks and per-row detail; "debug" adds provenance and every intermediate. Ask for more only when the reasoning actually needs it — model context is the expensive resource.
opponentNoOptional opponent team as species names, e.g. ["Salamence", "Sneasler", "Kingambit"]; the reply then recommends which four of your six to bring. This is what team preview gives you — species only, no sets — so the read is type-based. Unknown names return an isError.
regulationNo
lockedMembersNoSpecies to keep as-is; they are excluded from member-swap suggestions (spread, move and item changes still apply to them).

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed9 schema fields changedv8.0.2
    • addedInput schema / $schema
      Added value: +"http://json-schema.org/draft-07/schema#"
    • addedInput schema / properties / detail
      Added value: +{
      +  "description": "How much detail to return: \"compact\" (default) gives conclusions and the numbers needed to reason; \"evidence\" adds ranges, benchmarks and per-row detail; \"debug\" adds provenance and every intermediate. Ask for more only when the reasoning actually needs it — model context is the expensive resource.",
      +  "enum": [
      +    "compact",
      +    "evidence",
      +    "debug"
      +  ],
      +  "type": "string"
      +}
    • addedInput schema / properties / goal
      Added value: +{
      +  "description": "What the caller is trying to achieve, e.g. \"improve against the current meta\"; carried into the result verbatim, the analysis itself is always meta-coverage-first.",
      +  "type": "string"
      +}
    • addedInput schema / properties / lockedMembers
      Added value: +{
      +  "description": "Species to keep as-is; they are excluded from member-swap suggestions (spread, move and item changes still apply to them).",
      +  "items": {
      +    "type": "string"
      +  },
      +  "type": "array"
      +}
    • addedInput schema / properties / mode
      Added value: +{
      +  "description": "Which operation to run: \"synergy\", \"diagnose\".",
      +  "enum": [
      +    "synergy",
      +    "diagnose"
      +  ],
      +  "type": "string"
      +}
    • addedInput schema / properties / opponent
      Added value: +{
      +  "description": "Optional opponent team as species names, e.g. [\"Salamence\", \"Sneasler\", \"Kingambit\"]; the reply then recommends which four of your six to bring. This is what team preview gives you — species only, no sets — so the read is type-based. Unknown names return an isError.",
      +  "items": {
      +    "type": "string"
      +  },
      +  "maxItems": 6,
      +  "minItems": 1,
      +  "type": "array"
      +}
    • addedInput schema / properties / regulation
      Added value: +{
      +  "anyOf": [
      +    {
      +      "description": "Optional regulation set id, e.g. \"m-c\"; when given, the reply also lists legal threats whose base speed beats your fastest member. Unknown ids return an isError.",
      +      "type": "string"
      +    },
      +    {
      +      "description": "Regulation id to diagnose against, e.g. \"m-c\"; omitted, the current set is used.",
      +      "type": "string"
      +    }
      +  ]
      +}
    • addedInput schema / properties / team
      Added value: +{
      +  "anyOf": [
      +    {
      +      "description": "Team of up to 6 members, each a species with optional moves and a set.",
      +      "items": {
      +        "properties": {
      +          "championsPoints": {
      +            "additionalProperties": {
      +              "type": "number"
      +            },
      +            "description": "Optional Champions stat points, e.g. { spe: 32 }; only Speed affects this analysis, and it is an alternative to `evs`.",
      +            "propertyNames": {
      +              "type": "string"
      +            },
      +            "type": "object"
      +          },
      +          "evs": {
      +            "additionalProperties": {
      +              "type": "number"
      +            },
      +            "description": "Optional spread in the 0-252 scale; only Speed affects this analysis.",
      +            "propertyNames": {
      +              "type": "string"
      +            },
      +            "type": "object"
      +          },
      +          "item": {
      +            "description": "Optional held item, e.g. \"Choice Scarf\"; Choice Scarf multiplies the member’s Speed by 1.5 in the threat coverage.",
      +            "type": "string"
      +          },
      +          "moves": {
      +            "description": "Optional move names, e.g. [\"Knock Off\"]; their types widen offensive coverage. Unknown names are reported, not fatal.",
      +            "items": {
      +              "type": "string"
      +            },
      +            "type": "array"
      +          },
      +          "nature": {
      +            "description": "Optional nature, e.g. \"Jolly\"; with a spread it sets the member’s real Speed for the threat coverage, otherwise Speed is left neutral and uninvested.",
      +            "type": "string"
      +          },
      +          "species": {
      +            "description": "Species name as it appears in Showdown, e.g. \"Incineroar\", \"Garchomp\".",
      +            "type": "string"
      +          }
      +        },
      +        "required": [
      +          "species"
      +        ],
      +        "type": "object"
      +      },
      +      "maxItems": 6,
      +      "minItems": 1,
      +      "type": "array"
      +    },
      +    {
      +      "description": "The team to diagnose, in the canonical shape `parse_team` returns: species with optional moves, ability, nature, evs or championsPoints, and item.",
      +      "items": {
      +        "properties": {
      +          "ability": {
      +            "description": "Ability, canonical spelling when known.",
      +            "type": "string"
      +          },
      +          "championsPoints": {
      +            "additionalProperties": {
      +              "type": "number"
      +            },
      +            "description": "Pokémon Champions stat points keyed by stat id, 0-32 each, 66 total; present when the spread was parsed as point-scale — values that all fit 0-32 and total at most 66, or an explicit SP line.",
      +            "propertyNames": {
      +              "type": "string"
      +            },
      +            "type": "object"
      +          },
      +          "evs": {
      +            "additionalProperties": {
      +              "type": "number"
      +            },
      +            "description": "EVs keyed by stat id, 0-252; present when the spread was parsed as EV-scale.",
      +            "propertyNames": {
      +              "type": "string"
      +            },
      +            "type": "object"
      +          },
      +          "item": {
      +            "description": "Held item, canonical spelling when known.",
      +            "type": "string"
      +          },
      +          "ivs": {
      +            "additionalProperties": {
      +              "type": "number"
      +            },
      +            "description": "IVs from an IVs line, keyed by stat id.",
      +            "propertyNames": {
      +              "type": "string"
      +            },
      +            "type": "object"
      +          },
      +          "level": {
      +            "description": "Level when the paste stated one; Champions always plays at 50.",
      +            "maximum": 9007199254740991,
      +            "minimum": -9007199254740991,
      +            "type": "integer"
      +          },
      +          "moves": {
      +            "description": "Moves in paste order, canonical spelling when known.",
      +            "items": {
      +              "type": "string"
      +            },
      +            "type": "array"
      +          },
      +          "nature": {
      +            "description": "Nature as supplied.",
      +            "type": "string"
      +          },
      +          "species": {
      +            "description": "Species as the dataset resolves it, e.g. \"Rotom-Wash\", \"Salamence-Mega\"; the spelling supplied is kept when the species is unknown.",
      +            "type": "string"
      +          }
      +        },
      +        "required": [
      +          "species"
      +        ],
      +        "type": "object"
      +      },
      +      "maxItems": 6,
      +      "minItems": 1,
      +      "type": "array"
      +    }
      +  ]
      +}
    • addedInput schema / required
      Added value: +[
      +  "mode"
      +]
  2. Changed6 schema fields changedv6.2.2
    • removedInput schema / $schema
      Removed value: -"http://json-schema.org/draft-07/schema#"
    • removedInput schema / properties / opponent
      Removed value: -{
      -  "description": "Optional opponent team as species names, e.g. [\"Salamence\", \"Sneasler\", \"Kingambit\"]; the reply then recommends which four of your six to bring. This is what team preview gives you — species only, no sets — so the read is type-based. Unknown names return an isError.",
      -  "items": {
      -    "type": "string"
      -  },
      -  "maxItems": 6,
      -  "minItems": 1,
      -  "type": "array"
      -}
    • removedInput schema / properties / regulation
      Removed value: -{
      -  "description": "Optional regulation set id, e.g. \"m-c\"; when given, the reply also lists legal threats whose base speed beats your fastest member. Unknown ids return an isError.",
      -  "type": "string"
      -}
    • removedInput schema / properties / team
      Removed value: -{
      -  "description": "Team of up to 6 members, each a species with optional moves and a set.",
      -  "items": {
      -    "properties": {
      -      "championsPoints": {
      -        "additionalProperties": {
      -          "type": "number"
      -        },
      -        "description": "Optional Champions stat points, e.g. { spe: 32 }; only Speed affects this analysis, and it is an alternative to `evs`.",
      -        "propertyNames": {
      -          "type": "string"
      -        },
      -        "type": "object"
      -      },
      -      "evs": {
      -        "additionalProperties": {
      -          "type": "number"
      -        },
      -        "description": "Optional spread in the 0-252 scale; only Speed affects this analysis.",
      -        "propertyNames": {
      -          "type": "string"
      -        },
      -        "type": "object"
      -      },
      -      "item": {
      -        "description": "Optional held item, e.g. \"Choice Scarf\"; Choice Scarf multiplies the member’s Speed by 1.5 in the threat coverage.",
      -        "type": "string"
      -      },
      -      "moves": {
      -        "description": "Optional move names, e.g. [\"Knock Off\"]; their types widen offensive coverage. Unknown names are reported, not fatal.",
      -        "items": {
      -          "type": "string"
      -        },
      -        "type": "array"
      -      },
      -      "nature": {
      -        "description": "Optional nature, e.g. \"Jolly\"; with a spread it sets the member’s real Speed for the threat coverage, otherwise Speed is left neutral and uninvested.",
      -        "type": "string"
      -      },
      -      "species": {
      -        "description": "Species name as it appears in Showdown, e.g. \"Incineroar\", \"Garchomp\".",
      -        "type": "string"
      -      }
      -    },
      -    "required": [
      -      "species"
      -    ],
      -    "type": "object"
      -  },
      -  "maxItems": 6,
      -  "minItems": 1,
      -  "type": "array"
      -}
    • removedInput schema / required
      Removed value: -[
      -  "team"
      -]
    • changedOutput schema / (root)
      Previous value: -{
      -  "$schema": "http://json-schema.org/draft-07/schema#",
      -  "additionalProperties": false,
      -  "properties": {
      -    "atRiskTypes": {
      -      "description": "The stacked-weakness types: at least two members weak to it and nobody resisting or immune. Empty means no such hole.",
      -      "items": {
      -        "type": "string"
      -      },
      -      "type": "array"
      -    },
      -    "bringFour": {
      -      "additionalProperties": false,
      -      "description": "Which four of the six to bring; present only when `opponent` was supplied.",
      -      "properties": {
      -        "atRiskTypes": {
      -          "description": "Types at least two of the recommended four are weak to with none of them resisting or immune — the cost of the cut, worth knowing before you commit to it.",
      -          "items": {
      -            "type": "string"
      -          },
      -          "type": "array"
      -        },
      -        "leftBehind": {
      -          "description": "The members not recommended; empty when the team has four or fewer.",
      -          "items": {
      -            "additionalProperties": false,
      -            "properties": {
      -              "defensive": {
      -                "description": "Opponent species that hit this member super-effectively on their STAB alone — team preview shows no sets.",
      -                "maximum": 9007199254740991,
      -                "minimum": -9007199254740991,
      -                "type": "integer"
      -              },
      -              "offensive": {
      -                "description": "Opponent species this member hits super-effectively, from STAB or a supplied move.",
      -                "maximum": 9007199254740991,
      -                "minimum": -9007199254740991,
      -                "type": "integer"
      -              },
      -              "score": {
      -                "description": "`offensive` minus `defensive`: the ranking key.",
      -                "maximum": 9007199254740991,
      -                "minimum": -9007199254740991,
      -                "type": "integer"
      -              },
      -              "species": {
      -                "description": "Species name of the member.",
      -                "type": "string"
      -              }
      -            },
      -            "required": [
      -              "species",
      -              "offensive",
      -              "defensive",
      -              "score"
      -            ],
      -            "type": "object"
      -          },
      -          "type": "array"
      -        },
      -        "note": {
      -          "description": "How the pick is scored, and what it cannot see.",
      -          "type": "string"
      -        },
      -        "opponent": {
      -          "description": "The opponent team as resolved species names, in the order supplied.",
      -          "items": {
      -            "type": "string"
      -          },
      -          "type": "array"
      -        },
      -        "picks": {
      -          "description": "Up to four members to bring, best first — fewer only when the team itself has fewer than four.",
      -          "items": {
      -            "additionalProperties": false,
      -            "properties": {
      -              "defensive": {
      -                "description": "Opponent species that hit this member super-effectively on their STAB alone — team preview shows no sets.",
      -                "maximum": 9007199254740991,
      -                "minimum": -9007199254740991,
      -                "type": "integer"
      -              },
      -              "offensive": {
      -                "description": "Opponent species this member hits super-effectively, from STAB or a supplied move.",
      -                "maximum": 9007199254740991,
      -                "minimum": -9007199254740991,
      -                "type": "integer"
      -              },
      -              "score": {
      -                "description": "`offensive` minus `defensive`: the ranking key.",
      -                "maximum": 9007199254740991,
      -                "minimum": -9007199254740991,
      -                "type": "integer"
      -              },
      -              "species": {
      -                "description": "Species name of the member.",
      -                "type": "string"
      -              }
      -            },
      -            "required": [
      -              "species",
      -              "offensive",
      -              "defensive",
      -              "score"
      -            ],
      -            "type": "object"
      -          },
      -          "type": "array"
      -        }
      -      },
      -      "required": [
      -        "opponent",
      -        "picks",
      -        "leftBehind",
      -        "atRiskTypes",
      -        "note"
      -      ],
      -      "type": "object"
      -    },
      -    "defensiveWeaknesses": {
      -      "additionalProperties": {
      -        "additionalProperties": false,
      -        "properties": {
      -          "immune": {
      -            "description": "How many members are immune to it.",
      -            "maximum": 9007199254740991,
      -            "minimum": -9007199254740991,
      -            "type": "integer"
      -          },
      -          "resist": {
      -            "description": "How many members resist it (damage below neutral).",
      -            "maximum": 9007199254740991,
      -            "minimum": -9007199254740991,
      -            "type": "integer"
      -          },
      -          "weak": {
      -            "description": "How many members take super-effective damage from this attacking type.",
      -            "maximum": 9007199254740991,
      -            "minimum": -9007199254740991,
      -            "type": "integer"
      -          },
      -          "weakBy": {
      -            "description": "Species names of the members weak to it, in team order; empty when none are.",
      -            "items": {
      -              "type": "string"
      -            },
      -            "type": "array"
      -          }
      -        },
      -        "required": [
      -          "weak",
      -          "resist",
      -          "immune",
      -          "weakBy"
      -        ],
      -        "type": "object"
      -      },
      -      "description": "One entry for each of the 18 classic types (keyed by type name, e.g. \"Fire\"), tallying how the team fares defensively against that type.",
      -      "propertyNames": {
      -        "type": "string"
      -      },
      -      "type": "object"
      -    },
      -    "offensiveCoverage": {
      -      "additionalProperties": false,
      -      "description": "Super-effective coverage of all 18 defending types.",
      -      "properties": {
      -        "coveredBy": {
      -          "additionalProperties": {
      -            "items": {
      -              "type": "string"
      -            },
      -            "type": "array"
      -          },
      -          "description": "One entry for each of the 18 classic types (keyed by the defending type), listing the team members that hit it super-effectively from STAB or a supplied move type; an empty array means nobody does.",
      -          "propertyNames": {
      -            "type": "string"
      -          },
      -          "type": "object"
      -        },
      -        "note": {
      -          "description": "Reminder of which attacking types this coverage was computed from.",
      -          "type": "string"
      -        },
      -        "uncoveredSuperEffectively": {
      -          "description": "Defending types no member hits super-effectively.",
      -          "items": {
      -            "type": "string"
      -          },
      -          "type": "array"
      -        }
      -      },
      -      "required": [
      -        "coveredBy",
      -        "uncoveredSuperEffectively",
      -        "note"
      -      ],
      -      "type": "object"
      -    },
      -    "score": {
      -      "additionalProperties": false,
      -      "description": "Transparent heuristic 0-100 scoring of the team.",
      -      "properties": {
      -        "coverage": {
      -          "description": "0-100 share of the 18 types the team hits super-effectively.",
      -          "maximum": 9007199254740991,
      -          "minimum": -9007199254740991,
      -          "type": "integer"
      -        },
      -        "defensive": {
      -          "description": "0-100 score penalising stacked weaknesses, floored at 0.",
      -          "maximum": 9007199254740991,
      -          "minimum": -9007199254740991,
      -          "type": "integer"
      -        },
      -        "note": {
      -          "description": "What each component means and the reminder that this is a heuristic, not a metagame rating.",
      -          "type": "string"
      -        },
      -        "overall": {
      -          "description": "Rounded mean of the component scores, 0-100.",
      -          "maximum": 9007199254740991,
      -          "minimum": -9007199254740991,
      -          "type": "integer"
      -        },
      -        "speed": {
      -          "description": "0-100 score dropping 2 points per legal faster threat; present only when `regulation` was supplied.",
      -          "maximum": 9007199254740991,
      -          "minimum": -9007199254740991,
      -          "type": "integer"
      -        }
      -      },
      -      "required": [
      -        "overall",
      -        "defensive",
      -        "coverage",
      -        "note"
      -      ],
      -      "type": "object"
      -    },
      -    "speed": {
      -      "additionalProperties": false,
      -      "description": "Where the team sits on the speed spectrum, plus legal faster threats when a regulation was given.",
      -      "properties": {
      -        "fasterThreatCount": {
      -          "description": "How many legal species have a higher base Speed than the team’s fastest member; present only when `regulation` was supplied. A base-stat count only — `threatCoverage` applies each threat’s real nature, EVs and Mega form.",
      -          "maximum": 9007199254740991,
      -          "minimum": -9007199254740991,
      -          "type": "integer"
      -        },
      -        "fastest": {
      -          "additionalProperties": false,
      -          "description": "The fastest member of the team.",
      -          "properties": {
      -            "baseSpe": {
      -              "description": "Its base Speed stat.",
      -              "maximum": 9007199254740991,
      -              "minimum": -9007199254740991,
      -              "type": "integer"
      -            },
      -            "species": {
      -              "description": "Species name of the team’s fastest member by base Speed.",
      -              "type": "string"
      -            }
      -          },
      -          "required": [
      -            "species",
      -            "baseSpe"
      -          ],
      -          "type": "object"
      -        },
      -        "regulation": {
      -          "description": "Display name of the regulation that was checked; present only when `regulation` was supplied.",
      -          "type": "string"
      -        },
      -        "slowest": {
      -          "additionalProperties": false,
      -          "description": "The slowest member of the team.",
      -          "properties": {
      -            "baseSpe": {
      -              "description": "Its base Speed stat.",
      -              "maximum": 9007199254740991,
      -              "minimum": -9007199254740991,
      -              "type": "integer"
      -            },
      -            "species": {
      -              "description": "Species name of the team’s slowest member by base Speed.",
      -              "type": "string"
      -            }
      -          },
      -          "required": [
      -            "species",
      -            "baseSpe"
      -          ],
      -          "type": "object"
      -        }
      -      },
      -      "required": [
      -        "fastest",
      -        "slowest"
      -      ],
      -      "type": "object"
      -    },
      -    "team": {
      -      "description": "The analysed team in the order it was supplied, each member with the typing actually used for the analysis.",
      -      "items": {
      -        "additionalProperties": false,
      -        "properties": {
      -          "baseSpe": {
      -            "description": "Base Speed stat of the species, used for the speed placement below.",
      -            "maximum": 9007199254740991,
      -            "minimum": -9007199254740991,
      -            "type": "integer"
      -          },
      -          "moveTypes": {
      -            "description": "Types of the supplied moves that were recognised, e.g. [\"Dark\"]; unrecognised move names are left out here and listed in `unknownMoves`.",
      -            "items": {
      -              "type": "string"
      -            },
      -            "type": "array"
      -          },
      -          "species": {
      -            "description": "Resolved species name, e.g. \"Great Tusk\".",
      -            "type": "string"
      -          },
      -          "types": {
      -            "description": "The species’ types as the dataset defines them, e.g. [\"Ground\", \"Fighting\"].",
      -            "items": {
      -              "type": "string"
      -            },
      -            "type": "array"
      -          }
      -        },
      -        "required": [
      -          "species",
      -          "types",
      -          "baseSpe",
      -          "moveTypes"
      -        ],
      -        "type": "object"
      -      },
      -      "type": "array"
      -    },
      -    "threatCoverage": {
      -      "additionalProperties": false,
      -      "description": "How the team fares against the regulation’s most-used sets; present only when a regulation with a usage-derived threat list was supplied.",
      -      "properties": {
      -        "fastestSpeed": {
      -          "description": "Your fastest member’s Speed at level 50 with the sets you supplied — the value every `outspeed` below is judged against.",
      -          "maximum": 9007199254740991,
      -          "minimum": -9007199254740991,
      -          "type": "integer"
      -        },
      -        "note": {
      -          "description": "How the comparison is made, and what it does not model.",
      -          "type": "string"
      -        },
      -        "regulation": {
      -          "description": "Display name of the regulation whose threat list was used, e.g. \"Regulation Set M-C\".",
      -          "type": "string"
      -        },
      -        "sourceAsOf": {
      -          "description": "ISO date of the newest data point behind that threat list.",
      -          "type": "string"
      -        },
      -        "threats": {
      -          "description": "One entry per threat in the regulation’s list, most used first.",
      -          "items": {
      -            "additionalProperties": false,
      -            "properties": {
      -              "answered": {
      -                "description": "True when the team has a super-effective (≥2x) hit on it.",
      -                "type": "boolean"
      -              },
      -              "hitBy": {
      -                "description": "The member providing that best hit; absent when nothing hits it super-effectively.",
      -                "type": "string"
      -              },
      -              "hitMultiplier": {
      -                "description": "Best type multiplier your team has against it, from STAB and supplied moves; 0 when nothing can hit it at all.",
      -                "type": "number"
      -              },
      -              "hitVia": {
      -                "description": "The attacking type providing it; absent when nothing hits it super-effectively.",
      -                "type": "string"
      -              },
      -              "outspeed": {
      -                "description": "True when your fastest member moves first.",
      -                "type": "boolean"
      -              },
      -              "species": {
      -                "description": "The threat as the meta plays it, e.g. \"Salamence-Mega\".",
      -                "type": "string"
      -              },
      -              "threatSpeed": {
      -                "description": "Its Speed at level 50 with its own nature, EVs and Mega form.",
      -                "maximum": 9007199254740991,
      -                "minimum": -9007199254740991,
      -                "type": "integer"
      -              },
      -              "usage": {
      -                "description": "Share of the sampled teams carrying it, in percent.",
      -                "type": "number"
      -              }
      -            },
      -            "required": [
      -              "species",
      -              "usage",
      -              "threatSpeed",
      -              "outspeed",
      -              "hitMultiplier",
      -              "answered"
      -            ],
      -            "type": "object"
      -          },
      -          "type": "array"
      -        },
      -        "unanswered": {
      -          "description": "Threats with no super-effective hit from this team — the coverage holes to fix first.",
      -          "items": {
      -            "type": "string"
      -          },
      -          "type": "array"
      -        },
      -        "unansweredCount": {
      -          "description": "How many threats are unanswered.",
      -          "maximum": 9007199254740991,
      -          "minimum": -9007199254740991,
      -          "type": "integer"
      -        }
      -      },
      -      "required": [
      -        "regulation",
      -        "sourceAsOf",
      -        "fastestSpeed",
      -        "threats",
      -        "unanswered",
      -        "unansweredCount",
      -        "note"
      -      ],
      -      "type": "object"
      -    },
      -    "unknownMoves": {
      -      "description": "Deduplicated move names that were not found in the dataset and so contributed no coverage; omitted entirely when every move resolved.",
      -      "items": {
      -        "type": "string"
      -      },
      -      "type": "array"
      -    }
      -  },
      -  "required": [
      -    "team",
      -    "defensiveWeaknesses",
      -    "atRiskTypes",
      -    "offensiveCoverage",
      -    "speed",
      -    "score"
      -  ],
      -  "type": "object"
      -}New value: +null
  3. Changed15 schema fields changedv3.2.0
    • addedInput schema / properties / opponent
      Added value: +{
      +  "description": "Optional opponent team as species names, e.g. [\"Salamence\", \"Sneasler\", \"Kingambit\"]; the reply then recommends which four of your six to bring. This is what team preview gives you — species only, no sets — so the read is type-based. Unknown names return an isError.",
      +  "items": {
      +    "type": "string"
      +  },
      +  "maxItems": 6,
      +  "minItems": 1,
      +  "type": "array"
      +}
    • changedInput schema / properties / team / description
      Previous value: -"Team of up to 6 members, each a species with optional Tera type and moves."New value: +"Team of up to 6 members, each a species with optional moves and a set."
    • removedInput schema / properties / team / items / properties / teraType
      Removed value: -{
      -  "description": "Optional Tera type, e.g. \"Steel\"; when set it replaces the member’s defensive typing in the weakness tally.",
      -  "type": "string"
      -}
    • addedOutput schema / properties / bringFour
      Added value: +{
      +  "additionalProperties": false,
      +  "description": "Which four of the six to bring; present only when `opponent` was supplied.",
      +  "properties": {
      +    "atRiskTypes": {
      +      "description": "Types at least two of the recommended four are weak to with none of them resisting or immune — the cost of the cut, worth knowing before you commit to it.",
      +      "items": {
      +        "type": "string"
      +      },
      +      "type": "array"
      +    },
      +    "leftBehind": {
      +      "description": "The members not recommended; empty when the team has four or fewer.",
      +      "items": {
      +        "additionalProperties": false,
      +        "properties": {
      +          "defensive": {
      +            "description": "Opponent species that hit this member super-effectively on their STAB alone — team preview shows no sets.",
      +            "maximum": 9007199254740991,
      +            "minimum": -9007199254740991,
      +            "type": "integer"
      +          },
      +          "offensive": {
      +            "description": "Opponent species this member hits super-effectively, from STAB or a supplied move.",
      +            "maximum": 9007199254740991,
      +            "minimum": -9007199254740991,
      +            "type": "integer"
      +          },
      +          "score": {
      +            "description": "`offensive` minus `defensive`: the ranking key.",
      +            "maximum": 9007199254740991,
      +            "minimum": -9007199254740991,
      +            "type": "integer"
      +          },
      +          "species": {
      +            "description": "Species name of the member.",
      +            "type": "string"
      +          }
      +        },
      +        "required": [
      +          "species",
      +          "offensive",
      +          "defensive",
      +          "score"
      +        ],
      +        "type": "object"
      +      },
      +      "type": "array"
      +    },
      +    "note": {
      +      "description": "How the pick is scored, and what it cannot see.",
      +      "type": "string"
      +    },
      +    "opponent": {
      +      "description": "The opponent team as resolved species names, in the order supplied.",
      +      "items": {
      +        "type": "string"
      +      },
      +      "type": "array"
      +    },
      +    "picks": {
      +      "description": "Up to four members to bring, best first — fewer only when the team itself has fewer than four.",
      +      "items": {
      +        "additionalProperties": false,
      +        "properties": {
      +          "defensive": {
      +            "description": "Opponent species that hit this member super-effectively on their STAB alone — team preview shows no sets.",
      +            "maximum": 9007199254740991,
      +            "minimum": -9007199254740991,
      +            "type": "integer"
      +          },
      +          "offensive": {
      +            "description": "Opponent species this member hits super-effectively, from STAB or a supplied move.",
      +            "maximum": 9007199254740991,
      +            "minimum": -9007199254740991,
      +            "type": "integer"
      +          },
      +          "score": {
      +            "description": "`offensive` minus `defensive`: the ranking key.",
      +            "maximum": 9007199254740991,
      +            "minimum": -9007199254740991,
      +            "type": "integer"
      +          },
      +          "species": {
      +            "description": "Species name of the member.",
      +            "type": "string"
      +          }
      +        },
      +        "required": [
      +          "species",
      +          "offensive",
      +          "defensive",
      +          "score"
      +        ],
      +        "type": "object"
      +      },
      +      "type": "array"
      +    }
      +  },
      +  "required": [
      +    "opponent",
      +    "picks",
      +    "leftBehind",
      +    "atRiskTypes",
      +    "note"
      +  ],
      +  "type": "object"
      +}
    • changedOutput schema / properties / defensiveWeaknesses / description
      Previous value: -"One entry for each of the 18 classic types (keyed by type name, e.g. \"Fire\"), tallying how the team fares defensively against that type. A member is counted on its Tera type instead of its own types when a Tera type was supplied."New value: +"One entry for each of the 18 classic types (keyed by type name, e.g. \"Fire\"), tallying how the team fares defensively against that type."
    • changedOutput schema / properties / offensiveCoverage / properties / coveredBy / description
      Previous value: -"One entry for each of the 18 classic types (keyed by the defending type), listing the team members that hit it super-effectively from STAB, Tera type, or a supplied move type; an empty array means nobody does."New value: +"One entry for each of the 18 classic types (keyed by the defending type), listing the team members that hit it super-effectively from STAB or a supplied move type; an empty array means nobody does."
    • changedOutput schema / properties / speed / properties / fasterThreatCount / description
      Previous value: -"How many legal species outspeed the fastest member; present only when `regulation` was supplied."New value: +"How many legal species have a higher base Speed than the team’s fastest member; present only when `regulation` was supplied. A base-stat count only — `threatCoverage` applies each threat’s real nature, EVs and Mega form."
    • removedOutput schema / properties / speed / properties / fasterThreats
      Removed value: -{
      -  "description": "Up to 20 of those threats, fastest first, cut off at that limit; present only when `regulation` was supplied — compare with `fasterThreatCount` for the full total.",
      -  "items": {
      -    "additionalProperties": false,
      -    "properties": {
      -      "baseSpe": {
      -        "description": "Its base Speed stat, higher than the team’s fastest.",
      -        "maximum": 9007199254740991,
      -        "minimum": -9007199254740991,
      -        "type": "integer"
      -      },
      -      "species": {
      -        "description": "Legal species name.",
      -        "type": "string"
      -      }
      -    },
      -    "required": [
      -      "species",
      -      "baseSpe"
      -    ],
      -    "type": "object"
      -  },
      -  "type": "array"
      -}
    • removedOutput schema / properties / speed / properties / note
      Removed value: -{
      -  "description": "Caveat that threats are base-speed comparisons only; present only when `regulation` was supplied.",
      -  "type": "string"
      -}
    • removedOutput schema / properties / team / items / properties / teraType
      Removed value: -{
      -  "description": "Tera type supplied for this member; when set it replaces the member’s typing defensively and is added to its attacking types. Absent when none was given.",
      -  "type": "string"
      -}
    • addedOutput schema / properties / threatCoverage / properties / fastestSpeed
      Added value: +{
      +  "description": "Your fastest member’s Speed at level 50 with the sets you supplied — the value every `outspeed` below is judged against.",
      +  "maximum": 9007199254740991,
      +  "minimum": -9007199254740991,
      +  "type": "integer"
      +}
    • removedOutput schema / properties / threatCoverage / properties / threats / items / properties / fastestSpeed
      Removed value: -{
      -  "description": "Your fastest member’s Speed at level 50 with the sets you supplied.",
      -  "maximum": 9007199254740991,
      -  "minimum": -9007199254740991,
      -  "type": "integer"
      -}
    • changedOutput schema / properties / threatCoverage / properties / threats / items / properties / hitMultiplier / description
      Previous value: -"Best type multiplier your team has against it, from STAB, Tera type and supplied moves; 0 when nothing can hit it at all."New value: +"Best type multiplier your team has against it, from STAB and supplied moves; 0 when nothing can hit it at all."
    • changedOutput schema / properties / threatCoverage / properties / threats / items / required
      Previous value: -[
      -  "species",
      -  "usage",
      -  "threatSpeed",
      -  "fastestSpeed",
      -  "outspeed",
      -  "hitMultiplier",
      -  "answered"
      -]New value: +[
      +  "species",
      +  "usage",
      +  "threatSpeed",
      +  "outspeed",
      +  "hitMultiplier",
      +  "answered"
      +]
    • changedOutput schema / properties / threatCoverage / required
      Previous value: -[
      -  "regulation",
      -  "sourceAsOf",
      -  "threats",
      -  "unanswered",
      -  "unansweredCount",
      -  "note"
      -]New value: +[
      +  "regulation",
      +  "sourceAsOf",
      +  "fastestSpeed",
      +  "threats",
      +  "unanswered",
      +  "unansweredCount",
      +  "note"
      +]
  4. Changed5 schema fields changedv2.0.2
    • addedInput schema / properties / team / items / properties / championsPoints
      Added value: +{
      +  "additionalProperties": {
      +    "type": "number"
      +  },
      +  "description": "Optional Champions stat points, e.g. { spe: 32 }; only Speed affects this analysis, and it is an alternative to `evs`.",
      +  "propertyNames": {
      +    "type": "string"
      +  },
      +  "type": "object"
      +}
    • addedInput schema / properties / team / items / properties / evs
      Added value: +{
      +  "additionalProperties": {
      +    "type": "number"
      +  },
      +  "description": "Optional spread in the 0-252 scale; only Speed affects this analysis.",
      +  "propertyNames": {
      +    "type": "string"
      +  },
      +  "type": "object"
      +}
    • addedInput schema / properties / team / items / properties / item
      Added value: +{
      +  "description": "Optional held item, e.g. \"Choice Scarf\"; Choice Scarf multiplies the member’s Speed by 1.5 in the threat coverage.",
      +  "type": "string"
      +}
    • addedInput schema / properties / team / items / properties / nature
      Added value: +{
      +  "description": "Optional nature, e.g. \"Jolly\"; with a spread it sets the member’s real Speed for the threat coverage, otherwise Speed is left neutral and uninvested.",
      +  "type": "string"
      +}
    • addedOutput schema / properties / threatCoverage
      Added value: +{
      +  "additionalProperties": false,
      +  "description": "How the team fares against the regulation’s most-used sets; present only when a regulation with a usage-derived threat list was supplied.",
      +  "properties": {
      +    "note": {
      +      "description": "How the comparison is made, and what it does not model.",
      +      "type": "string"
      +    },
      +    "regulation": {
      +      "description": "Display name of the regulation whose threat list was used, e.g. \"Regulation Set M-C\".",
      +      "type": "string"
      +    },
      +    "sourceAsOf": {
      +      "description": "ISO date of the newest data point behind that threat list.",
      +      "type": "string"
      +    },
      +    "threats": {
      +      "description": "One entry per threat in the regulation’s list, most used first.",
      +      "items": {
      +        "additionalProperties": false,
      +        "properties": {
      +          "answered": {
      +            "description": "True when the team has a super-effective (≥2x) hit on it.",
      +            "type": "boolean"
      +          },
      +          "fastestSpeed": {
      +            "description": "Your fastest member’s Speed at level 50 with the sets you supplied.",
      +            "maximum": 9007199254740991,
      +            "minimum": -9007199254740991,
      +            "type": "integer"
      +          },
      +          "hitBy": {
      +            "description": "The member providing that best hit; absent when nothing hits it super-effectively.",
      +            "type": "string"
      +          },
      +          "hitMultiplier": {
      +            "description": "Best type multiplier your team has against it, from STAB, Tera type and supplied moves; 0 when nothing can hit it at all.",
      +            "type": "number"
      +          },
      +          "hitVia": {
      +            "description": "The attacking type providing it; absent when nothing hits it super-effectively.",
      +            "type": "string"
      +          },
      +          "outspeed": {
      +            "description": "True when your fastest member moves first.",
      +            "type": "boolean"
      +          },
      +          "species": {
      +            "description": "The threat as the meta plays it, e.g. \"Salamence-Mega\".",
      +            "type": "string"
      +          },
      +          "threatSpeed": {
      +            "description": "Its Speed at level 50 with its own nature, EVs and Mega form.",
      +            "maximum": 9007199254740991,
      +            "minimum": -9007199254740991,
      +            "type": "integer"
      +          },
      +          "usage": {
      +            "description": "Share of the sampled teams carrying it, in percent.",
      +            "type": "number"
      +          }
      +        },
      +        "required": [
      +          "species",
      +          "usage",
      +          "threatSpeed",
      +          "fastestSpeed",
      +          "outspeed",
      +          "hitMultiplier",
      +          "answered"
      +        ],
      +        "type": "object"
      +      },
      +      "type": "array"
      +    },
      +    "unanswered": {
      +      "description": "Threats with no super-effective hit from this team — the coverage holes to fix first.",
      +      "items": {
      +        "type": "string"
      +      },
      +      "type": "array"
      +    },
      +    "unansweredCount": {
      +      "description": "How many threats are unanswered.",
      +      "maximum": 9007199254740991,
      +      "minimum": -9007199254740991,
      +      "type": "integer"
      +    }
      +  },
      +  "required": [
      +    "regulation",
      +    "sourceAsOf",
      +    "threats",
      +    "unanswered",
      +    "unansweredCount",
      +    "note"
      +  ],
      +  "type": "object"
      +}
  5. Changed6 schema fields changedv1.1.1
    • addedInput schema / properties / regulation / description
      Added value: +"Optional regulation set id, e.g. \"m-c\"; when given, the reply also lists legal threats whose base speed beats your fastest member. Unknown ids return an isError."
    • addedInput schema / properties / team / description
      Added value: +"Team of up to 6 members, each a species with optional Tera type and moves."
    • addedInput schema / properties / team / items / properties / moves / description
      Added value: +"Optional move names, e.g. [\"Knock Off\"]; their types widen offensive coverage. Unknown names are reported, not fatal."
    • addedInput schema / properties / team / items / properties / species / description
      Added value: +"Species name as it appears in Showdown, e.g. \"Incineroar\", \"Garchomp\"."
    • addedInput schema / properties / team / items / properties / teraType / description
      Added value: +"Optional Tera type, e.g. \"Steel\"; when set it replaces the member’s defensive typing in the weakness tally."
    • changedOutput schema / (root)
      Previous value: -nullNew value: +{
      +  "$schema": "http://json-schema.org/draft-07/schema#",
      +  "additionalProperties": false,
      +  "properties": {
      +    "atRiskTypes": {
      +      "description": "The stacked-weakness types: at least two members weak to it and nobody resisting or immune. Empty means no such hole.",
      +      "items": {
      +        "type": "string"
      +      },
      +      "type": "array"
      +    },
      +    "defensiveWeaknesses": {
      +      "additionalProperties": {
      +        "additionalProperties": false,
      +        "properties": {
      +          "immune": {
      +            "description": "How many members are immune to it.",
      +            "maximum": 9007199254740991,
      +            "minimum": -9007199254740991,
      +            "type": "integer"
      +          },
      +          "resist": {
      +            "description": "How many members resist it (damage below neutral).",
      +            "maximum": 9007199254740991,
      +            "minimum": -9007199254740991,
      +            "type": "integer"
      +          },
      +          "weak": {
      +            "description": "How many members take super-effective damage from this attacking type.",
      +            "maximum": 9007199254740991,
      +            "minimum": -9007199254740991,
      +            "type": "integer"
      +          },
      +          "weakBy": {
      +            "description": "Species names of the members weak to it, in team order; empty when none are.",
      +            "items": {
      +              "type": "string"
      +            },
      +            "type": "array"
      +          }
      +        },
      +        "required": [
      +          "weak",
      +          "resist",
      +          "immune",
      +          "weakBy"
      +        ],
      +        "type": "object"
      +      },
      +      "description": "One entry for each of the 18 classic types (keyed by type name, e.g. \"Fire\"), tallying how the team fares defensively against that type. A member is counted on its Tera type instead of its own types when a Tera type was supplied.",
      +      "propertyNames": {
      +        "type": "string"
      +      },
      +      "type": "object"
      +    },
      +    "offensiveCoverage": {
      +      "additionalProperties": false,
      +      "description": "Super-effective coverage of all 18 defending types.",
      +      "properties": {
      +        "coveredBy": {
      +          "additionalProperties": {
      +            "items": {
      +              "type": "string"
      +            },
      +            "type": "array"
      +          },
      +          "description": "One entry for each of the 18 classic types (keyed by the defending type), listing the team members that hit it super-effectively from STAB, Tera type, or a supplied move type; an empty array means nobody does.",
      +          "propertyNames": {
      +            "type": "string"
      +          },
      +          "type": "object"
      +        },
      +        "note": {
      +          "description": "Reminder of which attacking types this coverage was computed from.",
      +          "type": "string"
      +        },
      +        "uncoveredSuperEffectively": {
      +          "description": "Defending types no member hits super-effectively.",
      +          "items": {
      +            "type": "string"
      +          },
      +          "type": "array"
      +        }
      +      },
      +      "required": [
      +        "coveredBy",
      +        "uncoveredSuperEffectively",
      +        "note"
      +      ],
      +      "type": "object"
      +    },
      +    "score": {
      +      "additionalProperties": false,
      +      "description": "Transparent heuristic 0-100 scoring of the team.",
      +      "properties": {
      +        "coverage": {
      +          "description": "0-100 share of the 18 types the team hits super-effectively.",
      +          "maximum": 9007199254740991,
      +          "minimum": -9007199254740991,
      +          "type": "integer"
      +        },
      +        "defensive": {
      +          "description": "0-100 score penalising stacked weaknesses, floored at 0.",
      +          "maximum": 9007199254740991,
      +          "minimum": -9007199254740991,
      +          "type": "integer"
      +        },
      +        "note": {
      +          "description": "What each component means and the reminder that this is a heuristic, not a metagame rating.",
      +          "type": "string"
      +        },
      +        "overall": {
      +          "description": "Rounded mean of the component scores, 0-100.",
      +          "maximum": 9007199254740991,
      +          "minimum": -9007199254740991,
      +          "type": "integer"
      +        },
      +        "speed": {
      +          "description": "0-100 score dropping 2 points per legal faster threat; present only when `regulation` was supplied.",
      +          "maximum": 9007199254740991,
      +          "minimum": -9007199254740991,
      +          "type": "integer"
      +        }
      +      },
      +      "required": [
      +        "overall",
      +        "defensive",
      +        "coverage",
      +        "note"
      +      ],
      +      "type": "object"
      +    },
      +    "speed": {
      +      "additionalProperties": false,
      +      "description": "Where the team sits on the speed spectrum, plus legal faster threats when a regulation was given.",
      +      "properties": {
      +        "fasterThreatCount": {
      +          "description": "How many legal species outspeed the fastest member; present only when `regulation` was supplied.",
      +          "maximum": 9007199254740991,
      +          "minimum": -9007199254740991,
      +          "type": "integer"
      +        },
      +        "fasterThreats": {
      +          "description": "Up to 20 of those threats, fastest first, cut off at that limit; present only when `regulation` was supplied — compare with `fasterThreatCount` for the full total.",
      +          "items": {
      +            "additionalProperties": false,
      +            "properties": {
      +              "baseSpe": {
      +                "description": "Its base Speed stat, higher than the team’s fastest.",
      +                "maximum": 9007199254740991,
      +                "minimum": -9007199254740991,
      +                "type": "integer"
      +              },
      +              "species": {
      +                "description": "Legal species name.",
      +                "type": "string"
      +              }
      +            },
      +            "required": [
      +              "species",
      +              "baseSpe"
      +            ],
      +            "type": "object"
      +          },
      +          "type": "array"
      +        },
      +        "fastest": {
      +          "additionalProperties": false,
      +          "description": "The fastest member of the team.",
      +          "properties": {
      +            "baseSpe": {
      +              "description": "Its base Speed stat.",
      +              "maximum": 9007199254740991,
      +              "minimum": -9007199254740991,
      +              "type": "integer"
      +            },
      +            "species": {
      +              "description": "Species name of the team’s fastest member by base Speed.",
      +              "type": "string"
      +            }
      +          },
      +          "required": [
      +            "species",
      +            "baseSpe"
      +          ],
      +          "type": "object"
      +        },
      +        "note": {
      +          "description": "Caveat that threats are base-speed comparisons only; present only when `regulation` was supplied.",
      +          "type": "string"
      +        },
      +        "regulation": {
      +          "description": "Display name of the regulation that was checked; present only when `regulation` was supplied.",
      +          "type": "string"
      +        },
      +        "slowest": {
      +          "additionalProperties": false,
      +          "description": "The slowest member of the team.",
      +          "properties": {
      +            "baseSpe": {
      +              "description": "Its base Speed stat.",
      +              "maximum": 9007199254740991,
      +              "minimum": -9007199254740991,
      +              "type": "integer"
      +            },
      +            "species": {
      +              "description": "Species name of the team’s slowest member by base Speed.",
      +              "type": "string"
      +            }
      +          },
      +          "required": [
      +            "species",
      +            "baseSpe"
      +          ],
      +          "type": "object"
      +        }
      +      },
      +      "required": [
      +        "fastest",
      +        "slowest"
      +      ],
      +      "type": "object"
      +    },
      +    "team": {
      +      "description": "The analysed team in the order it was supplied, each member with the typing actually used for the analysis.",
      +      "items": {
      +        "additionalProperties": false,
      +        "properties": {
      +          "baseSpe": {
      +            "description": "Base Speed stat of the species, used for the speed placement below.",
      +            "maximum": 9007199254740991,
      +            "minimum": -9007199254740991,
      +            "type": "integer"
      +          },
      +          "moveTypes": {
      +            "description": "Types of the supplied moves that were recognised, e.g. [\"Dark\"]; unrecognised move names are left out here and listed in `unknownMoves`.",
      +            "items": {
      +              "type": "string"
      +            },
      +            "type": "array"
      +          },
      +          "species": {
      +            "description": "Resolved species name, e.g. \"Great Tusk\".",
      +            "type": "string"
      +          },
      +          "teraType": {
      +            "description": "Tera type supplied for this member; when set it replaces the member’s typing defensively and is added to its attacking types. Absent when none was given.",
      +            "type": "string"
      +          },
      +          "types": {
      +            "description": "The species’ types as the dataset defines them, e.g. [\"Ground\", \"Fighting\"].",
      +            "items": {
      +              "type": "string"
      +            },
      +            "type": "array"
      +          }
      +        },
      +        "required": [
      +          "species",
      +          "types",
      +          "baseSpe",
      +          "moveTypes"
      +        ],
      +        "type": "object"
      +      },
      +      "type": "array"
      +    },
      +    "unknownMoves": {
      +      "description": "Deduplicated move names that were not found in the dataset and so contributed no coverage; omitted entirely when every move resolved.",
      +      "items": {
      +        "type": "string"
      +      },
      +      "type": "array"
      +    }
      +  },
      +  "required": [
      +    "team",
      +    "defensiveWeaknesses",
      +    "atRiskTypes",
      +    "offensiveCoverage",
      +    "speed",
      +    "score"
      +  ],
      +  "type": "object"
      +}
  6. First observedv0.1.0

TDQS

A4.1/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint, idempotentHint, and destructiveHint, so the safety profile is covered. The description adds value by noting 'Read-only and offline,' clarifying error behavior ('Unknown names are reported, not fatal' for moves; 'Unknown names return an isError' for opponent and regulation), and advising on the `detail` parameter ('model context is the expensive resource'). These go beyond what annotations provide.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is well-structured, starting with the dispatch mechanism, then describing each mode, and ending with a note on parity with dedicated tools and the read-only/offline nature. It is somewhat long (about 200 words) but each sentence adds useful information. It could be tightened, but the organization is logical and front-loaded.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool's complexity (two modes, seven parameters, no output schema), the description covers the main aspects: what each mode does, error handling, offline/read-only behavior, and the `detail` levels. It does not explicitly describe the return format, but it references parity with dedicated tools, which implies known output shapes. This is adequate for an agent to understand and invoke the tool correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 71%, and the schema already includes descriptions for most parameters, including the meaning of `mode`, `detail`, and the team structure. The description adds some extra context (e.g., `goal` is carried into the result verbatim, analysis is meta-coverage-first, and the `detail` hint), but it does not substantially clarify parameters beyond what the schema already documents. This matches the baseline for high schema coverage.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool performs team analysis, dispatches on `mode`, and explicitly names the two modes ('synergy' and 'diagnose') with their distinct outputs. It also mentions that each mode carries the same fields as the dedicated tools, which helps distinguish it from siblings like analyze_battle and analyze_meta.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description explains the purpose of each mode and the conditions under which each is appropriate ('synergy' for type-synergy read, 'diagnose' for coaching). However, it does not explicitly contrast analyze_team with sibling tools like analyze_battle or analyze_meta, leaving some ambiguity about when to prefer this combined tool over the dedicated ones.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.