← FastballAPICONTENT HISTORY

Update to FastballAPI

Snapshot Oct 30, 2026 · 00:06 UTC · version 1.0.0

Collection source: downloaded plugin package.

WHAT CHANGED

First saved snapshot

No earlier snapshot is available to establish a change.

Save FastballAPI and check future changes in Following.

Up to 10 plugins free · no card required.

Compare saved observations

Download comparison JSON
Full technical diff · 0 changed fields
Full snapshot data
{
  "description": "Analyzes MLB and college baseball teams: standings, home and away splits, runs scored and allowed, team batting and run prevention, Elo power ratings and strength of schedule. Use when the user asks how a team is doing, who the best team is, which offense or pitching staff is better, or wants a power ranking. Do not use for single-player questions: see player-scouting. Do not use for Pythagorean luck analysis on its own: see pythagorean-record. Do not use for a single upcoming game: see game-preview.",
  "included_files": [],
  "name": "team-analysis",
  "skill_md_contents": "---\nname: team-analysis\ndescription: \"Analyzes MLB and college baseball teams: standings, home and away splits, runs scored and allowed, team batting and run prevention, Elo power ratings and strength of schedule. Use when the user asks how a team is doing, who the best team is, which offense or pitching staff is better, or wants a power ranking. Do not use for single-player questions: see player-scouting. Do not use for Pythagorean luck analysis on its own: see pythagorean-record. Do not use for a single upcoming game: see game-preview.\"\nmetadata:\n  version: 1.0.0\n  author: FastballAPI\n---\n\n# Team Analysis\n\n> **Default data tool:** FastballAPI (`fastballapi-tool`).\n> `get_standings` (2 credits), `get_ratings` (2), `get_team_stats` (5), `get_games` (2) for splits and schedule strength.\n\nYou describe how good a team is and why, using results (standings), process (rates from every plate appearance) and our Elo. Records alone mislead in baseball: 162 games is a short sample for team quality.\n\n## When to Use\n\n- \"How are the Brewers doing?\"\n- \"Who is the best team in baseball?\" (power ranking)\n- \"Which offense is best? Which staff prevents runs?\"\n- Comparing two teams before a series\n- A division race or wild-card picture from the standings\n- College baseball team ratings and tournament seeding context\n\n## When NOT to Use\n\n- One player's performance: `player-scouting`\n- Whether a record is lucky: `pythagorean-record` (this skill points there)\n- A specific game and its price: `game-preview`\n\n## Commands Available\n\n| Command | What it does | Credits |\n|---------|--------------|---------|\n| `get_standings` | Record, home/away, last 10, runs scored and allowed, run differential, Pythagorean win pct | 2 |\n| `get_ratings` | Elo for every team, ranked, as of season end or today | 2 |\n| `get_team_stats` | Runs per game for and against; team batting and opponents' batting (AVG, OBP, SLG, OPS, K%, BB%, HR) | 5 |\n| `get_games` | A team's games, for splits and schedule strength | 2 |\n| `get_injuries` | Current injured list (MLB only) | 2 |\n| `list_teams` | Team ids and abbreviations | 1 |\n\n## Commands That Do NOT Exist\n\n| Not available | Use instead |\n|---------------|-------------|\n| `get_team_roster`, `get_depth_chart` | Not available. Use `get_leaders` and `get_player` for named players |\n| `get_bullpen_stats` | Not available. Derive from `get_game` pitching rows where `starter` is false |\n| `get_team_defense`, `get_drs` | Not available. Use opponents' batting from `get_team_stats` as a rough proxy |\n| `get_strength_of_schedule` | Compute from `get_games` and `get_ratings` as shown below |\n| `get_playoff_odds` | Not available. Simulate with Elo if the user wants a number |\n\n## How It Works\n\n**Step 1: Standings snapshot.** `get_standings` with `season`. Each row has `wins`, `losses`, `home_wins`, `home_losses`, `away_wins`, `away_losses`, `last10_wins`, `runs_scored`, `runs_allowed`, `run_differential`, `win_pct`, `pythagorean_win_pct`. Real row (2025 Brewers): 97-65, 806 runs scored, 634 allowed, +172, `pythagorean_win_pct` 0.608.\n\n**Step 2: Process stats.** `get_team_stats` with `team` and `season`. Real shape (2025 Yankees, trimmed):\n\n```json\n{\"data\": {\"teams\": [{\"abbrev\": \"NYY\", \"games\": 162,\n  \"runs_per_game\": 5.24, \"runs_allowed_per_game\": 4.23, \"run_differential\": 164,\n  \"batting\": {\"hr\": 274, \"avg\": 0.251, \"obp\": 0.332, \"slg\": 0.455, \"ops\": 0.787, \"k_pct\": 0.235, \"bb_pct\": 0.102},\n  \"pitching_against\": {\"hr\": 175, \"avg\": 0.229, \"obp\": 0.305, \"slg\": 0.379, \"ops\": 0.684, \"k_pct\": 0.236, \"bb_pct\": 0.092}\n}]}}\n```\n\nReading it: offense is `batting`; run prevention is `pitching_against` (opponents' line against this team, so it mixes pitching and defense). A team with a .787 OPS and a .684 OPS against is a plus team on both sides.\n\n**Step 3: Power rating.** `get_ratings` returns Elo, 1500 average. The method note in the response says a 100-point gap is about a 64% favourite on a neutral field, and ratings regress a third of the way to the mean between seasons. Real values, 2025 end: LAD 1578.3, MIL 1564.4, PHI 1559.5, NYY 1557.2. A 14-point gap between the top two is noise; do not rank on it.\n\n**Step 4: Reconcile the three.** Compare:\n\n| Signal | Source | Question it answers |\n|--------|--------|---------------------|\n| Record | `win_pct` | What happened |\n| Run differential / Pythagorean | `run_differential` | What the scoring says should have happened |\n| Elo | `get_ratings` | Who beat whom, weighted for opponents and margin |\n\nWhen they disagree, say why. Example from the 2025 standings: Toronto won 94 games but its run differential (+77) implies about .546, roughly 88 to 89 wins. That is a record the underlying scoring did not fully earn. See `pythagorean-record`.\n\n**Step 5: Splits and form.** `last10_wins` is a 10-game window: treat as color, not signal. Home/away splits over 81 games each carry roughly a 4.5-win standard error per side; do not call a team \"a road team\" off 81 games.\n\n**Step 6: Strength of schedule (optional).**\n\n```python\ngames = get_games(team=\"MIL\", season=2025, status=\"final\", limit=200)[\"data\"][\"games\"]\nelo = {r[\"abbrev\"]: r[\"rating\"] for r in get_ratings(season=2025)[\"data\"][\"ratings\"]}\nopp = [g[\"away\"][\"abbrev\"] if g[\"home\"][\"abbrev\"] == \"MIL\" else g[\"home\"][\"abbrev\"] for g in games]\nsos = sum(elo[o] for o in opp) / len(opp)\n```\n\nEnd-of-season Elo is a mild look-ahead for early-season games; say so. Postseason games are in the list unless you filter `season_type: \"regular\"`.\n\n## College Baseball\n\nPass `league: \"ncaabase\"`. `get_standings`, `get_ratings` and `get_team_stats` work. There are no conference-adjusted ratings beyond our Elo, schedules differ enormously in strength, and ESPN does not carry every Division I game, so records may be incomplete. Always show games played next to the record. The college standings list every team ESPN carries, sorted by win percentage, so a team with 3 games and a 3-0 record can top the list. Filter on games played (wins plus losses) before ranking anything.\n\n## Credit Usage\n\n| Operation | Credits |\n|-----------|---------|\n| Standings + ratings (league view) | 4 |\n| One team's process stats | 5 |\n| All 30 teams' process stats (`get_team_stats` with no `team`) | 5 |\n| Team schedule strength | 2 + 2 |\n\n`get_team_stats` without `team` returns the whole league in one 5-credit call. Prefer that to 30 calls.\n\n## Anti-patterns\n\n| Mistake | Why it is wrong | Do This |\n|---------|-----------------|---------|\n| Ranking by win-loss alone | One-run luck swings records by several wins | Show run differential and Elo next to it |\n| Calling opponent OPS \"pitching\" | It includes defense and park | Label it \"run prevention\" |\n| Using last 10 as a trend | n = 10 | Report it, do not conclude from it |\n| Comparing 2020 (60 games) to other years | Different sample | Scale rates, not counts |\n| Treating a 20-point Elo gap as meaningful | Elo error is larger | Group teams in tiers |\n| Quoting a record without a date | Standings move daily | Say \"through [date]\" |\n\n## Output Format\n\n```\nMilwaukee Brewers, 2025 (regular season)\nRecord: 97-65 (.599). Home 52-29, away 45-36. Last 10: 4-6.\nRuns: 806 scored, 634 allowed, +172. Pythagorean .608 (98.5 wins).\nElo: 1564.4 (2nd). Gap to 1st (LAD, 1578.3): inside noise.\nRead: a real top-two team; record matches its scoring.\n```\n\n## What to Do Next\n\n| You found | Next | Skill |\n|-----------|------|-------|\n| Record far from Pythagorean | Quantify luck and expected regression | `pythagorean-record` |\n| An offense or staff that stands out | Find the players driving it | `player-scouting` |\n| Two teams about to meet | Matchup report | `game-preview` |\n| Want a win probability model | Validate it properly | `walk-forward-validation` |\n"
}

SHA-256 of public snapshot: cd5d4a1f6f845542f2c8080d6da489264c14b665e5481b4ffea3216cff87a5dc