Tools: Players

The Players tools your agent sees through Elixir MCP: what each one answers, what it takes, and which capability it needs.

‹ All tools

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

ArgumentTypeRequiredNotes
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):

FieldTypeRequiredNotes
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

ArgumentTypeRequiredNotes
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):

FieldTypeRequiredNotes
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

ArgumentTypeRequiredNotes
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):

FieldTypeRequiredNotes
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).

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

ArgumentTypeRequiredNotes
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):

FieldTypeRequiredNotes
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

ArgumentTypeRequiredNotes
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):

FieldTypeRequiredNotes
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

ArgumentTypeRequiredNotes
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):

FieldTypeRequiredNotes
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

ArgumentTypeRequiredNotes
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):

FieldTypeRequiredNotes
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

ArgumentTypeRequiredNotes
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):

FieldTypeRequiredNotes
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

ArgumentTypeRequiredNotes
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):

FieldTypeRequiredNotes
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
Something wrong on this page?

Help for Tools: Players

The Players tools your agent sees through Elixir MCP: what each one answers, what it takes, and which capability it needs.

Read more

The page you are on rides along. Every item is answered, and the answer comes to your email and your timeline.