Lichess Coach MCP
Server Configuration
Describes the environment variables required to run the server.
| Name | Required | Description | Default |
|---|---|---|---|
| HOST | No | Host for the HTTP server. | |
| PORT | No | Port for the HTTP server. | |
| TRUST_PROXY | No | Number of proxies in front of the app so rate limiting sees the real client IP. | |
| CORS_ORIGINS | No | Optional allow list for CORS. | |
| LICHESS_TOKEN | No | Personal API token from lichess.org/account/oauth/token, no scopes needed. Only opening_stats requires it. Leave it unset otherwise: Lichess rejects every request that carries a bad token. | |
| MAX_BODY_BYTES | No | Maximum request body size in bytes (64 KB default), checked before parsing. | 65536 |
| LICHESS_TIMEOUT_MS | No | Per-request timeout in milliseconds (default 15000 for stdio, 12000 for HTTP). | 15000 |
| REQUEST_TIMEOUT_MS | No | Wall-clock limit per HTTP request. | 30000 |
| DAILY_REQUEST_LIMIT | No | Global daily request cap for the HTTP server. | 5000 |
| RATE_LIMIT_PER_MINUTE | No | Per-IP rate limit for the HTTP server (token bucket). | 30 |
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
} |
Tools
Functions exposed to the LLM to take actions
| Name | Description |
|---|---|
| get_playerA | Look up a Lichess player: title, ratings for each speed they play (bullet, blitz, rapid, classical, puzzles, variants) with game counts and provisional flags, win/loss/draw totals, and basic profile info. |
| recent_gamesA | List a Lichess player's most recent finished games (up to 20): id, date, speed, opponent and rating, result, opening name, and accuracy when Lichess has analysed the game. Use has_analysis to pick games that find_mistakes can review. |
| get_gameA | Fetch one Lichess game: players, ratings, result, opening, time control, every move in SAN with clock times, and per-move engine evals and judgments when Lichess has analysed the game. Includes clean PGN. |
| find_mistakesA | List one player's inaccuracies, mistakes and blunders in a Lichess game, straight from Lichess's server analysis: the move played, the engine's best move and line, evals before/after and winning chances lost. If the game was never analysed, it says so instead of guessing. |
| evaluate_positionA | Get the engine evaluation of a chess position (FEN) from Lichess's cloud cache: score, best move and principal line in SAN, for up to 3 candidate moves. If the position isn't cached, it returns available=false rather than a guess. |
| tablebaseA | Exact result for an endgame with 7 or fewer pieces from the Lichess tablebase: win/draw/loss for the side to move, distance to mate or zeroing, and every move ranked. This is perfect play, not an estimate. |
| puzzle_of_the_dayA | Today's Lichess daily puzzle: position (FEN), side to move, rating, themes and the source game. The solution stays hidden unless reveal_solution=true, so a coach can let the player try first. |
| get_puzzleA | Fetch a Lichess puzzle by id: position (FEN), side to move, rating, themes and source game. The solution stays hidden unless reveal_solution=true. |
| opening_statsA | Opening explorer statistics for a position from the Lichess or Masters database: opening name, how often each next move was played, and White/draw/Black results. Takes a move list or FEN. Needs LICHESS_TOKEN on the server (Lichess now requires sign-in for the explorer). |
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 9 tools
Each tool targets a distinct resource: games, players, analysis, positions, endgames, puzzles, and openings. The only real overlaps are get_game vs recent_games (single fetch vs list) and get_puzzle vs puzzle_of_the_day (same content, different source), but descriptions clearly separate them.
Consistent snake_case throughout with a dominant verb_noun pattern (get_game, get_player, get_puzzle, find_mistakes, evaluate_position). A few noun-only names (recent_games, tablebase, puzzle_of_the_day, opening_stats) break the pattern slightly but remain readable and predictable.
Nine tools is well-scoped for a chess coaching domain, covering games, players, analysis, positions, endgames, puzzles, and openings without redundancy.
Strong lifecycle coverage: player lookup, game retrieval, mistake analysis, position evaluation, tablebase, puzzles, and opening stats. Minor gaps like game search or puzzle-by-theme browsing exist but core coaching workflows are fully supported.