# Flaim Fantasy (remote · api.flaim.app)

Read-only fantasy analysis for ESPN, Yahoo, and Sleeper leagues via MCP

- Trust score: 68/100 (medium)
- Change this week: +8
- Registry status: active
- Liveness: live
- Owner verified: no
- Last scored: 2026-08-03

## Components

- remote · `api.flaim.app`: 68/100 (this document), [markdown](https://verifymcp.io/servers/app-flaim-mcp/api.md), [page](https://verifymcp.io/servers/app-flaim-mcp/api)

## Channel facts

- Endpoint: `https://api.flaim.app/mcp`
- Transports: `streamable-http`
- Auth: `none`
- Version: `1.0.1`

## Trust breakdown

How this component scores in each security and reliability category. Every signal is checked automatically against the live server, and we only credit what we can confirm. Scores are 0–100 per category. Scoring method: https://verifymcp.io/docs/scoring (what has changed: https://verifymcp.io/docs/scoring/changelog)

Scored 2026-08-03.

- **Endpoint Security**: 78/100
  - The endpoint's TLS certificate is valid, in date, and uses a strong key.
  - Authorisation is enforced on tool calls, advertised via RFC 9728 protected-resource metadata. Discovery is public, which costs nothing: no tool can be invoked without a token.
  - HTTPS not yet verified: we couldn't determine whether a plaintext access path exists.
  - HSTS check failed: the Strict-Transport-Security header is absent.
  - DNSSEC check failed: this domain isn't protected by DNSSEC.
  - The authorisation server offers only Dynamic Client Registration (RFC 7591), which MCP 2026-07-28 deprecated in favour of Client ID Metadata Documents.
- **Transport & Reachability**: 100/100
  - Verified streamable-http transport via a live MCP handshake.
- **Schema Quality & AI Usability**: 37/100
  - 0% of prompts and resources have a non-trivial description (not blank, and not just the item's name).
  - AI-judged instruction clarity (excellent).
  - Context-footprint check failed: tool/resource definitions use about 4117 tokens (~343/item across 12 items; 10 tools + 2 resources), over budget; trim descriptions and params.
  - Usage-examples check failed: none of the tools include examples.
- **Stability & Change Management**: 27/100
  - Stability observed for 8 of 30 days with no destabilising changes; credit accrues until the full window elapses.
- **Tool Coverage**: 100/100
  - 100% of tools have a non-trivial description (not blank, and not just the tool's name).
  - 100% of tool parameters carry a description.
  - Structured output schemas are declared (100% of tools); any adoption earns full credit.
- **Capabilities**: 100/100
  - Implements a supported MCP spec version (2025-11-25); the latest is 2026-07-28.
  - Supports UI / widget rendering.

## Install

### Claude

```bash
claude mcp add --transport http app-flaim-mcp https://api.flaim.app/mcp
```

### Codex

```toml
[mcp_servers.app-flaim-mcp]
url = "https://api.flaim.app/mcp"
```

### opencode

```json
{
  "$schema": "https://opencode.ai/config.json",
  "mcp": {
    "app-flaim-mcp": {
      "type": "remote",
      "url": "https://api.flaim.app/mcp",
      "enabled": true
    }
  }
}
```

### OpenClaw

```bash
openclaw mcp add app-flaim-mcp --url https://api.flaim.app/mcp --transport streamable-http
```

### Hermes

```yaml
mcp_servers:
  app-flaim-mcp:
    url: "https://api.flaim.app/mcp"
```

### Other

```json
{
  "mcpServers": {
    "app-flaim-mcp": {
      "type": "http",
      "url": "https://api.flaim.app/mcp"
    }
  }
}
```

The mcpServers block is a cross-client convention. Remote transports vary, so check your client's docs.

## Changelog

Every change recorded for this component, newest first. Days that predate change tracking, or that we cannot explain, say so: "we were watching and nothing happened" and "we were not watching" are different claims.

### 2026-08-03 (score 68, +1)

- [security] Tool “get_free_agents” rewrote its description, which is the text the model reads
- [security] Tool “get_transactions” rewrote its description, which is the text the model reads
- [security] Tool “get_standings” rewrote its description, which is the text the model reads
- [security] Tool “get_roster” rewrote its description, which is the text the model reads
- [security] Tool “get_players” rewrote its description, which is the text the model reads
- [security] Tool “get_matchups” rewrote its description, which is the text the model reads
- [security] Tool “get_league_info” rewrote its description, which is the text the model reads

### 2026-08-02 (score 67, 0)

- [security] Tool “get_league_info” rewrote its description, which is the text the model reads
- [security] Tool “get_transactions” rewrote its description, which is the text the model reads
- [security] Tool “get_standings” rewrote its description, which is the text the model reads
- [security] Tool “get_roster” rewrote its description, which is the text the model reads
- [security] Tool “get_players” rewrote its description, which is the text the model reads
- [security] Tool “get_matchups” rewrote its description, which is the text the model reads
- [security] Tool “get_free_agents” rewrote its description, which is the text the model reads

### 2026-08-01 (score 67, +1)

- [security] Tool “get_standings” rewrote its description, which is the text the model reads
- [security] Tool “get_transactions” rewrote its description, which is the text the model reads
- [security] Tool “get_free_agents” rewrote its description, which is the text the model reads
- [security] Tool “get_league_info” rewrote its description, which is the text the model reads
- [security] Tool “get_matchups” rewrote its description, which is the text the model reads
- [security] Tool “get_players” rewrote its description, which is the text the model reads
- [security] Tool “get_roster” rewrote its description, which is the text the model reads

### 2026-07-31 (score 66, +5)

- [functional] We updated how we score, so this day's move reflects our rubric, not a change to the server

### 2026-07-30 (score 61, 0)

- [functional] We updated how we score, so this day's move reflects our rubric, not a change to the server

### 2026-07-29 (score 61, 0)

- [security] Tool “get_standings” rewrote its description, which is the text the model reads
- [security] Tool “get_roster” rewrote its description, which is the text the model reads
- [security] Tool “get_players” rewrote its description, which is the text the model reads
- [security] Tool “get_matchups” rewrote its description, which is the text the model reads
- [security] Tool “get_free_agents” rewrote its description, which is the text the model reads
- [security] Tool “get_league_info” rewrote its description, which is the text the model reads
- [security] Tool “get_transactions” rewrote its description, which is the text the model reads

### 2026-07-28 (score 61, +1)

- [security] Tool “get_matchups” rewrote its description, which is the text the model reads
- [security] Tool “get_free_agents” rewrote its description, which is the text the model reads
- [security] Tool “get_transactions” rewrote its description, which is the text the model reads
- [security] Tool “get_players” rewrote its description, which is the text the model reads
- [security] Tool “get_league_info” rewrote its description, which is the text the model reads
- [security] Tool “get_standings” rewrote its description, which is the text the model reads
- [security] Tool “get_roster” rewrote its description, which is the text the model reads

### 2026-07-27 (score 60, +1)

- [functional] We updated how we score, so this day's move reflects our rubric, not a change to the server

## MCP tools (10)

### `get_user_session` (~291 tokens)

User Session

Use this alone for user-specific connection, league, or account-status questions, and use it as the first data tool when a request needs the user's connected fantasy league data. 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 a normal selected-league request, call this once before any other data tool. 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. 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. For a selected active league, call get_league_info next before the requested league-specific data tool. 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.

Output parameters:

- `allLeagues` (array)
- `currentDate` (string)
- `currentSeasons` (object)
- `defaultLeague`
- `defaultLeagues` (object)
- `defaultSport` (string|null)
- `instructions` (string)
- `leaguesBySport` (object)
- `success` (boolean)
- `timezone` (string)
- `totalLeaguesFound` (number)
- `warnings` (array)

### `refresh_leagues` (~156 tokens)

Refresh Leagues

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 after the user presses the widget refresh button. 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.

Input parameters:

- `platforms` (array): Optional platforms to refresh. Omit to refresh every connected platform.

Output parameters:

- `requestedPlatforms` (array)
- `results` (object): Per-platform refresh outcome keyed by platform name
- `success` (boolean)

### `get_ancient_history` (~87 tokens)

Ancient History

Use this only after get_user_session, and 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. Read-only.

Input parameters:

- `platform` (string): Optional: filter to specific platform

Output parameters:

- `oldLeagues` (array)
- `oldSeasonsFromActiveLeagues` (object)
- `success` (boolean)
- `thresholdYear` (number)
- `totalOldLeagues` (number)
- `totalOldSeasons` (number)
- `warnings` (array)

### `get_league_info` (~245 tokens)

League Context

For a selected active league, call this immediately after get_user_session and before the requested standings, matchup, roster, free-agent, player, or transaction tool. 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. 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-08-03.

Input parameters:

- `league_id` (string, required): League ID (get from get_user_session)
- `platform` (string, required): Fantasy platform (e.g., "espn", "yahoo", "sleeper")
- `season_year` (number, required): 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
- `sport` (string, required): Sport type (e.g., "football", "baseball")

Output parameters:

- `data` (object): Platform envelope. Field availability varies by platform (ESPN, Yahoo, Sleeper); absent fields are not provided by that platform.
- `success` (boolean)

### `get_standings` (~438 tokens)

League Standings

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 and Sleeper it is computed by Flaim from win percentage; 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); 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. Best used after get_user_session and after get_league_info for the specified league 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-08-03.

Input parameters:

- `league_id` (string, required): League ID (get from get_user_session)
- `platform` (string, required): Fantasy platform (e.g., "espn", "yahoo", "sleeper")
- `season_year` (number, required): 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
- `sport` (string, required): Sport type (e.g., "football", "baseball")

Output parameters:

- `data` (object): Platform envelope. Field availability varies by platform (ESPN, Yahoo, Sleeper); absent fields are not provided by that platform.
- `success` (boolean)

### `get_matchups` (~209 tokens)

League Matchups

Get matchups/scoreboard for a specific week or the current week. Best used after get_user_session and after get_league_info for the specified league 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-08-03.

Input parameters:

- `league_id` (string, required): League ID (get from get_user_session)
- `platform` (string, required): Fantasy platform (e.g., "espn", "yahoo", "sleeper")
- `season_year` (number, required): 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
- `sport` (string, required): Sport type (e.g., "football", "baseball")
- `week` (integer): Week number (optional, must be ≥ 1, defaults to current week)

Output parameters:

- `data` (object): Platform envelope. Field availability varies by platform (ESPN, Yahoo, Sleeper); absent fields are not provided by that platform.
- `success` (boolean)

### `get_roster` (~520 tokens)

Team Roster

Get roster details for a specific team — current by default, 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. 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. Best used after get_user_session and after get_league_info for the specified league 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-08-03.

Input parameters:

- `as_of_date` (string): 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 we…
- `league_id` (string, required): League ID (get from get_user_session)
- `platform` (string, required): Fantasy platform (e.g., "espn", "yahoo", "sleeper")
- `season_year` (number, required): 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
- `sport` (string, required): Sport type (e.g., "football", "baseball")
- `team_id` (string): 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.
- `week` (number): 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 cur…

Output parameters:

- `data` (object): Platform envelope. Field availability varies by platform (ESPN, Yahoo, Sleeper); absent fields are not provided by that platform.
- `success` (boolean)

### `get_free_agents` (~517 tokens)

Available Players

Get players available to acquire in the specified fantasy league, optionally filtered by position. This is fantasy-league availability, not professional-contract status. ESPN percentOwned/percentStarted are the percentages of all ESPN leagues where the player is rostered/started, not the share of rostered teams that start him. Yahoo percentOwned, when present, is Yahoo-wide; none is ownership within the selected league, and Sleeper provides no percentage. Label every reported percentage as an ESPN-wide roster/start rate or Yahoo-wide market rate. If a rate is missing, write "[Provider] market ownership rate: not provided"; do not repeat response field names or null values, call get_players, or offer a lookup. team/proTeam is the real-life club (FA means the provider lists no current pro team). Only ESPN status/waiverProcessDate represents fantasy acquisition state here. Call Yahoo/Sleeper 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. For a returned list or field explanation, end after the requested facts—never add an "if you want" offer, qualitative ranking, recommendation, role, health, trend, or outlook. Translate ESPN status codes silently into plain language; never print raw codes such as FREEAGENT or WAIVERS. Use current web evidence before adding analysis or pickup recommendations. Follow get_user_session then get_league_info for the selected league; fan out once per league for comparisons. Use get_roster for a separate player-ownership question. Requires authentication on ESPN/Yahoo; Sleeper uses the public API. Read-only. Current date is 2026-08-03.

Input parameters:

- `count` (number): Maximum number of players to return (max: 100). Pass the user-requested number exactly; omit only when no number was requested (default: 25).
- `league_id` (string, required): League ID (get from get_user_session)
- `platform` (string, required): Fantasy platform — "espn", "yahoo", or "sleeper"
- `position` (string): Filter by position (e.g., "QB", "RB", "SP", "C"). Default: ALL
- `season_year` (number, required): 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
- `sport` (string, required): Sport type (e.g., "football", "baseball")

Output parameters:

- `data` (object): Platform envelope. Field availability varies by platform (ESPN, Yahoo, Sleeper); absent fields are not provided by that platform.
- `success` (boolean)

### `get_players` (~353 tokens)

Search Players

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. Sleeper returns identity plus ownership_scope="unavailable" with market_percent_owned=null. For a selected active league, call this after get_user_session and get_league_info so league-specific ownership and team names can be resolved. League ownership fields: league_status ("ROSTERED" = on a team, "FREE_AGENT" = available, null = unavailable), league_team_name (fantasy team name if rostered), league_owner_name (team owner if rostered). When those league fields are absent, null, or unavailable, fall back to get_roster to verify manually. Use values from get_user_session. Read-only. Current date is 2026-08-03.

Input parameters:

- `count` (number): Maximum number of players to return (default: 10, max: 25)
- `league_id` (string, required): League ID (get from get_user_session)
- `platform` (string, required): Fantasy platform (e.g., "espn", "yahoo", "sleeper")
- `position` (string): Filter by position (e.g., "QB", "RB", "SP", "C"). Default: ALL
- `query` (string, required): Player name search string (minimum 2 characters)
- `season_year` (number, required): 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
- `sport` (string, required): Sport type (e.g., "football", "baseball")

Output parameters:

- `data` (object): Platform envelope. Field availability varies by platform (ESPN, Yahoo, Sleeper); absent fields are not provided by that platform.
- `success` (boolean)

### `get_transactions` (~528 tokens)

League Transactions

Get recent league transactions including adds, drops, waivers, and trades. Best used after get_user_session and usually after get_league_info so the model already knows the league's team names and owner/team mapping before summarizing activity. Each normalized transaction includes a date field (YYYY-MM-DD), type, status, week, and optional team_ids. 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/Sleeper use week windows (default current + previous week), while Yahoo uses a recent 14-day timestamp window and ignores explicit week. Type support is also platform-specific: Sleeper supports add/drop/trade/waiver; Yahoo supports add/drop/trade plus pending waiver/pending_trade views for the authenticated user's own items; ESPN also supports failed_bid and trade lifecycle types (trade_proposal, trade_decline, trade_veto, trade_uphold). ESPN uses mTransactions2 for structured transaction data, and accepted trade player details are supplemented from the activity feed. ESPN responses include a "teams" map (team ID → display name) to resolve the numeric team_ids on each transaction, while 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-08-03.

Input parameters:

- `count` (number): Maximum transactions to return (default: 25, max: 100)
- `league_id` (string, required): League ID (get from get_user_session)
- `platform` (string, required): Fantasy platform (e.g., "espn", "yahoo", "sleeper")
- `season_year` (number, required): 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
- `sport` (string, required): Sport type (e.g., "football", "baseball")
- `type` (string): Optional transaction type filter. Platform support varies: Sleeper supports add/drop/trade/waiver; Yahoo supports add/drop/trade plus waiver/pending_trade for the authenticated user's own pending ite…
- `week` (integer): Week/scoring-period number (optional, 0 = preseason). ESPN/Sleeper support explicit week; Yahoo ignores week and uses a recent 14-day timestamp window

Output parameters:

- `data` (object): Platform envelope. Field availability varies by platform (ESPN, Yahoo, Sleeper); absent fields are not provided by that platform.
- `success` (boolean)

## Diagnostics

Captured diagnostic sections: TLS, DNSSEC, Authorisation, Transports. The full working is on the page: https://verifymcp.io/servers/app-flaim-mcp/api#diagnostics

## Score history

- 2026-08-03: 68
- 2026-08-02: 67
- 2026-08-01: 67
- 2026-07-31: 66
- 2026-07-30: 61
- 2026-07-29: 61
- 2026-07-28: 61
- 2026-07-27: 60
- 2026-07-26: 59

## Links

- Remote endpoint: https://api.flaim.app/mcp
- Repository: https://github.com/jdguggs10/flaim
- Website: https://flaim.app/
- Changelog RSS feed: https://verifymcp.io/servers/app-flaim-mcp/api/changelog.xml
- Changelog JSON feed: https://verifymcp.io/servers/app-flaim-mcp/api/changelog.json
- HTML version of this page: https://verifymcp.io/servers/app-flaim-mcp/api
