Tools: Players
The Players tools your agent sees through Elixir MCP: what each one answers, what it takes, and which capability it needs.
Players
9 of the 47 tools in the registry. Generated from what tools/list returns, so this is exactly what your agent sees.
Badge holders badges_holders
Who holds a badge: every recorded player in a named population (segment 'mine' or an object) with the named badge, with level and progress where tiered, names not just tags, and their clan as of the last profile read. The badge is its API identifier or its label (badges_rarity lists both); a near-miss or a label two badges share is refused with candidates rather than guessed.
Read-only ·
requires cr:read
| Argument | Type | Required | Notes |
|---|---|---|---|
badge |
string | yes | The badge: its API identifier (MasteryWitch, BeatingDeathBadge) or its label (Witch Mastery). |
segment |
yes | The recorded player or clan to read: 'mine' (your clan) or an object naming exactly one of player_tag or clan_tag (current members). Required; corpus access has retired. | |
min_level |
integer | no | Tiered badges: only holders at this level or above. |
limit |
integer | no | |
verbosity |
string | no | This tool has one size: compact is accepted and changes nothing (the response says so in a note). (full · compact) |
What comes back (declared outputSchema; fields marked required are always present):
| Field | Type | Required | Notes |
|---|---|---|---|
applied |
object | yes | |
badge |
string | yes | |
label |
string | no | |
kind |
string | null | no | |
docs |
string | yes | page or page#section for elixir_docs / elixir://docs. |
meta |
object | yes | The envelope (docs: responses). |
notes |
array | yes | One-sentence caveats to repeat when quoting the numbers. |
observations |
object | yes | |
players_considered |
number | null | yes | |
population |
object | no | |
holders_total |
integer | yes | |
holder_share |
number | null | yes | |
holders |
array | yes |
Badge rarity census badges_rarity
Every badge observed across recorded profiles with its holder count, rarest first: the 'what is the rarest badge' question over a named population (segment 'mine' or {clan_tag | player_tag}), with players_considered so the strength of the claim is in the payload. One-off badges are told apart from tiered ones, and tiered badges break down by level.
Read-only ·
requires cr:read
| Argument | Type | Required | Notes |
|---|---|---|---|
segment |
yes | The recorded player or clan to read: 'mine' (your clan) or an object naming exactly one of player_tag or clan_tag (current members). Required; corpus access has retired. | |
kind |
string | no | Only this class of badge. (one_off · tiered) |
limit |
integer | no | |
verbosity |
string | no | This tool has one size: compact is accepted and changes nothing (the response says so in a note). (full · compact) |
What comes back (declared outputSchema; fields marked required are always present):
| Field | Type | Required | Notes |
|---|---|---|---|
applied |
object | yes | |
badges |
array | yes | |
docs |
string | yes | page or page#section for elixir_docs / elixir://docs. |
meta |
object | yes | The envelope (docs: responses). |
notes |
array | yes | One-sentence caveats to repeat when quoting the numbers. |
observations |
object | yes | |
players_considered |
number | null | yes | |
population |
object | no |
Card collection players_collection
Full card collection as last recorded: levels (in-game 1-16 scale), counts, forms, star levels, collection level, and fielded: the mean level of the decks the player has actually played in the last 30 days, the benchmark a held level reads against. evolutionLevel / maxEvolutionLevel are FORM bit fields (1 = Evolution, 2 = Hero, 3 = both), decoded into forms_unlocked / forms_available. verbosity compact keeps id, name, level and forms per card.
Read-only ·
requires cr:read
| Argument | Type | Required | Notes |
|---|---|---|---|
player_tag |
string | no | Player tag like #20JJJ2CCRU. Omit to mean the caller (your primary player, or whoever on_behalf_of maps to). |
on_behalf_of |
string | no | Agent connections: the end user's id on your surface (e.g. discord:1234), mapped once with elixir_identify. Ignored on a personal connection. |
display_name |
string | no | Agent connections, beside on_behalf_of: the asker's display name on your surface. When on_behalf_of is not mapped yet, no_subject carries candidates[]: the clan members whose whole name matches it (case and spacing ignored), so one elixir_identify call follows; nothing is guessed from a partial match. |
verbosity |
string | no | compact: each card as id, name, level, forms_unlocked only; support_cards likewise. (full · compact) |
What comes back (declared outputSchema; fields marked required are always present):
| Field | Type | Required | Notes |
|---|---|---|---|
player_tag |
string | yes | Clash Royale tag, e.g. #20JJJ2CCRU. |
applied |
object | yes | |
collection_level |
integer | null | no | |
fielded |
object | no | |
cards |
array | yes | |
support_cards |
array | no | |
as_of_payload |
string | yes | |
notes |
array | yes | One-sentence caveats to repeat when quoting the numbers. |
docs |
string | yes | page or page#section for elixir_docs / elixir://docs. |
meta |
object | yes | The envelope (docs: responses). |
Find player by name players_search
Name-to-tag resolution across the whole recorded corpus: case-insensitive substring on last-observed display names AND your private nicknames, nicknames ranked first ("sam" finds the player you call Sam). Unknown names return an honest empty list, never a guess. The inverse (tags to names, in bulk) is players_names.
Read-only ·
requires cr:read
| Argument | Type | Required | Notes |
|---|---|---|---|
query |
string | yes | Part of a name or nickname. |
limit |
integer | no | |
verbosity |
string | no | This tool has one size: compact is accepted and changes nothing (the response says so in a note). (full · compact) |
What comes back (declared outputSchema; fields marked required are always present):
| Field | Type | Required | Notes |
|---|---|---|---|
applied |
object | yes | |
docs |
string | yes | page or page#section for elixir_docs / elixir://docs. |
total_matches |
integer | no | 6.27.0: every recorded name the query matched; truncated is true when more matched than were shown. |
truncated |
boolean | no | |
matches |
array | yes | |
meta |
object | yes | The envelope (docs: responses). |
notes |
array | yes | One-sentence caveats to repeat when quoting the numbers. |
Player profile players_profile
Latest recorded profile snapshot for a tag: trophies, Path of Legends, league stats, donations, lifetime counters, collection level, clan (with badge and the player's role), attributes (arena, best trophies, favourite card, account age) and current badge state, as of the last profile poll. live: true asks for a fresh read of ANY tag, recorded or not: served if in hand, otherwise queued while the record answers with live_status pending (live_pending if nothing is recorded yet). For tag-to-name only, players_names resolves up to 100 tags without the live lane.
Read-only ·
requires cr:read · reaches the live Clash Royale API, outside the record
| Argument | Type | Required | Notes |
|---|---|---|---|
player_tag |
string | no | Player tag like #20JJJ2CCRU. Omit to mean the caller (your primary player, or whoever on_behalf_of maps to). |
on_behalf_of |
string | no | Agent connections: the end user's id on your surface (e.g. discord:1234), mapped once with elixir_identify. Ignored on a personal connection. |
display_name |
string | no | Agent connections, beside on_behalf_of: the asker's display name on your surface. When on_behalf_of is not mapped yet, no_subject carries candidates[]: the clan members whose whole name matches it (case and spacing ignored), so one elixir_identify call follows; nothing is guessed from a partial match. |
live |
boolean | no | Ask for a read no older than a minute; works for a player nobody records. Served if in hand, otherwise queued while the record answers with live_status pending (live_pending if nothing is recorded yet). |
verbosity |
string | no | This tool has one size: compact is accepted and changes nothing (the response says so in a note). (full · compact) |
What comes back (declared outputSchema; fields marked required are always present):
| Field | Type | Required | Notes |
|---|---|---|---|
live_status |
object | no | With live: true: whether a fresh read was served or is pending (retry_after_s says when to call again). |
player_tag |
string | yes | Clash Royale tag, e.g. #20JJJ2CCRU. |
name |
string | null | no | |
applied |
object | no | |
clan |
object | null | no | |
last_seen_in_game |
string | null | no | The game's own lastSeen. |
attributes |
object | yes | |
badges |
array | no | Current badge state: name is the API's identifier (MasterySkeletonWarriors), label the badge as a player says it (Guards Mastery, 4.2.0); level, max_level, progress, target where tiered. |
snapshot |
object | yes | |
notes |
array | yes | One-sentence caveats to repeat when quoting the numbers. |
docs |
string | yes | page or page#section for elixir_docs / elixir://docs. |
meta |
object | yes | The envelope (docs: responses). |
Player summary players_summary
The headline in one call: current trophies and clan, last-30-days record and win rate, and the most-played deck with its record. Start here for “how am I doing?”; drill in with battles_performance / battles_decks.
Read-only ·
requires cr:read
| Argument | Type | Required | Notes |
|---|---|---|---|
player_tag |
string | no | Player tag like #20JJJ2CCRU. Omit to mean the caller (your primary player, or whoever on_behalf_of maps to). |
on_behalf_of |
string | no | Agent connections: the end user's id on your surface (e.g. discord:1234), mapped once with elixir_identify. Ignored on a personal connection. |
display_name |
string | no | Agent connections, beside on_behalf_of: the asker's display name on your surface. When on_behalf_of is not mapped yet, no_subject carries candidates[]: the clan members whose whole name matches it (case and spacing ignored), so one elixir_identify call follows; nothing is guessed from a partial match. |
verbosity |
string | no | This tool has one size: compact is accepted and changes nothing (the response says so in a note). (full · compact) |
What comes back (declared outputSchema; fields marked required are always present):
| Field | Type | Required | Notes |
|---|---|---|---|
player_tag |
string | yes | Clash Royale tag, e.g. #20JJJ2CCRU. |
name |
string | null | no | |
nickname |
string | no | |
clan |
object | null | no | |
trophies |
integer | null | no | |
trophies_as_of |
string | null | no | YYYY-MM-DD of the snapshot. |
applied |
object | no | |
last_30_days |
object | yes | |
trophy_floor |
object | no | The Trophy Road floor the player stood on in the window (3.13.0): present when the window holds ladder battles and the arena's floor is known. floored is true when a loss touched it, and then net_trophies counts wins in full and those losses at zero. floor is the floor stood on MOST RECENTLY, with its own on_floor_losses and losses_landing_on_floor; floors[] (6.21.0) is every floor the window stood on, each with its own counts and last time. |
top_deck |
object | null | yes | |
best_deck |
object | null | no | The chosen deck with the best record over enough decided battles; the same shape as top_deck. |
notes |
array | yes | One-sentence caveats to repeat when quoting the numbers. |
docs |
string | yes | page or page#section for elixir_docs / elixir://docs. |
meta |
object | yes | The envelope (docs: responses). |
Player timeline players_timeline
Time series from daily snapshots, one point per game day, for the caller by default: trophies, or any of the day row's metrics (the roster's trophies, donations, arena, clan and rank; the profile's lifetime block and Path of Legends standing; the legacy season_trophies mirror of Trophy Road; the full list is on recording#daily-series). Every point carries observed_at, profile_observed_at (null on a roster-only day) and roster_observed_at. progress_key adds the side-mode progress series; kind selects the pre_reset or season_roll row; granularity week keeps the last row of each ISO week.
Read-only ·
requires cr:read
| Argument | Type | Required | Notes |
|---|---|---|---|
player_tag |
string | no | Player tag like #20JJJ2CCRU. Omit to mean the caller (your primary player, or whoever on_behalf_of maps to). |
on_behalf_of |
string | no | Agent connections: the end user's id on your surface (e.g. discord:1234), mapped once with elixir_identify. Ignored on a personal connection. |
display_name |
string | no | Agent connections, beside on_behalf_of: the asker's display name on your surface. When on_behalf_of is not mapped yet, no_subject carries candidates[]: the clan members whose whole name matches it (case and spacing ignored), so one elixir_identify call follows; nothing is guessed from a partial match. |
season |
string | integer | no | Bound the window to one season: 'current' (to date), 'previous', the month the API names it by (2026-08), or the river race season number (135). from/to/days/weeks given win over it. |
metrics |
array | no | Which series to return; default trophies. Roster columns (written every roster poll of the member's clan): trophies, donations, donations_received, arena_id, clan_tag, clan_rank, previous_clan_rank, game_last_seen_at. Lifetime (the profile poll of a recorded player): best_trophies, battle_count, wins, losses, three_crown_wins, star_points, exp_points, collection_level, king_tower_level, total_donations, challenge_cards_won, challenge_max_wins, tournament_cards_won, tournament_battle_count. Path of Legends: league_number (the API's leagueNumber passed through: a Path of Legends league on a ranked player; the name the battle row uses), pol_trophies, pol_rank. League statistics: season_trophies, season_best_trophies (the API's legacy leagueStatistics: Trophy Road trophies and a frozen best, NOT the seasonal Trophy Road, which progress_key reads). |
from |
string | no | YYYY-MM-DD (a game day, the 10:00Z grid), inclusive. Built from daily snapshots, so only whole days are meaningful; an instant is floored to its game day and the response says so. |
to |
string | no | YYYY-MM-DD (a game day, the 10:00Z grid), inclusive. Built from daily snapshots, so only whole days are meaningful; an instant is floored to its game day and the response says so. |
days |
integer | no | Last N game days of the series, today included: sugar for from. Or use from/to. |
weeks |
integer | no | Last N weeks (7N game days) of the series, today included: sugar for from. Or use from/to. |
timezone |
string | no | IANA zone (e.g. Europe/Paris) for this call's date-only bounds and local labels. Default: the account's timezone. Agents serving people in several zones pass the asker's. |
granularity |
string | no | week returns the last row of each ISO week. (day · week) |
kind |
string | no | Which row of the day: daily (the day's last observation), pre_reset (the highest weekly donation counter seen before the Monday reset: a lower bound on the week's donations, since donations after the last read before the reset are not in it) or season_roll (the hour before the season rolls). (daily · pre_reset · season_roll) |
progress_key |
string | no | A Player.progress key as the API spells it (2v2League_202609, seasonal-trophy-road-202609, AutoChess_2026_Season_11, or '' for the Merge Tactics pre-season arena) or 'all': adds progress[] with that bucket's trophies, best_trophies and arena_id per day. A bucket at zero writes no row. |
verbosity |
string | no | This tool has one size: compact is accepted and changes nothing (the response says so in a note). (full · compact) |
What comes back (declared outputSchema; fields marked required are always present):
| Field | Type | Required | Notes |
|---|---|---|---|
player_tag |
string | yes | Clash Royale tag, e.g. #20JJJ2CCRU. |
applied |
object | yes | |
snapshots_available_from |
string | null | yes | |
series |
array | yes | |
progress |
array | no | |
notes |
array | yes | One-sentence caveats to repeat when quoting the numbers. |
docs |
string | yes | page or page#section for elixir_docs / elixir://docs. |
meta |
object | yes | The envelope (docs: responses). |
Record coverage elixir_coverage
How complete the record is for a tag: recording start, last successful poll per endpoint, battles captured (including appearances recorded before the tag was tracked), capture estimates over observation intervals ending in the last seven days, and unmeasured_tail_hours since the latest profile snapshot. Use it to caveat answers honestly; missing coverage is unknown, not evidence of absence.
Read-only ·
requires cr:read
| Argument | Type | Required | Notes |
|---|---|---|---|
player_tag |
string | no | Player tag like #20JJJ2CCRU. Omit to mean the caller (your primary player, or whoever on_behalf_of maps to). |
on_behalf_of |
string | no | Agent connections: the end user's id on your surface (e.g. discord:1234), mapped once with elixir_identify. Ignored on a personal connection. |
display_name |
string | no | Agent connections, beside on_behalf_of: the asker's display name on your surface. When on_behalf_of is not mapped yet, no_subject carries candidates[]: the clan members whose whole name matches it (case and spacing ignored), so one elixir_identify call follows; nothing is guessed from a partial match. |
verbosity |
string | no | This tool has one size: compact is accepted and changes nothing (the response says so in a note). (full · compact) |
What comes back (declared outputSchema; fields marked required are always present):
| Field | Type | Required | Notes |
|---|---|---|---|
player_tag |
string | yes | Clash Royale tag, e.g. #20JJJ2CCRU. |
polls |
array | yes | |
battles |
object | yes | |
snapshots |
object | yes | |
observation_intervals |
array | no | |
completeness_last_7_days |
object | no | Measured intervals plus the explicit unmeasured tail after the latest profile snapshot. |
notes |
array | yes | One-sentence caveats to repeat when quoting the numbers. |
docs |
string | yes | page or page#section for elixir_docs / elixir://docs. |
meta |
object | yes | The envelope (docs: responses). |
Resolve tags to names players_names
Bulk tag-to-name resolution from the corpus: up to 100 tags in, for each the last-observed name and where it came from, plus an explicit unknown list. Costs nothing from the live lane; resolving a miss is then a deliberate players_profile({ live: true }) per tag. The inverse of players_search.
Read-only ·
requires cr:read
| Argument | Type | Required | Notes |
|---|---|---|---|
player_tags |
array | yes | One to one hundred player tags. |
verbosity |
string | no | This tool has one size: compact is accepted and changes nothing (the response says so in a note). (full · compact) |
What comes back (declared outputSchema; fields marked required are always present):
| Field | Type | Required | Notes |
|---|---|---|---|
applied |
object | yes | |
docs |
string | yes | page or page#section for elixir_docs / elixir://docs. |
meta |
object | yes | The envelope (docs: responses). |
names |
array | yes | |
notes |
array | yes | One-sentence caveats to repeat when quoting the numbers. |
unknown |
array | yes |