Skip to main content
Glama
rajn1

Sleeper Fantasy Football MCP

by rajn1

Sleeper Fantasy Football MCP

A local, read-only Model Context Protocol server that gives ChatGPT desktop and Codex fresh context from Sleeper fantasy-football leagues.

The server is designed for questions such as:

  • Is this dynasty roster ready to contend?

  • Which players should I cut before the draft?

  • How does a proposed trade affect both teams?

  • Who owns each future rookie pick?

  • What trades and waiver moves happened recently?

  • How do all rosters in the league compare?

It uses Sleeper's public API. No Sleeper password, API key, session cookie, or account token is required.

Capabilities

The MCP server can retrieve:

  • Sleeper account identity and current NFL state

  • Leagues for a selected season

  • League settings, scoring, lineup slots, records, and owners

  • Your roster or every roster, with player IDs resolved to names

  • Starters, bench, reserve, taxi squad, and keepers

  • Future draft-pick ownership and traded picks

  • Focused context for evaluating a proposed trade

  • Completed trades, waivers, and free-agent transactions

  • Weekly matchups and lineups

  • Live or completed draft boards

  • Trending additions and drops

  • Player-name search

Related MCP server: sleeper-caffeine MCP

Important limitation

Sleeper's documented public API does not expose the private inbox containing unaccepted incoming or outgoing trade proposals. Paste or screenshot the offer itself; the MCP can then pull the live league rules, both rosters, records, and draft-pick inventories needed to analyze it.

This project cannot send, accept, reject, or cancel trades. It deliberately avoids unofficial authenticated endpoints and Sleeper session tokens.

Requirements

  • macOS, Linux, or Windows with a compatible MCP host

  • Node.js 20 or newer

  • npm

  • A Sleeper username

  • ChatGPT desktop, Codex CLI, or another STDIO-capable MCP client

Quick start

Clone or download the repository, then run:

