Contract 1.0.0
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 removed was the smell), with the same actions and no make_primary (relationship: 'primary' is the one spelling). collections_get and collections_edit take collection, the same name every segment tool uses. GROUPS: the Elixir MCP bucket is Account, Feed, Help and Service; elixir_coverage sits with Players. Titles carry the group, names are unchanged. WINDOWS: every windowed tool accepts from/to; days, weeks and seasons stay as sugar; every windowed response echoes applied.window with its bounds and whether they were given or defaulted, and battles_decks no longer returns all-time with no bounds echoed. applied is the one echo block (limit, sort, mode, min_battles, segment, verbosity) replacing filters_applied, window_from/window_to, window_days and limit_applied. SEGMENTS: battles_meta_decks, battles_meta_cards, battles_trends, cards_synergy, badges_rarity and badges_holders take a nested segment: { player_tag | clan_tag | collection }; omitted means the whole recorded corpus, which the flat arguments never said. SIZE: verbosity: full | compact is the one size control - on battles_query as before, and now on war_current (compact = standings, period, counts and the nudge lists as name + tag), clans_roster (replacing summary: true), battles_levels (replacing include_curve), players_collection and cards_catalog; cards_catalog also takes ids and query. LIVE: clans_roster and war_current take live: true for any clan, recorded or not, the way players_profile does; battles_query takes live: true to poll a player's battle log once before answering; live_fetch refuses /players/{tag}/battlelog before spending the lane, because a raw log cannot fit the delivery cap. TIMEZONE: every windowed tool takes an optional IANA timezone for that call. PROSE: every response's caveats are notes: string[], one sentence each, with docs: 'page#section' pointing at the page that carries the formulas; methodology objects stay; the fifteen *_note keys are gone and the formula paragraphs live in the documentation, which the door serves. EVENTS: rows carry created_at, as every other timestamp does. ERRORS: two codes join the closed set - no_subject (nothing to answer about: no default player, an unmapped on_behalf_of, a clanless agent) and result_too_large (the request was fine; narrow the arguments) - so an agent stops having to read the message to know which. ENVELOPE: events_pending and feedback_responses_pending ride EVERY response, including elixir_events and game_clock. ANNOTATIONS: destructiveHint is true on the three tools with a removing action; elixir_events is read-only; the four tools with a live flag are open-world. SCOPES: a client that asks for no scope in particular is offered every capability, ticked, on the consent page. PROTOCOL: resources (the documentation, examples, changelog, updates and the card catalog as elixir:// URIs) and prompts (the eleven examples) are declared beside tools; every tool result also carries structuredContent, and the ten most-called tools declare an outputSchema.
elixir_add_player -> elixir_track_player and elixir_add_clan -> elixir_track_clan (make_primary removed; use relationship: 'primary'). collections_get/collections_edit: slug -> collection. Segment tools: player_tag/clan_tag/collection move under a nested segment object. clans_roster: summary -> verbosity: 'compact'. battles_levels: include_curve: false -> verbosity: 'compact'. elixir_events rows: at -> created_at. Response keys: filters_applied, window_from, window_to, window_days, limit_applied -> applied; note, denominators_note, as_observed_note, member_note, deck_note, weekly_note, mode_note, scale_note, forms_note, range_note, card_legend -> notes[] (+ docs). Error code for a missing default subject: not_found -> no_subject; for an oversized result: bad_request -> result_too_large.