Skip to main content
Glama

Prepare a matchup

prepare_matchup
Read-onlyIdempotent

Generate a pre-game plan against a known opponent: recommended four, speed tiers, damage calcs, and win/loss conditions from your team and theirs.

Instructions

Prepare a Pokémon Champions match against a known opponent: "here is their team — what do I bring, and what should I watch for?" A deterministic pre-game dossier composed from the rest of the surface. likelySets orders the opponent most-used first, carrying each species’ actual usage-derived set (item, ability, nature, EVs, four moves, usage share) where one exists. speedTiers compares real level-50 Speed with the margins spelled out. relevantDamageCalcs runs real damage rolls for the key matchups — the team’s hardest hit into their top threats and the threat’s hardest hit back at the member that answers it. recommendedBringFour is the same type-scored pick analyze_team makes. Leads, win conditions, loss conditions, and the members to preserve are heuristics from movesets, Speed and typing, each labelled with what it can see. Speeds and moves for uncurated opponent species are base-stat or STAB estimates and say so. The caller narrates; every number here is a real calculation or a real usage figure.

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
teamYesYour team, in the canonical shape `parse_team` returns: species with optional moves, ability, nature, evs or championsPoints, and item.
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.
opponentYesThe opponent’s team: species names for what preview shows, or full sets when more is known — full sets widen the damage calculations and speed math.
regulationNoRegulation id the match is under, e.g. "m-c"; omitted, the current set is used.

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed2 schema fields changedv8.0.2
    • changedInput schema / properties / opponent / items / anyOf
      Previous value: -[
      -  {
      -    "description": "A species name, e.g. \"Sneasler\", \"Salamence-Mega\".",
      -    "type": "string"
      -  },
      -  {
      -    "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"
      -      },
      -      "teraType": {
      -        "description": "Tera Type carried verbatim from a Showdown paste; Champions math ignores it.",
      -        "type": "string"
      -      }
      -    },
      -    "required": [
      -      "species"
      -    ],
      -    "type": "object"
      -  }
      -]New value: +[
      +  {
      +    "description": "A species name, e.g. \"Sneasler\", \"Salamence-Mega\".",
      +    "type": "string"
      +  },
      +  {
      +    "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"
      +  }
      +]
    • removedInput schema / properties / team / items / properties / teraType
      Removed value: -{
      -  "description": "Tera Type carried verbatim from a Showdown paste; Champions math ignores it.",
      -  "type": "string"
      -}
  2. Addedv6.2.2

TDQS

A4.7/5.0
Behavior5/5

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

The description is exceptionally transparent, going beyond the annotations (readOnlyHint=true, idempotentHint=true, destructiveHint=false) to disclose that the tool is deterministic, that all numbers are 'real calculations or real usage figures', that estimates for uncurated opponent species are labeled, and that heuristics are 'each labelled with what it can see'. This thoroughly informs the agent of what to trust and what is approximate, with no contradiction with annotations.

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 a substantial paragraph, but it is well-structured and front-loaded with the purpose before enumerating output components. Every sentence adds information about what the tool computes or how it behaves; there is no filler. It could be slightly more compact, but the density is justified given the tool's complexity, so it earns a 4 rather than a 5.

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

Completeness5/5

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

Given the tool's complexity and the absence of an output schema, the description is thorough enough for an agent to use it correctly. It covers inputs (team, opponent, detail, regulation), explains each output field, discloses data sources (usage-derived sets, real damage rolls, heuristics), flags limitations (estimates for uncurated species), and ties return values to the overall purpose. Nothing critical is missing.

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

Parameters5/5

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

Even though schema coverage is 100%, the description adds meaningful semantics beyond the JSON schema. It explains that team should be 'the canonical shape parse_team returns', clarifies that opponent accepts species names or full sets with the trade-off ('full sets widen the damage calculations and speed math'), and gives guidance on detail levels (compact/evidence/debug) with a cost recommendation. These details materially help an agent choose parameter values correctly.

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 states a specific verb ('Prepare'), a clear resource ('a match against a known opponent'), and delineates exactly what it produces (likelySets, speedTiers, relevantDamageCalcs, recommendedBringFour, etc.). It also distinguishes itself from the sibling analyze_team by noting that recommendedBringFour is 'the same type-scored pick analyze_team makes', which clarifies its unique role without ambiguity.

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 opens with a clear use case ('their team — what do I bring, and what should I watch for?') and explains when to request more detail via the detail parameter, including the cost trade-off ('model context is the expensive resource'). It does not explicitly enumerate when not to use this tool versus every sibling, but it references analyze_team and implies this tool is the pre-game dossier counterpart. This is strong guidance, though it falls short of explicitly naming alternatives for each scenario.

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