Server definition
- Hash
- sha256:b714a9d79f50d761adc939351b1bea01c518c1a2c0829508ab80054f8967034f
- What it is
- What a remote MCP server returned when asked what it offers: 11 tools
The blob, as servednamed by its sha256
{
"instructions": "Flaim reads fantasy league data. refresh_leagues is its only bounded write: it updates Flaim's connected-league records and discovery metadata, never ESPN, Yahoo, or Sleeper state. Flaim cannot change lineups or rosters, add or drop players, submit waiver claims or trades, or modify league settings, even with permission. Answer capability, permission, or generic setup how-to questions such as \"Can Flaim change my lineup?\" directly and tool-free; do not call get_user_session or another tool.\n\nUse Flaim tools only for questions that need the user's connected fantasy league data or an explicit league refresh. Do not call Flaim tools for generic sports news, coding, scraping, weather, travel, betting, or unrelated requests.\n\nAnswer rules:\n- Setup: users connect and manage leagues at https://flaim.app/leagues. ESPN connects through the Flaim Chrome extension (signed in to ESPN in the same Chrome profile), Yahoo through Yahoo sign-in on that page, and Sleeper by username, with no password. Never ask the user for a password, cookie, or token.\n- Advice on a current decision in the user's league (start/sit, pickups, trades, keepers, matchups): use league data from Flaim tools first, then current web reporting on player status, role, and recent stats, then expert consensus; your own judgment comes last. Never state a player's current team, role, or health from memory. If web research is unavailable, say the advice rests on league data alone.\n- Refer to leagues, teams, and players by name, including when asking which league the user means. Pass internal IDs to tools, but never show them to the user.\n\nTool paths:\n1. Capability, permission, or generic setup how-to question: answer tool-free using the boundary and setup facts above.\n2. User-specific connection, league, or account status: call get_user_session only.\n3. Explicit refresh request: call refresh_leagues, then call get_user_session after success to show the updated leagues. Do not use refresh_leagues for provider changes.\n4. Selected-league analysis: call get_user_session only when no usable successful session result is available in this chat. Reuse its league IDs, teams, seasons, and defaults on ordinary follow-ups, including switching to another league already in allLeagues; do not repeat get_user_session merely because a new user message arrived. With session context established, call get_league_info once per league the first time this chat works with that league, before the requested league-specific data tool, then reuse it for later questions about that league. After a later successful refresh, call get_user_session again to reload the league list. Also reload when the user confirms account, connection, league-list, or default changes, when the earlier session call failed, or when its result is no longer visible in the conversation. A new chat needs its own session lookup. Reuse session context, not stale roster, score, or player data; fetch current data when the question needs it. These reuse rules also apply to session prerequisites in other tool descriptions.\n\nScope rules:\n- Use get_draft for completed draft results and draft-pick ownership. Never derive an exact round slot from get_league_info, a roster ID, or snake order alone. Label provider_order_derived placements as projected. If placement is unavailable or no_provider_order, do not invent an exact round slot. changed_picks_only is not a complete pick inventory.\n- In get_free_agents, \"available\" means available in the selected fantasy league. Pass a requested count exactly from 1 through 100; for more than 100, state the limit and ask the user to narrow the request or accept 100. Prefer the normalized fields when present: capabilities and ownershipScope state what the provider reports (rates are platform-wide, never league-scoped), ordering names the sort, and per-entry acquisitionState, waiverClearsAt, id, and team supersede the legacy provider fields, which stay visible. ESPN percentOwned/percentStarted are the percentages of all ESPN leagues where the player is rostered/started, not a share of rostered teams; Yahoo percentOwned is Yahoo-wide. An ESPN-wide started rate is never conditional on the player being rostered. Label every reported percentage as an ESPN-wide roster/start rate or Yahoo-wide market rate. Translate ownership scope silently into that provider-wide wording; never print the ownershipScope key, platform_global enum, or get_free_agents tool name. If a rate is missing, write \"[Provider] market ownership rate: not provided\"; do not print a missing response field name or null value, call get_players, or offer a lookup. Only ESPN reports acquisition state here (normalized acquisitionState free_agent/waivers/null plus waiverClearsAt); call Yahoo/Sleeper rows \"available players,\" never specifically free agents or waivers. Translate acquisition state into plain language (\"a free agent\", \"on waivers\") silently; never print raw codes — neither provider codes such as FREEAGENT or WAIVERS nor canonical values like free_agent verbatim. Use get_roster only when the current request separately asks who owns a player; never offer it after an available-player result. Do not include injuryStatus or any injury detail unless the user asks for it; when asked, verify current web evidence and translate provider codes into plain language. Hard stop: after satisfying a returned-list or field-explanation request, end the answer immediately after the requested facts. Remove every closing question or offer to do more work, including roster checks, lineup-fit checks, comparisons, rankings, recommendations, role or health analysis, trends, or outlooks; never append \"if you want\", \"tell me which player\", or a similar invitation unless the user's current request explicitly asks for that additional work.\n- In get_players, Sleeper always evaluates league ownership against the selected league's current rosters, except during an active draft, when it returns an error instead of an answer; if the league, rosters, or users can't be loaded for another reason, it instead returns a normal result with every league_* field null plus a SLEEPER_OWNERSHIP_UNAVAILABLE warning. It adds Sleeper-only league_team_id (the roster id, or null) alongside the cross-platform league_status/league_team_name/league_owner_name; trust a non-null league_status directly — null team/owner fields alongside FREE_AGENT are expected. A null league_status means ownership was not resolved, not that the player is free; only then fall back to get_league_info plus get_roster. ESPN and Yahoo populate league ownership only when credentials and league context allow. Never infer league ownership from market_percent_owned, percentOwned, or ownership_scope on any platform.\n- Keeper cost is a league-specific house rule that Flaim never computes. Only ESPN reports a keeper value (get_roster keeperValue and keeperValueFuture, which ESPN keeps with a player through a trade); Yahoo and Sleeper report none. Whether a reported value is the league's actual keeper cost is the league's call, so when the analysis depends on it and no provider value settles it, ask the user for their league's convention.\n- For a past roster, pass exactly one selector: week for football on every platform and Sleeper basketball, or as_of_date (YYYY-MM-DD) for ESPN/Yahoo daily sports. For a matchup-week roster in a daily sport, ask for a date instead of guessing. Omit both selectors for the current roster.\n- Handle errors by type. Correct invalid-request parameters before trying again. For a Flaim authorization error, follow the MCP client's connect or reauthorization flow. For a missing or invalid provider connection, provider credentials, or league record, direct the user to https://flaim.app/leagues and do not offer another attempt until the user confirms the problem is corrected. Never ask the user to supply a numeric league ID or a season value; league IDs and seasons come from session context. For a network timeout or explicitly temporary provider/Flaim service failure, one retry with the same inputs is reasonable unless retry_after says to wait. If it fails again, stop and suggest trying later; do not loop. season_year is always the start year of the season.",
"tools": [
{
"description": "Use established session context (call get_user_session only if needed), and use this only when the user is clearly asking about a non-current season or an inactive league. This is the historical branch: it returns past seasons and historical leagues outside the current season view. Use for last season, older seasons, inactive leagues, or historical performance. All-time answers are scoped to seasons present in the response; an absent season may be unavailable even if provider history extends further. Sleeper coverage floor: Flaim follows the previous_league_id chain of each Sleeper league back at most 15 seasons including the current one and saves every season Sleeper still serves on it; Sleeper has run since 2017, so today that is the entire history of any Sleeper league. Sleeper seasons are discovered on connect and on refresh_leagues, so a league last synced under the earlier five-season limit needs one refresh before its older seasons appear here, and a season still missing after a refresh means Sleeper did not serve it on that walk, not that Flaim capped the history. thresholdYear is display bucketing, not a retrieval floor. Read-only.",
"inputSchema": {
"$schema": "http://json-schema.org/draft-07/schema#",
"additionalProperties": false,
"properties": {
"platform": {
"description": "Optional: filter to specific platform",
"enum": [
"espn",
"yahoo",
"sleeper"
],
"type": "string"
}
},
"type": "object"
},
"name": "get_ancient_history",
"outputSchema": {
"$schema": "http://json-schema.org/draft-07/schema#",
"additionalProperties": true,
"properties": {
"oldLeagues": {
"items": {
"additionalProperties": true,
"properties": {
"leagueId": {
"type": "string"
},
"leagueName": {
"type": [
"string",
"null"
]
},
"platform": {
"type": "string"
},
"recurringLeagueId": {
"type": "string"
},
"seasonYear": {
"type": [
"number",
"null"
]
},
"sport": {
"type": [
"string",
"null"
]
},
"teamId": {
"type": "string"
},
"teamName": {
"type": [
"string",
"null"
]
}
},
"required": [
"leagueId",
"platform"
],
"type": "object"
},
"type": "array"
},
"oldSeasonsFromActiveLeagues": {
"additionalProperties": {
"items": {
"$ref": "#/properties/oldLeagues/items"
},
"type": "array"
},
"type": "object"
},
"success": {
"type": "boolean"
},
"thresholdYear": {
"type": "number"
},
"totalOldLeagues": {
"type": "number"
},
"totalOldSeasons": {
"type": "number"
},
"warnings": {
"items": {
"type": "string"
},
"type": "array"
}
},
"required": [
"success",
"thresholdYear",
"oldLeagues",
"oldSeasonsFromActiveLeagues",
"totalOldLeagues",
"totalOldSeasons"
],
"type": "object"
}
},
{
"description": "Use this when the user asks about completed draft results, exact draft-board positions, or current draft-pick ownership for a selected league. Returns a common draft summary and ordered picks with explicit confirmed, projected, or unavailable placement provenance. A historical selecting team is not a current pick owner; current ownership comes only from ownership.picks[].currentOwnerTeamId. ESPN and Yahoo expose confirmed draft results but no current pick-ownership ledger, so their responses carry no ownership block at all; only Sleeper can report current or future pick ownership, and an exact board placement only when Sleeper supplies enough draft-order evidence. An ownership.scope of changed_picks_only lists only picks known to have changed hands and is not a complete pick inventory. selectionInRound is the round slot rendered in a value such as 12.15, while draftColumn is the stable draft-board column; they are not interchangeable. For a completed Sleeper draft, an omitted ownership block means no draft picks changed hands. Use round to return one draft round. Use team_id to return completed selections made by that historical team and ownership rows currently owned by that team. Omit draft_id to use the league's associated draft; draft_id is Sleeper-only and should be passed only when Flaim previously returned a provider draft ID. Omit season_year for the current sport season, or pass the season_year returned by get_user_session for a specific league or past draft. Use established session context (call get_user_session only if needed), then get_league_info for the specified league if this chat has not already loaded it. For multi-league comparisons, call once per league. Read-only. Current date is 2026-10-04.",
"inputSchema": {
"$schema": "http://json-schema.org/draft-07/schema#",
"additionalProperties": false,
"properties": {
"draft_id": {
"description": "Optional Sleeper draft ID. Omit to retrieve the league's associated draft; pass only an ID previously returned by Flaim.",
"minLength": 1,
"type": "string"
},
"league_id": {
"description": "League ID (get from get_user_session)",
"type": "string"
},
"platform": {
"description": "Fantasy platform (e.g., \"espn\", \"yahoo\", \"sleeper\")",
"enum": [
"espn",
"yahoo",
"sleeper"
],
"type": "string"
},
"round": {
"description": "Optional positive draft round. Returns only completed selections and ownership rows from this round.",
"exclusiveMinimum": 0,
"type": "integer"
},
"season_year": {
"description": "Season start year. Omit for the current sport season; use the season_year returned by get_user_session for this league or a past draft. Basketball and hockey use the start year of a cross-year season (2024 = the 2024-25 season); football and baseball use the single season year (2025 = the 2025 season).",
"type": "integer"
},
"sport": {
"description": "Sport type (e.g., \"football\", \"baseball\")",
"enum": [
"football",
"baseball",
"basketball",
"hockey"
],
"type": "string"
},
"team_id": {
"description": "Optional provider team ID. Filters completed selections by historical selecting team and ownership rows by current owner.",
"minLength": 1,
"type": "string"
}
},
"required": [
"platform",
"sport",
"league_id"
],
"type": "object"
},
"name": "get_draft",
"outputSchema": {
"$schema": "http://json-schema.org/draft-07/schema#",
"additionalProperties": true,
"properties": {
"data": {
"additionalProperties": true,
"description": "Platform envelope. Field availability varies by platform (ESPN, Yahoo, Sleeper); absent fields are not provided by that platform.",
"properties": {
"draft": {
"additionalProperties": true,
"properties": {
"id": {
"type": [
"string",
"number"
]
},
"playerPool": {
"additionalProperties": true,
"properties": {},
"type": "object"
},
"rounds": {
"exclusiveMinimum": 0,
"type": "integer"
},
"status": {
"enum": [
"pre_draft",
"in_progress",
"complete",
"unavailable",
"unknown"
],
"type": "string"
},
"teams": {
"exclusiveMinimum": 0,
"type": "integer"
},
"type": {
"enum": [
"snake",
"linear",
"auction",
"offline",
"unknown"
],
"type": "string"
}
},
"required": [
"type",
"status"
],
"type": "object"
},
"leagueId": {
"type": [
"string",
"number"
]
},
"ownership": {
"additionalProperties": true,
"properties": {
"picks": {
"items": {
"additionalProperties": true,
"properties": {
"currentOwnerTeamId": {
"type": [
"string",
"number"
]
},
"draftColumn": {
"exclusiveMinimum": 0,
"type": "integer"
},
"originalTeamId": {
"type": [
"string",
"number"
]
},
"overallPick": {
"exclusiveMinimum": 0,
"type": "integer"
},
"placement": {
"$ref": "#/properties/data/properties/picks/items/properties/placement"
},
"round": {
"exclusiveMinimum": 0,
"type": "integer"
},
"seasonYear": {
"type": "number"
},
"selectionInRound": {
"exclusiveMinimum": 0,
"type": "integer"
}
},
"required": [
"seasonYear",
"round",
"originalTeamId",
"currentOwnerTeamId",
"placement"
],
"type": "object"
},
"type": "array"
},
"scope": {
"enum": [
"complete",
"changed_picks_only",
"unavailable"
],
"type": "string"
}
},
"required": [
"scope",
"picks"
],
"type": "object"
},
"picks": {
"items": {
"additionalProperties": true,
"properties": {
"cost": {
"additionalProperties": true,
"properties": {
"amount": {
"minimum": 0,
"type": "number"
},
"unit": {
"type": "string"
}
},
"required": [
"amount",
"unit"
],
"type": "object"
},
"draftColumn": {
"exclusiveMinimum": 0,
"type": "integer"
},
"isKeeper": {
"type": "boolean"
},
"originalTeamId": {
"type": [
"string",
"number"
]
},
"overallPick": {
"exclusiveMinimum": 0,
"type": "integer"
},
"placement": {
"additionalProperties": true,
"properties": {
"source": {
"enum": [
"provider_pick",
"provider_order_derived",
"no_provider_order"
],
"type": "string"
},
"status": {
"enum": [
"confirmed",
"projected",
"unavailable"
],
"type": "string"
}
},
"required": [
"status",
"source"
],
"type": "object"
},
"playerId": {
"type": [
"string",
"number"
]
},
"playerName": {
"type": "string"
},
"playerPosition": {
"type": "string"
},
"playerProTeam": {
"type": [
"string",
"null"
]
},
"round": {
"exclusiveMinimum": 0,
"type": "integer"
},
"selectionInRound": {
"exclusiveMinimum": 0,
"type": "integer"
},
"selectionTeamId": {
"type": [
"string",
"number"
]
}
},
"required": [
"round",
"placement"
],
"type": "object"
},
"type": "array"
},
"platform": {
"type": "string"
},
"seasonYear": {
"type": "number"
},
"sport": {
"type": "string"
},
"teamOwners": {
"additionalProperties": {
"type": "string"
},
"description": "Owner names keyed by provider team ID",
"type": "object"
},
"teams": {
"additionalProperties": {
"type": "string"
},
"description": "Team names keyed by provider team ID",
"type": "object"
}
},
"required": [
"platform",
"sport",
"leagueId",
"seasonYear",
"draft",
"picks"
],
"type": "object"
},
"success": {
"type": "boolean"
}
},
"required": [
"success",
"data"
],
"type": "object"
}
},
{
"description": "Get players available to acquire in the specified fantasy league, optionally filtered by position. This is fantasy-league availability, not professional-contract status. Pass a requested count exactly from 1 through 100; for more than 100, state the limit and ask the user to narrow the request or accept 100. Prefer the canonical fields: every response carries leagueId, seasonYear, position, count, ordering, capabilities, and ownershipScope; entries carry team (real-life club, null when none) and id (platform player id as a string, when supplied) on every platform, and ESPN entries add acquisitionState (\"free_agent\", \"waivers\", or null when the platform cannot determine the subtype) plus waiverClearsAt (ISO time); legacy platform fields remain alongside for compatibility and should not be re-explained. ownershipScope \"platform_global\" means percentOwned/percentStarted cover all leagues on that platform — never ownership within the selected league. An ESPN-wide started rate is never conditional on the player being rostered. Label every reported percentage as an ESPN-wide roster/start rate or Yahoo-wide market rate. Translate ownership scope silently into that provider-wide wording; never print the ownershipScope key, platform_global enum, or get_free_agents tool name. If capabilities marks rates unavailable, write \"[Provider] market ownership rate: not provided\"; do not print a missing response field name or null value, call get_players, or offer a lookup. When acquisitionState is null or not present, call rows \"available players,\" never specifically free agents or waivers, and do not promise an immediate add. A returned player is already confirmed available in that league. Yahoo entries may add isKeeper as status, cost, and kept when Yahoo sends it; Yahoo has only been observed returning cost as false, so no numeric keeper cost is available from Yahoo. Use get_roster only when the current request separately asks who owns a player; never offer it after an available-player result. Do not include injuryStatus or any injury detail unless the user asks for it; when asked, verify current web evidence and translate provider codes into plain language. State acquisition status in plain language from acquisitionState (\"a free agent\", \"on waivers\"); never print raw codes — neither provider codes such as FREEAGENT or WAIVERS nor canonical values like free_agent verbatim. Use current web evidence before adding analysis or pickup recommendations. Use established session context (call get_user_session only if needed), then get_league_info for the selected league if this chat has not already loaded it; fan out once per league for comparisons. Requires authentication on ESPN/Yahoo; Sleeper uses the public API. Read-only. Current date is 2026-10-04. Hard stop: after satisfying a returned-list or field-explanation request, end the answer immediately after the requested facts. Remove every closing question or offer to do more work, including roster checks, lineup-fit checks, comparisons, rankings, recommendations, role or health analysis, trends, or outlooks; never append \"if you want\", \"tell me which player\", or a similar invitation unless the user's current request explicitly asks for that additional work.",
"inputSchema": {
"$schema": "http://json-schema.org/draft-07/schema#",
"additionalProperties": false,
"properties": {
"count": {
"description": "Maximum number of players to return (max: 100). Pass the user-requested number exactly; omit only when no number was requested (default: 25).",
"type": "number"
},
"league_id": {
"description": "League ID (get from get_user_session)",
"type": "string"
},
"platform": {
"description": "Fantasy platform — \"espn\", \"yahoo\", or \"sleeper\"",
"enum": [
"espn",
"yahoo",
"sleeper"
],
"type": "string"
},
"position": {
"description": "Filter by position (e.g., \"QB\", \"RB\", \"SP\", \"C\"). Default: ALL",
"type": "string"
},
"season_year": {
"description": "Season start year — use the season_year returned by get_user_session for this league; only pass an older year when the user explicitly asks about a past season. Basketball and hockey use the start year of a cross-year season (2024 = the 2024-25 season); football and baseball use the single season year (2025 = the 2025 season).",
"type": "number"
},
"sport": {
"description": "Sport type (e.g., \"football\", \"baseball\")",
"enum": [
"football",
"baseball",
"basketball",
"hockey"
],
"type": "string"
}
},
"required": [
"platform",
"sport",
"league_id",
"season_year"
],
"type": "object"
},
"name": "get_free_agents",
"outputSchema": {
"$schema": "http://json-schema.org/draft-07/schema#",
"additionalProperties": true,
"properties": {
"data": {
"additionalProperties": true,
"description": "Platform envelope. Field availability varies by platform (ESPN, Yahoo, Sleeper); absent fields are not provided by that platform.",
"properties": {
"capabilities": {
"additionalProperties": true,
"description": "Platform capability flags; per-entry canonical fields are omitted where false",
"properties": {
"acquisitionState": {
"type": "boolean"
},
"rosteredRate": {
"type": "boolean"
},
"startedRate": {
"type": "boolean"
}
},
"required": [
"acquisitionState",
"rosteredRate",
"startedRate"
],
"type": "object"
},
"count": {
"type": "number"
},
"freeAgents": {
"description": "ESPN/Yahoo available-player entries",
"items": {
"additionalProperties": true,
"properties": {
"acquisitionState": {
"anyOf": [
{
"enum": [
"free_agent",
"waivers"
],
"type": "string"
},
{
"type": "null"
}
],
"description": "Canonical acquisition state, present only where capabilities.acquisitionState is true (ESPN): \"free_agent\", \"waivers\", or null when the platform could not determine the subtype; absent entirely on platforms without the capability"
},
"id": {
"description": "Platform-local player id as a string",
"type": "string"
},
"percentOwned": {
"description": "ESPN-wide roster rate or Yahoo-wide market rate; null/absent when the provider reports none",
"type": [
"number",
"null"
]
},
"percentStarted": {
"type": [
"number",
"null"
]
},
"status": {
"description": "Legacy: ESPN acquisition enum (prefer acquisitionState); on Yahoo an unrelated player designation",
"type": [
"string",
"null"
]
},
"team": {
"description": "Real-life club abbreviation, null when the platform lists none",
"type": [
"string",
"null"
]
},
"waiverClearsAt": {
"description": "ISO 8601 waiver clear time (ESPN only, only on rows whose acquisitionState is \"waivers\" with a valid provider timestamp)",
"type": "string"
},
"waiverProcessDate": {
"anyOf": [
{
"type": [
"string",
"number"
]
},
{
"type": "null"
}
],
"description": "Legacy epoch-ms form of waiverClearsAt"
}
},
"type": "object"
},
"type": "array"
},
"leagueId": {
"description": "Canonical league identity for every platform",
"type": "string"
},
"leagueKey": {
"type": "string"
},
"leagueName": {
"type": "string"
},
"league_id": {
"type": "string"
},
"ordering": {
"description": "List ranking: \"platform_rostered_rate_desc\" (ESPN provider-side with draft-rank tiebreak; Yahoo locally, nulls last, name/id tiebreak), \"platform_trending_then_rank\" (Sleeper: players most added across Sleeper in the last 24 hours first, then Sleeper's search rank, name/id tiebreak), or \"alphabetical\" (retained for compatibility; not currently emitted)",
"enum": [
"platform_rostered_rate_desc",
"alphabetical",
"platform_trending_then_rank"
],
"type": "string"
},
"ownershipScope": {
"description": "\"platform_global\": rates cover all leagues on the platform, never the selected league; \"unavailable\": the platform reports no rates",
"enum": [
"platform_global",
"unavailable"
],
"type": "string"
},
"platform": {
"type": "string"
},
"players": {
"description": "Sleeper available-player entries",
"items": {
"$ref": "#/properties/data/properties/freeAgents/items"
},
"type": "array"
},
"position": {
"description": "Echoed position filter, ALL when unfiltered",
"type": "string"
},
"seasonYear": {
"type": "number"
},
"season_year": {
"type": "number"
},
"sport": {
"type": "string"
},
"warning": {
"type": "string"
}
},
"required": [
"leagueId",
"seasonYear",
"position",
"count",
"ordering",
"capabilities",
"ownershipScope"
],
"type": "object"
},
"success": {
"type": "boolean"
}
},
"required": [
"success",
"data"
],
"type": "object"
}
},
{
"description": "With session context established, call this once per league the first time this chat works with that league, before the requested standings, matchup, roster, free-agent, player, transaction, or draft tool, then reuse it for later questions about that league. A usable successful get_user_session result from earlier in this chat satisfies that prerequisite; do not repeat it just to satisfy this ordering. Skip it only when answering from session data alone or branching to get_ancient_history. This provides the baseline league context for analysis: league name, settings, scoring type, roster configuration, and team/owner context, plus schedule or season-window metadata when the platform provides it. Keeper and draft-format fields are additive and platform-dependent; never assume one provider's fields exist on another. ESPN adds keeperSettings (keeperCount, keeperCountFuture, keeperOrderType, keeperDeadlineDate) and isKeeperLeague when ESPN reports a keeper count, plus per-team keeperPlayerIds and futureKeeperPlayerIds as raw ESPN player IDs with no name resolution. Sleeper adds leagueFormat, whose typeRaw is an undocumented Sleeper convention that must not be read on its own as a redraft, keeper, dynasty, or guillotine signal, plus per-team keepers as raw Sleeper player IDs. Yahoo adds draftType, isAuctionDraft, and canTradeDraftPicks when Yahoo's settings fetch succeeds (omitted, with a warning, when it fails), but exposes no keeper-cost rule. Sleeper futureDraftRounds describes the configured round count for future drafts; use get_draft.draft.rounds for the selected draft's actual round count. When fanning out across multiple leagues, call this once per league. The exact team fields vary by platform but all include ownerName. Use values from get_user_session. Read-only. Current date is 2026-10-04.",
"inputSchema": {
"$schema": "http://json-schema.org/draft-07/schema#",
"additionalProperties": false,
"properties": {
"league_id": {
"description": "League ID (get from get_user_session)",
"type": "string"
},
"platform": {
"description": "Fantasy platform (e.g., \"espn\", \"yahoo\", \"sleeper\")",
"enum": [
"espn",
"yahoo",
"sleeper"
],
"type": "string"
},
"season_year": {
"description": "Season start year — use the season_year returned by get_user_session for this league; only pass an older year when the user explicitly asks about a past season. Basketball and hockey use the start year of a cross-year season (2024 = the 2024-25 season); football and baseball use the single season year (2025 = the 2025 season).",
"type": "number"
},
"sport": {
"description": "Sport type (e.g., \"football\", \"baseball\")",
"enum": [
"football",
"baseball",
"basketball",
"hockey"
],
"type": "string"
}
},
"required": [
"platform",
"sport",
"league_id",
"season_year"
],
"type": "object"
},
"name": "get_league_info",
"outputSchema": {
"$schema": "http://json-schema.org/draft-07/schema#",
"additionalProperties": true,
"properties": {
"data": {
"additionalProperties": true,
"description": "Platform envelope. Field availability varies by platform (ESPN, Yahoo, Sleeper); absent fields are not provided by that platform.",
"properties": {
"currentMatchupPeriod": {
"type": "number"
},
"currentWeek": {
"type": [
"number",
"string"
]
},
"draftId": {
"type": [
"string",
"null"
]
},
"draftStatus": {
"type": "string"
},
"endWeek": {
"type": [
"number",
"string"
]
},
"id": {
"type": [
"string",
"number"
]
},
"isFinished": {
"type": "boolean"
},
"leagueId": {
"type": [
"string",
"number"
]
},
"leagueKey": {
"type": "string"
},
"name": {
"type": "string"
},
"numTeams": {
"type": [
"number",
"string"
]
},
"previousLeagueId": {
"type": [
"string",
"null"
]
},
"roster": {
"additionalProperties": true,
"properties": {},
"type": "object"
},
"rosterPositions": {
"items": {},
"type": "array"
},
"schedule": {
"additionalProperties": true,
"properties": {},
"type": "object"
},
"scoringPeriodId": {
"type": "number"
},
"scoringSettings": {
"additionalProperties": true,
"properties": {},
"type": "object"
},
"scoringType": {
"type": "string"
},
"season": {
"type": [
"string",
"number"
]
},
"seasonId": {
"type": "number"
},
"segmentId": {
"type": "number"
},
"size": {
"type": "number"
},
"sport": {
"type": "string"
},
"startWeek": {
"type": [
"number",
"string"
]
},
"status": {},
"teams": {
"description": "Team/owner context; exact team fields vary by platform but all include ownerName",
"items": {
"additionalProperties": true,
"properties": {
"ownerName": {
"type": [
"string",
"null"
]
}
},
"type": "object"
},
"type": "array"
},
"totalRosters": {
"type": "number"
},
"url": {
"type": "string"
}
},
"type": "object"
},
"success": {
"type": "boolean"
}
},
"required": [
"success",
"data"
],
"type": "object"
}
},
{
"description": "Get matchups/scoreboard for a specific week or the current week. Some category leagues (Yahoo, and ESPN baseball) additionally return per-category rows and a categoryScore of wins/losses/ties per side; where they do, the side total is a category count or null rather than fantasy points. A null categoryScore, value, or result means the provider did not report it; never infer one. Sleeper keeps every provider matchup record: scheduleShape reports \"no_h2h_pairings\" with reason \"unknown\" when numeric groups are present but none form an H2H pair, and \"unpublished_or_unavailable\" when there are no usable pairing IDs. When it has both pairs and unpaired records, it reports the unpaired count. A singleton has away:null and is never labelled a bye or used to infer league format. To request compact player scores for one selected matchup, use detail: \"players\" with an explicit week and team_id; this is currently ESPN football only and only for season_year 2018 or later. Any other platform, sport, or earlier season returns MATCHUP_DETAIL_UNSUPPORTED. Use established session context (call get_user_session only if needed), then get_league_info for the specified league if this chat has not already loaded it, so the model already knows the league's team names, owner/team mapping, and league context before interpreting the matchup. For multi-league comparisons, call once per league. Read-only. Current date is 2026-10-04.",
"inputSchema": {
"$schema": "http://json-schema.org/draft-07/schema#",
"additionalProperties": false,
"properties": {
"detail": {
"const": "players",
"description": "Opt-in compact player detail for one selected ESPN football matchup, season_year 2018 or later only; requires week and team_id.",
"type": "string"
},
"league_id": {
"description": "League ID (get from get_user_session)",
"type": "string"
},
"platform": {
"description": "Fantasy platform (e.g., \"espn\", \"yahoo\", \"sleeper\")",
"enum": [
"espn",
"yahoo",
"sleeper"
],
"type": "string"
},
"season_year": {
"description": "Season start year — use the season_year returned by get_user_session for this league; only pass an older year when the user explicitly asks about a past season. Basketball and hockey use the start year of a cross-year season (2024 = the 2024-25 season); football and baseball use the single season year (2025 = the 2025 season).",
"type": "number"
},
"sport": {
"description": "Sport type (e.g., \"football\", \"baseball\")",
"enum": [
"football",
"baseball",
"basketball",
"hockey"
],
"type": "string"
},
"team_id": {
"description": "Required with detail: \"players\" to select one matchup; do not provide for summary mode.",
"type": "string"
},
"week": {
"description": "Week number (optional, must be ≥ 1, defaults to current week)",
"minimum": 1,
"type": "integer"
}
},
"required": [
"platform",
"sport",
"league_id",
"season_year"
],
"type": "object"
},
"name": "get_matchups",
"outputSchema": {
"$schema": "http://json-schema.org/draft-07/schema#",
"additionalProperties": true,
"properties": {
"data": {
"additionalProperties": true,
"description": "Platform envelope. Field availability varies by platform (ESPN, Yahoo, Sleeper); absent fields are not provided by that platform.",
"properties": {
"currentScoringPeriod": {
"type": "number"
},
"currentWeek": {
"type": [
"number",
"string"
]
},
"leagueId": {
"type": "string"
},
"leagueKey": {
"type": "string"
},
"leagueName": {
"type": "string"
},
"matchupPeriod": {
"type": [
"number",
"null"
]
},
"matchupWeek": {
"type": [
"number",
"string"
]
},
"matchups": {
"items": {
"additionalProperties": true,
"properties": {
"away": {
"anyOf": [
{
"$ref": "#/properties/data/properties/matchups/items/properties/home/anyOf/0"
},
{
"type": "null"
}
]
},
"home": {
"anyOf": [
{
"additionalProperties": true,
"properties": {
"players": {
"items": {
"additionalProperties": true,
"properties": {
"lineupSlot": {
"type": "string"
},
"name": {
"type": [
"string",
"null"
]
},
"playerId": {
"type": "string"
},
"points": {
"type": [
"number",
"null"
]
},
"started": {
"type": [
"boolean",
"null"
]
}
},
"required": [
"playerId",
"name",
"lineupSlot",
"started",
"points"
],
"type": "object"
},
"type": "array"
}
},
"type": "object"
},
{
"type": "null"
}
]
},
"matchupId": {
"description": "Provider matchup grouping id, or null when Sleeper did not publish a usable id",
"type": [
"number",
"null"
]
}
},
"type": "object"
},
"type": "array"
},
"scheduleShape": {
"additionalProperties": true,
"description": "Sleeper schedule-shape evidence. A singleton is not labelled a bye because the provider did not establish why it was unpaired.",
"properties": {
"h2hPairingsReturned": {
"type": "boolean"
},
"reason": {
"const": "unknown",
"type": "string"
},
"status": {
"enum": [
"paired",
"partially_paired",
"no_h2h_pairings",
"unpublished_or_unavailable"
],
"type": "string"
},
"unpairedRosterCount": {
"type": "number"
}
},
"required": [
"status",
"h2hPairingsReturned",
"unpairedRosterCount"
],
"type": "object"
},
"seasonYear": {
"type": "number"
},
"week": {
"type": "number"
}
},
"type": "object"
},
"success": {
"type": "boolean"
}
},
"required": [
"success",
"data"
],
"type": "object"
}
},
{
"description": "Search for player identity by name. Always returns identity fields, but ownership context varies by platform. ESPN and Yahoo return market/global ownership and can also populate league ownership fields when credentials and league context are available. ESPN football also adds seasonPoints and pointsPerGame when a selected league is available: these are ESPN's actual-season applied values under that league's scoring, never a Flaim calculation. A real 0 is retained. Null means league scoring was unavailable or ESPN did not return an applied value; for unrostered results it can also mean the player was outside ESPN's bounded 100-player availability pool, so use get_free_agents before treating a null as a scoring fact. Sleeper always evaluates league ownership against every current roster in the selected league, except during an active draft, when this tool returns an error instead of an answer, since draft picks aren't yet reflected on rosters; if the league, rosters, or users can't be loaded for another reason, the call still succeeds with every league_* field null plus a SLEEPER_OWNERSHIP_UNAVAILABLE warning. Sleeper adds a Sleeper-only league_team_id (the Sleeper roster id, or null); its market/global ownership stays unavailable regardless (ownership_scope=\"unavailable\", market_percent_owned=null) — league_team_id is league ownership, not market data. For a selected active league, use established session context (call get_user_session only if needed), then get_league_info, if this chat has not already loaded it for that league, so league-specific ownership and team names can be resolved. League ownership fields: league_status (\"ROSTERED\" = on a team, \"FREE_AGENT\" = unrostered in this league, null = ownership could not be resolved, for example because credentials or rosters were unavailable, the player result carried no usable id, or Sleeper rostering was ambiguous), league_team_name (fantasy team name if rostered), league_owner_name (team owner if rostered). FREE_AGENT is an ownership fact from a roster scan, not an acquisition guarantee — it says nothing about waiver state, so never turn it into pickup advice; get_free_agents is what reports players available to acquire. Trust a non-null league_status directly — null team/owner fields alongside FREE_AGENT are expected, not a signal to verify. Fall back to get_roster only when league_status itself is absent or null. Yahoo entries may add isKeeper as status, cost, and kept when Yahoo sends it; Yahoo has only been observed returning cost as false, so no numeric keeper cost is available from Yahoo. Use values from get_user_session. Read-only. Current date is 2026-10-04.",
"inputSchema": {
"$schema": "http://json-schema.org/draft-07/schema#",
"additionalProperties": false,
"properties": {
"count": {
"description": "Maximum number of players to return (default: 10, max: 25)",
"type": "number"
},
"league_id": {
"description": "League ID (get from get_user_session)",
"type": "string"
},
"platform": {
"description": "Fantasy platform (e.g., \"espn\", \"yahoo\", \"sleeper\")",
"enum": [
"espn",
"yahoo",
"sleeper"
],
"type": "string"
},
"position": {
"description": "Filter by position (e.g., \"QB\", \"RB\", \"SP\", \"C\"). Default: ALL",
"type": "string"
},
"query": {
"description": "Player name search string (minimum 2 characters)",
"minLength": 2,
"type": "string"
},
"season_year": {
"description": "Season start year — use the season_year returned by get_user_session for this league; only pass an older year when the user explicitly asks about a past season. Basketball and hockey use the start year of a cross-year season (2024 = the 2024-25 season); football and baseball use the single season year (2025 = the 2025 season).",
"type": "number"
},
"sport": {
"description": "Sport type (e.g., \"football\", \"baseball\")",
"enum": [
"football",
"baseball",
"basketball",
"hockey"
],
"type": "string"
}
},
"required": [
"query",
"platform",
"sport",
"league_id",
"season_year"
],
"type": "object"
},
"name": "get_players",
"outputSchema": {
"$schema": "http://json-schema.org/draft-07/schema#",
"additionalProperties": true,
"properties": {
"data": {
"additionalProperties": true,
"description": "Platform envelope. Field availability varies by platform (ESPN, Yahoo, Sleeper); absent fields are not provided by that platform.",
"properties": {
"count": {
"type": "number"
},
"leagueKey": {
"type": "string"
},
"leagueName": {
"type": "string"
},
"platform": {
"type": "string"
},
"players": {
"items": {
"additionalProperties": true,
"properties": {
"id": {
"type": "string"
},
"league_owner_name": {
"type": [
"string",
"null"
]
},
"league_status": {
"description": "ROSTERED, FREE_AGENT, or null when ownership could not be resolved, for example because credentials or rosters were unavailable, the player result carried no usable id, or Sleeper rostering was ambiguous",
"type": [
"string",
"null"
]
},
"league_team_id": {
"description": "Sleeper only: the roster id owning the player; null when no single owner was resolved, which includes both a free agent and ownership that could not be resolved uniquely. league_status is the confirmation: FREE_AGENT means unrostered, null means unresolved",
"type": [
"string",
"null"
]
},
"league_team_name": {
"type": [
"string",
"null"
]
},
"market_percent_owned": {
"type": [
"number",
"null"
]
},
"name": {
"type": "string"
},
"ownership_scope": {
"type": "string"
},
"pointsPerGame": {
"description": "ESPN football only: ESPN-computed actual-season points per game under the selected league scoring; null under the same conditions as seasonPoints",
"type": [
"number",
"null"
]
},
"position": {
"type": [
"string",
"null"
]
},
"seasonPoints": {
"description": "ESPN football only: ESPN-computed actual-season points under the selected league scoring; null when league scoring was unavailable, ESPN did not return an applied value, or an unrostered result was outside its bounded availability pool",
"type": [
"number",
"null"
]
},
"team": {
"type": [
"string",
"null"
]
}
},
"type": "object"
},
"type": "array"
},
"query": {
"type": "string"
},
"sport": {
"type": "string"
}
},
"type": "object"
},
"success": {
"type": "boolean"
}
},
"required": [
"success",
"data"
],
"type": "object"
}
},
{
"description": "Get roster details for a specific team, current by default and historical on request. Exact payload varies by platform: ESPN and Yahoo return player entries with lineup/position context, while Sleeper returns starters, bench, reserve, taxi, and record metadata for the selected roster. Keeper fields are additive and platform-dependent; never assume one provider's keeper fields or units exist on another. ESPN adds per-player keeperValue and keeperValueFuture plus one response-level keeperValueUnit of auction_dollars or draft_round, omitted rather than guessed when ESPN's draft type does not determine it; a historical snapshot withholds keeperValueFuture and flags keeperValueFutureAvailable false. Sleeper resolves keepers to player entries on the current roster only, passing the list through as Sleeper sends it; an empty or null list does not show that the league has no keepers. Yahoo entries may add isKeeper as status, cost, and kept when Yahoo sends it; Yahoo has only been observed returning cost as false, so no numeric keeper cost is available from Yahoo. Historical snapshots: pass week for football (all platforms) and Sleeper basketball (matchup week), or as_of_date (YYYY-MM-DD) for ESPN/Yahoo baseball, basketball, and hockey, never both. An invalid selector returns a corrective error naming the right one. Every response includes a snapshot block identifying what was returned (current vs week vs date); historical responses may add limitation flags (acquisitionMetadataAvailable, reserveAndTaxiClassificationAvailable) when provider history omits those details. For \"roster during matchup week N\" questions in daily sports, ask the user for a specific date rather than guessing. One matchup spans several daily rosters. Use established session context (call get_user_session only if needed), then get_league_info for the specified league if this chat has not already loaded it, so the model already knows the league's team names, owner/team mapping, league settings, and roster context before interpreting this roster. Requires authentication except on Sleeper's public API. Read-only. Current date is 2026-10-04.",
"inputSchema": {
"$schema": "http://json-schema.org/draft-07/schema#",
"additionalProperties": false,
"properties": {
"as_of_date": {
"description": "Historical calendar-day roster snapshot in YYYY-MM-DD format. ESPN and Yahoo baseball, basketball, and hockey only — football and Sleeper use week. Omit for the current roster; pass at most one of week or as_of_date.",
"type": "string"
},
"league_id": {
"description": "League ID (get from get_user_session)",
"type": "string"
},
"platform": {
"description": "Fantasy platform (e.g., \"espn\", \"yahoo\", \"sleeper\")",
"enum": [
"espn",
"yahoo",
"sleeper"
],
"type": "string"
},
"season_year": {
"description": "Season start year — use the season_year returned by get_user_session for this league; only pass an older year when the user explicitly asks about a past season. Basketball and hockey use the start year of a cross-year season (2024 = the 2024-25 season); football and baseball use the single season year (2025 = the 2025 season).",
"type": "number"
},
"sport": {
"description": "Sport type (e.g., \"football\", \"baseball\")",
"enum": [
"football",
"baseball",
"basketball",
"hockey"
],
"type": "string"
},
"team_id": {
"description": "Team ID for the target roster. Recommended for all platforms; required on Yahoo and for historical Sleeper rosters. If omitted, platform behavior varies and may not resolve to the user's team.",
"type": "string"
},
"week": {
"description": "Historical weekly roster snapshot (positive integer). Football on all platforms, plus Sleeper basketball (matchup week). Not valid for ESPN/Yahoo daily sports — use as_of_date there. Omit for the current roster; pass at most one of week or as_of_date.",
"type": "number"
}
},
"required": [
"platform",
"sport",
"league_id",
"season_year"
],
"type": "object"
},
"name": "get_roster",
"outputSchema": {
"$schema": "http://json-schema.org/draft-07/schema#",
"additionalProperties": true,
"properties": {
"data": {
"additionalProperties": true,
"description": "Platform envelope. Field availability varies by platform (ESPN, Yahoo, Sleeper); absent fields are not provided by that platform.",
"properties": {
"bench": {
"items": {},
"type": "array"
},
"leagueId": {
"type": "string"
},
"limitations": {
"additionalProperties": true,
"properties": {},
"type": "object"
},
"ownerId": {
"type": [
"string",
"null"
]
},
"ownerName": {
"type": [
"string",
"null"
]
},
"players": {
"description": "Yahoo roster entries",
"items": {
"additionalProperties": true,
"properties": {},
"type": "object"
},
"type": "array"
},
"playersPoints": {
"additionalProperties": {},
"type": "object"
},
"points": {
"type": [
"number",
"null"
]
},
"record": {
"additionalProperties": true,
"properties": {},
"type": "object"
},
"reserve": {
"items": {},
"type": "array"
},
"roster": {
"description": "ESPN roster entries",
"items": {
"additionalProperties": true,
"properties": {},
"type": "object"
},
"type": "array"
},
"rosterId": {
"type": "number"
},
"rosters": {
"description": "Sleeper league-wide roster list when no team is selected",
"items": {
"additionalProperties": true,
"properties": {},
"type": "object"
},
"type": "array"
},
"snapshot": {
"additionalProperties": true,
"description": "Identifies what was returned: current, week, or date",
"properties": {
"type": {
"type": "string"
}
},
"required": [
"type"
],
"type": "object"
},
"starters": {
"items": {},
"type": "array"
},
"taxi": {
"items": {},
"type": "array"
},
"teamId": {
"type": [
"string",
"number"
]
},
"teamKey": {
"type": "string"
},
"teamName": {
"type": "string"
}
},
"type": "object"
},
"success": {
"type": "boolean"
}
},
"required": [
"success",
"data"
],
"type": "object"
}
},
{
"description": "Get season standings and outcome snapshot; includes verified season-outcome fields when available. Returns team records, rankings, and points summaries. The rank field is a standings sort position (1 = best): on ESPN it follows ESPN's playoffSeed order when every team has a unique valid seed; otherwise Flaim computes it from win percentage (a tie counts as half a win), with wins as the tie-breaker. On Sleeper it is computed by Flaim from wins, with points for as the tie-breaker; on Yahoo it is passed through from Yahoo's own standings API. It is NOT a verified postseason finish. For verified postseason outcome, use finalRank and championshipWon instead. Also returns seasonPhase (regular_season/playoffs_in_progress/season_complete), seasonComplete, and per-team outcome fields: finalRank, championshipWon, playoffOutcome, outcomeConfidence, madePlayoffs, playoffSeed. Outcome fields are null when not verifiable — do not infer championship from rank or team name. outcomeConfidence is 'explicit' when the platform reports final ranks, or 'derived' when the champion and runner-up were determined from the final winners-bracket matchup (ESPN historical seasons may omit final ranks); 'derived' only ever appears on ESPN — Yahoo always returns null here, and Sleeper returns 'explicit' for any completed season whose winners bracket names a champion, including when the finish came from the bracket rather than from reported placements; a tied championship game is resolved using the league's playoff tie rule (ESPN's default advances the higher seed). Note: playoffOutcome returns 'in_progress' on Sleeper for teams in active playoffs; ESPN and Yahoo return null for that state. ESPN may also include projected-rank fields. Yahoo and Sleeper leagues also return waiverPriority (the team's current waiver-claim priority, 1 = first — this is the live priority, NOT get_transactions' waiver_priority, which is the priority some past claim used) and faabBalance (remaining free-agent budget; 0 means spent out, not unknown; on Sleeper it already reflects FAAB traded between teams, so it can exceed the league's starting budget). Either can be null (not applicable, or not reported by the platform — do not read null as proof the league lacks FAAB) and they are not mutually exclusive: a FAAB league may also report waiverPriority as its tie-breaker for equal bids. ESPN standings omit both fields entirely rather than returning null. Use established session context (call get_user_session only if needed), then get_league_info for the specified league if this chat has not already loaded it, so team names and league context are already established. For multi-league comparisons, call once per league. For historical finish questions, call get_ancient_history first to discover seasons, then call this tool per season for verified outcomes. Read-only. Current date is 2026-10-04.",
"inputSchema": {
"$schema": "http://json-schema.org/draft-07/schema#",
"additionalProperties": false,
"properties": {
"league_id": {
"description": "League ID (get from get_user_session)",
"type": "string"
},
"platform": {
"description": "Fantasy platform (e.g., \"espn\", \"yahoo\", \"sleeper\")",
"enum": [
"espn",
"yahoo",
"sleeper"
],
"type": "string"
},
"season_year": {
"description": "Season start year — use the season_year returned by get_user_session for this league; only pass an older year when the user explicitly asks about a past season. Basketball and hockey use the start year of a cross-year season (2024 = the 2024-25 season); football and baseball use the single season year (2025 = the 2025 season).",
"type": "number"
},
"sport": {
"description": "Sport type (e.g., \"football\", \"baseball\")",
"enum": [
"football",
"baseball",
"basketball",
"hockey"
],
"type": "string"
}
},
"required": [
"platform",
"sport",
"league_id",
"season_year"
],
"type": "object"
},
"name": "get_standings",
"outputSchema": {
"$schema": "http://json-schema.org/draft-07/schema#",
"additionalProperties": true,
"properties": {
"data": {
"additionalProperties": true,
"description": "Platform envelope. Field availability varies by platform (ESPN, Yahoo, Sleeper); absent fields are not provided by that platform.",
"properties": {
"leagueId": {
"type": "string"
},
"leagueKey": {
"type": "string"
},
"leagueName": {
"type": "string"
},
"seasonComplete": {
"type": "boolean"
},
"seasonPhase": {
"description": "regular_season, playoffs_in_progress, or season_complete",
"type": "string"
},
"seasonYear": {
"type": "number"
},
"standings": {
"items": {
"additionalProperties": true,
"properties": {
"championshipWon": {
"type": [
"boolean",
"null"
]
},
"faabBalance": {
"description": "Yahoo and Sleeper: remaining FAAB (free-agent budget) balance; 0 is a real spent-out balance, not unknown. On Sleeper the value already nets out FAAB traded between teams, so it can exceed the league starting budget. Null for leagues that do not use FAAB or when the platform did not report a usable value, so null alone does not prove the league lacks FAAB. Absent (not null) on ESPN.",
"type": [
"number",
"null"
]
},
"finalRank": {
"description": "Verified postseason finish; null when not verifiable",
"type": [
"number",
"null"
]
},
"madePlayoffs": {
"type": [
"boolean",
"null"
]
},
"outcomeConfidence": {
"description": "explicit or derived; null when unknown",
"type": [
"string",
"null"
]
},
"playoffOutcome": {
"type": [
"string",
"null"
]
},
"playoffSeed": {
"type": [
"number",
"null"
]
},
"waiverPriority": {
"description": "Yahoo and Sleeper: the team's current waiver-claim priority, 1 = first. Present for rolling-priority leagues and for FAAB leagues that use priority as their bid tie-breaker. Null when priority does not apply or the platform did not report a usable value. Absent (not null) on ESPN. Distinct from get_transactions' waiver_priority, which is a past claim's priority.",
"type": [
"number",
"null"
]
}
},
"type": "object"
},
"type": "array"
}
},
"type": "object"
},
"success": {
"type": "boolean"
}
},
"required": [
"success",
"data"
],
"type": "object"
}
},
{
"description": "Get recent league transactions including adds, drops, waivers, and completed trades. Use established session context (call get_user_session only if needed), then get_league_info, if this chat has not already loaded it, so the model already knows the league's team names and owner/team mapping before summarizing activity. Each normalized transaction includes type, status, week (null on Yahoo, and on Sleeper rows that carry no week), and optional team_ids. ESPN and Sleeper rows always include date (YYYY-MM-DD) and timestamp. Yahoo rows include them once Yahoo stamps the transaction: a still-unstamped row is returned without date and timestamp only for type=waiver or type=pending_trade requests, and on every other Yahoo request it is left out and counted in dropped_invalid_timestamp_count. The response contains at most count rows, newest first; if the row count equals count, older transactions inside the window may be missing. Raise count up to 100 before claiming completeness. When presenting results, organize by time period (today, yesterday, this week, older) AND by team within each period so the user can see both when moves happened and what each team did. Week handling is platform-specific: ESPN week always means matchup period, including daily sports where one matchup spans several provider scoring periods; week 0 is ESPN preseason, and omitting week selects the current and previous matchup periods. Sleeper accepts positive matchup weeks starting at 1; omit week for its current and previous week. Yahoo uses a recent 14-day timestamp window and ignores explicit week, except that type=waiver and type=pending_trade return the authenticated user's own pending items with no timestamp window. ESPN serves rows from its structured transaction source (source mTransactions2) with FAAB bid amounts, directional trade_sides, and full trade-lifecycle and failed-bid coverage; trades missing directional detail are filled from the activity feed (source mTransactions2_with_activity_trade_details). If the structured source is unavailable, ESPN falls back to its completed-activity feed (source activity_feed) where failed-bid and trade-lifecycle filters are unavailable. Inspect source/limitations/window metadata before claiming completeness. ESPN responses include a teams map (team ID to display name) to resolve numeric team_ids. Yahoo and Sleeper generally rely on get_league_info for team-name resolution. Use values from get_user_session. Read-only. Current date is 2026-10-04.",
"inputSchema": {
"$schema": "http://json-schema.org/draft-07/schema#",
"additionalProperties": false,
"properties": {
"count": {
"description": "Maximum transactions to return (default: 25, max: 100)",
"type": "number"
},
"league_id": {
"description": "League ID (get from get_user_session)",
"type": "string"
},
"platform": {
"description": "Fantasy platform (e.g., \"espn\", \"yahoo\", \"sleeper\")",
"enum": [
"espn",
"yahoo",
"sleeper"
],
"type": "string"
},
"season_year": {
"description": "Season start year — use the season_year returned by get_user_session for this league; only pass an older year when the user explicitly asks about a past season. Basketball and hockey use the start year of a cross-year season (2024 = the 2024-25 season); football and baseball use the single season year (2025 = the 2025 season).",
"type": "number"
},
"sport": {
"description": "Sport type (e.g., \"football\", \"baseball\")",
"enum": [
"football",
"baseball",
"basketball",
"hockey"
],
"type": "string"
},
"type": {
"description": "Optional transaction type filter. Sleeper supports add/drop/trade/waiver. Yahoo supports add/drop/trade plus waiver/pending_trade for the authenticated user's own pending items. ESPN supports every listed type except pending_trade via its structured source, including failed_bid and the trade lifecycle types; if ESPN has fallen back to its activity feed, those structured-only filters return ESPN_TRANSACTION_TYPE_UNAVAILABLE rather than an empty result.",
"enum": [
"add",
"drop",
"trade",
"waiver",
"pending_trade",
"trade_proposal",
"trade_decline",
"trade_veto",
"trade_uphold",
"failed_bid"
],
"type": "string"
},
"week": {
"description": "Optional public week selector. ESPN accepts matchup period 0 or later (0 = preseason), including baseball, basketball, and hockey; omit it for the current and previous matchup periods. Sleeper accepts matchup week 1 or later; omit it for the current and previous week. Yahoo ignores week and uses a recent 14-day timestamp window",
"minimum": 0,
"type": "integer"
}
},
"required": [
"platform",
"sport",
"league_id",
"season_year"
],
"type": "object"
},
"name": "get_transactions",
"outputSchema": {
"$schema": "http://json-schema.org/draft-07/schema#",
"additionalProperties": true,
"properties": {
"data": {
"additionalProperties": true,
"description": "Platform envelope. Field availability varies by platform (ESPN, Yahoo, Sleeper); absent fields are not provided by that platform.",
"properties": {
"count": {
"type": "number"
},
"dropped_invalid_timestamp_count": {
"type": "number"
},
"league_id": {
"type": "string"
},
"limitations": {
"additionalProperties": true,
"properties": {
"exact_date_bounds_unavailable": {
"const": true,
"type": "boolean"
},
"omitted_conflicting_rows": {
"type": "number"
},
"omitted_unscoped_rows": {
"type": "number"
},
"structured_details_incomplete": {
"const": true,
"type": "boolean"
},
"window_coverage_incomplete": {
"const": true,
"type": "boolean"
}
},
"type": "object"
},
"platform": {
"type": "string"
},
"season_year": {
"type": "number"
},
"source": {
"enum": [
"mTransactions2",
"mTransactions2_with_activity_trade_details",
"activity_feed"
],
"type": "string"
},
"sport": {
"type": "string"
},
"teams": {
"additionalProperties": {
"type": "string"
},
"description": "ESPN team ID to display name map",
"type": "object"
},
"transactions": {
"items": {
"additionalProperties": true,
"properties": {
"date": {
"type": "string"
},
"draft_picks": {
"anyOf": [
{
"items": {},
"type": "array"
},
{
"type": "null"
}
]
},
"faab_bid": {
"type": [
"number",
"null"
]
},
"players_added": {
"items": {
"additionalProperties": true,
"properties": {
"id": {
"type": "string"
},
"name": {
"type": "string"
},
"position": {
"type": "string"
},
"team": {
"type": "string"
}
},
"required": [
"id"
],
"type": "object"
},
"type": "array"
},
"players_dropped": {
"items": {
"additionalProperties": true,
"properties": {
"id": {
"type": "string"
},
"name": {
"type": "string"
},
"position": {
"type": "string"
},
"team": {
"type": "string"
}
},
"required": [
"id"
],
"type": "object"
},
"type": "array"
},
"provider_scoring_period_id": {
"type": "number"
},
"status": {
"type": [
"string",
"null"
]
},
"team_ids": {
"items": {
"type": [
"string",
"number"
]
},
"type": "array"
},
"timestamp": {
"type": "number"
},
"trade_sides": {
"anyOf": [
{
"items": {
"additionalProperties": true,
"properties": {
"acquired": {
"items": {
"additionalProperties": true,
"properties": {
"id": {
"type": "string"
},
"name": {
"type": "string"
},
"position": {
"type": "string"
},
"team": {
"type": "string"
}
},
"required": [
"id"
],
"type": "object"
},
"type": "array"
},
"gave_up": {
"items": {
"additionalProperties": true,
"properties": {
"id": {
"type": "string"
},
"name": {
"type": "string"
},
"position": {
"type": "string"
},
"team": {
"type": "string"
}
},
"required": [
"id"
],
"type": "object"
},
"type": "array"
},
"team_id": {
"type": "string"
}
},
"type": "object"
},
"type": "array"
},
{
"type": "null"
}
]
},
"transaction_id": {
"type": "string"
},
"type": {
"type": "string"
},
"waiver_priority": {
"type": [
"number",
"null"
]
},
"week": {
"type": [
"number",
"null"
]
}
},
"type": "object"
},
"type": "array"
},
"truncated": {
"type": "boolean"
},
"warning": {
"type": "string"
},
"window": {
"additionalProperties": true,
"properties": {
"date_bounds_kind": {
"enum": [
"exact_contiguous",
"envelope_non_contiguous",
"unavailable"
],
"type": "string"
},
"end_date": {
"type": [
"string",
"null"
]
},
"mode": {
"enum": [
"explicit_week",
"recent_two_weeks",
"recent_two_weeks_timestamp",
"pending",
"preseason"
],
"type": "string"
},
"normalization": {
"enum": [
"none",
"legacy_scoring_period_to_matchup"
],
"type": "string"
},
"provider_scoring_period_ids": {
"items": {
"type": "number"
},
"type": "array"
},
"requested_week": {
"type": [
"number",
"null"
]
},
"start_date": {
"type": [
"string",
"null"
]
},
"timezone": {
"const": "America/New_York",
"type": "string"
},
"unit": {
"const": "matchup_period",
"type": "string"
},
"weeks": {
"items": {
"type": "number"
},
"type": "array"
}
},
"type": "object"
}
},
"type": "object"
},
"success": {
"type": "boolean"
}
},
"required": [
"success",
"data"
],
"type": "object"
}
},
{
"description": "Use this alone for user-specific connection, league, or account-status questions. For analysis, reuse successful session context already available in this chat instead of calling again. Do not call for Flaim capability, permission, or generic setup how-to questions, and do not call for generic coding, scraping, weather, travel, betting, sports news, or other requests that do not need connected league data. For selected-league analysis, call this only when no usable successful session result is available in this chat. Reuse its league IDs, teams, seasons, and defaults on ordinary follow-ups, including switching to another league already in allLeagues; do not repeat this call merely because a new user message arrived. Reload when the user confirms account, connection, league-list, or default changes, when the earlier session call failed, or when its result is no longer visible in the conversation. A new chat needs its own session lookup. Follow the error guidance if a call fails. Session reuse does not replace fresh roster, score, or player reads when needed. For an explicit refresh request, call refresh_leagues first and then call this tool after success; call it again even if it ran earlier in the chat. Returns the user's full league landscape: allLeagues (all active leagues), defaultLeagues (per-sport defaults), and defaultLeague (populated only when a single league exists or defaultSport matches). For vague singular prompts, use defaultLeague when present; otherwise use the relevant sport entry in defaultLeagues. If neither applies, ask which league by name without exposing internal IDs. For explicit plural or comparative prompts (each, all, compare, across leagues/platforms), enumerate every matching league in allLeagues and call the target tool once per league. With session context established, call get_league_info for the selected active league before the requested league-specific data tool, once per league per chat, then reuse it for later questions about that league. Skip get_league_info only when answering from session data alone or branching to get_ancient_history. season_year always represents the start year of the season. Read-only.",
"inputSchema": {
"$schema": "http://json-schema.org/draft-07/schema#",
"properties": {},
"type": "object"
},
"name": "get_user_session",
"outputSchema": {
"$schema": "http://json-schema.org/draft-07/schema#",
"additionalProperties": true,
"properties": {
"allLeagues": {
"items": {
"additionalProperties": true,
"properties": {
"leagueId": {
"type": "string"
},
"leagueName": {
"type": [
"string",
"null"
]
},
"platform": {
"type": "string"
},
"recurringLeagueId": {
"type": "string"
},
"seasonYear": {
"type": [
"number",
"null"
]
},
"sport": {
"type": [
"string",
"null"
]
},
"teamId": {
"type": "string"
},
"teamName": {
"type": [
"string",
"null"
]
}
},
"required": [
"leagueId",
"platform"
],
"type": "object"
},
"type": "array"
},
"currentDate": {
"type": "string"
},
"currentSeasons": {
"additionalProperties": true,
"properties": {
"baseball": {
"$ref": "#/properties/currentSeasons/properties/football"
},
"basketball": {
"$ref": "#/properties/currentSeasons/properties/football"
},
"football": {
"additionalProperties": true,
"properties": {
"label": {
"type": "string"
},
"year": {
"type": "number"
}
},
"required": [
"year",
"label"
],
"type": "object"
},
"hockey": {
"$ref": "#/properties/currentSeasons/properties/football"
}
},
"required": [
"football",
"baseball",
"basketball",
"hockey"
],
"type": "object"
},
"defaultLeague": {
"anyOf": [
{
"additionalProperties": true,
"properties": {
"leagueId": {
"type": "string"
},
"leagueName": {
"type": "string"
},
"platform": {
"type": "string"
},
"season": {
"type": "string"
},
"seasonYear": {
"type": "number"
},
"sport": {
"type": "string"
},
"teamId": {
"type": "string"
},
"teamName": {
"type": "string"
}
},
"required": [
"platform",
"leagueId"
],
"type": "object"
},
{
"type": "null"
}
]
},
"defaultLeagues": {
"additionalProperties": {
"$ref": "#/properties/defaultLeague/anyOf/0"
},
"type": "object"
},
"defaultSport": {
"type": [
"string",
"null"
]
},
"instructions": {
"type": "string"
},
"leaguesBySport": {
"additionalProperties": {
"type": "number"
},
"type": "object"
},
"success": {
"type": "boolean"
},
"timezone": {
"type": "string"
},
"totalLeaguesFound": {
"type": "number"
},
"warnings": {
"items": {
"type": "string"
},
"type": "array"
},
"widget": {
"additionalProperties": true,
"properties": {
"hidden": {
"type": "boolean"
}
},
"type": "object"
}
},
"required": [
"success",
"currentDate",
"currentSeasons",
"timezone",
"totalLeaguesFound",
"leaguesBySport",
"defaultSport",
"defaultLeague",
"defaultLeagues",
"allLeagues",
"instructions"
],
"type": "object"
}
},
{
"description": "Refresh connected fantasy leagues by asking Flaim to rediscover leagues through connected ESPN, Yahoo, and Sleeper accounts. Use only when the user explicitly asks to refresh, or from the refresh control on the league widget where the client supports it. This is non-destructive, but repeated refreshes can update Flaim registry timestamps and provider metadata; it does not change provider lineups or rosters, add or drop players, submit waiver claims or trades, or modify league settings. If this call succeeds, call get_user_session again to show the updated league list. If it fails, follow the error retry guidance and any retry_after value; do not retry in a loop.",
"inputSchema": {
"$schema": "http://json-schema.org/draft-07/schema#",
"additionalProperties": false,
"properties": {
"platforms": {
"description": "Optional platforms to refresh. Omit to refresh every connected platform.",
"items": {
"enum": [
"espn",
"yahoo",
"sleeper"
],
"type": "string"
},
"type": "array"
}
},
"type": "object"
},
"name": "refresh_leagues",
"outputSchema": {
"$schema": "http://json-schema.org/draft-07/schema#",
"additionalProperties": true,
"properties": {
"requestedPlatforms": {
"items": {
"type": "string"
},
"type": "array"
},
"results": {
"additionalProperties": {
"additionalProperties": true,
"properties": {
"details": {},
"error": {
"type": "string"
},
"error_description": {
"type": "string"
},
"httpStatus": {
"type": "number"
},
"platform": {
"type": "string"
},
"retryAfter": {
"type": "string"
},
"status": {
"description": "success, skipped, or error",
"type": "string"
}
},
"required": [
"platform",
"status"
],
"type": "object"
},
"description": "Per-platform refresh outcome keyed by platform name",
"type": "object"
},
"success": {
"type": "boolean"
}
},
"required": [
"success"
],
"type": "object"
}
}
]
}Verify it yourself
curl -s https://api.teppi.xyz/v1/evidence/sha256:b714a9d79f50d761adc939351b1bea01c518c1a2c0829508ab80054f8967034f | sha256sum