Commish MCP
Click on "Deploy 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., "@Commish MCPGive me a league overview and current standings for my fantasy league."
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
Commish MCP
An MCP (Model Context Protocol) server for fantasy sports league commissioners β giving AI assistants league-wide context and commissioner-oriented tools.
Commish MCP is not a thin wrapper around a single fantasy API. The domain is fantasy commissioner operations: league overviews, standings, matchup results, manager activity, transactions, recaps, and storylines. Provider-specific APIs (Yahoo first) sit underneath a provider abstraction.
Current state
π§ Early development β initial scaffolding.
MCP server boots over stdio and registers one example tool (
get_league_overview)Provider-agnostic architecture with a Yahoo skeleton in place
No live fantasy data yet β the Yahoo OAuth2 client and API integration are not implemented
Related MCP server: Yahoo Fantasy MCP
Planned providers
Provider | Status |
Yahoo Fantasy | First β skeleton in place, integration pending |
Sleeper | Future |
ESPN | Potential future |
Planned capabilities
Commissioner-focused tools on the roadmap (none implemented yet):
Weekly recaps and league storylines
League health and manager activity
Lineup auditing
Transaction reports
Playoff context and standings deep-dives
Architecture
Yahoo API
β
YahooProvider (src/providers/yahoo)
β
Normalized domain models (src/domain)
β
Commissioner services (src/services)
β
MCP tools (src/tools)
β
AI clientKey principles:
Provider independence β tools operate on normalized domain models (
src/domain), never raw provider payloads. Raw Yahoo types live insrc/providers/yahoo/types.tsand must not leak upward.Commissioner-first β services (
src/services) combine provider data into league-level views; tool handlers stay thin.Strong typing β provider payloads and domain objects are separate types; no
any.
Getting started
Requires Node.js 22+ (.nvmrc provided).
npm install
npm run build
npm test
npm run typecheckScripts
Command | Purpose |
| Compile |
| Run with watch mode via tsx |
| Run the compiled server |
| Run unit tests (vitest) |
| Type-check |
| ESLint |
| Prettier |
Adding to an MCP client
Example Claude Desktop configuration:
{
"mcpServers": {
"commish-mcp": {
"command": "node",
"args": ["/absolute/path/to/commish-mcp/dist/index.js"]
}
}
}Configuration
Copy .env.example to .env (never committed) and fill in Yahoo credentials from an app registered at developer.yahoo.com/apps:
YAHOO_CLIENT_ID=
YAHOO_CLIENT_SECRET=
YAHOO_REDIRECT_URI=http://localhost:8787/callbackAll variables are optional today: without them the server runs and tools explain what is missing. OAuth2 support (authorization-code flow, token refresh, secure local token storage) is the next milestone.
Project structure
src/
βββ index.ts # stdio entrypoint
βββ server/server.ts # server assembly + tool registration
βββ tools/ # MCP tools (thin handlers)
β βββ league/
β βββ types.ts # ToolModule / ToolContext pattern
βββ services/ # commissioner services (combine provider data)
βββ providers/
β βββ provider.ts # FantasyProvider interface
β βββ yahoo/ # client, provider, raw payload types
βββ domain/ # normalized league/team/matchup/transaction models
βββ config/env.ts # zod-validated environment
βββ utils/
tests/ # vitest unit + in-memory MCP integration testsLicense
Available Tools
1 toolget_league_overviewGet League OverviewA
Get a commissioner's overview of a fantasy league: league settings and current standings.
| Name | Required | Description | Default |
|---|---|---|---|
| league_id | Yes | Provider-specific league identifier, e.g. a Yahoo league key like '423.l.12345'. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the behavioral burden. The verb 'Get' implies a read-only operation and the description states the returned content (league settings and current standings). It does not disclose authentication requirements, data freshness, or response shape, but for a simple overview tool this is a reasonable baseline.
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, front-loaded sentence with no filler or redundant phrasing. Every part adds value: the actor perspective, the resource, and the included data.
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 low-complexity tool with one fully documented parameter and no output schema, the description is nearly complete. It states what the tool returns and the perspective involved. Minor gaps such as authentication expectations do not meaningfully impede correct 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?
Schema coverage is 100%, and the league_id parameter is already well described with an example format. The description does not add parameter-level meaning, but none is needed since the schema fully documents the only parameter.
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 identifies the action ('Get') and resource ('commissioner's overview of a fantasy league') and lists the included content: league settings and current standings. It is specific and unambiguous, though there are no sibling tools to differentiate from, so it does not earn the top score.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies when the tool is usefulβwhen a commissioner needs league settings or standingsβbut it does not state explicit conditions, prerequisites, or alternatives. With no sibling tools, the lack of exclusion guidance is acceptable, yet still only implicit.
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 tool update
v0.1.0- First observed
get_league_overview
TDQS
Scored across 1 tool
With only one tool available, there is no potential for confusion between tools. The purpose of get_league_overview is clear and unambiguous.
The single tool follows a clean verb_noun pattern, which is consistent with well-named MCP tools. There are no conflicting conventions.
A single tool is far too few for a server whose name implies commissioner functionality. While the tool itself is useful, one tool cannot reasonably cover the expected scope.
The server only provides a read-only league overview. Critical commissioner actions such as roster management, trade processing, waiver claims, or settings updates are entirely missing, leaving the surface severely incomplete.
Maintenance
Related MCP Connectors
Read-only ESPN, Sleeper, and Fantrax fantasy leagues for Claude, ChatGPT, and other AI tools.
Live sports stats and pre-computed analysis for AI assistants across NBA, MLB, NFL, and NHL.
- NFL MCPOAuthcom.nflmcp
NFL analytics tools for AI agents: stats, fantasy, injuries, schedules, and advanced analysis.
Related MCP Servers
- AlicenseNot gradedqualityBmaintenanceConnect 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.21MIT
- AlicenseNot gradedqualityDmaintenanceA Model Context Protocol server that provides read-only access to Yahoo Fantasy Sports data, enabling AI assistants to query league standings, player stats, matchups, and rosters.4MIT
- FlicenseNot gradedqualityDmaintenanceEnables Claude to interact with Yahoo Fantasy Baseball and Basketball leagues, allowing roster analysis, matchup tracking, free agent browsing, and player stats retrieval via natural language.-
- AlicenseNot gradedqualityBmaintenanceEnables AI models to manage and query fantasy sports leagues through the Sleeper API, supporting tasks like player lookups, league activity, and draft management.70 npmMIT