cd /path/to/sleeper-fantasy-mcp
chmod +x scripts/*.sh
./scripts/setup-mac.sh YOUR_SLEEPER_USERNAME

The setup helper:

  1. Checks Node.js and npm.

  2. Installs dependencies.

  3. Runs local syntax and unit tests.

  4. Verifies the Sleeper username.

  5. Lists the current-season leagues it finds.

  6. Prints the exact local MCP command and environment variable.

A Sleeper username can change. The setup output also shows the stable Sleeper user ID, which can be supplied through SLEEPER_USER_ID instead.

Connect to ChatGPT desktop

Open Settings → MCP servers → Add server and enter:

  • Name: Sleeper

  • Transport: STDIO

  • Command: the absolute Node path printed by the setup script

  • Arguments: the absolute src/index.js path printed by the setup script

  • Environment: SLEEPER_USERNAME=YOUR_SLEEPER_USERNAME

Save the server and restart ChatGPT desktop. Type /mcp in the composer to verify that the server and its tools are available.

Use absolute paths. A macOS desktop application does not always inherit the same shell PATH as Terminal.

Connect to Codex

The setup script prints a command tailored to the current machine. You can also run:

./scripts/add-to-codex.sh YOUR_SLEEPER_USERNAME

The equivalent manual command is:

codex mcp add sleeper \
  --env SLEEPER_USERNAME=YOUR_SLEEPER_USERNAME \
  -- /absolute/path/to/node /absolute/path/to/sleeper-fantasy-mcp/src/index.js

codex mcp list

Codex stores local MCP configuration under ~/.codex/config.toml. Do not commit that file to this repository.

Test with MCP Inspector

After installing dependencies:

SLEEPER_USERNAME=YOUR_SLEEPER_USERNAME npm run inspect

The Inspector launches a local client that can list and invoke each tool directly.

Example prompts

Use Sleeper to list all of my 2026 leagues and identify which are dynasty, keeper, or redraft.

Pull my roster and league settings for SHADynasty. Assess whether the roster is ready to contend this season.

In my DFB league, compare every roster and identify the three weakest players on my team.

Pull trade context for my team and the other owner's team, then assess this proposal: [paste offer].

Show the most recent completed trades in this league and explain which teams improved most.

Pull the current draft board and identify my biggest roster needs before my next pick.

Tool reference

Tool

Purpose

sleeper_account

Resolve the configured Sleeper account and current NFL state.

sleeper_list_leagues

List leagues for a season and identify the user's roster ID.

sleeper_league_overview

Fetch rules, scoring, teams, records, drafts, and pick ownership.

sleeper_my_roster

Fetch the user's roster, lineup groups, and draft picks.

sleeper_all_rosters

Fetch every roster for league-wide comparison.

sleeper_trade_context

Fetch focused roster, rule, record, and pick context for selected teams.

sleeper_transactions

Fetch trades, waivers, and free-agent moves by week range.

sleeper_matchups

Fetch one week's matchups, starters, bench, and points.

sleeper_draft_board

Fetch draft settings, order, picks, and traded slots.

sleeper_search_players

Resolve player names to Sleeper player records.

sleeper_trending_players

Fetch frequently added or dropped players.

Configuration

Environment variable

Required

Description

SLEEPER_USERNAME

Yes, unless using SLEEPER_USER_ID

Sleeper username used to locate the account.

SLEEPER_USER_ID

Optional

Stable user ID; takes precedence over the username.

SLEEPER_DEFAULT_SEASON

Optional

Four-digit season used when a tool does not provide one.

SLEEPER_CACHE_DIR

Optional

Override the local directory for the public player cache.

Freshness and caching

League settings, rosters, transactions, matchups, drafts, and picks are requested from Sleeper when a tool is called. There is no background synchronization process.

Sleeper's full NFL player directory is much larger, so it is cached for 24 hours at:

~/.cache/sleeper-fantasy-mcp/players-nfl.json

Delete that file to force a refresh on the next player-dependent request.

Privacy and security

  • The server is read-only.

  • It sends network requests only to https://api.sleeper.app/v1.

  • It does not collect a Sleeper password or authenticated account token.

  • The only local data it writes is Sleeper's public NFL player directory cache.

  • League names, usernames, team names, and all other Sleeper-returned text are treated as untrusted data rather than model instructions.

  • Raw Sleeper metadata objects are not forwarded unless a known field is required for a feature.

Review SECURITY.md before expanding the server's permissions or endpoints.

Development

Install dependencies and run all local checks:

npm install
npm run check

The first npm install creates package-lock.json. Review and commit that lockfile so subsequent local and CI installs resolve the same dependency graph.

Run only the live connection check:

npm run check:connection -- YOUR_SLEEPER_USERNAME

Start the STDIO server manually:

SLEEPER_USERNAME=YOUR_SLEEPER_USERNAME npm start

The process will appear to wait. That is expected: an STDIO MCP server listens for JSON-RPC requests from its host. Stop it with Ctrl+C.

Never use console.log in the server process. STDOUT is the MCP protocol channel; diagnostics belong on STDERR through console.error.

Project structure

.
├── .github/                 # CI and dependency updates
├── scripts/                 # Setup, Codex registration, and connection check
├── src/
│   ├── index.js             # MCP server and tool definitions
│   └── sleeper-client.js    # Sleeper API client and response shaping
├── test/                    # Offline unit tests
├── CONTRIBUTING.md
├── SECURITY.md
├── LICENSE
└── README.md

Troubleshooting

No Sleeper account is configured

Add SLEEPER_USERNAME or SLEEPER_USER_ID to the MCP server environment, then restart the host.

ChatGPT or Codex cannot find node

Run:

which node

Use that complete path as the MCP command.

The server starts and appears to hang

That is normal when started manually. It is waiting for an MCP client on stdin.

A renamed Sleeper username no longer resolves

Update SLEEPER_USERNAME, or use the stable SLEEPER_USER_ID printed by the connection check.

Player information appears stale

Delete the cached player file:

rm ~/.cache/sleeper-fantasy-mcp/players-nfl.json

The next player-dependent request will download a new copy.

Contributing

See CONTRIBUTING.md. Changes should preserve the read-only security boundary and use only documented public Sleeper endpoints.

License

MIT. See LICENSE.

Disclaimer

This is an independent project and is not affiliated with, endorsed by, or sponsored by Sleeper.

Available Tools

11 tools
sleeper_accountSleeper accountB
Read-only

Resolve the configured Sleeper username to its stable user ID and return the current NFL state.

ParametersJSON Schema
NameRequiredDescriptionDefault
usernameNoOptional override for SLEEPER_USERNAME

TDQS

B3.4/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true and openWorldHint=true, so the operation is known to be safe and externally dependent. The description adds useful context about stable IDs and configuring a username, but does not disclose error handling or what happens when the username cannot be resolved.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

One sentence with no filler, front-loaded with the main verb and resource. Both clauses ('resolve...' and 'return...') earn their place.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a single-optional-parameter, read-only account tool, the description conveys enough to select and invoke it: it resolves an identity and returns a current state. The lack of an output schema makes the vague 'current NFL state' a minor gap, but not a blocking one.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100% and the only parameter is documented as an optional override for SLEEPER_USERNAME. The description adds the notion of a configured default username, but it doesn't clarify precedence or behavior if both the configured value and override are absent.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description names a specific action (resolve username to stable user ID) and a second outcome (return current NFL state), which sets it apart from league- and roster-focused siblings. However, 'current NFL state' is vague enough that an agent won't know exactly what data to expect.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No guidance is given about when to choose this tool over siblings like sleeper_list_leagues or sleeper_trade_context. The description implies the configured username is the default, but does not explain when to call this first vs other account/league tools.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

sleeper_all_rostersAll Sleeper rostersA
Read-only

Get every team’s live roster in a league with player names, positions, teams, injury status, records, FAAB, and lineup grouping. Useful for league-wide comparisons.

ParametersJSON Schema
NameRequiredDescriptionDefault
league_idYesNumeric Sleeper league ID

TDQS

A4/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true and openWorldHint=true. The description adds context by specifying the data fields returned and that it is a live roster, but it does not go beyond that into behaviors like rate limits, auth needs, or response truncation. This is a modest addition above annotations, waranting a 3.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two sentences with no fluff. The verb and scope are front-loaded, the data fields are compactly listed, and the use case is stated in the second sentence. Every sentence earns its place.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

While thre is no output schema, the description enumerates the key data fields (player names, positions, teams, injury status, records, FAAB, lineup grouping), which gives an agent a solid picture of the return content. Minor gaps like pagination or ordering are not critical for a read-only listing tool with one parameter.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100% for the only parameter (league_id: 'Numerick Sleepper league ID'), so the schema handles param semantics. The description does not add extra meaning beond the league context, matching the baseline of 3 for full schema coverage.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

Description states a specific verb ('Get') and resource ('every team’s live roster in a league') and enumerates what is included (player names, positions, teams, injury status, records, FAAB, lineup grouping). It clearly distinguishes from siblings like sleeper_my_roster by emphasizing league-wide scope and 'league-wide comparisons.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description gives a clear use case: 'Useful for league-wide comparisons.' This implies when all rosters are needed rather than a single roster, though it does not explicitly name alternatives or state exclusions. Context is apparent from the league-wide wording.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

sleeper_draft_boardSleeper draft boardA
Read-only

Get a live or completed draft board, resolved player picks, draft order, and traded draft slots. Provide a league ID to use its newest draft, or a specific draft ID.

ParametersJSON Schema
NameRequiredDescriptionDefault
draft_idNo
league_idNoNumeric Sleeper league ID
draft_seasonNoFour-digit season, e.g. 2026

TDQS

A4.1/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true and openWorldHint=true, so the description does not need to restate safety. It adds useful behavioral detail by disclosing that the board can be live or completed and what the returned data includes, which is valuable in the absence of an output schema.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two sentences with no filler: the first states capabilities, the second states the parameter-based usage model. Both sentences earn their place and the most important information is front-loaded.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The description covers the return contents well and the annotations cover safety, but it leaves important invocation details unclear: the role of `draft_season`, what happens if both `league_id` and `draft_id` are supplied, and whether at least one is required. These gaps matter for an agent selecting parameters.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 67%: `league_id` and `draft_season` have schema descriptions, while `draft_id` does not. The description adds meaning by explaining the league-ID-versus-draft-ID relationship, but it does not explain how `draft_season` interacts with either parameter, leaving a meaningful ambiguity.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description opens with a specific verb ('Get') and a clear resource ('draft board'), then enumerates the exact content returned: resolved player picks, draft order, and traded draft slots. This is specific enough to distinguish from the listed siblings, none of which target draft-board data.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description gives explicit input-selection guidance: use a league ID for the newest draft or a draft ID for a specific draft. It does not explicitly discuss when not to use this tool or mention the `draft_season` parameter, but the primary usage context is clear.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

sleeper_league_overviewSleeper league overviewA
Read-only

Get league rules, scoring, lineup slots, team directory, records, drafts, traded picks, and calculated future pick ownership. Does not include every player on every roster.

ParametersJSON Schema
NameRequiredDescriptionDefault
usernameNo
league_idYesNumeric Sleeper league ID
pick_yearsNoFuture seasons of picks

TDQS

A3.5/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already cover the safety profile (readOnlyHint=true, openWorldHint=true), so the description's job is to add scoping context. It discloses exactly what league data is returned and, notably, flags that future pick ownership is 'calculated' derived data rather than raw stored data. It does not disclose aggregation cost or partial-failure behavior, but the content scope is the key behavioral trait for a read-only overview tool.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two sentences with zero filler: the first front-loads the full content list, the second adds a deliberate boundary. Every clause earns its place and the density-to-length ration is excellent.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a tool with no output schema and ten sibings spanning overlapping domains (drafts, rosters, trades, transactions), the description supplies a usable category list but omits return sturcture, the time scope of 'records', and how pick_years interacts with the calculated ownership data. The roster exclusion helps disambiguate, yet an agent calling this tool is still guessing at the response shape for a fairly complex aggregation.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 67% (league_id and pick_years have descriptions, username does not), and the description contributes zero parameter guidance. The 'username' parameter is left unexplained in both the schema and the description — an agent cannot tell whether it filters scope, authenticates, or is merely optional context alongside the required league_id. The description also never connects pick_years to the 'calculated future pick ownership' it mentions.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description uses a specific verb ('Get') with a detailed content list — rules, scoring, lineup slots, team directory, records, drafts, traded picks, and calculated future pick ownership — that precisely scopes the resource. The exclusion clause ('Does not include every player on every roster') explicitly disambiguates it from roster-oriented sibings like sleeper_all_rosters. It stops short of 5 because it never names a sibing tool outright, relying on the 'overview' naming to carry differentiation.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The content list implies this is the comprehensive league-level entry point, and the final sentence signals when not to use it (when complete roster data is needed). However, no alternative sibing is named and there is no explicit when-to-use/when-not-to-use guidance, leaving the agent to infer routing from the tool name and the exclusion clause.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

sleeper_list_leaguesList Sleeper leaguesA
Read-only

List the configured user’s NFL leagues for a season. Use this first to map league names to league IDs.

ParametersJSON Schema
NameRequiredDescriptionDefault
seasonNoFour-digit season, e.g. 2026
usernameNo
include_roster_idsNoAlso resolve the user’s roster ID in each league; defaults to true

TDQS

A3.9/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The annotations already declare readOnlyHint=true and openWorldHint=true, so the description does not need to restate safety. It adds useful scoping context: 'configured user’s NFL leagues for a season' and the mapping purpose. However, it does not disclose additional behavioral details such as response shape, pagination, or how include_roster_ids affects the result. This is adequate but not rich 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.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two sentences with no fluff. The first sentence states the action and scope, and the second provides immediate usage direction. Every word earns its place.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The tool is relatively simple and the description covers its core purpose and first-step usage. However, there is no output schema and the username parameter is not clearly explained in either the schema or description. The role of include_roster_ids is left to schema text. These gaps keep it from being fully complete, though annotations and context signals reduce the risk.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is around 67%, with season and include_roster_ids documented in the schema but username left undocumented. The description adds some meaning via 'configured user’s', which hints at username's role, and 'for a season' aligns with the season parameter. It does not add detail about include_roster_ids, but the schema already describes that parameter. Overall, the description partially compensates for schema gaps without fully clarifying all parameters.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb and resource: 'List the configured user’s NFL leagues for a season.' It also clarifies the intended output purpose with 'map league names to league IDs,' which distinguishes it from sibling tools like sleeper_league_overview. This is more than adequate for an agent to understand what the tool does.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description gives clear usage context: 'Use this first to map league names to league IDs.' This tells an agent when to invoke it, but it does not explicitly mention when not to use it or name alternative tools. It stops short of the rubric's strongest level.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

sleeper_matchupsSleeper matchupsA
Read-only

Get one league week’s matchups with resolved starters, bench players, lineup slots, and current points.

ParametersJSON Schema
NameRequiredDescriptionDefault
weekNo
league_idYesNumeric Sleeper league ID

TDQS

A3.9/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true and openWorldHint=true, so the safety profile is covered. The description adds useful context by noting points are 'current' and starters are 'resolved,' implying a live snapshot, but it does not disclose defaults or edge-case behavior around the optional week parameter.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

One compact sentence front-loads the core purpose and then lists exactly what data will be returned. There is no filler, redundant phrasing, or repetition of structured schema information.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

This is a simple read-only tool with two parameters and no output schema. The description adequately conveys the returned matchups content, but it omits the default behavior for the optional week parameter, which is a minor completeness gap.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is only 50%: league_id is described, but week is not semantically explained beyond numeric bounds. The description refers to 'one league week' but does not clarify the default when week is omitted or the exact meaning/format of the week value, so it fails to compensate for the coverage gap.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb ('Get') and resource ('one league week's matchups') and enumerates the included data: resolved starters, bench players, lineup slots, and current points. This makes its purpose clear and distinguishes it from sibling tools like sleeper_league_overview or sleeper_all_rosters.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides clear context for when to use it: for weekly matchups with lineup and points detail. It doesn't explicitly name alternatives or exclusions, but the scope is specific enough that an agent can infer the right situation.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

sleeper_my_rosterMy Sleeper rosterA
Read-only

Get the configured user’s live roster in one league, resolved to player names and grouped into starters, bench, reserve, taxi, and keepers, plus draft-pick ownership.

ParametersJSON Schema
NameRequiredDescriptionDefault
usernameNo
league_idYesNumeric Sleeper league ID

TDQS

A3.8/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true, so the safety profile is covered. The description adds meaningful behavioral detail beyond that: the roster is 'live', resolved to player names, grouped into specific roster slots, and includes draft-pick ownership. This gives the agent a clear expectation of what the tool returns.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The entire description is one efficient sentence that front-loads the core action and scope, then packs all relevant output details. Every phrase earns its place, and there is no filler or repetition of schema fields.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a read-only tool with no output schema, the description does a good job of conveying the result shape and primary parameter. However, it leaves the optional username parameter unexplained and does not address edge cases or when a caller should look elsewhere, so the context is adequate but not fully complete.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Only league_id has a schema description, and the tool description adds no explanation of the optional username parameter. The phrase 'configured user' hints at a default user, but it does not clarify whether supplying username overrides the configured user or how it interacts with the lookup. This is a real gap for an agent deciding whether to pass username.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description opens with a specific verb ('Get'), names the resource ('configured user's live roster'), and scopes it to one league. It further specifies output details (resolved player names, grouping into starters/bench/reserve/taxi/keepers, draft-pick ownership), which clearly distinguishes it from broader sibling tools like sleeper_all_rosters.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The phrase 'configured user' and 'one league' imply when this tool is appropriate, but the description never explicitly states when to choose it over alternatives such as sleeper_all_rosters or sleeper_league_overview. An agent must infer the boundary rather than being told.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

sleeper_search_playersSearch Sleeper playersA
Read-only

Search Sleeper’s player directory by name and optionally position. Useful for resolving names mentioned in a proposed trade.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNo
queryYes
positionNo
active_onlyNo

TDQS

A4/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already provide readOnlyHint=true and openWorldHint=true, so the safety profile is covered. The description adds that matching is by player name with an optional position filter, but discloses no deeper behavior such as match semantics, result limits, or handling of special entries. With annotations present, a 3 is fair.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two tight sentences: the core operation is front-loaded, followed by a single use-case sentence. No repetition of the title, no filler, and every phrase earns its place.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple four-parameter, read-only search tool, the description supplies adequate selection and invocation context. The main gap is that with no output schema it does not indicate what a result record contains (e.g., player ID), which would fully serve the stated name-resolution use case.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

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. It gives real meaning to two parameters — 'query' is a player name and 'position' is a player position — but says nothing about 'limit' or 'active_only', leaving them to inference from their property names and schema constraints. This is only partial compensation.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description says exactly what the tool does: search Sleeper's player directory by name, with an optional position filter. The verb+resource is specific, and all siblings target different resources (leagues, rosters, transactions, matchups, drafts), so this is easily distinguishable.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It gives a concrete scenario — resolving player names in a proposed trade — which tells the agent when to reach for this tool. It does not name alternatives or state when not to use it, so it misses the top score.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

sleeper_trade_contextSleeper trade contextA
Read-only

Get focused trade-analysis context for selected teams: full rosters, league rules, records, and future pick inventories. Teams can be identified by roster ID, owner name, username, or team name. Pending private trade offers are not exposed by the official API, so the offer itself must be pasted or described.

ParametersJSON Schema
NameRequiredDescriptionDefault
usernameNo
league_idYesNumeric Sleeper league ID
pick_yearsNo
team_queriesNoRoster IDs, owner names, usernames, or team names; omit to return your team

TDQS

A4.2/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already signal read-only and open-world behavior; the description adds useful context by disclosing that pending private trade offers are not available through the official API and must be pasted or described. It also states what content the tool returns, adding value beyond the annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three sentences, each earning its place: purpose and contents, team identification, and an important API limitation. The most decision-relevant information is front-loaded, with no redundant filler.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a read-only data-retrieval tool, the description covers purpose, output scope, identification options, and the key limitation around private offers. It does not describe error behavior or exactly how pick_years controls future pick inventories, but annotations and schema cover the core safety profile.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 50%, with league_id and team_queries described. The description adds meaning by explaining team identification via roster ID, owner name, username, or team name and mentions future pick inventories, which maps to pick_years. However, username and pick_years semantics remain partially inferred rather than explicitly defined.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description opens with a specific verb and resource: 'Get focused trade-analysis context for selected teams,' then enumerates what it returns (full rosters, league rules, records, future pick inventories). This clearly separates it from sibling roster/league tools like sleeper_all_rosters and sleeper_league_overview.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It provides clear context for when to use the tool: for focused trade analysis on selected teams, identified by multiple key types. It does not explicitly name sibling alternatives or state when not to use it, but the scope is clear enough for an agent to route to it appropriately.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

sleeper_transactionsSleeper transactionsA
Read-only

Get and resolve completed or pending transaction records—trades, waivers, and free-agent moves—for a league and week range. Defaults to the current week and previous three weeks.

ParametersJSON Schema
NameRequiredDescriptionDefault
typesNo
statusNoOptional exact Sleeper status, e.g. complete
end_weekNo
league_idYesNumeric Sleeper league ID
start_weekNo

TDQS

A3.8/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The annotations already declare readOnlyHint and openWorldHint, so the description only needs to add behavior beyond safety. It adds the default week window and the completed/pending scope, but it does not clarify what 'resolve' means or how the status maps to Sleeper exact values; this keeps it at a 3.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two sentences with no filler: the first front-loads operation and resource, the second gives the default range. Every clause earns its place.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a read-only listing tool with no output schema, the description covers the essential invocation facts: league scope, optional week range with defaults, and transaction/status categories. It is slightly less complete around exact status strings and response contents, but the annotations and schema cover the remaining safety and required-parameter details.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is only 40%, and the description compensates by mapping week range to start_week/end_week with a default, explaining completed/pending as status scope, and listing trades/waivers/free-agent moves for the types enum. It does not specify inclusiveness of start/end weeks or exact status strings, so not a 5.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description names a concrete operation ('get and resolve') on a specific resource ('transaction records'), spells out the three transaction categories, and scopes by league and week range. This clearly separates it from siblings such as roster, matchups, and trade_context tools.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

There is no explicit when-to-use or when-not-to-use guidance and no sibling tool is referenced. The only operational hint is the default week range, which helps invocation but does not help an agent decide between this and sleeper_trade_context or other league data tools.

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.

  1. 11 tool updatesv1.0.0
    • First observedsleeper_account
    • First observedsleeper_all_rosters
    • First observedsleeper_draft_board
    • First observedsleeper_league_overview
    • First observedsleeper_list_leagues
    • First observedsleeper_matchups
    • First observedsleeper_my_roster
    • First observedsleeper_search_players
    • First observedsleeper_trade_context
    • First observedsleeper_transactions
    • First observedsleeper_trending_players

TDQS

A3.9/5.0

Scored across 11 tools

Disambiguation4/5

Each tool targets a distinct resource or workflow, from account resolution to rosters, transactions, matchups, and drafts. A few tools overlap in raw data—like all_rosters, my_roster, and trade_context all exposing roster info—but their scopes are clearly differentiated by descriptions.

Naming Consistency4/5

All tools share the consistent 'sleeper_' prefix and use snake_case, making the namespace predictable. Naming style varies between verb-led (list_leagues, search_players) and noun-led (account, transactions, matchups), but the pattern is still coherent and readable.

Tool Count5/5

Eleven tools is a well-scoped count for a fantasy football data server. Each tool covers a meaningful slice of the domain—leagues, rosters, trades, transactions, matchups, drafts, and player discovery—without unnecessary duplication.

Completeness5/5

The toolset comprehensively covers the read-only Sleeper fantasy football domain: account identity, leagues, rosters, trade context, transactions, matchups, drafts, and player search/trending. There are no obvious dead ends for typical fantasy football analysis workflows.

Maintenance

ActivitySlowing
ResponsivenessNo issues

Related MCP Connectors

Related MCP Servers

  • F
    license
    Not graded
    quality
    C
    maintenance
    This Model Context Protocol server provides access to the Sleeper Fantasy Football API, enabling agents to fetch data about users, leagues, drafts, rosters, matchups, and player information without requiring an API key.
    7
    -
  • A
    license
    Not graded
    quality
    B
    maintenance
    Provides read-only access to Sleeper fantasy football leagues, enabling team snapshots, available players, matchups, trade context, and league history through standardized MCP tools.
    MIT
  • F
    license
    Not graded
    quality
    C
    maintenance
    MCP server for NFL fantasy football retrieval, providing access to NFL stats and Sleeper league data through retrieval-oriented tools.
    -
  • A
    license
    Not graded
    quality
    C
    maintenance
    Provides read-only, league-aware Sleeper fantasy football draft context to AI assistants, including live picks, rosters, and player availability over Streamable HTTP MCP.
    72 npm
    MIT