Skip to main content
Glama

Team Io

team_io
Read-onlyIdempotent

Convert, validate, and inspect Pokémon Champions teams: parse pasted text into canonical form, format teams back to paste text, check legality against a regulation, and list or read regulation rules.

Instructions

Pokémon Champions team import/export and validation, dispatching on mode: "parse" turns pasted text into the canonical team shape, "format" renders a canonical team back into paste text, "legality" checks a team against a regulation’s rules, "regulation" reads one regulation’s rules (rosters optional), "regulations" lists them all. Each mode carries the same documented fields the dedicated tools had. Read-only and offline.

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
modeYesWhich operation to run: "parse", "format", "legality", "regulation", "regulations".
teamNo
textNoThe team text: one Showdown-format block per Pokémon, separated by blank lines, or one shorthand line per Pokémon with pipe-separated fields.
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.
regulationNo
includeRosterNoInclude the two name rosters — every legal base species and every species allowed to Mega Evolve — which together are about two thirds of the response. Omitted, the rules and the `eligibleCount`/`megaCount` sizes come back without them; pass true when you actually need the names.

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed8 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 / includeRoster
      Added value: +{
      +  "description": "Include the two name rosters — every legal base species and every species allowed to Mega Evolve — which together are about two thirds of the response. Omitted, the rules and the `eligibleCount`/`megaCount` sizes come back without them; pass true when you actually need the names.",
      +  "type": "boolean"
      +}
    • addedInput schema / properties / mode
      Added value: +{
      +  "description": "Which operation to run: \"parse\", \"format\", \"legality\", \"regulation\", \"regulations\".",
      +  "enum": [
      +    "parse",
      +    "format",
      +    "legality",
      +    "regulation",
      +    "regulations"
      +  ],
      +  "type": "string"
      +}
    • addedInput schema / properties / regulation
      Added value: +{
      +  "anyOf": [
      +    {
      +      "description": "Optional regulation id (e.g. \"m-c\") to check species legality against; illegal species become warnings, the team is still returned.",
      +      "type": "string"
      +    },
      +    {
      +      "description": "Regulation Set id or name, matched case- and punctuation-insensitively: \"M-A\", \"m-a\", \"mc\", and \"Regulation Set M-C\" all resolve to the same set.",
      +      "type": "string"
      +    },
      +    {
      +      "description": "Regulation Set id or name, matched case- and punctuation-insensitively: \"M-A\", \"m-a\", \"mc\", and \"Regulation Set M-C\" all resolve to the same set.",
      +      "type": "string"
      +    }
      +  ]
      +}
    • addedInput schema / properties / team
      Added value: +{
      +  "anyOf": [
      +    {
      +      "description": "The team to render, in the canonical shape `parse_team` and the analysis tools use: species with optional item, ability, nature, level, ivs, evs or championsPoints, and moves.",
      +      "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"
      +    },
      +    {
      +      "description": "Team members, 1-6 of them; a VGC Battle Team must be exactly 6, so any other length adds a team-size violation.",
      +      "items": {
      +        "properties": {
      +          "item": {
      +            "description": "Held item; a duplicate across the team is an Item Clause violation and an unknown item is reported as a violation.",
      +            "type": "string"
      +          },
      +          "moves": {
      +            "description": "Moves to verify against the form and base-species learnsets; each is reported with legal true/false and, when illegal, a reason.",
      +            "items": {
      +              "type": "string"
      +            },
      +            "type": "array"
      +          },
      +          "species": {
      +            "description": "Species name in any form; resolved case-insensitively and matched to the set roster by base species, so alternate forms of an eligible species pass.",
      +            "type": "string"
      +          }
      +        },
      +        "required": [
      +          "species"
      +        ],
      +        "type": "object"
      +      },
      +      "maxItems": 6,
      +      "minItems": 1,
      +      "type": "array"
      +    }
      +  ]
      +}
    • addedInput schema / properties / text
      Added value: +{
      +  "description": "The team text: one Showdown-format block per Pokémon, separated by blank lines, or one shorthand line per Pokémon with pipe-separated fields.",
      +  "type": "string"
      +}
    • addedInput schema / required
      Added value: +[
      +  "mode"
      +]
  2. Addedv6.2.2

TDQS

A4.3/5.0
Behavior4/5

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

Annotations already declare readOnlyHint=true, idempotentHint=true, destructiveHint=false. The description adds 'Read-only and offline', which is consistent and adds the offline qualifier not in annotations. It also clarifies that behavior varies by mode via 'dispatching on mode', which is useful. No contradictions; the description complements the annotations without repeating them.

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 about 200 words, which is justified for a tool with five modes and six parameters. It front-loads the overall purpose and then enumerates modes in a compact list, followed by field clarifications. While a bit dense, every sentence contributes to clarifying behavior or usage; no fluff. Could be slightly more concise by trimming redundant phrasing, but it's well-structured.

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?

For a complex dispatcher with five modes and six parameters, the description covers all modes and all parameters with enough detail to call the tool correctly. It lacks explicit return-format expectations, but since there is no output schema, the description could be expected to hint at that; the phrase 'each mode carries the same documented fields the dedicated tools had' is a partial hint but vague. Given the annotations cover safety, the description is largely complete for an agent to invoke it properly.

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

Parameters4/5

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

The schema descriptions already cover most parameters (mode enum, team shape, text format, detail levels, regulation matching, includeRoster). The description adds value by explaining the dispatch semantics for mode, clarifying that detail levels should be requested judiciously ('model context is the expensive resource'), and giving examples of regulation resolution ('M-A', 'm-a', 'mc' all match). It also notes the team shape matches what parse_team and analysis tools use, aiding cross-tool understanding.

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's purpose: 'Pokémon Champions team import/export and validation', and then enumerates each mode (parse, format, legality, regulation, regulations) with a one-line explanation of what each does. It distinguishes itself from the sibling analysis tools (analyze_team, analyze_battle, etc.) by focusing on import/export and validation rather than analysis, so an agent can tell when to use this instead of those.

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 dispatch mechanism by listing each mode and its operation, giving clear context for when to use each. It doesn't explicitly state when NOT to use this tool or name alternatives, but the mode descriptions are self-explanatory and the sibling tools are obviously different. A small gap is the lack of explicit 'use this instead of X when...' guidance, but the mode-specific detail largely covers it.

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