Token Bowl MCP Server
Server Configuration
Describes the environment variables required to run the server.
| Name | Required | Description | Default |
|---|---|---|---|
| REDIS_URL | No | Optional: Redis for caching | |
| FFNERD_API_KEY | No | Optional: Fantasy Nerds API for enhanced analytics | |
| SLEEPER_LEAGUE_ID | No | Your Sleeper league ID (defaults to Token Bowl) | 1266471057523490816 |
Instructions
Guidance the server publishes about itself, which clients place ahead of the tool catalog so the model reads it before choosing anything.
This server publishes no instructions, or was last inspected before Glama recorded them.
Capabilities
Features and capabilities supported by this server
Protocol revision2025-11-25
| Capability | Details |
|---|---|
| tools | {
"listChanged": true
} |
| prompts | {
"listChanged": false
} |
| resources | {
"subscribe": false,
"listChanged": false
} |
| experimental | {} |
Tools
Functions exposed to the LLM to take actions
| Name | Description |
|---|---|
| get_league_infoB | Get comprehensive information about the Token Bowl fantasy football league. Returns detailed league settings including:
Returns: Dict containing all league configuration and settings |
| get_league_rostersA | Get all team rosters in the Token Bowl league with player assignments. Args: include_details: If True, include full player ID arrays and all roster details. If False, return only summary info (default). Summary includes: roster_id, owner_id, wins, losses, ties, points_for, points_against, waiver_position. Returns roster information for each team. When include_details=False (default):
When include_details=True:
Returns: List of roster dictionaries, one for each team in the league |
| get_rosterB | Get detailed roster information with full player data for a specific team. Args: roster_id: The roster ID (1-10) for the team you want to view. Can be an integer or string (will be converted). Valid range: 1-10. Roster ID 2 is Bill Beliclaude. Returns a comprehensive roster including:
Returns: Dict with roster info and enriched player data |
| get_league_usersA | Get all users (team owners) participating in the Token Bowl league. Returns user information including:
Note: Match user_id with roster owner_id to link users to their teams. Returns: List of user dictionaries for all league participants |
| get_league_matchupsA | Get head-to-head matchups for a specific week in the Token Bowl league. Args: week: The NFL week number (1-18 for regular season + playoffs). Can be an integer or string (will be converted). Week 1-14 are typically regular season, Week 15-17/18 are typically playoffs. Returns matchup information including:
Returns: List of matchup dictionaries for the specified week |
| get_league_transactionsB | Get waiver wire and trade transactions for the Token Bowl league. Args: round: The transaction round/week number (default: 1). Can be an integer or string (will be converted). Must be positive (1 or greater). Transactions are grouped by processing rounds. Higher rounds represent more recent transactions. Returns transaction details including:
Returns: List of transaction dictionaries for the specified round with enriched player data |
| get_recent_transactionsA | Get the most recent transactions, sorted by most recent first. Args: limit: Maximum number of transactions to return (default: 20, max: 20). Can be an integer or string (will be converted). transaction_type: Filter by type. Valid values: 'waiver', 'free_agent', 'trade'. None returns all types. include_failed: Include failed transactions (default: False). drops_only: Return only transactions with drops (default: False). min_days_ago: Minimum days ago for transactions (default: None). max_days_ago: Maximum days ago for transactions (default: None). include_player_details: Include full player details (default: False, minimal data). Returns a consolidated list of recent transactions including:
Returns: List of transaction dictionaries sorted by recency with enriched player data |
| get_league_traded_picksA | Get all future draft picks that have been traded in the Token Bowl league. Returns information about traded picks including:
Useful for tracking draft capital and evaluating keeper/dynasty trades. Returns: List of traded draft pick dictionaries |
| get_league_draftsA | Get all draft information for the Token Bowl league. Returns draft details including:
Use draft_id with get_draft_picks() for detailed pick information. Returns: List of draft dictionaries for all league drafts |
| get_league_winners_bracketA | Get the playoff winners bracket for the Token Bowl league championship. Returns playoff bracket information including:
Typically covers weeks 15-17 of the NFL season. Returns: List of playoff matchup dictionaries for the winners bracket |
| get_userB | Get detailed information about a Sleeper user by username or user ID. Args: username_or_id: Either the unique username or user_id of the Sleeper user. Cannot be empty. Will be converted to string. Returns user profile including:
Example: get_user("JohnDoe123") or get_user("123456789") Returns: Dict containing user profile information |
| search_players_by_nameA | Search for players by name with unified Sleeper + Fantasy Nerds data. Args: name: Player name to search for (minimum 2 characters). Will be converted to string and trimmed. Returns matching players with:
Returns: List of player dictionaries with unified data (max 10 results) |
| get_player_by_sleeper_idA | Get unified player data by Sleeper ID. Args: player_id: The Sleeper player ID. Will be converted to string. Cannot be empty. Example: "4046" for Patrick Mahomes Returns complete unified player information:
Returns: Dict with unified player data or error if not found |
| get_trending_playersA | Get trending NFL players based on recent add/drop activity across all Sleeper leagues. Args: type: Transaction type to track (default: "add") Must be exactly "add" or "drop" (case-sensitive). - "add": Players being picked up from waivers/free agency - "drop": Players being dropped to waivers limit: Maximum number of players to return (default: 10, max: 25). Can be integer or string (will be converted). position: Filter by position (QB, RB, WR, TE, DEF, K). None returns all positions. Case-insensitive (will be uppercased). Returns trending players with:
Returns: List of dictionaries with enriched player data and add/drop counts |
| get_player_stats_all_weeksA | Get real stats for all weeks of a season for a specific player. Args: player_id: The Sleeper player ID (required). Will be converted to string. Cannot be empty. Example: "4046" for Patrick Mahomes season: The season year (optional). Can be integer or string. Valid range: 2009-2030. Defaults to current season if not provided. Returns comprehensive stats including:
Note: This fetches real game stats, not projections. Stats are organized by week with PPR scoring and relevant statistics. Returns: Dict containing player info, weekly stats, and season totals |
| get_waiver_wire_playersA | Get NFL players available on the waiver wire (not on any team roster). This tool identifies free agents by comparing all NFL players against currently rostered players in the Token Bowl league. Args: position: Filter by position. Valid values: QB, RB, WR, TE, DEF, K. Case-insensitive (will be uppercased). None returns all positions. Returns waiver wire data including:
Note: Cache refreshes daily. Recent adds/drops may not be reflected immediately in player details, but roster data is fetched live. Returns: Dict with available players and metadata |
| get_waiver_analysisA | Get comprehensive waiver wire analysis with minimal context usage. A consolidated tool that efficiently combines waiver wire data with recent transactions to provide focused recommendations. Args: position: Filter by position. Valid values: QB, RB, WR, TE, DEF, K. Case-insensitive (will be uppercased). None returns all positions. days_back: Number of days to look back for recently dropped players (default: 7). Can be integer or string. Valid range: 1-30. limit: Maximum number of players to return per category (default: 20). Can be integer or string. Maximum: 50. Returns comprehensive analysis including:
Returns: Dict with waiver analysis and recommendations |
| get_trending_contextA | Get concise explanations for why players are trending. Uses web search and player data to find recent news and context explaining why players are trending in fantasy football. Args: player_ids: List of Sleeper player IDs to get context for. Must be a list (not a string). Cannot be empty. max_players: Maximum number of players to process (default: 5, max: 10). Can be integer or string (will be converted). Returns: Dict mapping player_id to a 2-3 sentence explanation of why they're trending. Includes: - Recent injury to starter - Depth chart changes - Breakout performance - Trade/release news - Usage/target changes Example: {"4046": "Mahomes is trending after throwing 5 TDs last week. With Kelce returning from injury, the passing game looks elite."} |
| evaluate_waiver_priority_costB | Calculate if using waiver priority is worth it. Evaluates whether to use waiver priority based on expected value and historical patterns. Args: current_position: Current waiver priority position (1 is best). Can be integer or string. Valid range: 1-10. projected_points_gain: Expected points gain per week from the player. Can be float or string. Must be non-negative. weeks_remaining: Weeks left in fantasy season (default: 14). Can be integer or string. Valid range: 1-18. Returns analysis including:
Returns: Dict with waiver priority cost analysis and recommendation |
| get_nfl_scheduleA | Get NFL schedule for a specific week or the current week. Args: week: NFL week number (1-18 for regular season + playoffs). Can be integer or string (will be converted). If not provided or None, returns schedule for the current week. Returns schedule information including:
Uses Fantasy Nerds API for comprehensive schedule data. Returns: Dict with week schedule and game information |
| searchA | Search for fantasy football information across players, teams, and league data. This tool is required for ChatGPT compatibility and searches through:
Args: query: Natural language search query. Cannot be empty. Will be converted to string and trimmed. Examples: "Patrick Mahomes", "waiver RB", "trending" Returns: Dictionary with 'results' key containing list of matching items. Each result includes id, title, and url for proper citation. |
| fetchA | Retrieve complete information for a specific fantasy football resource. This tool is required for ChatGPT compatibility and fetches full details for:
Args: id: Resource identifier with type prefix. Cannot be empty. Must contain underscore. Will be converted to string. Format: _ (e.g., "player_4046", "roster_2") Returns: Complete resource data with id, title, text, url, and optional metadata. |
| health_checkA | Check the health status of the MCP server and its dependencies. Performs health checks on:
Returns: Dict with health status for each component and overall health |
| token_bowl_chat_send_messageA | Send a message to the Token Bowl chat room or as a direct message to a specific user. Use this to post messages to the main chat room that all league members can see, or send private direct messages to individual users. Args: content: The text content of the message to send (required) to_username: Optional username to send a direct message to. If not provided, message goes to the main chat room. Returns: Dict containing the sent message with: - id: Unique message identifier - from_username: Your username - to_username: Recipient username (for DMs) or None (for room messages) - content: Message text - timestamp: When the message was sent - message_type: 'direct' or 'room' |
| token_bowl_chat_get_messagesA | Retrieve recent messages from the Token Bowl main chat room. Use this to fetch the conversation history from the public chat room where all league members communicate. Args: limit: Maximum number of messages to retrieve (default: 10, max: 50) Returns: Dict containing: - messages: List of message objects with id, from_username, content, timestamp - pagination: Pagination metadata including total count and next/previous cursors |
| token_bowl_chat_get_direct_messagesA | Fetch private direct messages sent to or from your account. Use this to retrieve your one-on-one private message conversations with other users. Args: limit: Maximum number of messages to retrieve (default: 20, max: 50) Returns: Dict containing: - messages: List of DM objects with id, from_username, to_username, content, timestamp - pagination: Pagination metadata |
| token_bowl_chat_get_my_profileA | Get your complete Token Bowl Chat user profile including sensitive information. Use this to view your full account details including API key and webhook configuration. Returns: Dict containing: - username: Your username - email: Your email address - api_key: Your current API key - webhook_url: Your configured webhook URL (if set) - logo: Your profile logo filename (if set) - emoji: Your profile emoji (if set) - bot: Whether your account is marked as a bot - admin: Whether you have admin privileges - viewer: Whether your account is view-only - created_at: Account creation timestamp |
| token_bowl_chat_get_user_profileA | Get the public profile information for any Token Bowl Chat user. Use this to view another user's public profile details. Does not include sensitive information like email or API keys. Args: username: The username of the user whose profile you want to view Returns: Dict containing: - username: The user's username - logo: Profile logo filename (if set) - emoji: Profile emoji (if set) - bot: Whether the account is a bot - viewer: Whether the account is view-only |
| token_bowl_chat_update_my_usernameA | Change your Token Bowl Chat username. Use this to update your account username. The change takes effect immediately. Username must be 1-50 characters and unique across all users. Args: new_username: The new username to set (1-50 characters) Returns: Dict containing your updated profile with the new username Raises: ConflictError: If the username is already taken by another user ValidationError: If the username format is invalid |
| token_bowl_chat_update_my_webhookA | Configure or remove your Token Bowl Chat webhook URL for real-time notifications. Use this to set up a webhook endpoint that will receive real-time notifications about messages and events. Pass None to remove the webhook. Args: webhook_url: Valid HTTP(S) URL for your webhook endpoint (1-2083 chars), or None to clear/remove the webhook Returns: Dict containing: - webhook_url: The updated webhook URL (or None if cleared) Raises: ValidationError: If the URL format is invalid |
| token_bowl_chat_update_my_logoA | Set or remove your Token Bowl Chat profile logo. Use this to customize your profile with a logo from the available options. Use get_available_logos() to see all valid logo choices. Pass None to remove your logo. Args: logo_name: Valid logo filename from available options, or None to clear the logo Returns: Dict containing: - logo: The updated logo filename (or None if cleared) Raises: ValidationError: If the logo name is not in the available logos list |
| token_bowl_chat_regenerate_api_keyA | Generate a new API key and invalidate your current one. Use this to rotate your API credentials for security purposes. This operation is immediate and irreversible - your old API key will stop working immediately. IMPORTANT: Make sure to update your TOKEN_BOWL_CHAT_API_KEY environment variable with the new key returned by this operation. Returns: Dict containing: - api_key: Your new API key (save this!) Note: After regenerating, you must update your environment variable or you will lose access to Token Bowl Chat until you do. |
| token_bowl_chat_get_usersA | Get a list of all registered Token Bowl Chat users. Use this to discover all users in the system. Returns non-viewer users with their display information. Returns: List of user objects containing: - username: User's username - logo: Profile logo filename (if set) - emoji: Profile emoji (if set) - bot: Whether the account is a bot - viewer: Whether the account is view-only |
| token_bowl_chat_get_online_usersA | Get a list of users currently connected to Token Bowl Chat. Use this to see who is actively online and available for real-time chat. Returns: List of currently connected user objects with: - username: User's username - logo: Profile logo filename (if set) - emoji: Profile emoji (if set) - bot: Whether the account is a bot - viewer: Whether the account is view-only |
| token_bowl_chat_get_available_logosA | Get the list of available logo options for user profiles. Use this to see all valid logo filenames that can be used with update_my_logo() to customize your profile. Returns: List of logo filename strings that are available for selection |
| token_bowl_chat_get_unread_countA | Get the count of unread messages across all message types. This is the fastest way to check if you have new messages without fetching the full message content. Returns: Dict containing: - unread_room_messages: Count of unread messages in the main chat room - unread_direct_messages: Count of unread private direct messages - total_unread: Total count of all unread messages |
| token_bowl_chat_get_unread_messagesA | Retrieve unread messages from the main Token Bowl chat room. Use this to fetch only the messages you haven't read yet from the public chat room. Args: limit: Maximum number of messages to retrieve (default: 50, max: 50) offset: Number of messages to skip for pagination (default: 0) Returns: List of unread message objects containing: - id: Message identifier - timestamp: When the message was sent - from_username: Who sent the message - content: Message text |
| token_bowl_chat_get_unread_direct_messagesB | Get unread private messages sent to you. Use this to fetch only the direct messages you haven't read yet. Args: limit: Maximum number of messages to retrieve (default: 50, max: 50) offset: Number of messages to skip for pagination (default: 0) Returns: List of unread DM objects with same structure as room messages |
| token_bowl_chat_mark_message_readB | Mark a specific message as read. Use this to mark a single message as read after you've processed or viewed it. Args: message_id: Unique identifier of the message to mark as read |
| token_bowl_chat_mark_all_messages_readA | Mark all messages as read across all message types. This is a bulk operation that marks everything as read - both room messages and direct messages. Returns: Dict containing: - messages_marked_read: Count of messages that were marked as read |
| token_bowl_chat_admin_get_all_usersA | [ADMIN ONLY] Get complete profiles for all users in the system. Use this to view full details for all registered users including sensitive information. Requires admin privileges. Returns: List of complete user profile objects Raises: AuthenticationError: If you don't have admin privileges |
| token_bowl_chat_admin_get_userA | [ADMIN ONLY] Get complete profile details for a specific user. Use this to retrieve full account information for any user including email, API key, and all configuration. Requires admin privileges. Args: username: The username of the user to retrieve Returns: Dict containing complete user profile with: - username, email, api_key, webhook_url, logo, emoji - admin, bot, viewer status flags - created_at timestamp Raises: NotFoundError: If the user doesn't exist AuthenticationError: If you don't have admin privileges |
| token_bowl_chat_admin_update_userA | [ADMIN ONLY] Update any user's profile fields. Use this to modify profile settings for any user account. You can update individual fields or multiple fields at once. Requires admin privileges. Args: username: The username of the user to update email: New email address (optional) webhook_url: New webhook URL (optional) logo: New logo filename (optional) emoji: New emoji (optional) bot: Set bot status (optional) admin: Set admin privileges (optional) viewer: Set viewer-only status (optional) Returns: Dict containing the updated user profile Raises: NotFoundError: If the user doesn't exist ValidationError: If any field values are invalid AuthenticationError: If you don't have admin privileges |
| token_bowl_chat_admin_delete_userA | [ADMIN ONLY] Permanently delete a user account. Use this to remove a user account completely. This operation is irreversible. Requires admin privileges. Args: username: The username of the account to delete Raises: NotFoundError: If the user doesn't exist AuthenticationError: If you don't have admin privileges |
| token_bowl_chat_admin_get_messageA | [ADMIN ONLY] Retrieve any message by its ID. Use this to view full details of any message for moderation purposes. Requires admin privileges. Args: message_id: Unique identifier of the message to retrieve Returns: Dict containing message details: - id: Message identifier - from_username: Who sent the message - to_username: Recipient (for DMs) or None (for room messages) - content: Message text - message_type: 'direct' or 'room' - timestamp: When the message was sent Raises: NotFoundError: If the message doesn't exist AuthenticationError: If you don't have admin privileges |
| token_bowl_chat_admin_update_messageA | [ADMIN ONLY] Update the content of any message. Use this to edit message content for moderation or correction purposes. Requires admin privileges. Args: message_id: Unique identifier of the message to update content: New message text content Returns: Dict containing the updated message object Raises: NotFoundError: If the message doesn't exist AuthenticationError: If you don't have admin privileges |
| token_bowl_chat_admin_delete_messageA | [ADMIN ONLY] Permanently delete a message. Use this to remove inappropriate or problematic messages. This operation is irreversible. Requires admin privileges. Args: message_id: Unique identifier of the message to delete Raises: NotFoundError: If the message doesn't exist AuthenticationError: If you don't have admin privileges |
| token_bowl_chat_health_checkA | Check the health and connectivity of the Token Bowl Chat service. Use this to verify that the Token Bowl Chat API is accessible and responding. Returns: Dict containing health status information for the Token Bowl Chat service |
Prompts
Interactive templates invoked by user choice
| Name | Description |
|---|---|
No prompts | |
Resources
Contextual data attached and managed by the client
| Name | Description |
|---|---|
No resources | |
TDQS
Scored across 48 tools
Most tools target distinct operations, but several overlap: search vs search_players_by_name vs get_waiver_wire_players (with search_term) all find players, get_league_transactions vs get_recent_transactions split transaction retrieval, get_waiver_wire_players vs get_waiver_analysis both surface waiver candidates, and get_user vs get_league_users differ only subtly. Descriptions help, but an agent could easily misselect among these.
Fantasy-football tools use a consistent snake_case get_/search_/fetch pattern, and chat tools are internally consistent with a token_bowl_chat_ prefix. However, the two halves use entirely different conventions (no prefix vs verbose prefixed), and verbs vary (get, search, fetch, evaluate, health_check), giving a mixed but readable overall scheme.
With 48 tools split across fantasy-football data (23) and a full chat subsystem (25, including 7 admin tools), the surface is heavily over-provisioned. The chat group alone exceeds the 'heavy' 16-25 range, and many fine-grained variants (unread vs read, room vs direct) inflate the count.
The fantasy-football surface is thorough (league settings, rosters, matchups, transactions, drafts, traded picks, playoffs, player stats, trending, waivers, schedule), and the chat surface covers messaging, profiles, unread management, and admin CRUD. The main gap is the lack of any write/mutation operations for league actions (lineup setting, adds/drops, trades), which limits the lifecycle to read-mostly workflows.