ESPN Fantasy Basketball MCP Server
Provides NBA schedule data and player information for fantasy basketball analysis, including access to NBA game schedules and player details.
Click on "Install Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@ESPN Fantasy Basketball MCP ServerShow me the top free agents in my league"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
ESPN Fantasy Basketball MCP Server
An MCP (Model Context Protocol) server that provides access to ESPN Fantasy Basketball APIs. This server enables Claude and other MCP clients to fetch fantasy basketball data including league teams, player rosters, waiver wire players, matchup schedules, and NBA schedules.
Note: This is an unofficial third-party tool and is not affiliated with or endorsed by ESPN.
Features
Available Tools
Core Fantasy Tools
get_league_teams - Get all teams in an ESPN Fantasy Basketball league
get_team_roster - Get roster for a specific team
get_free_agents - Get free agents/waiver wire players
get_matchups - Get league matchup schedule
get_nba_schedule - Get NBA game schedule
Live Draft Assistant Tools
get_draft_status - Get current draft status including all picks and progress
should_i_bid - Get recommendation on whether to bid for the current player being nominated
who_should_i_target_next - Get recommendation on which player to target/nominate next
analyze_my_draft_strategy - Analyze your current draft strategy and spending patterns
get_available_players - Get top available players for the draft with auction values
Related MCP server: nba-mcp
Installation
Prerequisites
Python 3.10 or higher
uv package manager
Setup
Clone this repository:
git clone <repository-url> cd espn-fantasy-basketball-mcpInstall dependencies using uv:
uv sync
Usage
Running the Server
uv run espn_fantasy_basketball.pyConfiguration for Claude Desktop
Add to your Claude Desktop configuration (~/Library/Application Support/Claude/claude_desktop_config.json):
{
"mcpServers": {
"espn-fantasy-basketball": {
"command": "uv",
"args": [
"--directory",
"/path/to/espn-fantasy-basketball-mcp",
"run",
"espn_fantasy_basketball.py"
],
"env": {
"ESPN_LEAGUE_ID": "your_league_id",
"ESPN_TEAM_ID": "your_team_id",
"ESPN_S2": "your_espn_s2_cookie",
"ESPN_SWID": "your_swid_cookie"
}
}
}
}Draft Tools Usage
The live draft assistant tools are designed for auction drafts and help answer key questions during your draft:
š” Pro Tip: These tools work seamlessly with Claude Desktop! Ask Claude questions like "Should I bid on this player?" or "Who should I target next?" and it will use these tools automatically to give you expert draft advice.
š get_draft_status
Get the current state of your draft including all picks made so far.
# Get draft status
draft_status = await get_draft_status(
league_id=123456,
year=2025,
espn_s2="your_espn_s2_cookie", # for private leagues
swid="your_swid_cookie" # for private leagues
)Returns:
inProgress: Whether draft is currently activedrafted: Whether draft is completedpicks: Array of all picks made so far with player detailscurrentPickNumber: Next pick numbercurrentNominatingTeam: Which team is nominating next
š° should_i_bid
Get AI-powered recommendation on whether to bid for the current player being nominated.
# Should I bid for this player?
recommendation = await should_i_bid(
current_player_id=12345, # Player being nominated
team_id=1, # Your team ID (optional, uses ESPN_TEAM_ID env var)
league_id=123456, # Optional, uses ESPN_LEAGUE_ID env var
year=2025, # Optional, uses ESPN_YEAR env var
espn_s2="your_espn_s2_cookie", # Optional, uses ESPN_S2 env var
swid="your_swid_cookie" # Optional, uses ESPN_SWID env var
)Returns:
action: "bid" or "pass"playerName: Name of the playersuggestedBid: Recommended bid amountmaxBid: Maximum you should bidreasoning: Explanation of the recommendationpriority: Priority score (1-10)
šÆ who_should_i_target_next
Get recommendation on which player to nominate when it's your turn.
# Who should I target next?
recommendation = await who_should_i_target_next(
team_id=1, # Your team ID (optional, uses ESPN_TEAM_ID env var)
league_id=123456, # Optional, uses ESPN_LEAGUE_ID env var
year=2025, # Optional, uses ESPN_YEAR env var
espn_s2="your_espn_s2_cookie", # Optional, uses ESPN_S2 env var
swid="your_swid_cookie" # Optional, uses ESPN_SWID env var
)Returns:
action: "nominate" or "pass"playerId: Recommended player IDplayerName: Player namesuggestedBid: Recommended opening bidreasoning: Why this player is recommendedpriority: Priority score (1-10)
š analyze_my_draft_strategy
Analyze your current draft progress, spending patterns, and punt strategy.
# Analyze my draft strategy
analysis = await analyze_my_draft_strategy(
team_id=1, # Your team ID (optional, uses ESPN_TEAM_ID env var)
league_id=123456, # Optional, uses ESPN_LEAGUE_ID env var
year=2025, # Optional, uses ESPN_YEAR env var
espn_s2="your_espn_s2_cookie", # Optional, uses ESPN_S2 env var
swid="your_swid_cookie" # Optional, uses ESPN_SWID env var
)Returns:
team_summary: Your current roster and spendingtotalSpent: Money spent so farplayersCount: Number of players draftedremainingBudget: Money left to spend
punt_analysis: Strategy analysis and recommendationsbudget_per_remaining_player: Average $ per remaining roster spot
š get_available_players
Get list of top available players with auction values and rankings.
# Get best available players
players = await get_available_players(
league_id=123456,
year=2025,
limit=25, # Number of players to return
espn_s2="your_espn_s2_cookie",
swid="your_swid_cookie"
)Returns: Array of available players with:
playerId: Player IDplayer: Player details (name, position, team)auctionValue: Projected auction valuerank: Overall rankingisDrafted: False (only undrafted players returned)
š” Draft Assistant Example Workflow
# 1. Check draft status
status = await get_draft_status(league_id, year, espn_s2, swid)
if not status["inProgress"]:
print("Draft not in progress")
# 2. If someone nominated a player, should you bid?
if current_player_being_nominated:
advice = await should_i_bid(league_id, year, team_id, player_id, espn_s2, swid)
print(f"{advice['action'].upper()}: {advice['reasoning']}")
if advice["action"] == "bid":
print(f"Suggested bid: ${advice['suggestedBid']}")
# 3. If it's your turn to nominate
if its_your_turn:
target = await who_should_i_target_next(league_id, year, team_id, espn_s2, swid)
print(f"Target: {target['playerName']} (${target['suggestedBid']})")
print(f"Reasoning: {target['reasoning']}")
# 4. Analyze your strategy periodically
strategy = await analyze_my_draft_strategy(league_id, year, team_id, espn_s2, swid)
print(f"Spent: ${strategy['team_summary']['totalSpent']}")
print(f"Budget per remaining player: ${strategy['budget_per_remaining_player']}")š Finding Your Team ID
Most draft and roster tools require your team_id. To find it:
Use the
get_league_teamstool to see all teams:
teams = await get_league_teams(league_id, year, espn_s2, swid)
# Look through the results to find your teamOr check the ESPN Fantasy Basketball URL when viewing your team:
URL format:
https://fantasy.espn.com/basketball/team?leagueId=123456&teamId=1Your team ID is the number after
teamId=
Configure it as an environment variable to avoid being asked every time:
Add
ESPN_TEAM_IDto your Claude Desktop config (see Configuration section above)Once configured, you can omit
team_idfrom tool calls and it will use your configured team automatically
Private League Access
For private leagues, you'll need ESPN authentication cookies:
ESPN_S2: ESPN authentication cookie (long string starting with "AE")ESPN_SWID: ESPN SWID cookie (format:{12345678-1234-1234-1234-123456789012})
To get these cookies:
Log into ESPN Fantasy in your browser
Open browser developer tools (F12)
Go to Application/Storage tab ā Cookies ā espn.com
Find and copy the
espn_s2andSWIDcookie values
Development
Running Tests
# Run all tests
uv run pytest
# Run tests with coverage
uv run pytest --cov=espn_fantasy_basketball_mcp
# Run specific test file
uv run pytest tests/test_models.py
# Run tests in verbose mode
uv run pytest -vCode Quality
# Lint and format code
uv run ruff check --fix .
# Type checking
uv run mypy espn_fantasy_basketball_mcp/
# Run all CI checks locally
./scripts/check.shProject Structure
espn-fantasy-basketball-mcp/
āāā espn_fantasy_basketball.py # Main MCP server using FastMCP
āāā espn_fantasy_basketball_mcp/ # Core library package
ā āāā __init__.py
ā āāā client.py # ESPN API client
ā āāā models.py # Pydantic data models
ā āāā server.py # Legacy MCP server (unused)
āāā tests/ # Test suite
ā āāā test_client.py # Client tests
ā āāā test_models.py # Model tests
ā āāā test_server.py # Server tests
āāā conftest.py # Pytest configuration
āāā pyproject.toml # Project configuration
āāā requirements.txt # Dependencies (for pip users)
āāā Pipfile # Dependencies (for pipenv users)
āāā .python-version # Python version for pyenv
āāā README.md # This fileAPI Endpoints Used
This MCP server uses the following ESPN API endpoints:
Fantasy Basketball API
Base URL:
https://lm-api-reads.fantasy.espn.com/apis/v3/games/fbaLeague Data:
/seasons/{year}/segments/0/leagues/{league_id}Teams:
?view=mTeamRosters:
?view=mRosterMatchups:
?view=mMatchupFree Agents:
?view=kona_player_info
NBA Schedule API
Base URL:
https://site.api.espn.com/apis/site/v2/sports/basketball/nbaSchedule:
/scoreboard
API Limitations & Alternatives Needed
Current Limitations
Free Agents Query Limit: ESPN API only returns up to 50 players per request for free agents
Private League Access: Requires ESPN authentication cookies (
espn_s2andSWID)Rate Limiting: ESPN may rate limit requests (not officially documented)
Undocumented API: ESPN's fantasy API is not officially documented and may change
Data Completeness: Some fields like team
locationare not provided by ESPN's APISeason Dependency: API behavior may vary between active and inactive seasons
Alternative APIs You May Need
NBA Player Stats & Advanced Metrics
NBA Stats API:
https://stats.nba.com/stats/(official but rate limited)Basketball Reference: Web scraping required
RapidAPI Sports: Paid API with comprehensive NBA data
Real-time NBA Data
ESPN NBA API:
https://site.api.espn.com/apis/site/v2/sports/basketball/nba(used for schedule)NBA Data API:
https://data.nba.net/prod/(official but limited)
Advanced Fantasy Analytics
FantasyLabs API: Paid service with projections and ownership data
DraftKings API: For DFS ownership and salaries
Hashtag Basketball: Free projections (web scraping required)
Player News & Injuries
ESPN News API: Limited access
The Athletic API: Requires subscription
Reddit API: r/fantasybball for community insights
Position IDs Reference
ESPN uses the following position IDs:
0: Point Guard (PG)
1: Shooting Guard (SG)
2: Small Forward (SF)
3: Power Forward (PF)
4: Center (C)
5: Guard (G)
6: Forward (F)
12: Bench
13: IR (Injured Reserve)
Example Usage
Via MCP Tools (in Claude Desktop)
Once configured, you can ask Claude to:
"Get all teams in my fantasy basketball league"
"Show me the roster for the Lakers team"
"What free agents are available?"
"Show me this week's matchups"
"What NBA games are today?"
Direct Python Usage
from espn_fantasy_basketball_mcp.client import ESPNFantasyBasketballClient
# Initialize client
client = ESPNFantasyBasketballClient(
league_id=12345,
year=2025,
espn_s2="your_espn_s2_cookie", # For private leagues
swid="your_swid_cookie" # For private leagues
)
# Get all teams in league
teams = await client.get_league_teams()
# Get roster for team ID 1
roster = await client.get_team_roster(team_id=1)
# Get top 25 free agent guards
free_agents = await client.get_free_agents(size=25, position_id=5)
# Get current week matchups
matchups = await client.get_matchups()
# Get today's NBA games
nba_games = await client.get_nba_schedule()Troubleshooting
Common Issues
"Team not found" errors: Verify your league ID and ensure you have access to the league
Authentication errors: Check that your
espn_s2andSWIDcookies are correct and not expiredEmpty results: Some data may not be available during off-season or for certain league settings
Rate limiting: ESPN may temporarily block requests if you make too many in quick succession
Debug Mode
The client includes error handling and logging. For debugging, check the server logs when running:
uv run espn_fantasy_basketball.pyContributing
Fork the repository
Create a feature branch:
git checkout -b feature-nameMake your changes and add tests
Run tests:
uv run pytestRun code quality checks:
uv run black . && uv run ruff .Commit your changes:
git commit -am 'Add feature'Push to the branch:
git push origin feature-nameCreate a Pull Request
License
MIT License - see LICENSE file for details.
Available Tools
14 toolsanalyze_my_draft_strategyA
Analyze your current draft strategy and spending patterns.
Args:
team_id: Your team ID (optional, uses ESPN_TEAM_ID env var)
league_id: ESPN Fantasy Basketball league ID (optional, uses ESPN_LEAGUE_ID env var)
year: Season year (e.g., 2025) (optional, uses ESPN_YEAR env var or defaults to 2025)
espn_s2: ESPN authentication cookie for private leagues (optional, uses ESPN_S2 env var)
swid: ESPN SWID cookie for private leagues (optional, uses ESPN_SWID env var)
Returns:
Dictionary with punt strategy analysis, spending summary, and recommendations
| Name | Required | Description | Default |
|---|---|---|---|
| swid | No | ||
| year | No | ||
| espn_s2 | No | ||
| team_id | No | ||
| league_id | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries full burden, but it only mentions inputs and return type. It does not disclose whether this makes external API calls, any side effects, rate limits, or that it requires authentication for private leagues beyond the parameter names. The 'Analyze' verb implies read-only, but this is not explicit.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is organized with a clear one-line summary followed by a structured Args section. It is slightly verbose due to repeating defaults, but the structure makes it easy to scan. Every sentence earns its place, though the parameter details could be trimmed.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Without an output schema, the description mentions the return contains 'punt strategy analysis, spending summary, and recommendations', but does not specify exact fields. It also lacks context on prerequisites (e.g., whether a draft must be in progress) or assumptions about league type (auction vs snake). This is adequate but has gaps.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate, and it does excellently. Each parameter is explained with its optionality, environment variable fallback, and purpose (e.g., emspn_s2 and swid for private league auth). This adds significant meaning beyond the bare schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool 'Analyze your current draft strategy and spending patterns', which is a specific verb+resource. It distinguishes from siblings like get_draft_status (which fetches status) and should_i_bid (which gives bidding advice) by focusing on overall strategy and spending analysis.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description does not provide any guidance on when to use this tool versus the sibling analysis tools. It lacks explicit exclusions or alternative recommendations, so an agent would not know if this is the right tool for a given task.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
analyze_trade_proposalA
Analyze a trade proposal using comprehensive statistical analysis.
Args:
your_player_ids: List of player IDs you would trade away
their_player_ids: List of player IDs you would receive
league_id: ESPN Fantasy Basketball league ID (optional, uses ESPN_LEAGUE_ID env var)
year: Season year (e.g., 2025) (optional, uses ESPN_YEAR env var or defaults to 2025)
espn_s2: ESPN authentication cookie for private leagues (optional, uses ESPN_S2 env var)
swid: ESPN SWID cookie for private leagues (optional, uses ESPN_SWID env var)
Returns:
Dictionary with trade analysis, recommendation, and category impact
| Name | Required | Description | Default |
|---|---|---|---|
| swid | No | ||
| year | No | ||
| espn_s2 | No | ||
| league_id | No | ||
| your_player_ids | Yes | ||
| their_player_ids | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the burden. It mentions that espn_s2 and swid are for private leagues and describes the return value, but does not explicitly state that the operation is read-only, nor does it mention behavior on errors, invalid IDs, or authentication failures. The description adds some context but lacks explicit behavioral disclosure.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is well-structured with a one-sentence summary followed by Args and Returns sections. It is concise, with no fluff, and each parameter is listed on its own line with clear semantics. Front-loaded with the main purpose.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a tool with 6 parameters, no output schema, and no annotations, the description covers parameter semantics and high-level return value (dictionary with trade analysis, recommendation, and category impact). It could provide more detail on the returned structure or possible failure modes, but it is sufficiently complete for the complexity.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, but the description compensates fully by explaining each parameter: your_player_ids (players you trade away), their_player_ids (players you receive), league_id (optional with env var), year (optional with env var and default), and authentication cookies. It also clarifies the purpose of each parameter beyond type information, which is essential for correct use.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states a specific action ('Analyze a trade proposal') and resource (trade proposal). It distinguishes from sibling tools: none of the siblings specifically analyze trade proposals, making the purpose unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies when to use the tool (when analyzing a trade proposal) but does not explicitly contrast it with alternative tools or state exclusions. No mention of scenarios where another tool would be more appropriate.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
compare_playersA
Compare multiple players across statistical categories.
Args:
player_ids: List of ESPN player IDs to compare
league_id: ESPN Fantasy Basketball league ID (optional, uses ESPN_LEAGUE_ID env var)
year: Season year (e.g., 2025) (optional, uses ESPN_YEAR env var or defaults to 2025)
categories: List of categories to compare (optional, defaults to 9-cat)
espn_s2: ESPN authentication cookie for private leagues (optional, uses ESPN_S2 env var)
swid: ESPN SWID cookie for private leagues (optional, uses ESPN_SWID env var)
Returns:
Dictionary with detailed player comparison and winner by category
| Name | Required | Description | Default |
|---|---|---|---|
| swid | No | ||
| year | No | ||
| espn_s2 | No | ||
| league_id | No | ||
| categories | No | ||
| player_ids | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description discloses important behavioral details: it explains optional parameters, env var fallback (ESPN_LEAGUE_ID, ESPN_YEAR), defaults (9-cat), and authentication requirements for private leagues (espn_s2, swid). However, it does not explicitly state that this is a read-only operation or describe error handling, but the read nature is evident from the verb 'compare.' This provides meaningful context beyond schema.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is structured with an overall summary, Args list, and Returns mention. Each line adds value, but the list format makes it longer than necessary for a simple tool. Still, it is well-organized and not padded; a score of 4 reflects appropriate sizing with a slight efficiency loss from the docstring format.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given that there is no output schema and no annotations, the description covers all six parameters, their defaults, and auth, and summarizes the return as a dictionary with winner by category. It does not detail edge cases like invalid player IDs or what 'winner' means, but it is sufficient for the tool's moderate complexity.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema has zero parameter descriptions (0% coverage), so the description's Args section is the sole source of parameter semantics. It explains player_ids as ESPN IDs, league_id with env var fallback, year with default, categories with default, and auth cookiesāfar exceeding schema info.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description begins with a clear, specific verb phrase 'Compare multiple players across statistical categories,' identifying the resource (players) and scope (statistical categories). This distinguishes it from sibling tools like get_player_stats that focus on single players or league-level queries, and from advisory tools like analyze_trade_proposal.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage by stating 'Compare multiple players,' but it offers no explicit guidance on when to choose this over alternatives. There is no mention of exclusions, such as 'use get_player_stats for a single player's stats.' Usage context is inferred rather than stated, earning a 3.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_available_playersA
Get top available players for the draft with auction values.
Args:
league_id: ESPN Fantasy Basketball league ID (optional, uses ESPN_LEAGUE_ID env var)
year: Season year (e.g., 2025) (optional, uses ESPN_YEAR env var or defaults to 2025)
limit: Number of players to return (default 50)
espn_s2: ESPN authentication cookie for private leagues (optional, uses ESPN_S2 env var)
swid: ESPN SWID cookie for private leagues (optional, uses ESPN_SWID env var)
Returns:
List of available player dictionaries with auction values and rankings
| Name | Required | Description | Default |
|---|---|---|---|
| swid | No | ||
| year | No | ||
| limit | No | ||
| espn_s2 | No | ||
| league_id | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden of behavioral disclosure. It covers authentication needs (ESPN_S2 and SWID cookies for private leagues), environment variable fallbacks, defaults, and the return format (list of player dictionaries with auction values and rankings). This provides meaningful transparency, though it omits potential errors or rate limits.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is well-structured with a one-sentence purpose, an Args section, and a Returns section. It is appropriately sized for 5 parameters, with no redundant information or filler. Every sentence contributes to understanding the tool.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's moderate complexity (5 optional parameters, env var fallbacks, auth requirements), the description is complete: it explains purpose, all parameters, defaults, authentication, and return values. The presence of an output schema further reduces the need to detail return structure, and the description adequately covers behavioral context for an agent to invoke the tool correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema has 0% description coverage, but the description fully documents all 5 parameters with clear semantics: ESPN league ID, season year, limit, and authentication cookies. It also explains env var fallbacks and defaults, adding substantial meaning beyond the raw schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description begins with a specific verb+resource: 'Get top available players for the draft with auction values.' This clearly states what the tool does and differentiates it from sibling tools like get_free_agents or get_trending_players by focusing on draft context and auction values.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage for draft preparation and provides contextual details (e.g., optional league_id, env var fallbacks), but it does not explicitly state when to use this tool versus alternatives like get_free_agents or get_trending_players, nor does it mention exclusions. Usage context is implied rather than explicit.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_draft_statusA
Get current draft status including all picks and progress.
Args:
league_id: ESPN Fantasy Basketball league ID (optional, uses ESPN_LEAGUE_ID env var)
year: Season year (e.g., 2025) (optional, uses ESPN_YEAR env var or defaults to 2025)
espn_s2: ESPN authentication cookie for private leagues (optional, uses ESPN_S2 env var)
swid: ESPN SWID cookie for private leagues (optional, uses ESPN_SWID env var)
Returns:
Dictionary with draft status, picks, and current state
| Name | Required | Description | Default |
|---|---|---|---|
| swid | No | ||
| year | No | ||
| espn_s2 | No | ||
| league_id | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the burden. It clearly indicates a read operation ('Get') and describes the return type as a dictionary with draft status, picks, and state. It also notes authentication needs for private leagues via cookies, adding some context, but does not explicitly state it is read-only or discuss error behavior.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise and well-structured: a single-purpose opening sentence, followed by a clear list of arguments and a returns statement. Every sentence adds value with no repetition or fluff.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple read-only status tool with four optional parameters and no output schema, the description covers the essential aspects: purpose, parameters, auth, and return type. It could provide more detail on what 'draft status' includes beyond picks and progress, but it is largely complete for this tool's complexity.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema has zero descriptions, but the description fully compensates by explaining each parameter: league_id, year, espn_s2, and swid, including env var fallbacks, defaults, and purpose. This adds significant meaning beyond the bare schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states 'Get current draft status including all picks and progress,' which is a specific verb-resource combination. It distinguishes from sibling tools focused on schedules, teams, rosters, free agents, and matchups.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies use when you need draft status but provides no explicit guidance on when to use alternatives or when not to use this tool. It mentions optional parameters and env var fallbacks, giving some context, but lacks exclusionary guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_free_agentsA
Get free agents/waiver wire players from an ESPN Fantasy Basketball league.
Args:
league_id: ESPN Fantasy Basketball league ID (optional, uses ESPN_LEAGUE_ID env var)
year: Season year (e.g., 2025) (optional, uses ESPN_YEAR env var or defaults to 2025)
size: Number of players to return (max 50, default 50)
position_id: Filter by position ID (optional)
espn_s2: ESPN authentication cookie for private leagues (optional, uses ESPN_S2 env var)
swid: ESPN SWID cookie for private leagues (optional, uses ESPN_SWID env var)
Returns:
List of available free agent player dictionaries
| Name | Required | Description | Default |
|---|---|---|---|
| size | No | ||
| swid | No | ||
| year | No | ||
| espn_s2 | No | ||
| league_id | No | ||
| position_id | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden of behavioral disclosure. It discloses authentication needs for private leagues (espn_s2, swid), environment variable fallbacks, and default behavior for size. It also states the return type (list of dictionaries). This is useful context beyond the schema, though it does not detail error conditions or rate limits.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is appropriately structured with 'Args' and 'Returns' sections. It is somewhat lengthy but each sentence adds value, covering all parameters and return type without fluff. The use of bullets or separators would improve scannability, but it remains efficient.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's complexity (6 parameters, multiple env vars, optional auth) and the presence of an output schema, the description is complete enough for an agent to invoke it correctly. It covers all parameters, defaults, return structure, and mentions max size, leaving no critical gaps.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description is the only source of parameter meaning. It fully compensates by explaining each of the 6 parameters: league_id, year, size, position_id, espn_s2, and swid, including optionality and env var usage. This is comprehensive and clear.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states it retrieves free agents/waiver wire players from an ESPN Fantasy Basketball league, using a specific verb and resource. However, it does not explicitly distinguish this from the sibling tool 'get_available_players', which could overlap in functionality.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides no guidance on when to use this tool versus alternatives. There is no mention of scenarios like 'use for free agent pickups' or 'use get_available_players for a broader query'. The parameter defaults are noted, but usage context is absent.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_league_teamsA
Get all teams in an ESPN Fantasy Basketball league.
Args:
league_id: ESPN Fantasy Basketball league ID (optional, uses ESPN_LEAGUE_ID env var)
year: Season year (e.g., 2025) (optional, uses ESPN_YEAR env var or defaults to 2025)
espn_s2: ESPN authentication cookie for private leagues (optional, uses ESPN_S2 env var)
swid: ESPN SWID cookie for private leagues (optional, uses ESPN_SWID env var)
Returns:
List of team dictionaries with id, name, location, record, etc.
| Name | Required | Description | Default |
|---|---|---|---|
| swid | No | ||
| year | No | ||
| espn_s2 | No | ||
| league_id | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the transparency burden. It explains env var fallbacks, optional authentication cookies for private leagues, and the return shape. However, it does not disclose potential errors or network behavior, but for a read operation this is adequate.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The docstring is compact and structured with Args/Returns sections. Every sentence provides necessary information without redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description covers the tool's purpose, all parameters, auth for private leagues, and return data. It lacks error handling details but is complete for a simple read-all operation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0%, so the description must explain all parameters. It does: league_id, year, espn_s2, swid, each with purpose, optionality, and env var defaults. This adds significant value beyond the schema's bare type definitions.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states 'Get all teams in an ESPN Fantasy Basketball league,' which clearly identifies the action and resource. This distinguishes it from siblings like get_team_roster (single team) and get_free_agents (different entity type).
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies use when needing all teams in a league but does not explicitly contrast with alternatives or state exclusions. It provides context on optional parameters and authentication but lacks clear 'use this instead of X' guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_matchupsA
Get matchups/schedule for an ESPN Fantasy Basketball league.
Args:
league_id: ESPN Fantasy Basketball league ID (optional, uses ESPN_LEAGUE_ID env var)
year: Season year (e.g., 2025) (optional, uses ESPN_YEAR env var or defaults to 2025)
scoring_period: Specific scoring period to get matchups for (optional)
espn_s2: ESPN authentication cookie for private leagues (optional, uses ESPN_S2 env var)
swid: ESPN SWID cookie for private leagues (optional, uses ESPN_SWID env var)
Returns:
List of matchup dictionaries with home/away teams and scores
| Name | Required | Description | Default |
|---|---|---|---|
| swid | No | ||
| year | No | ||
| espn_s2 | No | ||
| league_id | No | ||
| scoring_period | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the burden of behavioral disclosure. It explains authentication requirements (espn_s2, swid) for private leagues, environment variable fallbacks, and the return format (list of matchup dictionaries). It does not mention error handling or rate limits, but for a read-only retrieval tool this is fairly transparent.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is well-structured with a one-sentence purpose followed by a clean Args block and Returns line. Every line earns its place; there is no redundant text or fluff.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given moderate complexity (5 params) and an existing output schema, the description covers parameter semantics and return shape. It lacks explicit differentiation from sibling schedule tools, but overall provides sufficient context for an agent to invoke it correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description fully compensates by explaining every parameter: league_id and year fall back to env vars/defaults, scoring_period selects a specific period, and espn_s2/swid authenticate private leagues. This adds significant meaning beyond the bare schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with 'Get matchups/schedule for an ESPN Fantasy Basketball league,' using a specific verb and resource. This clearly distinguishes it from siblings like get_nba_schedule by specifying 'Fantasy Basketball league' matchups.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage for retrieving league matchups or schedules, and documents optional parameters including auth for private leagues. It does not explicitly state when to prefer this over siblings like get_nba_schedule or get_league_teams, but the context is clear enough for correct selection.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_nba_scheduleA
Get NBA schedule for a specific date.
Args:
date: Date in YYYY-MM-DD format (optional, defaults to today)
Returns:
List of NBA game dictionaries with teams, times, and details
| Name | Required | Description | Default |
|---|---|---|---|
| date | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the burden. It discloses the default behavior (defaults to today) and return format, but does not explicitly state that this is a read-only operation or mention error handling for invalid dates. This is adequate but not rich.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise, using two short sentences and a clear Args/Returns structure. Every line adds value without unnecessary verbosity.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the low complexity (one optional parameter) and the presence of an output schema, the description sufficiently covers the tool's behavior. It states the return type as a list of game dictionaries, which is enough for an agent to understand the tool's purpose.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema provides only the type and default for the date parameter without any description. The tool description compensates by specifying the date format (YYYY-MM-DD) and the default behavior (defaults to today), adding meaningful semantics beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool gets NBA schedules for a specific date, using the verb 'Get' with a specific resource ('NBA schedule'). It is distinct from siblings like get_league_teams, get_matchups, etc., which focus on different data types.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage for retrieving schedule data for a given date, with an optional date parameter. It does not explicitly provide alternative tools or exclude cases, but the context is clear enough for an agent to select it over sibling tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_player_statsA
Get comprehensive player statistics for specified timeframe.
Args:
player_id: ESPN player ID
league_id: ESPN Fantasy Basketball league ID (optional, uses ESPN_LEAGUE_ID env var)
year: Season year (e.g., 2025) (optional, uses ESPN_YEAR env var or defaults to 2025)
timeframe: Time period - "season", "projections", "last_7", "last_30"
espn_s2: ESPN authentication cookie for private leagues (optional, uses ESPN_S2 env var)
swid: ESPN SWID cookie for private leagues (optional, uses ESPN_SWID env var)
Returns:
Dictionary with comprehensive player statistics across all categories
| Name | Required | Description | Default |
|---|---|---|---|
| swid | No | ||
| year | No | ||
| espn_s2 | No | ||
| league_id | No | ||
| player_id | Yes | ||
| timeframe | No | season |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden of behavioral disclosure. It responsibly documents authentication requirements for private leagues (espn_s2, swid), environment variable fallbacks, and default year behavior, which are meaningful traits. However, it does not disclose error handling or what happens if a player lookup fails, and the Returns line is generic.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise and well-structured: a one-line summary, followed by a compact Args list, and a brief Returns line. Every sentence serves a purpose, and the format is easy to scan for an AI agent.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's moderate complexity (6 params, no output schema, no annotations), the description covers all parameters and provides a high-level return type. However, the Returns description 'Dictionary with comprehensive player statistics across all categories' is vague about the actual structure, and there is no mention of potential errors or edge cases. This prevents a perfect score.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema provides zero description coverage, but the description's Args section fully explains every parameter, including optionality, defaults, and possible values (e.g., timeframe enumerates 'season', 'projections', 'last_7', 'last_30'). This adds substantial meaning beyond the bare schema field names and compensates for the 0% schema coverage.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The opening sentence 'Get comprehensive player statistics for specified timeframe' clearly states a specific action (get) and resource (player statistics) with a defined scope (timeframe). This distinguishes the tool from siblings like get_team_roster or get_nba_schedule, which serve different purposes.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides no guidance on when to use this tool versus alternatives. It simply lists parameters without explaining typical use cases, prerequisites, or scenarios where another tool would be more appropriate. Sibling tools like compare_players or get_trending_players are not mentioned in any cross-referencing way.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_team_rosterA
Get roster for a specific team in an ESPN Fantasy Basketball league.
Args:
team_id: Team ID to get roster for (optional, uses ESPN_TEAM_ID env var)
league_id: ESPN Fantasy Basketball league ID (optional, uses ESPN_LEAGUE_ID env var)
year: Season year (e.g., 2025) (optional, uses ESPN_YEAR env var or defaults to 2025)
scoring_period: Specific scoring period (optional)
espn_s2: ESPN authentication cookie for private leagues (optional, uses ESPN_S2 env var)
swid: ESPN SWID cookie for private leagues (optional, uses ESPN_SWID env var)
Returns:
Dictionary with team roster including all players and their positions
| Name | Required | Description | Default |
|---|---|---|---|
| swid | No | ||
| year | No | ||
| espn_s2 | No | ||
| team_id | No | ||
| league_id | No | ||
| scoring_period | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the transparency burden but only partially. It discloses that parameters fall back to environment variables (e.g., ESPN_TEAM_ID), that cookies are needed for private leagues, and that it returns a dictionary with players and positions. However, it does not mention read-only nature explicitly, error cases, or any side effects, missing opportunities for richer behavioral context.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is front-loaded with a one-sentence purpose, followed by a structured Args list and a Returns section. It is efficient for a 6-parameter tool, with no fluff. The Args list is necessary given the zero schema coverage, so the length is justified.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given there is no output schema, the description provides a return type ('Dictionary with team roster including all players and positions'), and covers all parameters. However, it lacks usage context (e.g., when to prefer this over get_available_players) and edge-case behavior, but for a simple roster-fetch tool it is relatively complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema has 0% description coverage, and the description fully compensates by explaining each parameter's meaning, optionality, and env var defaults. For example, team_id is 'Team ID to get roster for', year defaults to 2025 if not provided, and espn_s2/swid are for private league authentication. This adds significant value beyond the raw schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states 'Get roster for a specific team' with a clear verb and resource, and specifies the domain (ESPN Fantasy Basketball league). This distinguishes it from sibling tools like get_league_teams (lists teams) and get_available_players, as it focuses on a single team's roster.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No explicit guidance on when to use this tool versus alternatives, nor any exclusions or context such as 'use for viewing active players'. The description only restates the purpose and parameter definitions, leaving the agent to infer appropriate usage from the name and siblings.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_trending_playersA
Get players trending up or down in adds/drops for waiver wire intelligence.
Args:
league_id: ESPN Fantasy Basketball league ID (optional, uses ESPN_LEAGUE_ID env var)
year: Season year (e.g., 2025) (optional, uses ESPN_YEAR env var or defaults to 2025)
direction: Trending direction - "up" or "down"
limit: Number of players to return (default 20)
espn_s2: ESPN authentication cookie for private leagues (optional, uses ESPN_S2 env var)
swid: ESPN SWID cookie for private leagues (optional, uses ESPN_SWID env var)
Returns:
List of trending player dictionaries with add/drop percentages and reasons
| Name | Required | Description | Default |
|---|---|---|---|
| swid | No | ||
| year | No | ||
| limit | No | ||
| espn_s2 | No | ||
| direction | No | up | |
| league_id | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the burden. It reveals that optional parameters fall back to environment variables, specifies defaults for year/direction/limit, and states the return structure (list of dicts with add/drop percentages). It does not discuss potential errors or rate limits, but for a read-only data-fetch tool this is adequate.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is efficiently organized into a one-sentence summary, an Args list, and Returns section. No redundant text, and every line serves a purpose.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 6-param tool with no required parameters and an output schema, the description covers all parameters, defaults, env var handling, authentication, and return type. It provides sufficient context for an agent to invoke the tool correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The description explains every parameter with human-readable meaning, including optionality, env var fallbacks, and defaults, whereas the schema only lists types. It also clarifies the 'direction' allowed values and the meaning of 'limit'.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Description clearly states a specific action ('Get players trending up or down in adds/drops') and purpose ('waiver wire intelligence'). This differentiates it from sibling tools like get_free_agents or get_player_stats.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The phrase 'for waiver wire intelligence' conveys the intended use case but does not explicitly mention alternatives or when-not-to-use. It implies usage for tracking player add/drop momentum, which is reasonably clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
should_i_bidA
Get recommendation on whether to bid for the current player being nominated.
Args:
current_player_id: ID of player currently being nominated
team_id: Your team ID (optional, uses ESPN_TEAM_ID env var)
league_id: ESPN Fantasy Basketball league ID (optional, uses ESPN_LEAGUE_ID env var)
year: Season year (e.g., 2025) (optional, uses ESPN_YEAR env var or defaults to 2025)
espn_s2: ESPN authentication cookie for private leagues (optional, uses ESPN_S2 env var)
swid: ESPN SWID cookie for private leagues (optional, uses ESPN_SWID env var)
Returns:
Dictionary with bid recommendation, suggested amount, and reasoning
| Name | Required | Description | Default |
|---|---|---|---|
| swid | No | ||
| year | No | ||
| espn_s2 | No | ||
| team_id | No | ||
| league_id | No | ||
| current_player_id | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden. It discloses env var fallbacks and the use of auth cookies for private leagues, but does not explicitly state read-only behavior, error conditions, or limitations. This is partially transparent but not fully comprehensive.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is well-structured with a clear purpose line, an Args section, and a Returns section. Every line provides valuable information without redundancy, making it appropriately concise and front-loaded.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description adequately covers the tool's purpose, all arguments, and the return shape, which is sufficient given the tool's moderate complexity and lack of output schema. It could add examples or edge-case details but is otherwise complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema has 0% description coverage, but the description compensates by explaining all six parameters, including defaults, env var fallbacks, and purpose. This adds significant meaning beyond the schema's bare type definitions.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's purpose with a specific verb ('Get recommendation') and resource ('current player being nominated'). It distinguishes from sibling tools like who_should_i_target_next, which focuses on targeting rather than bidding.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage during an auction nomination by referencing 'current player being nominated,' giving clear context. However, it does not explicitly mention when not to use it or compare with alternatives, leaving out exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
who_should_i_target_nextA
Get recommendation on which player to target/nominate next.
Args:
team_id: Your team ID (optional, uses ESPN_TEAM_ID env var)
league_id: ESPN Fantasy Basketball league ID (optional, uses ESPN_LEAGUE_ID env var)
year: Season year (e.g., 2025) (optional, uses ESPN_YEAR env var or defaults to 2025)
espn_s2: ESPN authentication cookie for private leagues (optional, uses ESPN_S2 env var)
swid: ESPN SWID cookie for private leagues (optional, uses ESPN_SWID env var)
Returns:
Dictionary with player recommendation and reasoning
| Name | Required | Description | Default |
|---|---|---|---|
| swid | No | ||
| year | No | ||
| espn_s2 | No | ||
| team_id | No | ||
| league_id | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the transparency burden. It usefully discloses that all parameters are optional with environment variable fallbacks, and that espn_s2 and swid are authentication cookies for private leagues. It also states the return type. However, it does not mention potential side effects, limitations, or the nature of the recommendation logic, leaving some behavior implicit.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is well-structured with a clear one-sentence purpose, an Args list, and a Returns line. It is appropriately sized for a tool with 5 parameters. Minor repetition of the 'optional' pattern is acceptable but could be slightly tighter.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description covers all inputs and states the return is a dictionary with recommendation and reasoning, but there is no output schema and the return format is vague. It does not explain what factors drive the recommendation or how it relates to the sibling tools. Given the tool's complexity and lack of annotations, more detail on expected outputs and selection context would improve completeness.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema provides no descriptions (0% coverage), so the description must compensate. It does so thoroughly, explaining every parameter (team_id, league_id, year, espn_s2, swid), including their types, optionality, environment variable fallbacks, and purpose. This is a strong addition beyond the bare schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's function: 'Get recommendation on which player to target/nominate next.' This provides a specific verb+resource combination that is distinct from siblings like get_free_agents or should_i_bid. However, it does not explicitly differentiate itself from similar analysis tools such as analyze_my_draft_strategy.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives no guidance on when to use this tool versus alternatives. It does not mention suitable contexts, prerequisites, or exclusions. The name and brief description imply its use case, but there is no explicit direction.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections. Dates show when Glama detected each change.
14 tool updates
v1.0.0- First observed
analyze_my_draft_strategy - First observed
analyze_trade_proposal - First observed
compare_players - First observed
get_available_players - First observed
get_draft_status - First observed
get_free_agents - First observed
get_league_teams - First observed
get_matchups - First observed
get_nba_schedule - First observed
get_player_stats - First observed
get_team_roster - First observed
get_trending_players - First observed
should_i_bid - First observed
who_should_i_target_next
TDQS
Scored across 14 tools
Most tools have distinct purposes: schedule, teams, rosters, free agents, matchups, draft status, player stats, comparisons, trade analysis, and trends. However, 'get_free_agents' and 'get_available_players' could be confused (one is for waiver wire, the other for draft), and the three draft advisory tools ('should_i_bid', 'who_should_i_target_next', 'analyze_my_draft_strategy') overlap in context though they produce different outputs.
The majority follow a clear 'get_' or 'analyze_' + noun pattern, such as get_league_teams, get_player_stats, and analyze_trade_proposal. A few deviating question-style names (should_i_bid, who_should_i_target_next) stand out but are still readable and follow a similar snake_case style.
14 tools is a well-scoped set for a fantasy basketball analytics server. Each tool addresses a meaningful aspect of the domain without redundancy, and the count falls comfortably in the ideal range.
The server covers most core read and analysis workflows: schedule, rosters, matchups, draft, free agents, player stats, comparisons, trends, and trade evaluations. It lacks write operations like adding players or setting lineups, but for an advisory/analytics assistant this is a reasonable scope with only minor gaps.
Maintenance
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Related MCP Connectors
- UnifAPIOAuthcom.unifapi
Hosted MCP server for live public-data APIs and Skills for AI agents.
An MCP server that provides an API to LLMs to manage their JumpCloud resources.
MCP server providing access to the Scorecard API to evaluate and optimize LLM systems.
MCP server that lets AI assistants use all OneSchema features exposed via the public API.
Related MCP Servers
- FlicenseNot gradedqualityDmaintenanceAn MCP server for accessing college basketball statistics through the SportsData.io CBB v3 Stats API, enabling AI agents to retrieve and analyze college basketball data through natural language interactions.-
- AlicenseAqualityCmaintenanceMCP server for NBA live data and stats, providing read-only tools to query live scores, box scores, player info, standings, and more from NBA.com.1591MIT
- AlicenseAqualityCmaintenanceMCP server providing access to ESPN Fantasy Baseball data, enabling league settings, rosters, player lookup, free agents, waiver claims, lineup changes, and trade management.161MIT
- FlicenseNot gradedqualityDmaintenanceMCP server that enables Claude Desktop to access real-time sports data including live scores, fixtures, standings, and NBA statistics using free APIs.-
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/dylancharris/espn-fantasy-basketball-mcp'
If you have feedback or need assistance with the MCP directory API, please join our Discord server