ESPN Fantasy MCP Server
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 MCP ServerShow me my league standings"
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 MCP Server
MCP (Model Context Protocol) server providing access to ESPN Fantasy Baseball data, for use with Claude Code and other MCP clients.
Features
Read league settings, standings, and team information
View rosters with player details and lineup positions
Look up players by name with fuzzy matching
Browse and add free agents, submit waiver claims
Modify lineups
Propose, accept, decline, and cancel trades
Related MCP server: MLB V3 Scores MCP Server
Quick Start
1. Get ESPN Cookies
To access private leagues, you need ESPN authentication cookies:
Log in to ESPN Fantasy Baseball
Open browser DevTools → Application → Cookies →
https://fantasy.espn.comCopy
espn_s2(long string) andSWID(format:{XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX})
2. Add to Claude Code
claude mcp add --scope user --transport stdio espn-fantasy \
--env ESPN_S2=your_espn_s2_cookie \
--env ESPN_SWID={your_espn_swid_cookie} \
--env ESPN_LEAGUE_ID=your_league_id \
--env ESPN_TEAM_ID=your_team_id \
--env ESPN_SEASON_YEAR=2026 \
-- uvx espn-fantasy-mcpKeep the curly braces in the SWID value. uvx handles installation automatically — no separate install step needed.
3. Verify
Restart Claude Code or run /mcp and confirm "espn-fantasy" appears in the server list. Then try: "Show me my fantasy baseball league settings"
Documentation
Tool Reference — all available tools and parameters
Configuration — scopes, manual config, troubleshooting
Local Development
git clone https://github.com/i-am-david-weinstein/espn-fantasy-mcp.git
cd espn-fantasy-mcp
pip install -e ".[dev]"
pytestTo use a local install with Claude Code, replace the uvx ... portion of the claude mcp add command with python3 -m espn_fantasy_mcp.
Contributing
Contributions welcome — open an issue or submit a pull request.
License
MIT
Acknowledgments
Built with MCP Python SDK
Uses espn-api
Available Tools
16 toolsaccept_tradeA
Accept a pending trade offer from another team. Uses a confirmation pattern: first call (confirm=false) previews the acceptance, second call (confirm=true) executes it. You need the transaction ID from the trade proposal.
| Name | Required | Description | Default |
|---|---|---|---|
| confirm | No | If false (default), returns a preview. If true, accepts the trade. | |
| team_id | No | Your team ID (1-based index) | |
| league_id | No | ESPN League ID (defaults to configured league) | |
| season_year | No | Season year (defaults to current year) | |
| transaction_id | No | Transaction ID of the trade proposal to accept | |
| scoring_period_id | No | Scoring period for the transaction (defaults to current) |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided, so description carries full burden. It discloses the preview vs. execution behavior but does not describe what the preview returns, whether the action is reversible, or what side effects occur (e.g., player movement). 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?
Two sentences with clear, front-loaded purpose. Efficient, though the first sentence could incorporate the pattern hint to reduce redundancy. No 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?
With 6 parameters and an output schema, the description adequately covers the core usage. It mentions the key parameter (transaction_id) and the two-step process. Could enhance by clarifying the preview output or default settings, but sufficient.
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 100%, so baseline is 3. The description reiterates the need for transaction_id and the confirm pattern, which is already in the schema. No additional semantic value beyond what the schema provides.
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 'Accept a pending trade offer from another team', which is a specific verb+resource. It distinguishes from sibling tools like decline_trade, propose_trade, cancel_trade by focusing on acceptance and the confirmation pattern.
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 explicitly explains the two-step confirmation pattern (preview then execute) and that you need a transaction_id. It implies when to use (have a pending trade) but does not explicitly state when not to use or alternatives like cancel_trade.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
add_free_agentA
Add a free agent to your team, optionally dropping a player. Uses a confirmation pattern: first call (confirm=false) previews the changes, second call (confirm=true) executes them. If your roster is full, you must specify a player to drop.
| Name | Required | Description | Default |
|---|---|---|---|
| confirm | No | If false (default), returns a preview of transaction. If true, executes the add/drop transaction. | |
| team_id | No | Team ID (1-based index) | |
| league_id | No | ESPN League ID (defaults to configured league) | |
| season_year | No | Season year (defaults to current year) | |
| add_player_id | No | ESPN player ID to add | |
| drop_player_id | No | ESPN player ID to drop (required if roster is full) | |
| scoring_period_id | No | Scoring period (week) for transaction (defaults to current period) |
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 fully carries the burden of behavioral disclosure. It discloses the destructive nature (adding/dropping players) and the two-step confirmation pattern (preview then execute). It also explains the condition when drop is mandatory. It does not mention permissions or reversibility, which are minor gaps given the clarity of the confirm pattern.
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 three sentences (55 words), all essential. It front-loads the purpose, then explains the confirmation pattern, then addresses the roster condition. No filler or repetition.
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 (7 parameters, confirmation pattern) and presence of an output schema (not shown), the description covers core functionality, flow, and a key condition. It does not mention error handling or rate limits, but with no annotations and a good schema, it provides sufficient context for an AI agent to invoke 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 100%, so baseline is 3. The description adds meaning beyond the schema by explaining the confirm pattern (preview vs execute) and the condition for drop_player_id (required if roster full). It also implicitly clarifies that add_player_id and drop_player_id are ESPN player IDs, which is context not explicitly in 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's action: 'Add a free agent to your team, optionally dropping a player.' It distinguishes from siblings like drop_player (which only drops) and claim_waiver (different process) by explicitly mentioning the optional drop and confirmation pattern.
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 explains when to use the tool: for adding a free agent with optional drop, and specifies the two-step confirmation pattern. It also notes the condition when drop_player_id is required (roster full). However, it does not explicitly contrast with sibling tools like drop_player or claim_waiver, so usage context is clear but lacks explicit exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
cancel_tradeA
Cancel a pending trade proposal you sent. Uses a confirmation pattern: first call (confirm=false) previews the cancellation, second call (confirm=true) executes it. You need the transaction ID from the original trade proposal.
| Name | Required | Description | Default |
|---|---|---|---|
| confirm | No | If false (default), returns a preview. If true, cancels the trade proposal. | |
| team_id | No | Your team ID (1-based index) | |
| league_id | No | ESPN League ID (defaults to configured league) | |
| season_year | No | Season year (defaults to current year) | |
| transaction_id | No | Transaction ID from the original trade proposal | |
| scoring_period_id | No | Scoring period for the transaction (defaults to current) |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided, so description must disclose behavior; explains preview/execute mechanism but doesn't mention destructive nature or rate limits. Adequate but not rich beyond what's needed.
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?
Two sentences, front-loaded with purpose, no wasted words.
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?
Covers purpose, confirmation pattern, and required transaction ID; output schema exists for return values. Minor omission: doesn't mention that team_id may be needed, but it's optional in schema.
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 covers 100% of parameters with descriptions; description adds confirmation pattern context but doesn't significantly enhance parameter meaning beyond schema baseline.
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?
States 'Cancel a pending trade proposal you sent' with specific verb and resource; clearly distinguishable from sibling tools like propose_trade, accept_trade, decline_trade.
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?
Describes confirmation pattern (preview then execute) and mentions need for transaction ID; provides clear context, though no explicit when-not-to-use guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
cancel_waiverA
Cancel a pending waiver claim. Uses a confirmation pattern: first call (confirm=false) previews the cancellation, second call (confirm=true) executes it. You need the transaction ID from the original waiver claim to cancel it.
| Name | Required | Description | Default |
|---|---|---|---|
| confirm | No | If false (default), returns a preview of cancellation. If true, executes the waiver claim cancellation. | |
| team_id | No | Team ID (1-based index) | |
| league_id | No | ESPN League ID (defaults to configured league) | |
| season_year | No | Season year (defaults to current year) | |
| transaction_id | No | Transaction ID from the original waiver claim response | |
| scoring_period_id | No | Scoring period (week) for transaction (defaults to current period) |
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 discloses the two-step confirmation pattern to prevent accidental cancellation. It does not detail permissions or irreversible effects, but the preview step mitigates risk.
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 with three sentences: first states purpose, then explains usage pattern, then mentions prerequisite. No extraneous information.
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, usage pattern, and required inputs. With an output schema present, return values are handled separately. It sufficiently prepares an agent for invocation.
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 adds value beyond the 100% schema coverage by explaining the role of confirm and emphasizing the need for transaction_id. This contextualizes the parameters effectively.
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 'Cancel a pending waiver claim' with a specific verb and resource. It distinguishes from siblings like claim_waiver and cancel_trade by focusing on waiver claims.
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 explains the confirmation pattern and the prerequisite of having a transaction ID. It provides clear context on how to use the tool but does not explicitly exclude alternatives or state when not to use.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
claim_waiverA
Submit a waiver claim with optional FAAB bid. Uses a confirmation pattern: first call (confirm=false) previews the changes, second call (confirm=true) executes them. Waiver claims are processed during waiver periods and have a pending status until processed. If your roster is full, you must specify a player to drop.
| Name | Required | Description | Default |
|---|---|---|---|
| confirm | No | If false (default), returns a preview of waiver claim. If true, executes the waiver claim. | |
| team_id | No | Team ID (1-based index) | |
| league_id | No | ESPN League ID (defaults to configured league) | |
| bid_amount | No | FAAB bid amount (defaults to 0 for free waiver claim) | |
| season_year | No | Season year (defaults to current year) | |
| add_player_id | No | ESPN player ID to claim off waivers | |
| drop_player_id | No | ESPN player ID to drop (required if roster is full) | |
| scoring_period_id | No | Scoring period (week) for transaction (defaults to current period) |
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 full burden. It discloses the confirmation pattern, pending status, processing during waiver periods, and the requirement to drop a player if roster is full. It does not mention idempotency, rate limits, or error conditions, but covers key behavioral aspects adequately.
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?
Four sentences, front-loaded with the main action. Every sentence serves a purpose: action, confirmation pattern, processing details, roster condition. No redundancy or wasted words.
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 8 parameters, no annotations, and an output schema, the description covers key behaviors (confirmation, pending, roster full). It does not explain return values or error conditions, but is sufficiently complete for a waiver claim tool.
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 100%, baseline 3. Description adds context beyond schema by explaining the confirmation pattern, default bid of 0, and when drop_player_id is required. This provides meaningful guidance for parameter usage.
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 begins with 'Submit a waiver claim with optional FAAB bid', providing a specific verb+resource. It clearly differentiates from sibling tools like add_free_agent (immediate vs. waiver processing) and drop_player (drop only) by explaining the waiver process and pending status.
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?
Description explains when to use the tool (waiver claims), the confirmation pattern (preview then execute), and a condition (roster full requires drop). It implicitly distinguishes from add_free_agent by mentioning waiver periods, but does not explicitly state when not to use it or compare to all alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
decline_tradeA
Decline a trade offer from another team. Uses a confirmation pattern: first call (confirm=false) previews the decline, second call (confirm=true) executes it.
| Name | Required | Description | Default |
|---|---|---|---|
| comment | No | Optional reason for declining | |
| confirm | No | If false (default), returns a preview. If true, declines the trade. | |
| team_id | No | Your team ID (1-based index) | |
| league_id | No | ESPN League ID (defaults to configured league) | |
| season_year | No | Season year (defaults to current year) | |
| transaction_id | No | Transaction ID of the trade proposal to decline | |
| scoring_period_id | No | Scoring period for the transaction (defaults to current) |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, description effectively discloses the two-step confirmation behavior. Could be improved by noting that the action is irreversible after confirmation, but the preview pattern is well explained.
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?
Extremely concise: two sentences covering purpose and usage pattern without any fluff. Every word adds value.
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 output schema exists and parameters are well-documented in the schema, the description is sufficiently complete. The confirmation pattern is a key behavioral detail not captured elsewhere.
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 covers all parameters with descriptions (100% coverage), so the description adds no additional meaning beyond confirming the confirm parameter's role. Baseline score of 3 is appropriate.
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?
Clearly specifies the action (decline) and resource (trade offer). Distinguishes from siblings like accept_trade and cancel_trade by focusing on declining incoming offers.
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?
Explains the confirmation pattern (preview vs execute) and that it's for trade offers from another team. Does not explicitly list when not to use or name siblings as alternatives, but the context provides sufficient clarity.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
drop_playerA
Drop a player from your team. Uses a confirmation pattern: first call (confirm=false) previews the changes, second call (confirm=true) executes them.
| Name | Required | Description | Default |
|---|---|---|---|
| confirm | No | If false (default), returns a preview of transaction. If true, executes the drop transaction. | |
| team_id | No | Team ID (1-based index) | |
| league_id | No | ESPN League ID (defaults to configured league) | |
| player_id | No | ESPN player ID to drop | |
| season_year | No | Season year (defaults to current year) | |
| scoring_period_id | No | Scoring period (week) for transaction (defaults to current period) |
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 must disclose behavioral traits. It reveals the confirmation pattern and that the tool is a mutation. It does not detail side effects (e.g., whether the player becomes a free agent or goes to waivers) but the preview mechanism adds safety 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 two sentences, efficient and front-loaded with the core purpose. Every word is necessary and there is no 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?
Given 6 optional parameters and an output schema, the description adequately covers the key behavior (confirmation pattern). It could mention that the preview response structure is provided by the output schema, but the current text is sufficient for understanding the workflow.
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 100%, so the baseline is 3. The description does not add extra parameter semantics beyond what the schema provides (e.g., confirm, team_id, etc.). It does not explain how parameters interact beyond the confirmation flag.
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 drops a player from the team and distinguishes the confirmation pattern. The verb 'drop' and resource 'player from your team' are specific, differentiating it from sibling tools like add_free_agent or claim_waiver.
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 explains that the tool uses a two-step confirmation pattern (preview then execute). While it does not explicitly list when not to use or alternatives, the guidance for using confirm=false first and confirm=true second is clear and actionable.
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 list of available free agents on the waiver wire.
| Name | Required | Description | Default |
|---|---|---|---|
| size | No | Number of players to return (default: 50) | |
| position | No | Filter by position (C, 1B, 2B, SS, 3B, OF, SP, RP, P) | |
| league_id | No | ESPN League ID | |
| season_year | No | Season year (defaults to current year) |
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 must fully disclose behavior. It only states 'get list' without mentioning pagination, ordering, or any other behavior. This leaves the agent uncertain about what the response contains.
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 a single, short sentence with no wasted words. However, some additional context could be provided without harming conciseness.
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 retrieval tool with an output schema (presumably documenting return structure), the description is adequate. It covers the core functionality but lacks details like default sorting or behavior if no parameters are provided.
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?
All parameters are described in the input schema (100% coverage). The description adds no extra meaning beyond what the schema already provides, meeting the baseline expectation.
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 retrieves a list of free agents on the waiver wire, using a specific verb and resource. It effectively distinguishes from sibling tools like add_free_agent or drop_player.
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?
There is no explicit guidance on when to use this tool versus alternatives. Usage is implied as 'when you need to see available free agents', but no context or exclusions are provided.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_league_settingsB
Get league configuration including scoring categories, roster settings, and league rules.
| Name | Required | Description | Default |
|---|---|---|---|
| league_id | No | ESPN League ID (found in league URL) | |
| season_year | No | Season year (defaults to current year if not specified) |
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 description must carry behavioral transparency. It only states the tool gets configuration, but discloses no behavioral traits like idempotency, rate limits, or side effects. Since it is a read operation, these are missing.
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?
Single sentence with verb front-loaded. No unnecessary words. Efficient and clear.
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?
Has output schema, so return values need not be described. Two parameters with defaults and clear schema descriptions. However, without annotations, behavioral cues like idempotency or read-only nature 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?
Schema description coverage is 100%, so schema already documents league_id and season_year. Description adds no additional meaning to parameters beyond summarizing output. Baseline 3 is appropriate.
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 uses specific verb 'Get' and resource 'league configuration', listing examples like scoring categories, roster settings, and league rules. It clearly conveys purpose and distinguishes from sibling tools like get_team or get_standings, though does not explicitly differentiate from them.
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?
Description implies usage context by stating it retrieves league settings, but does not provide explicit when-to-use, when-not-to-use, or alternatives. For example, it could mention that this is for overall league info rather than team-specific data.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_pending_transactionsA
Get waiver claims and trade proposals for a team, including all statuses (PENDING, EXECUTED, CANCELED). Each entry includes its status field. For trades, returns both sent and received proposals.
| Name | Required | Description | Default |
|---|---|---|---|
| team_id | No | Team ID (1-based index). If omitted, returns all pending transactions league-wide. | |
| league_id | No | ESPN League ID (defaults to configured league) | |
| season_year | No | Season year (defaults to current year) |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided, so description carries full burden. States return includes all statuses and trade directions, but does not explicitly state read-only nature or authentication requirements. Adequate for a non-destructive operation.
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?
Two sentences, no unnecessary words. Each sentence serves a purpose: first defines scope and content, second clarifies trade specifics.
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?
With output schema present and only 3 optional params, description covers what is returned (waivers, trades, statuses, both sides). Sufficient for agent to understand usage.
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 covers all 3 parameters with descriptions, and description adds context: team_id omitted returns league-wide, league_id defaults to configured league, season_year defaults to current year. Adds value beyond 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?
Description specifies verb 'get', resource 'pending transactions' (waiver claims and trade proposals), and includes status categories. Clearly distinguishes from action-oriented siblings like claim_waiver, propose_trade, etc.
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?
Purpose is clear for viewing pending transactions, but no explicit when-to-use vs alternatives. Implicit differentiation from sibling tools that perform actions (add, drop, propose). Could mention that to see detailed info, but not required.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_player_infoA
Look up a player by name and get detailed information including stats, position, team, and roster status. Supports fuzzy matching for misspelled names.
| Name | Required | Description | Default |
|---|---|---|---|
| league_id | No | ESPN League ID | |
| player_name | Yes | Player's full name (e.g., 'Shohei Ohtani', 'Aaron Judge') | |
| season_year | No | Season year (defaults to current year) |
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 describes the read behavior and fuzzy matching. It is clear that no modifications occur, but explicitly stating read-only would improve transparency.
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?
Two concise sentences, front-loaded with the action and key details. Every sentence adds 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?
Given the output schema exists and three parameters are fully described, the description sufficiently covers the tool's purpose and behavior. It mentions fuzzy matching and the type of data returned.
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 already has 100% parameter descriptions. The description adds value by noting fuzzy matching, which is not in the schema. This enhances understanding beyond the schema alone.
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 looks up a player by name and returns detailed information (stats, position, team, roster status). It also highlights fuzzy matching, distinguishing it from sibling tools that query teams or rosters.
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 using the tool when you have a player name and need details, but it does not explicitly specify when to use this tool versus alternatives like get_roster or get_free_agents.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_rosterB
Get current roster for a team with player details and lineup positions.
| Name | Required | Description | Default |
|---|---|---|---|
| team_id | No | Team ID (1-based index) | |
| league_id | No | ESPN League ID | |
| season_year | No | Season year (defaults to current year) |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided. Description does not disclose that this is a read-only, non-destructive operation. Minimal behavioral context beyond the name.
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?
Single sentence, no wasted words. Efficiently conveys the core 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?
Adequate for a simple read tool with output schema. But lacks mention of read-only nature or any behavioral cautions. Could be more 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?
Schema coverage is 100% with clear descriptions for each parameter. Tool description adds no extra meaning beyond what is already in the schema, so baseline 3.
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 it gets current roster with player details and lineup positions. It distinguishes from siblings like modify_lineup and get_team, but doesn't explicitly differentiate from get_free_agents.
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 guidance on when to use this tool versus alternatives (e.g., get_team for team info, modify_lineup for lineup changes). Does not mention prerequisites or context.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_standingsA
Get current league standings with team records and rankings.
| Name | Required | Description | Default |
|---|---|---|---|
| league_id | No | ESPN League ID | |
| season_year | No | Season year (defaults to current year) |
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 bears full responsibility for behavioral disclosure. It does not mention that the operation is read-only, safe, or any performance implications. The phrase 'current' hints at default behavior but lacks explicit safety cues.
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 a single, clear sentence with no unnecessary words. It front-loads the core purpose and includes relevant details about the output (records and rankings).
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 output schema exists, the description adequately informs about the return content (team records and rankings). No required parameters simplifies usage. It is complete for a straightforward list tool.
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 100% with both parameters documented. The description adds the word 'current', which implies the season_year defaults to the current year, providing marginal value beyond schema. Baseline 3 is appropriate.
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 verb 'Get' and the resource 'current league standings', specifying that it includes 'team records and rankings'. This distinguishes it from sibling tools like get_team (individual team info) and get_league_settings (league configuration).
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 viewing standings but lacks explicit guidance on when to use this tool versus alternatives like get_team or get_league_settings. No exclusions or context about prerequisites are provided.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_teamB
Get detailed information about a specific team.
| Name | Required | Description | Default |
|---|---|---|---|
| team_id | No | Team ID (1-based index) | |
| league_id | No | ESPN League ID | |
| season_year | No | Season year (defaults to current year) |
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 must disclose behavior. It only says 'detailed information' without specifying what that includes, authentication needs, or rate limits. Minimal transparency.
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 a single, clear sentence with no redundancy. Every word adds value.
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 an output schema exists, explanation of return values is not required. However, the description could hint at the breadth of information returned (e.g., roster, standings) to better set expectations.
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 100% with descriptions for all three parameters. The description adds no additional meaning beyond the schema, so baseline score applies.
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 action 'get' and the resource 'team' with specification 'detailed information'. It distinguishes from sibling tools like get_roster and get_standings.
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 does not mention prerequisites or context, leaving the agent to infer usage from the tool name alone.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
modify_lineupA
Modify team lineup by moving players between lineup slots. Uses a confirmation pattern: first call (confirm=false) previews the changes, second call (confirm=true) executes them. Can move a single player or swap multiple players in one transaction.
| Name | Required | Description | Default |
|---|---|---|---|
| moves | No | List of lineup moves to make, each with player_id, from_slot, and to_slot | |
| confirm | No | If false (default), returns a preview of changes. If true, executes the lineup changes. | |
| team_id | No | Team ID (1-based index) | |
| league_id | No | ESPN League ID (defaults to configured league) | |
| season_year | No | Season year (defaults to current year) | |
| scoring_period_id | No | Scoring period (week) for changes (defaults to current period) |
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 discloses the two-step confirmation process (preview then execute) and transaction capability, but does not mention potential side effects, restrictions (e.g., roster lock times, player eligibility), or reversibility, which would enhance transparency.
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 three sentences, front-loaded with the verb 'Modify', and each sentence delivers a distinct piece of information: purpose, confirmation pattern, and capability. No unnecessary words.
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 optional parameters and a two-phase action, the description explains core behavior but lacks details on the preview output, possible errors, and explicit usage constraints (e.g., when roster is locked). Given the output schema exists, full return documentation is not required, but more context on prerequisites 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?
Schema coverage is 100%, so baseline is 3. The description adds context that single or multiple moves can be handled in one transaction, reinforcing the moves parameter behavior and explaining the confirm parameter's role, providing value beyond 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 modifies team lineup by moving players between slots and distinguishes from sibling tools like add_free_agent or drop_player which handle roster moves, not lineup configuration.
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 explains the confirmation pattern and ability to move single or multiple players, but does not explicitly state when not to use this tool compared to alternatives like add_free_agent or drop_player, though the context of lineup changes is implicit.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
propose_tradeA
Propose a trade with another team. Uses a confirmation pattern: first call (confirm=false) previews the trade, second call (confirm=true) sends it. Returns a transaction ID that can be used to cancel the proposal.
| Name | Required | Description | Default |
|---|---|---|---|
| comment | No | Optional message to include with the trade offer | |
| confirm | No | If false (default), returns a preview of the trade. If true, sends the trade proposal. | |
| team_id | No | Your team ID (1-based index) | |
| league_id | No | ESPN League ID (defaults to configured league) | |
| season_year | No | Season year (defaults to current year) | |
| expiration_days | No | Days until the trade offer expires (default: 7) | |
| send_player_ids | No | ESPN player IDs you are sending to the other team | |
| receiving_team_id | No | The other team's ID (1-based index) | |
| scoring_period_id | No | Scoring period for the transaction (defaults to current) | |
| receive_player_ids | No | ESPN player IDs you want to receive from the other team |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Discloses the two-step behavior (preview vs send) and states that it returns a transaction ID for cancellation. Without annotations, this provides essential behavioral context beyond the input 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?
Two sentences, no extraneous text. Front-loaded with main purpose, followed by the essential workflow detail.
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 output schema exists, the description adequately covers the high-level workflow and key return value (transaction ID). For a 10-parameter tool with no required params, this is sufficient for an agent.
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 100%, but the description adds meaning by linking the confirm parameter to the overall workflow (preview vs send) and noting the returned transaction ID. This adds value beyond the schema descriptions.
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?
Clearly states the tool proposes a trade with another team, with a unique confirmation pattern (preview then send). Distinguishes from siblings like accept_trade, decline_trade, and cancel_trade.
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?
Explicitly explains the confirmation pattern for using the tool: first call with confirm=false for preview, second call with confirm=true to send. Implies the workflow but does not exclude using other trade-related siblings.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
TDQS
Each tool has a clearly distinct purpose, covering different aspects of fantasy sports management. There is no ambiguity between similar tools like add_free_agent and claim_waiver, as they are differentiated by immediate vs. pending actions.
All tool names follow a consistent verb_noun pattern using snake_case (e.g., get_team, modify_lineup, propose_trade). The naming is predictable and intuitive.
With 16 tools, the server is well-scoped for a fantasy sports platform. The count is sufficient to cover essential operations without being excessive.
The tool set provides comprehensive CRUD operations for team, roster, waivers, and trades. All core fantasy sports actions are covered, including lineup modifications, free agent management, waiver claims, and trade proposals.
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
Read-only fantasy analysis for ESPN, Yahoo, and Sleeper leagues via MCP
MLB Stats API MCP — official MLB statistics (keyless).
ESPN MCP — keyless multi-sport live scores, teams, and news via ESPN's public site API.
Public MCP server for discovering open jobs. Search, filter, and get application links.
Related MCP Servers
- FlicenseNot gradedqualityDmaintenanceAn MCP server that enables interaction with MLB (Major League Baseball) v3 projections through the SportsData.io API, allowing access to baseball statistics and projections through natural language.-
- FlicenseNot gradedqualityDmaintenanceAn MCP Server that enables interaction with MLB scores and statistics via the SportsData.io MLB V3 Scores API, allowing users to access baseball data through natural language queries.-
- AlicenseNot gradedqualityCmaintenanceConnect ESPN & Yahoo fantasy leagues to AI assistants via MCP. Read-only tools for rosters, standings, matchups, free agents, and league info across football and baseball.17MIT
- FlicenseNot gradedqualityDmaintenanceMCP server for Fantrax fantasy baseball that provides tools to read league info, rosters, standings, free agents, and related data.-
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/i-am-david-weinstein/espn-fantasy-mcp'
If you have feedback or need assistance with the MCP directory API, please join our Discord server