Skip to main content
Glama

Server Configuration

Describes the environment variables required to run the server.

NameRequiredDescriptionDefault
CHESS_COACH_DBYesPath to the SQLite database file where games and analysis are cached (e.g. /absolute/path/to/chess-coach/.data/games.db)
CHESS_COACH_STOCKFISHYesPath 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

CapabilityDetails
tools
{
  "listChanged": false
}
prompts
{
  "listChanged": false
}
resources
{
  "subscribe": false,
  "listChanged": false
}
experimental
{}

Tools

Functions exposed to the LLM to take actions

NameDescription
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).

game is a game_id or a chess.com game link. Pass username so meta.my_color is set. ply_from/ply_to are an inclusive range. only_flagged keeps just inaccuracies, mistakes and blunders of either side, plus the ply before and after each (marked "context": true).

Conventions:

  • ply 1 is White's first move, ply 2 Black's first; Black's n-th move is ply 2n.

  • eval_before/eval_after are always from WHITE's point of view: {"cp", "mate"}. cp is clipped to +-1000. When a mate is known, cp is null and mate is the number of moves (positive = White mates). mate 0 = the position is checkmate ("mated" names the loser).

  • win_chance_before/after and wp_loss (0-100 scale) are from the point of view of the side that MADE the move, the same as worst_moments. class is best/good/inaccuracy/mistake/ blunder, using the same thresholds as the reports. No opening-book detection exists.

  • Every win chance, loss and percentage in every tool is rounded to 1 decimal, halves up, so the same move reads the same everywhere. Classes use the unrounded value.

  • mate_before_mover: N when the mover had a forced mate in N before moving. missed_mate: N when the move left no mate for the mover (class is NOT changed by this, a missed mate can still read "good"). mate_lengthened: {"from": N, "to": M} when a mate survives but takes more than N-1 moves. All null when there was no mate or the mate data is unknown (see meta.mate_data and the note). only_flagged also keeps a missed mate of 5 moves or fewer.

  • motifs: why a costly move (mistake, blunder, or a mate of 5 moves or fewer let go) was costly, e.g. ["moved_piece_hangs"], ["untagged"] when no rule fits. [] = not costly enough to tag; null = costly but not tagged yet (run tag_motifs). motif_details carries extras such as {"allowed_fork": {"with_check": true}}.

  • best_san/best_uci are null when the move played was the engine's best; best_pv_san (up to 5 plies, starts with the best move) is still given, or null if not stored.

  • clock_after is seconds left after the move; time_spent includes the increment. Both are null when the game has no clock data.

  • An unanalysed game returns SAN/UCI/FEN/clock with all evaluation fields null.

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. missed_mates lists forced mates the player had and let go: shortest mate first, then newest.

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

NameDescription

No prompts

Resources

Contextual data attached and managed by the client

NameDescription

No resources

TDQS

B3.2/5.0

Scored across 20 tools

Disambiguation3/5

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.

Naming Consistency4/5

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.

Tool Count3/5

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.

Completeness5/5

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.

Maintenance

ActivityMaintained
ResponsivenessResponsive