The record has kept a day-grained history of every polled clan and every member of it since 2026-09-17, backfilled from the archive to March, and now it answers. clans_timeline returns a clan's day series (clan score, war trophies, member count, required trop…
Read it ›Updates
What changed, newest first — product releases and tool-contract versions in one stream. Open one for the whole entry.
September 2026
The daily series as readers (docs/reviews/2026-09-18-TIME-SERIES.md Part 7). Every daily series is keyed by the GAME day (10:00 UTC to 10:00 UTC, named for the date it starts on; docs: clocks#the-game-day), and every point carries its stamps: observed_at, pro…
Read it ›A clan's roster is read up to 96 times a day and, until today, the record kept four identity columns of it and threw the rest away while polling the same players' profiles separately for the same numbers. Every polled clan now has a daily row of its own (clan…
Read it ›A player's daily snapshot was filed under the UTC calendar date it was taken on, while war days, the season roll and every clan's policy day run on the 10:00 UTC grid: the snapshot taken in the hour before a season rolls (Monday 09:00 UTC) sat on the new seas…
Read it ›war_current and the clan timeline said which river race day it was from the clan's last observed period, so a clan whose polls lagged, or that the recorder had only just started following, could read a stale day or none at all. The record now holds every poli…
Read it ›A corpus-wide card or deck meta read scanned every recorded battle on every call - 8 to 13 seconds warm, and nine timeouts a week. The record now keeps one rollup per season and mode (deck, card by form, card pair, and the totals every rate is a share of), re…
Read it ›A war battle's week and day used to be stamped onto the record at ingest, and only when the clan's next race poll happened to follow the battle inside a fortnight, so three quarters of the war battles the record held carried no day at all and were invisible t…
Read it ›The card, deck and synergy meta tools answered a rolling 28 days, which on 17 September was 14% last season and 86% this one with nothing in the response saying so; balance changes land on the season roll, so those are two populations. The record now holds ea…
Read it ›players_profile's output schema declares the shapes of snapshot.path_of_legend, league_statistics and lifetime with every key nullable (a key the API omitted is served as null since the objects render from typed columns), which moves the tools fingerprint in …
Read it ›battles_meta_decks, battles_meta_cards and cards_synergy answer a corpus-wide season read (the default window, or season) from the season's rollup instead of a scan of every battle: the same population and the same fields, with players_as_of (when the distinc…
Read it ›The season is a row and the meta tools read by it (docs/reviews/2026-09-16-SCHEMA-REVIEW.md 1.1). battles_meta_decks, battles_meta_cards and cards_synergy default to the CURRENT SEASON TO DATE (applied.window.source: 'season') instead of a rolling 28 days, wh…
Read it ›A Discord bot on the timeline was still firing on a wall clock for most of what it posted, and spent ten tool calls a day rebuilding a member's win streak and trophy swing from battles_performance. Now a member's session that crosses a disclosed rung (5, 10 o…
Read it ›The timeline as a trigger for a clan bot (docs/reviews/2026-09-16-TIMELINE-FOR-PROACTIVE.md). elixir_timeline: a member's session that crosses a disclosed rung (5/10/20 wins in a row, 150/300/500 ladder trophies net, 20/40 battles in one sitting) is a session…
Read it ›Each cell of the battle-activity year on Console now carries two things: its hue is the day's win share, from red (all losses) through purple (even) to blue (all wins), and its shade is still the volume, four steps scaled to the player's busiest day. Tap a da…
Read it ›The bar now reads Elixir, and its right-hand side carries the family's three products as buttons: Console (this record's own pages), Clan (clan.poapkings.com) and Drop (drop.poapkings.com, which opens in a new window and says so). The one you are inside is gr…
Read it ›Two natural agent reads of elixir_my_feedback crossed the 48,000-character delivery cap: twenty full reports plus maintainer responses can be much larger than twenty ordinary rows. Worse, the read marked every response seen before the protocol replaced the bo…
Read it ›The connection instructions have said 'days/weeks are sugar' since 1.0.0, and five tools honoured it while the rest refused with bad_request - an agent that had just used clans_standings({days: 1}) sent days: 1 to battles_performance and lost three calls lear…
Read it ›The arena move got its battle this morning; the other three threshold moments now carry theirs, one shape everywhere (opponent, crowns, trophy change, and the instant as the item's at). A ranked battle is stamped with the league it started in, so the promotio…
Read it ›Trophy Road arenas have floors: reach the floor and you are in, and a loss never takes you below it again - the game reports a loss on the floor with no trophy change at all, and the last floor, 14,000, is where Trophy Road ends. So the promotion is one ident…
Read it ›A clan member reached Royal Crypt at 06:52Z on 2026-09-15 and the clan's timeline said so at 14:27Z, when the eight-hour profile poll came round; the battle log, read many times in between, had carried the new arena on every entry. A battle's arena is the hig…
Read it ›Until today the only place a played card lived was the deck's JSON on each battle, so every card question - card meta, synergy, which battles had a card - re-read every deck in the window, and on 2026-09-14 three clans asking at once pushed those reads past t…
Read it ›The clan's own recorder kept six months of raw reads the record had never seen. They were replayed through the same admission as a live fetch, with their original fetch times: battles from January, daily snapshots and profiles from March 7, every war week fro…
Read it ›elixir_my_feedback returns lossless bounded pages: pass next_offset as offset until null; total counts the filtered ledger. A page may contain fewer rows than limit when full feedback and maintainer text would exceed the delivery cap. Only responses actually …
Read it ›days and weeks are accepted on every windowed tool, as the server instructions have said since 1.0.0: battles_query, battles_performance, battles_cards, battles_decks, battles_meta_decks, battles_meta_cards, battles_compare, battles_opponents, cards_synergy, …
Read it ›elixir_timeline: ranked_promotion carries facts.promoted_by (the last win played in the league below - a ranked battle is stamped with the league it started in); best_trophies_band carries facts.band and facts.crossed_by (the Trophy Road win whose result firs…
Read it ›elixir_timeline: arena_changed items carry facts.promoted_by when the record holds the crossing - the win whose result first reached the new arena's floor: opponent {player_tag, name, starting_trophies}, crowns, crowns_against, trophy_change, trophies_after, …
Read it ›elixir_timeline: an arena move is polled for as soon as the player's own Trophy Road battles vouch for it (a battle entered with at least the opponent's trophies, since a battle's arena is the higher side's), so arena_changed lands within the battle log's cad…
Read it ›battles_query renders each participant's deck from the recorded card rows: the same {cards:[{id, name, level, evolutionLevel?, starLevel?}], supportCards?} shape, or {rounds:[{cards}]} for a duel, with names from the catalog; the storage-only norm marker is g…
Read it ›Cards played are recorded as rows (deck, deck_card, battle_participant_card), so every card question is an indexed lookup instead of a scan of every deck's JSON. battles_query gains with_cards (several ids, all present in your deck); with_card and against_car…
Read it ›game_events now carries first_sighting_day and its horizon note reads the table rather than a date in the code: the elixir-bot backfill placed sightings from 2026-06-13 before the daily reads that began 2026-09-11. Same backfill, no shape change elsewhere: PO…
Read it ›Deck meta now keeps only a participant key for each deck's latest qualifying observation during its aggregation, then reads the full deck only for the returned rows. It no longer sorts and collects every full deck JSON before applying the result limit. Counts…
Read it ›Deck meta, card meta and clan standings now cancel over-budget queries and return query_timeout with a request id and retry hint, leaving time to record the failure. Their MCP query budget is at most 18 seconds; a narrower from/to window reduces work, while l…
Read it ›rankings_players with board mode and location list now names the recorded leaderboard ids, including Merge Tactics; an unknown mode points to that discovery call. The contract changelog fits the response cap by returning up to 20 releases per page, with next_…
Read it ›Deck meta no longer aggregates every full deck JSON before applying the result limit. It keeps the latest qualifying observation's participant key per deck, then reads the returned decks through that primary key. Counts, unrounded rates, shrinkage, scope, and…
Read it ›Heavy MCP reads (battles_meta_decks, battles_meta_cards and clans_standings) now share an 18-second query budget, shortened when Lambda has less time left. PostgreSQL cancels over-budget work and returns query_timeout with an executable retry and meta.request…
Read it ›Mode-board discovery now works: rankings_players({board: 'mode', location: 'list'}) returns the recorded leaderboard ids, names and enabled state, and an unknown mode points back to that executable discovery call. elixir_changelog now delivers complete histor…
Read it ›elixir_events is elixir_timeline. It answers what happened to the players and clans you track since your read pointer, as items in order: a battle session (a gap of 30 minutes breaks one; single battles never appear), a badge by name, an arena or ranked move,…
Read it ›elixir_events no longer hands an agent a pile of topic rows with counts to drill. It returns one entry per subject since you last looked: a sentence a person can read, then the facts under it, always in the same sections. For the players you track that is the…
Read it ›game_clock now answers the next boundaries of each kind: when this war day closes, when the next war day opens, when training resumes, when the week ends. A scheduled agent reads those once and decides for itself when to look, instead of waiting for the feed …
Read it ›The Verify challenge no longer hands you eight random cards. The target is now the deck you played most in your last ten recorded battles, with two cards swapped for cards you own of similar elixir cost; the two swaps are marked in the brief. A deck you have …
Read it ›The console now opens on a battle-activity graphic, with a chip per tracked player, and the record of each tracked player carries the same one: a year of UTC days coloured by recorded battles, and a 24-by-7 rhythm of when that player plays, rotated into your …
Read it ›The Admin collector table counted both requests every completed fetch must make — its lease and its submitted result — but compared that pair with one fetch. A perfectly efficient collector therefore appeared to make two calls per fetch. Calls/fetch now start…
Read it ›elixir_events is now elixir_timeline. The response carries the TIMELINE: items in order, each with an instant, a subject, a kind, a section, a sentence and its facts. Battles appear as sessions (a gap of 30 minutes breaks a session), never one by one; badges,…
Read it ›elixir_events is an activity feed of ENTRIES, synthesized at read time: one per subject since your bookmark, each with a summary sentence a person can read, always-present sections (a player's battles, trophies, arena, ranked, collection, badges, clan, war, p…
Read it ›Feed payloads now carry what the Events page always promised: member_role_changed has prev_role, new_role and direction (promoted | demoted), and member_left has the departing role. war_current and the clan pulse's decks_today gain race_finished_at (also top-…
Read it ›Collectors now check in and the door answers with the next interval instead of holding a poll open. One released Python collector still expected the earlier idle fallback in its configuration, so the door keeps sending that compatible value while it also send…
Read it ›The tool-choice guide still said four tools could request a live read, even though the leaderboard tools had joined that lane. Its count now comes from the MCP registry, the same source as the generated tool reference, so the website and the guide served over…
Read it ›The roster gate treated the game's last-seen stamp as proof that a member could not have played. The capture audit proved otherwise: a completed session can fill the roughly 30-battle log before that stamp is observed again. It still skips an unchanged profil…
Read it ›Elixir was asking for sign-in more than it should have, and a census of the owner's own sessions showed why: sessions were not expiring, sign-ins were happening beside live ones. Four causes, fixed. When the page could not reach Elixir it showed the sign-in w…
Read it ›A clan's own participation rules need the same few facts about every member: battles and ranked battles per week, the donation counter at week end, war decks per day, when the record first saw them, when they last played. Getting those for fifty members meant…
Read it ›A web product in the family can now use Elixir as its sign-in. It asks for one extra capability, account:email, and GET /oauth/userinfo answers the address the code already proved, so Elixir Clan and Elixir Drop know you are the same person you are here. The …
Read it ›The first Verify waited for your profile's current deck to show the eight cards. On the owner's own account it never did: the API kept reporting the old deck for over an hour after the slot was selected, with the game closed. The battle log has no such lag, s…
Read it ›A claim on a player was taken on trust. Console ▸ Verify now proves it with the one field the game lets you set and the API shows to everyone: your active deck. Elixir names eight cards you own, shown two rows of four like the game; you put them in an empty d…
Read it ›The first day of the roster gate was measured against the review that proposed it. Battle-log fetches halved as promised and the web door's cost fell 97%, but capture gaps rose from 0.1% to 1.5%: a roster read every 4 to 24 hours (an incidental clan, polled o…
Read it ›The event guide's example called the pulse's war discriminator day_kind and showed roster changes as member lists. The digest has always returned war.kind and numeric joined/left counts. The example now matches, explains when war_day and decks_today appear, a…
Read it ›NEW TOOL clans_participation: every open member's participation week by week in one call. Per member, columns aligned to the top-level weeks (ISO, 1 to 8, default 5, current week partial): battles, ranked_battles, donations (the weekly counter at week end, nu…
Read it ›OAuth gains account:email and GET /oauth/userinfo, for web products in the Elixir family that sign a person in with Elixir. The scope is granted only to a client that names it: it is not part of the default grant, is never offered ticked on the consent page, …
Read it ›Four card-meta reads arriving together exhausted the MCP door's 25-second limit: player, clan and collection windows were filtering time after the battle join instead of using the participant-time index built for exactly that access path, and the card query s…
Read it ›Last fetch on Status > Collectors now reads to the second (3m 12s ago, not 3m ago) - five rows all saying 3m ago is how a fleet fetching in lockstep went unnoticed. A VERSION column shows the client each collector last submitted with, so a machine that has no…
Read it ›Told the same fifteen seconds from the same empty queue, every collector in the fleet came back on the same second and hit the door as a pack after each scheduler tick. The door now gives each active collector its own slot in the idle cycle, evenly spaced acr…
Read it ›Running a collector is a favour, so the favour gets to choose its face: when you raise your hand at Status > Collectors you now pick the Clash Royale card your collector is named for, and a collector you already run can change its card from its own page. A ca…
Read it ›A collector that fetched a thousand payloads of nothing looked identical to one that fetched a thousand payloads of news. Every receipt now records what its fetch was worth - rows the projection inserted or changed, the bytes read from the API, the time the a…
Read it ›Six in ten battle-log polls came back with nothing new, and most profile polls confirmed a profile that had not moved. A clan roster already carries the game's own lastSeen for every member in one small fetch, so the scheduler now reads it first: when a roste…
Read it ›Asking for a live read used to hold your call open while a dedicated collector long-polled for it - and held two collectors long-polling around the clock for the sixteen such calls a week. Now live: true means: answer from a read no older than the API's own c…
Read it ›players_collection now reads a player's cards and tower troops from the record - levels on the in-game 1-16 scale, counts toward the next level, which forms are unlocked - instead of a payload cache that has been empty for most players most of the day since t…
Read it ›The global Path of Legends board was snapshotted every hour: twenty-four copies of a thousand places a day, for a board that only needs to be remembered as it stood at each reset. It is now read once per board-day, in the first planning tick after 10:00Z, so …
Read it ›Every clan was read every 15 minutes around the clock — a heartbeat inherited from the single-clan bot, applied to 288 clans, 258 of them polled only because a top-ranked player happens to be a member. It was 31% of everything the recorder had ever fetched, f…
Read it ›A battlelog is a player's last 25 battles, and every poll used to carry all 25 to the service, which then discovered it already had most of them. Now the service remembers the newest battle each player's log has delivered, hands that mark to the collector wit…
Read it ›Three small additions to what a collector's config call returns, for the preflight command the next collector release carries (collector doctor): the address your requests arrive from, which is the one to allowlist on your Clash Royale key; the one Clash Roya…
Read it ›This morning's finals backfill fetched each season's final board by a bare number and took that number for the season the game clock counts — it is the position in the API's own list of seasons, eight higher. What the record called the S135 final was December…
Read it ›Every Path of Legends season's final standing since S97 — the settled board at full depth, 9,999 places — is now in the record, backfilled, and each new season's final is fetched the day after it rolls. The clan ladders (clan score, clan war trophies) are rec…
Read it ›The CR API shows a ranking as it is this minute and forgets it. Elixir now keeps it: the global Path of Legends board every hour, and every one of the 262 locations the API lists once a day — a snapshot per fetch that changed, a row per placed player with ran…
Read it ›Scoped battle intelligence now uses the participant-time index for player, clan and collection windows instead of filtering time only after joining back to battles. battles_meta_cards also derives its denominator from the same card expansion rather than scann…
Read it ›live: true is asynchronous. It means: answer from a read of the game no older than the API's own cache (60 s for players, battle logs and boards; 120 s for clans and the river race) if one is in hand; otherwise queue one priority fetch and answer NOW from the…
Read it ›The card collection is recorded. players_collection reads a player's cards and tower troops from the record (levels on the 1-16 scale, counts, forms), not from a payload cache that went empty two hours after each profile poll - since 0071 it had answered card…
Read it ›The season finals were filed under the wrong season numbers, and eight were missing. 1.4.0 fetched a final by a bare number and took that number for the season game_clock counts (S136 = September 2026); it is the position in the API's own seasons list, eight …
Read it ›Everything else the API forgets about a season. FINALS: rankings_players and rankings_clans take board: pol_final with a season id - every Path of Legends season's final standing at full depth (9,999 places) since S97, backfilled, and each season's final fetc…
Read it ›The leaderboards are recorded. rankings_players reads a board - the global Path of Legends board by default, any of the 262 locations by id or country code - as of the latest snapshot or any earlier instant (as_of), paged with limit and offset, verbosity comp…
Read it ›Elixir is free to use and independently run, and there is now a page that says what keeping it going costs and how to help pay for it: GitHub Sponsors at three suggested amounts, with running a collector set beside it as the other way to contribute. The page …
Read it ›Three reports from the agents using the record are fixed in contract 1.2.0. war_current now keeps period_points, the score a clan has earned in the current war day, beside fame, the cumulative boat score banked when a day closes — so day-one fame can honestly…
Read it ›The player tag on your access request is claimed and recorded the moment you are approved, and the clan that player is in is followed too, at activity scope — the one clan slot every tier has, which is exactly what it is for. Sign in and the console already k…
Read it ›Every update is its own page now, so you can send somebody one, and the tool-contract changelog is part of the same stream rather than a second page saying the same thing — a version's summary, the tools it added and what it broke sit with the release that ca…
Read it ›Report this call on a request record now attaches that request as a field on the report — the arguments, the answer and the timings ride along, so there is nothing to describe. Agents can do the same: elixir_feedback takes request_id (contract 1.1.0), which e…
Read it ›Profile shows the same eight limits the Tiers page publishes, with what you are using beside each one, instead of four meters. A warning about an expired credential still being presented can be dismissed — it comes back if it happens again another day. Busies…
Read it ›The access-request form now lives on the sign-in card in the console, as the other half of one question: you are either signing in or asking to. Every Request access button leads there. The form used to have a second copy on the home page, and it was failing …
Read it ›Every page now carries the Open Graph and Twitter metadata a shared link needs: the page's own title and description, and one share image with the mark and the tagline. Paste a docs page into Discord, Slack or a post and it renders as a card instead of a bare…
Read it ›Every tool now follows the same rules, and the rules are written down. The two tools that start recording are named for what they do: elixir_track_player and elixir_track_clan (tracked means recorded, as before). Every windowed tool takes from and to, with da…
Read it ›The Feedback page is a table now, like Notifications: one line per note with its first line, state and whether the maintainer has replied, and the whole note one click away. A note and its reply render as the Markdown they were written in, so paragraphs and l…
Read it ›The Feedback page is a table now, like Notifications: one line per note with its first line, state and whether the maintainer has replied, and the whole note one click away. A note and its reply render as the Markdown they were written in, so paragraphs and l…
Read it ›An agent reading the documentation through elixir_docs was getting the source rather than the page: template variables where the numbers should be, and links with nothing to resolve them against. The corpus is now rendered with the same data the site uses, it…
Read it ›The eleven examples used to be illustrations: invented clanmates, invented numbers, a citation chip under each answer. Each one has been re-run for real against the live service, as King Thing of POAP KINGS, and the answers are what came back — the tools unde…
Read it ›Use cases are now Examples: eleven pages, one per example, each with the rail of all eleven beside it, the exchange typed live, what it reads, the steps to set it up as buttons, and three more like it. The family page is one page per product with the same rai…
Read it ›Every console screen and site page was compared against the design it was built from, and the gaps closed. Usage shows both quotas as meters with the reset time, fourteen days of calls, and who spent them — your clients, your agents and the console each on th…
Read it ›Six tabs, a wordmark and a Console button do not fit on a phone. The tabs now collapse behind one button on the right, and the sheet drops below the bar rather than covering the page — six links is a menu, not a modal. The Console button stays on the bar at e…
Read it ›The home page used to lead with a counter panel. A number says the corpus is big; it cannot say what it is for, which is the only thing a home page has to do. It leads with a conversation now — a real question, the answer, and under the answer the citation na…
Read it ›The console outgrew a row of tabs across the top, so its sections moved into a rail down the left: Overview and Explore, then what we record for you, then who can call on your behalf, then how the service is running. Two things changed with it. Overview is no…
Read it ›Three player-reported gaps closed together. WAR CURRENT: standings add period_points, the current war day's score, beside fame, the cumulative boat score banked at the day close; the note says why fame can still be zero while members have points. WAR HISTORY:…
Read it ›elixir_feedback takes request_id: the meta.request_id of the call the feedback is about. Every response already carries one, and attaching it hands the maintainer the exact request, its arguments and its answer beside your words - the console has had a Report…
Read it ›The 1.0 contract: one set of conventions across every tool, from the review of the whole surface (docs/REVIEW-2026-09-10). NAMES: elixir_add_player and elixir_add_clan are elixir_track_player and elixir_track_clan (the console's word; an 'add' tool that remov…
Read it ›The service documents itself over MCP. elixir_docs returns the documentation index (every page with its section and lede), one page as Markdown by slug, or the pages matching a query with an excerpt around the first hit; elixir_examples returns the eleven wor…
Read it ›Clash Royale reports when each clan member was last active, but only inside a clan's member list - a player's own profile endpoint does not carry it. Every roster poll delivered it and we threw it away, which meant it was unrecoverable for any moment we did n…
Read it ›A clan leader counted 44 people in this week's race against 49 in the clan, and had no way to tell a recording gap from a real one. It was real: checked against the game's own live payload, its current-river-race participants list returned the same 44 and lef…
Read it ›An agent can connect either over OAuth or with its service key. Editing capabilities only reached the first: an OAuth connection's capabilities live on its grant and are edited on Account -> Connections, but a service key's live on the key, so an agent connec…
Read it ›Account -> Connections now lists the capabilities of every live connection and lets you edit them in place. Tick a capability to add it, untick one to take it back; the change applies to that connection's next call, with no reconnect and no new token, because…
Read it ›Connecting an app used to grant exactly what that app requested, and nothing else could be added afterwards. Since the read-only challenge advertises only cr:read, an app that never asks to file feedback or change recordings could never be allowed to, and the…
Read it ›A round of agent playtesting found places where the service was hard to trust or hard to report. Failures now answer in the same shape as successes: a database that cannot be reached and a rate limit both return error.code, a message, a hint and a meta.reques…
Read it ›The capture charts only ever showed completed fetches. A new 'Work waiting' gauge above them shows the other half as a queue, in pipeline order: subjects due for the next scheduler tick (the planner runs every five minutes, so due work piles up between ticks …
Read it ›Both capture charts on the Status page gap-fill up to the current minute, so the right-most bar was always the bucket in progress and read as zero for the first minutes of every five-minute window, which is exactly how long the scheduler waits between ticks. …
Read it ›The docs now carry the wire contract, not only the product: a protocol reference (transport, OAuth discovery and registration, PKCE and the resource parameter, the five scopes and the step-up challenge, every error code at every layer, the 48,000-character re…
Read it ›Two changes to how the recorder decides when to fetch a player's battles. First, asking about a player through any tool now keeps that player's battlelog within an hour for the next day; until now a friend who plays a few games a day sat on the daily fairness…
Read it ›Feedback filed on the site or through a connected agent, and tier-upgrade requests, now email the maintainer the moment they land: the category, a short excerpt, and which account or agent sent it (never an address), with a link to act on it. Until now only a…
Read it ›The explorer on the website now follows the same discipline as the MCP connection: the hourly rate limit and daily call budget are the same buckets, oversized results come back as the same bounded failure, and it serves read-only tools (nicknames excepted, wh…
Read it ›An agent's live Clash Royale fetches now come out of its owner's daily live budget, the same way its tool calls already did; until now each agent quietly carried a fresh live allowance its owner never had, so several agents on one account multiplied the one s…
Read it ›Eleven pieces of feedback from one agent session shipped together, because they shared a shape: the record held the detail and each tool exposed only one way to group it. battles_opponents groups a player's battles by opponent, so 'have I faced this player be…
Read it ›Account - Connections now shows, per connected client, when it last actually called (rather than when it last collected a token), the address and country it called from, and how many calls it made this week - alongside the disconnect button that was already t…
Read it ›An agent's page now shows where it connects from - address, country and what the client calls itself - and warns when something is still presenting a credential that no longer works, which until now was invisible because a refused call never becomes usage. Re…
Read it ›Submitting the authorization form twice - which phones do on their own after filling a one-time code - no longer replaces a successful connection with an error page. A repeat within two minutes repeats the same answer and returns you to your client, with ever…
Read it ›A code sent for connecting an AI client and a code sent for signing in to the website are now kept separate. Previously the most recent code of either kind was the only one that could be used, so requesting one while the other was open made the other impossib…
Read it ›An agent's page now revokes its key, reports when it was last active across every key it has held, and says outright when the current key has never been used - the signature of a runtime still presenting the previous one, which produces no errors because a re…
Read it ›An agent's page now shows the URL to connect a client at, with a copy button, and creating one shows that URL beside the key it hands over once. Agents can also be renamed after creation; the name stays unique among your live agents and travels with the agent…
Read it ›An agent connection omitting clan_tag now resolves to the clan the agent acts for, as its opening instructions have always promised. Clan defaults were previously derived from claimed players, which an agent does not have, so clan tools answered that the conn…
Read it ›The game's own lastSeen is captured and served instead of discarded. Clash Royale exposes it only inside a clan's memberList - /players/{tag} does not carry it - so it was obtainable on every roster poll and thrown away, and every un-stored poll was gone for …
Read it ›war_current reconciles the race roster against the clan roster: participants_count, member_count and members_not_in_race[] name the current members this week's race leaves out, each with reason not_in_race_roster. Verified against the live API rather than ass…
Read it ›A round of agent playtesting, fixed together. ERRORS: every refusal now carries the same envelope a success does. A database the door cannot reach answers 503 with {error:{code,message,hint}} plus meta.request_id and Retry-After, instead of a bare Internal Se…
Read it ›Arguments are validated against each tool's declared inputSchema before the handler runs: an unknown property, a wrong type, a value outside enum/minimum/maximum/length bounds, or a missing required argument is refused with bad_request naming the argument, ne…
Read it ›An agent's live fetches (live_fetch, players_profile live: true) are charged to its OWNER's daily live budget, matching how its tool calls were already charged, so every agent on one account shares one live allowance and meta.quota.live reads the same balance…
Read it ›Eleven feedback items from one agent session, shipped together because they share a shape: the corpus held the detail and exposed one grouping axis per tool. NEW AXES: battles_opponents groups a player's recorded battles by opponent (record, first/last met, m…
Read it ›elixir_my_players now returns relationship (primary | alt | friend | watching) and your private nickname for each player, so "my alt" and "my friends" resolve from the response instead of being guessed from handles - the account owner had recorded those disti…
Read it ›Admin → Integrations now provisions platform keys, permissions, independent budgets and collection enrollment grants. The versioned API provides a game calendar, recorded player profiles, asynchronous refreshes and idempotent automatic recording enrollment. E…
Read it ›Account → Connections now suggests questions your recorded history can support. Copy one into your connected AI client to review your player snapshot, recent battles, decks, two recorded weeks or a recorded clan war. View the full question before copying; man…
Read it ›Account pages, API routes and maintenance commands now have smaller, focused modules. Successful account and agent journeys are tested against the real API on disposable databases, including first capture, agent creation, key rotation, suspension and resumpti…
Read it ›Response metadata is checked against the shared contract before a tool result is returned. The response guide now uses a generated, tested example, with UTC timestamps, explicit unknown freshness, and the current contract version. Valid answers and statistica…
Read it ›Deck and card meta now count only wins and losses in their decided totals, usage and shrinkage baseline; draws and unresolved results no longer depress that baseline. Empty samples report an unknown rate. Personal and clan Pilot Scores now share the same leve…
Read it ›Your account overview now guides you from adding a player through the first capture to asking your own MCP client. Suggested questions follow the data actually recorded: a player snapshot first, then battle reviews, deck comparisons and comparisons between tw…
Read it ›Performance summaries now count the whole period you ask about, including histories longer than 2,000 battles. Freshness follows the data used: a recent profile poll can no longer make an old battle log look current, and war answers show when the race was las…
Read it ›Creating an agent used to be a one-way door: you could make one and revoke its key, and that was the whole story. Revoking was worse than a missing feature, because there was no way to issue a replacement - the only path back was deleting the agent and buildi…
Read it ›The signed-in application went unmeasured for a few days, and the reason was a fix that did not fix anything. Analytics had been taken off the application because third-party code running inside your session is genuinely worth avoiding - but the same script s…
Read it ›Your connection now identifies itself as data, not only as prose. initialize has always said who you are connected as inside the instructions - 'YOU ACT FOR POAP KINGS' - which suits the model reading it and not the program hosting it, so a client wanting to …
Read it ›Response metadata is checked against the shared contract at construction and at the tool registry boundary. The existing timezone_applied field is now declared; timestamps, optional history, source freshness, counters and receipt IDs are checked. Public respo…
Read it ›Clarify numerical precision in statistical tool notes: calculations use unrounded aggregates; rates and scores are independently rounded to three decimals. Recomputing a shrunk rate or score from displayed rates can differ in the final decimal place. Calculat…
Read it ›Statistical alignment: deck/card meta exclude draws and unresolved outcomes from decided totals, usage and shrinkage baselines; empty segments return segment_win_rate: null. Both return methodology and window_to. Card meta rejects reversed windows and exclude…
Read it ›Performance summaries now aggregate the entire requested window; last_n_battles remains an explicit sample. Player response metadata distinguishes the oldest relevant poll, individual source_polls, earliest stored recorded_since, and recording_active_since. w…
Read it ›The daily clan pulse now says whether a quiet member is really quiet. 'Days quiet' has always been counted from the last battle we recorded, so for somebody we had stopped polling it measured our own blind spot rather than their inactivity - and telling the t…
Read it ›Players you add can finally be told apart. Relationship - primary, alt, friend, watching - shipped as a column months ago and your connected agent has been reading it the whole time, but nothing could ever set it, so every player you added was announced as 'w…
Read it ›The event feed now carries milestones, and it reaches agents through the clan they run. Badges, arena changes, personal-best trophies, career-win thousands, collection levels and Path of Legends promotions all nod at you now - none of them ever did before, be…
Read it ›Every tier now tracks 50 players, up from 3-25 - one comprehensive clan watch already records about that many, and recordings are shared, so a clanmate of a clan already being captured costs nothing to add. Your connection now tells you who you are. The openi…
Read it ›game_clock answers what season and war day it is with no clan and no player - the calendar is a property of the game, not of anyone playing it. Connections now describe the job they are for: an agent acts for a clan and no longer sees the personal identity to…
Read it ›Every response now carries meta.request_id, naming the audit row that produced it — quote it when reporting an answer that looks wrong. Calls made with a service token are recorded against that token, not just the account behind it.
Read it ›Every page here used to be one file. Whatever address you opened - the docs, the tool list, the changelog - the server sent back the same home page, and your browser drew the rest. That works for a person clicking around and fails everyone else: search engine…
Read it ›Connecting an agent used to ask for read access while its token could also change recordings, collections, nicknames, event state, and feedback. That mismatch is closed. The authorization page now lists each capability before you enter the code, read-only acc…
Read it ›Clash Royale resets war days at 10:00 UTC as policy, but it matches clans into races of five as matchmaking fills, so every clan's day really starts a little off that hour by its own amount. Following each clan's own drift is right for a single clan and wrong…
Read it ›A round of fixes to what collections actually do. Raising a collection's scope to comprehensive now deepens the members it already holds, instead of only the ones you add afterwards - so a collection that says it captures battles captures them. Deleting a col…
Read it ›The admin console has always said that no admin can change the owner's account, or another admin's. The role controls enforced it; the approve/deny control did not, so an admin could deny a privileged account out of the service. Access decisions now answer to…
Read it ›OAuth grants now mean what the consent page says. cr:read calls every read-only tool but cannot edit collections, change recordings, update nicknames/event cursors, or file feedback; those actions require collections:write, recordings:write, account:write, or…
Read it ›War days now follow the 10:00 UTC POLICY reset for every clan. Clash Royale matches clans into races of five as matchmaking fills, so each clan's real period start drifts off that hour by its own amount; Elixir MCP is multi-clan and cannot honour every clan's…
Read it ›war_current: period_end_nominal and week_end_nominal were wrong whenever the ~10:00 UTC reset drifted early. A period first seen open at 09:57Z reported its end as 10:00Z that same morning - about 24 hours early, and already in the past by the time anybody re…
Read it ›Putting a player or clan in a collection now records it, for as long as it stays there. Until today a collection was only a list, so curating one recorded nothing and you had to add every subject to your account separately. Each collection also says how deepl…
Read it ›Every collector is somebody's machine, quietly fetching on a home connection so the archive keeps growing. The status page now says whose: each collector is credited to the player who runs it, beside the Clash Royale card it was named for. Only the game ident…
Read it ›The capture chart told you how much was fetched but not by whom. Both charts are now stacked by collector, and hovering any bucket breaks it down - who fetched how many, and how many were rejected. Underneath it sits a second chart covering the last 24 hours …
Read it ›The status page and the admin table were showing different times for the same collector, and both were right: one counted the last data we accepted, the other counted the last time the collector said hello. A collector that is polling happily but has nothing …
Read it ›Collectors only install the exact binary version and hash this server names, which is what stops a compromised release page from pushing code to operators. That naming step had never been used, so released collectors were quietly staying on whatever version t…
Read it ›Provisioning a collector token in Admin used to succeed silently: the token is staged for the operator's one-time reveal on their Collector page, so the Admin table just refreshed and looked like nothing happened. Admin now confirms the token is staged, keeps…
Read it ›The collector fleet was rebuilt overnight around a simple rule: operators cannot be assumed safe. Collectors are now pure API clients - a bearer token we issue, three HTTPS routes, no AWS credentials of any kind - and the server computes what to fetch, stamps…
Read it ›An independent review of the whole system produced a punch list, now shipped: war-day events and the current-war view survive season rollover (the period index resets each season - the anchors now know that), staying signed in actually works (sessions slide w…
Read it ›Feedback items are now real pages - open one from your feedback list (or the admin queue) to see the whole conversation at a linkable URL, and maintainer responses are now composed right there. Collections opened up the same way: open a collection to edit it …
Read it ›The Architecture page grew real depth: collectors in detail (card identities, credits, self-update, the capture audit), the push lane and Clan Pulse, how the feedback loop actually closes, and the no-NAT outbound relay design. It also now maps the public GitH…
Read it ›Elixir MCP now has a mailing list for occasional product updates, run on Buttondown the same way Elixir Drop's is: signing in enrolls you, every issue carries an unsubscribe link, unsubscribing sticks forever, and the email is pixel-free. Details on the priva…
Read it ›The site now counts visits with Tinylytics - anonymous page hits, visitor countries, and a few product events (a tool call happened, feedback was filed). No cookies, no cross-site tracking, nothing attached to your account, and the sign-in page loads no analy…
Read it ›Every clan you've added now sends one daily clan_pulse digest to your event feed: 24-hour battle activity, top players, members quiet five or more recorded days, war-day deck counts, and roster changes - facts only, the judgment stays yours. A war_day_open ev…
Read it ›Two honesty upgrades. Clans you've added now feed your notification pipe with the things that actually happen: members joining, leaving, and changing role (before this, the only clan event was the weekly war boundary - technically working, practically silent)…
Read it ›The Explore lookup now resolves names and your private nicknames, not just tags - type 'tyler' and land on the player you call Tyler (nicknames rank first), type a game name and get the record or a short pick-list when several match. Same honest miss when the…
Read it ›Data > Status is the live operational dashboard: pipeline health at a glance, every queue's depth and age (DLQ above zero shows red - that's an incident), each collector's heartbeat and hourly fetch rate, and the last hour of capture in 5-minute buckets with …
Read it ›To you, Raquaza is Tyler. Now Elixir knows that too - privately. Set a nickname on any player's record page (or have your agent call elixir_nickname), and it's yours alone: search finds 'tyler' and ranks it first, summaries and rosters show the nickname besid…
Read it ›The arena-climb was confusing flavor, so it's gone. What running a collector actually earns is now front and center: every 10 fetches adds +1 to your daily tool-call quota (capped at 4x your base), plus bonus recording slots while it runs. Each collector keep…
Read it ›The whole site moved to the new design language - Clash display type for the brand shell, gold reserved for what's YOURS (the star on your tag, your clan), purple as the working accent, denser tables with honest footnotes as first-class components. The headli…
Read it ›Provisioning a collector no longer means credentials over a side channel. Once the maintainer provisions your gateway, Account > Collector offers your complete configuration as a ONE-TIME download - it disappears from the server the moment you fetch it. You a…
Read it ›Web/agent parity closes out. The player explorer gains a Pilot Score tab - your score with its approximate standard-error field (not a calibrated confidence interval), the monthly trend, and the full Level Curve. Explore > Meta shows the observed deck and car…
Read it ›players_profile now answers the player as a game entity, not just a name and a clan tag. clan gains badge_id and the player's role in it; a new attributes block carries arena_id, best_trophies, favorite_card_id, years_played and account_age_days; and a badges…
Read it ›collections_edit: curate a collection you own from an agent or a service token. add and remove adjust membership, set replaces it wholesale - the shape an external system syncing a roster wants. Everything in a collection is recorded for as long as it stays t…
Read it ›Collections now cause recording. A player or clan named in a collection is collected for as long as it stays there - curating a list used to record nothing, so you had to add each subject to an account as well. Each collection carries how deeply to record wha…
Read it ›elixir_events with a topics filter no longer acknowledges the events it hid. The seen-cursor is one number per account, so a topic-specific poll used to mark everything below the last returned event as seen - a war-only routine could silently clear an unread …
Read it ›Correctness fixes in adding and removing players, both of which agents hit directly. elixir_add_player with make_primary now SWITCHES the primary instead of failing on a uniqueness violation, and works on a player you have already added. elixir_remove_player,…
Read it ›Hardening from five agent-persona test passes. Unknown enum values (mode, outcome, sort, metric, granularity) and impossible card ids now REFUSE with valid-value hints instead of returning silent empty results; players_timeline garbage dates get a structured …
Read it ›Clan Pulse: a daily clan_pulse feed event per added clan (24h battle activity, top players, members quiet >=5 recorded days, war-day deck counts, roster changes - facts, never judgments) plus a real-time war_day_open event when a new war day is first observed…
Read it ›Clan notifications actually notify: member_joined, member_left, and member_role_changed now flow to the event feed for clans you've added (the only clan topic before was the WEEKLY war boundary - working as designed, but the design covered almost nothing). Al…
Read it ›Private player nicknames: elixir_nickname stores YOUR name for a player (account-scoped, never visible to anyone else). players_search matches nicknames and ranks them first - 'tyler' resolves to the player you call Tyler; players_summary and clans_roster car…
Read it ›battles_query gains two addressing modes for the record browser (and agents): battle_id alone fetches ONE battle with both perspectives; deck_hash alone sweeps the corpus for that exact deck and returns deck_stats (battles, W-L, distinct pilots, span - delibe…
Read it ›Account gained two pages. Activity shows three views of your own account: every MCP request your agents made (tool, timing, errors - the debugging view), your account's event history, and your notification pipe (with unread rows past your agents' cursor bolde…
Read it ›Elixir MCP now shows its work in public. The new Data area carries the corpus dashboard - battles recorded per day, players observed, collector activity, full history - and the rendered contract changelog. The front page touts the live totals, and the public …
Read it ›Three new intelligence tools, grounded entirely in recorded battles. battles_meta_decks and battles_meta_cards show what's actually being played and winning - across the whole corpus, one clan, one player, or a collection like the pros - with shrunk win rates…
Read it ›The model got simpler, at Jamie's direction: adding a player or clan IS recording it - no separate watch toggle, no follow bookmarks, no approval queue. Your tier's slots are the only gate, and the one per-subject setting left is the notification bell: whethe…
Read it ›Clan watching is now self-serve: add any clan to your account for free, and turn watching on or off yourself - activity or comprehensive - within your tier's slots. No more waiting for approval; the role ladder is the gate. The ladder itself gained its top ru…
Read it ›Three ships in one. ROLES: five tiers (member, leader, family, partner, admin) now set recording slots and daily budgets - never what you can read; the full ladder is public under Docs > Roles, and upgrades are self-serve from Account > Overview. SELF-SERVE: …
Read it ›The site grew faster than its nav, so the nav got rebuilt: four areas - Explore (player, clan & war, collections, collectors), Account (overview, agents, usage, feedback), Docs, and Admin - each with its own page row underneath. Collections are now browsable …
Read it ›Round two, built from feedback about the feedback system itself: an MCP-visible changelog (elixir_changelog - what shipped since any contract version), machine-readable ship links on responses, a meta hint when a maintainer reply awaits you, and server instru…
Read it ›Two big ones. All recorded game data is now readable by every account - the same access the game's own public API gives anyone (we add history, not exposure); account data stays private. And Collections arrive: curated groupings of players or clans - starting…
Read it ›The first feedback ever filed through the MCP write tool asked for three things - and shipped the same night: clans_pilot_scores ranks a whole clan's Pilot Scores in one call (was 18), players_search resolves clanmate names to tags, and battles_levels takes i…
Read it ›Filed feedback now comes full circle: the maintainer can reply, and you (or your agent, via the new elixir_my_feedback tool) see each item's status and response. Nothing gets actioned invisibly - triggered by the first real agent-filed feedback, which deserve…
Read it ›KHAOS drafts, Crazy Arena, Showdown - the rotating event modes were recorded all along but hard to discover. battles_performance group_by 'mode' now lists every named mode you've played with its record, and battles_query takes a game_mode filter ('chaos' find…
Read it ›Grounding affordances (agent feedback #8 - an inference-error case study, filed at the user's request): war_current now carries an explicit period block (period_index, war_day, started_observed_at, period_end_nominal, week_end_nominal) so temporal claims cite…
Read it ›Observed meta + segment trends (META-INTEL 2-3, grounded in recorded data only). battles_meta_decks and battles_meta_cards aggregate any segment - the corpus, a clan, a player, or a collection like 'pros' - with EB-shrunk win rates, distinct-pilot counts, and…
Read it ›Metadata truth pass for the added-means-recorded structure: every description now matches behavior (no stale watch/claim/entitled-scope language); server instructions teach the add + notify + events_pending flow. players_search now searches the WHOLE recorded…
Read it ›ADDED = RECORDED. The watch/follow distinction is gone: adding a player or clan starts collection within your tier's slots, and the only per-subject setting is notify (does it feed your event pipe). elixir_add_player and elixir_add_clan replace the watch tool…
Read it ›One entitlements system and self-serve clan watching. The ladder gains its top rung: owner (super admin, exactly one) above admin; admins see the console with day-to-day powers. elixir_watch_clan now STARTS recording directly within your tier's clan slots (ac…
Read it ›The entitlement ladder and the push lane. Roles (member/leader/family/partner/admin) set collection and call-volume quotas - roles NEVER gate visibility, universal reads stands; see the public Roles doc. elixir_events: your per-account event feed (event types…
Read it ›Leaderboards via live_fetch (agent feedback #6, filed unprompted): /locations/{id}/rankings/players and /locations/{id}/pathoflegend/players join the allowlist - top-100, and every ranked tag accretes into the corpus for immediate use with the player tools.
Read it ›Feedback interface round two (agent feedback #4/#5): this changelog tool; structured ship links (shipped_in, related_tools) on feedback responses; feedback_responses_pending hint in response meta when a maintainer reply awaits you; status/since filters on eli…
Read it ›UNIVERSAL READS: all recorded game data readable by every account (the public-API posture); account data stays private. Collections: curated player/clan groupings (first: 'pros', 11 professional players).
Read it ›First agent feedback actioned: whole-clan Pilot Scores in one call; name-to-tag search; include_curve flag.
Read it ›Feedback loop closed: maintainer responses with status visible to the requester. Feedback is never actioned invisibly.
Read it ›Event modes findable: battles_performance group_by 'mode' lists every named mode played (Chaos/KHAOS drafts, Crazy Arena...); battles_query gains a game_mode substring filter.
Read it ›Two new intelligence tools, grounded entirely in recorded battles. battles_levels measures what card-level advantage is actually worth (a 66,000-observation curve) and scores any player's Pilot Score - performance relative to an in-sample level-gap baseline, …
Read it ›New clans_standings tool: every member's recorded win rate over a window, ranked against the clan median - the 'am I above average?' answer, built for agents (including Elixir, the POAP KINGS clan agent, whose stats answers are moving onto Elixir MCP).
Read it ›Clan recording now comes in two scopes: activity (the clan itself - roster, war, standings) and comprehensive (all of that plus every member's battles and profile, following the roster as membership changes). Existing recorded clans stay comprehensive.
Read it ›Tool names now lead with their domain - players_summary, battles_query, war_current, elixir_feedback - so every client lists them grouped: Players, Battles, Clans, War, Cards, Live, and Elixir MCP itself. The service domain also grew four tools: watch a playe…
Read it ›Three fresh agent testers, thirteen fixes: war attendance now counts recorded battles (polls alone undercounted), opponent decks and names appear in battle detail, weekly trends align to real ISO weeks and show trophy-eligible counts, summaries add best-deck …
Read it ›Running a collector now means cloning one small repo (elixir-mcp-collector on GitHub) instead of the whole server codebase. Existing collectors migrated in place and keep self-updating.
Read it ›Every payload the collectors fetch is now archived durably to S3 the moment it is admitted — the full raw history behind your record is kept forever and stays queryable, while the database keeps only the hot serving set.
Read it ›Honesty batch from agent playtesting: unknown war-day attendance is now null instead of a false zero, war participants say whether they are still in the clan, the seasons filter applies to member weeks, and comparison windows state plainly that they cover rec…
Read it ›Long-lived API tokens for trusted services — the first step toward elixir-bot consuming Elixir MCP instead of running its own recorder.
Read it ›Running a collector now raises your daily tool-call quota (every 10 fetches = +1 call, up to 4x), and every gateway gets a Clash Royale card as its avatar on the ladder.
Read it ›A new Docs section: what Elixir MCP is, how privacy and terms work, and the architecture — maintained alongside the code, so it is always current.
Read it ›The new Explore page renders exactly what your agent sees: summary, battles, weekly trend, decks, collection, war, and coverage — every view is a real MCP tool call.
Read it ›Send feedback from the dashboard or have your agent call send_feedback — either way it lands on the maintainer's desk attributed to you.
Read it ›get_performance can return a weekly win-rate series, get_player_summary answers "how am I doing?" in one call, and deck performance gained sorting and share-of-battles.
Read it ›The elixir-bot archive was replayed into the recorder: battles back to mid-May, war seasons 133-135, and daily snapshots from July.
Read it ›Level Curve + Pilot Score (wins your card levels can't explain, with monthly trend and experience cohorts) and the war Scouting Report.
Read it ›Clan standings: ranked member win rates with clan median.
Read it ›Domain-first tool names (players_*, battles_*, war_*, elixir_*...) and four service tools.
Read it ›Tool taxonomy: every tool classified and annotated (grouped titles, read-only hints).
Read it ›Round-3 playtest batch: war attendance counts recorded battles, opponent decks at full verbosity, ISO week_of, draws + best_deck on summaries, stricter validation (forged cursors, empty tags, bounds).
Read it ›War-tool honesty batch: null-never-false-zero attendance, in_clan flags, seasons scoping, payload-mirror notes.
Read it ›Recording, the MCP server, clan war data, and the gateway fleet — live from day one.
Read it ›