chess-coach
Server Configuration
Describes the environment variables required to run the server.
| Name | Required | Description | Default |
|---|---|---|---|
| CHESS_COACH_DB | Yes | Path to the SQLite database file where games and analysis are cached (e.g. /absolute/path/to/chess-coach/.data/games.db) | |
| CHESS_COACH_STOCKFISH | Yes | Path to the Stockfish binary used for engine analysis (e.g. /path/to/stockfish) |
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": false
} |
| prompts | {
"listChanged": false
} |
| resources | {
"subscribe": false,
"listChanged": false
} |
| experimental | {} |
Tools
Functions exposed to the LLM to take actions
| Name | Description |
|---|---|
| sync_gamesA | Download a chess.com player's recent games into the local cache. Only standard chess is stored. Already-cached games are skipped, so it is safe to call repeatedly. Returns counts, not the games themselves. |
| analyze_gamesA | Analyse not-yet-analysed games with Stockfish, newest first, and tag their costly moves with motifs (see tag_motifs). Works in small batches so one call stays fast; call again to continue. Returns progress counts only. Use sync_games first to download games. |
| tag_motifsA | Tag the costly moves (mistakes, blunders, short mates let go) of analysed games with the kind of error they are: moved_piece_hangs, left_piece_hanging, missed_capture, missed_check, missed_mate, allowed_fork, allowed_discovered_attack, allowed_pin_or_skewer, ignored_threat, or untagged. Newest games first, in batches; call again until motif_pending is 0. Reads the stored analysis; Stockfish is asked only for a ply whose line was never stored, once, at a fixed depth (engine_searches says how many). |
| motif_reportB | What kinds of costly moves the player makes: counts, share and average win-chance loss per motif tag, split by phase, pace (hasty / considered / short of time) and colour, plus the newest and costliest examples of each. A move can carry several tags, so shares can add up to more than 100%; untagged_share_pct is the part no rule explains. min_class is "mistake" or "blunder". pending_moves counts costly moves in games not tagged yet (run tag_motifs). |
| conversion_reportC | Games where the player reached a winning position (win chance >= threshold, counted as weakness_report counts it) and did not win: how often, how they ended, which move collapsed the position (phase, clock, motif tags), when the win chance fell below 50 for good, and the newest n such games with the details. collapse_type is single, time, gradual or other. |
| analysis_statusB | How many of a player's cached games are analysed vs pending. |
| backfill_game_detailsA | Add mate scores and best-line (PV) data to games analysed before they were stored, so get_game can show them. Re-searches only costly moves and near-decided positions; stored evaluations never change. Works in batches: call again until backfill_pending is 0. |
| list_gamesA | The player's cached games, newest first, to find a game_id for get_game. Filters: time_class (bullet/blitz/rapid), color ("white"/"black"), result from the player's side ("win"/"loss"/"draw"), opening (case-insensitive substring of the name). Each game has game_id, url, end_time (ISO 8601, UTC), time_control, time_class, color, opponent, opponent_rating, my_rating, result, termination, eco, opening, moves_count (full moves) and analyzed. |
| get_gameA | One cached game move by move, from the stored analysis (no engine is run).
Conventions:
|
| weakness_reportA | Where a player loses most: by game phase, colour and time control, and how often winning positions are thrown away. Optionally limit to a time class (bullet/blitz/rapid) and/or the most recent N analysed games. |
| opening_reportC | Results and opening-phase quality per opening and colour, worst first. |
| time_pressure_reportC | How the clock affects a player's results: errors by time-pressure zone, hasty vs considered blunders, time spent per phase, and games lost on time. |
| missed_opportunitiesC | How often the player used the opponent's blunders, and the costliest chances missed.
|
| sacrifice_candidatesB | Sound moves that put a piece on offer. Approximates chess.com's 'brilliant' label but over-reports (about ten false candidates per real brilliant). |
| coach_planB | Start here. Why the player's recent games were not won (one primary cause each), one focus for the coming week with the evidence, and the trend against earlier games. Use the other reports to drill into the focus area. |
| tilt_reportB | Does the player play worse after losses, or later in a session? Games are grouped into sessions (a pause longer than the gap starts a new one). Differences are reported only when they are larger than sampling noise. |
| time_of_day_reportC | Results and blunder rate by time of day (local clock) and weekday vs weekend. |
| resilience_reportC | How often the player saved (won or drew) a game after a clearly worse position. |
| peer_comparisonA | Compare the player's 3+0 blitz numbers with players of other rating bands (medians and quartiles from public games). Sample sizes are listed per band; thin bands are flagged tentative and give no verdict. |
| worst_momentsC | The player's costliest confirmed blunders with FEN, move played and best move. |
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 20 tools
Many report tools overlap in purpose: weakness_report, motif_report, time_pressure_report, conversion_report, resilience_report, tilt_report, and worst_moments all diagnose why the player loses or where errors concentrate. Descriptions do carve out distinct dimensions, but an agent must read carefully to choose the right report, and several share the same underlying evidence.
All names use snake_case, with a fairly predictable split between action tools (sync_games, analyze_games, tag_motifs, backfill_game_details) and noun_report tools. Minor deviations like analysis_status, worst_moments, coach_plan, and sacrifice_candidates keep it from being perfectly uniform.
Twenty tools is heavy for a chess-coaching server. Each report has a defensible purpose, but several could reasonably be consolidated, and the large analytical surface increases selection burden.
The surface covers the full lifecycle: syncing games, analysing with Stockfish, tagging motifs, backfilling details, inspecting individual games, status checks, and a broad set of reports leading into a coach_plan. No obvious operational gap remains for the stated coaching purpose.