[{"slug":"ZV-2026-1625","server_name":"pokeapi.caseyjhand.com","severity":"breaking","title":"pokeapi.caseyjhand.com: Type of cost on pokeapi_get_item changed number → number|null.","summary":"[risky] Description of pokeapi_find_pokemon changed (51% word delta). [risky] Field appliedFilters was added to pokeapi_find_pokemon output. [safe] Description of pokeapi_get_item changed (21% word delta). [risky] Field prices was added to pokeapi_get_item output. [breaking] Type of cost on pokeapi_get_item changed number → number|null. [risky] Field learnersIncluded was added to pokeapi_get_move output. [safe] Description of pokeapi_get_pokemon changed (14% word delta). [risky] Field resolvedFromSpecies was added to pokeapi_get_pokemon output. [safe] Description of pokeapi_get_type_matchups changed (10% word delta).","changes":[{"kind":"description_changed","tool":"pokeapi_find_pokemon","after":"Filter Pokémon by generation, type, regional pokédex, or egg group. Returns names and PokéAPI IDs; every returned name works as a pokeapi_get_pokemon identifier, where a species name resolves to its default variety. At least one of generation, type, pokedex, or egg_group is required; the ones provided are combined with AND logic, and query adds strict token matching on name within them. A call with no category filter, with or without query, returns an empty result and a notice naming the requirement.","before":"Filter Pokémon by generation, type, regional pokédex, or egg group. Returns names and Pokédex numbers suitable for follow-up pokeapi_get_pokemon calls. All filters are optional and combined with AND logic; query adds strict token matching on name. When no category filter is provided alongside query, returns an empty result — at least one categorical filter is required.","detail":"Description of `pokeapi_find_pokemon` changed (51% word delta).","severity":"risky","descriptionDelta":0.513157894736842},{"kind":"output_property_added","path":"outputSchema.properties.appliedFilters","tool":"pokeapi_find_pokemon","after":{"type":"object","required":["limit","offset"],"properties":{"type":{"type":"string","description":"Normalized type filter, when applied."},"limit":{"type":"integer","maximum":9007199254740991,"description":"Accepted page size, including the default of 50.","exclusiveMinimum":0},"query":{"type":"string","description":"Applied lowercase query tokens joined with single spaces. Omitted without a category filter."},"offset":{"type":"integer","maximum":9007199254740991,"minimum":0,"description":"Accepted page offset, including the default of 0."},"pokedex":{"type":"string","description":"Normalized pokédex filter, when applied."},"egg_group":{"type":"string","description":"Normalized egg-group filter, when applied."},"generation":{"type":"string","description":"Normalized generation filter, when applied."}},"description":"Effective nonblank filters and pagination controls for this response.","additionalProperties":false},"detail":"Field `appliedFilters` was added to `pokeapi_find_pokemon` output.","severity":"risky"},{"kind":"description_changed","tool":"pokeapi_get_item","after":"Get item details by name or numeric ID — effect text, category, versioned purchase and sell prices, fling power, item attributes (holdable, consumable, etc.), sprite URL, and Pokémon that commonly hold it.","before":"Get item details by name or numeric ID — effect text, category, in-game cost, fling power, item attributes (holdable, consumable, etc.), sprite URL, and Pokémon that commonly hold it.","detail":"Description of `pokeapi_get_item` changed (21% word delta).","severity":"safe","descriptionDelta":0.21212121212121215},{"kind":"output_property_added","path":"outputSchema.properties.prices","tool":"pokeapi_get_item","after":{"type":"array","items":{"type":"object","required":["versionGroup","currency","purchasePrice","sellPrice"],"properties":{"currency":{"type":"string","description":"Currency name for both prices."},"sellPrice":{"type":["number","null"],"description":"Sell price in this currency and version group. Null means not sellable; zero is a literal amount."},"versionGroup":{"type":"string","description":"Version group these prices apply to."},"purchasePrice":{"type":["number","null"],"description":"Purchase price in this currency and version group. Null means not purchasable; zero is a literal amount."}},"description":"One version and currency price record.","additionalProperties":false},"description":"All supplied price records in upstream order. Empty when no records are available."},"detail":"Field `prices` was added to `pokeapi_get_item` output.","severity":"risky"},{"kind":"output_type_changed","path":"outputSchema.properties.cost","tool":"pokeapi_get_item","after":"number|null","before":"number","detail":"Type of `cost` on `pokeapi_get_item` changed number → number|null.","severity":"breaking"},{"kind":"output_property_added","path":"outputSchema.properties.learnersIncluded","tool":"pokeapi_get_move","after":{"type":"boolean","description":"True when the learner list was requested, including when no learners are known."},"detail":"Field `learnersIncluded` was added to `pokeapi_get_move` output.","severity":"risky"},{"kind":"description_changed","tool":"pokeapi_get_pokemon","after":"Get a fully denormalized Pokémon dossier in a single call — base stats, types, abilities (with full English effect text), height/weight, resolved evolution chain, sprite URLs including official artwork, species flavor text, variety list, capture rate, growth rate, gender rate, legendary/mythical flags, egg groups, and (optionally) a summarized learnable-move list. Accepts a name (lowercase, hyphens for spaces, e.g. \"bulbasaur\", \"mr-mime\") or PokéAPI Pokémon-record ID. A species name with no Pokémon record of its own (e.g. \"deoxys\") resolves to the default variety of that species (\"deoxys-normal\"), reported in resolvedFromSpecies. Set include_moves=true to include the move summary (large); defaults to false. Use game_version to select flavor text from a specific game (e.g. \"sword\", \"red\"); falls back to the most recent English entry when the version is not found. Use pokeapi_find_pokemon to discover Pokémon by type, generation, or egg group before calling this tool.","before":"Get a fully denormalized Pokémon dossier in a single call — base stats, types, abilities (with full English effect text), height/weight, resolved evolution chain, sprite URLs including official artwork, species flavor text, variety list, capture rate, growth rate, gender rate, legendary/mythical flags, egg groups, and (optionally) a summarized learnable-move list. Accepts a name (lowercase, hyphens for spaces, e.g. \"bulbasaur\", \"mr-mime\") or Pokédex number. Set include_moves=true to include the move summary (large); defaults to false. Use game_version to select flavor text from a specific game (e.g. \"sword\", \"red\"); falls back to the most recent English entry when the version is not found. Use pokeapi_find_pokemon to discover Pokémon by type, generation, or egg group before calling this tool.","detail":"Description of `pokeapi_get_pokemon` changed (14% word delta).","severity":"safe","descriptionDelta":0.1415929203539823},{"kind":"output_property_added","path":"outputSchema.properties.resolvedFromSpecies","tool":"pokeapi_get_pokemon","after":{"type":["string","null"],"description":"Species name the identifier matched when it named no Pokémon record; this dossier is the default variety of that species. Null when the identifier named a Pokémon record directly."},"detail":"Field `resolvedFromSpecies` was added to `pokeapi_get_pokemon` output.","severity":"risky"},{"kind":"description_changed","tool":"pokeapi_get_type_matchups","after":"Get the full offensive and defensive type effectiveness breakdown. Provide either a type name (e.g. \"fire\", \"psychic\") or a Pokémon identifier (name or PokéAPI Pokémon-record ID). For dual-type Pokémon, the defensive multipliers are correctly composed (e.g. Fire/Flying vs Rock = 4× because both types are weak to Rock). Exactly one of type or pokemon must be provided.","before":"Get the full offensive and defensive type effectiveness breakdown. Provide either a type name (e.g. \"fire\", \"psychic\") or a Pokémon identifier (name or dex number). For dual-type Pokémon, the defensive multipliers are correctly composed (e.g. Fire/Flying vs Rock = 4× because both types are weak to Rock). Exactly one of type or pokemon must be provided.","detail":"Description of `pokeapi_get_type_matchups` changed (10% word delta).","severity":"safe","descriptionDelta":0.10416666666666663}],"published_at":"2026-09-30T12:12:13.329Z"},{"slug":"ZV-2026-1207","server_name":"pokeapi.caseyjhand.com","severity":"breaking","title":"pokeapi.caseyjhand.com: Type of effectText on pokeapi_get_ability changed unset → string|null.","summary":"[breaking] Type of effectText on pokeapi_get_ability changed unset → string|null. [breaking] Type of shortEffectText on pokeapi_get_ability changed unset → string|null. [breaking] Type of spriteUrl on pokeapi_get_item changed unset → string|null. [breaking] Type of effectText on pokeapi_get_item changed unset → string|null. [breaking] Type of flingPower on pokeapi_get_item changed unset → number|null. [breaking] Type of shortEffectText on pokeapi_get_item changed unset → string|null. [breaking] Type of pp on pokeapi_get_move changed unset → number|null. [breaking] Type of power on pokeapi_get_move changed unset → number|null. [breaking] Type of accuracy on pokeapi_get_move changed unset → number|null. [breaking] Type of effectText on pokeapi_get_move changed unset → string|null. [breaking] Type of damageClass on pokeapi_get_move changed unset → string|null. [breaking] Type of effectChance on pokeapi_get_move changed unset → number|null. [breaking] Type of shortEffectText on pokeapi_get_move changed unset → string|null. [breaking] Type of genus on pokeapi_get_pokemon changed unset → string|null. [breaking] Type of speciesFlavorText on pokeapi_get_pokemon changed unset → string|null.","changes":[{"kind":"output_type_changed","path":"outputSchema.properties.effectText","tool":"pokeapi_get_ability","after":"string|null","before":"unset","detail":"Type of `effectText` on `pokeapi_get_ability` changed unset → string|null.","severity":"breaking"},{"kind":"output_type_changed","path":"outputSchema.properties.shortEffectText","tool":"pokeapi_get_ability","after":"string|null","before":"unset","detail":"Type of `shortEffectText` on `pokeapi_get_ability` changed unset → string|null.","severity":"breaking"},{"kind":"output_type_changed","path":"outputSchema.properties.spriteUrl","tool":"pokeapi_get_item","after":"string|null","before":"unset","detail":"Type of `spriteUrl` on `pokeapi_get_item` changed unset → string|null.","severity":"breaking"},{"kind":"output_type_changed","path":"outputSchema.properties.effectText","tool":"pokeapi_get_item","after":"string|null","before":"unset","detail":"Type of `effectText` on `pokeapi_get_item` changed unset → string|null.","severity":"breaking"},{"kind":"output_type_changed","path":"outputSchema.properties.flingPower","tool":"pokeapi_get_item","after":"number|null","before":"unset","detail":"Type of `flingPower` on `pokeapi_get_item` changed unset → number|null.","severity":"breaking"},{"kind":"output_type_changed","path":"outputSchema.properties.shortEffectText","tool":"pokeapi_get_item","after":"string|null","before":"unset","detail":"Type of `shortEffectText` on `pokeapi_get_item` changed unset → string|null.","severity":"breaking"},{"kind":"output_type_changed","path":"outputSchema.properties.pp","tool":"pokeapi_get_move","after":"number|null","before":"unset","detail":"Type of `pp` on `pokeapi_get_move` changed unset → number|null.","severity":"breaking"},{"kind":"output_type_changed","path":"outputSchema.properties.power","tool":"pokeapi_get_move","after":"number|null","before":"unset","detail":"Type of `power` on `pokeapi_get_move` changed unset → number|null.","severity":"breaking"},{"kind":"output_type_changed","path":"outputSchema.properties.accuracy","tool":"pokeapi_get_move","after":"number|null","before":"unset","detail":"Type of `accuracy` on `pokeapi_get_move` changed unset → number|null.","severity":"breaking"},{"kind":"output_type_changed","path":"outputSchema.properties.effectText","tool":"pokeapi_get_move","after":"string|null","before":"unset","detail":"Type of `effectText` on `pokeapi_get_move` changed unset → string|null.","severity":"breaking"},{"kind":"output_type_changed","path":"outputSchema.properties.damageClass","tool":"pokeapi_get_move","after":"string|null","before":"unset","detail":"Type of `damageClass` on `pokeapi_get_move` changed unset → string|null.","severity":"breaking"},{"kind":"output_type_changed","path":"outputSchema.properties.effectChance","tool":"pokeapi_get_move","after":"number|null","before":"unset","detail":"Type of `effectChance` on `pokeapi_get_move` changed unset → number|null.","severity":"breaking"},{"kind":"output_type_changed","path":"outputSchema.properties.shortEffectText","tool":"pokeapi_get_move","after":"string|null","before":"unset","detail":"Type of `shortEffectText` on `pokeapi_get_move` changed unset → string|null.","severity":"breaking"},{"kind":"output_type_changed","path":"outputSchema.properties.genus","tool":"pokeapi_get_pokemon","after":"string|null","before":"unset","detail":"Type of `genus` on `pokeapi_get_pokemon` changed unset → string|null.","severity":"breaking"},{"kind":"output_type_changed","path":"outputSchema.properties.speciesFlavorText","tool":"pokeapi_get_pokemon","after":"string|null","before":"unset","detail":"Type of `speciesFlavorText` on `pokeapi_get_pokemon` changed unset → string|null.","severity":"breaking"}],"published_at":"2026-09-19T19:46:13.709Z"}]