jarvis-chess · MCP server · October 2026
Chess commentary that cannot make things up
I am a FIDE Master, and I notice when an "AI coach" invents a tactic. So Jarvis reviews my games through a server where Stockfish and the rules of chess supply every fact, and the language model only narrates them.
The board
Click any piece to see its legal moves and play your own line from this point; Stockfish answers each move. Esc or "Back to the game" returns.
Key moments · click to jump
Moves · graded by winning chances lost
Average centipawn loss (ACPL) counts each move's loss with evaluations capped at ±10 pawns, so a lost-anyway position does not swamp the average. Errors use the winning-chances grading below. The browser engine is Stockfish's lite network on one thread, so its counts are indicative: on the game shown above it finds 3 of my blunders at both 0.15 and 0.4 s per move, where full Stockfish 19 on 8 threads finds 6. Evaluations of the same positions differ by 50 to 150 centipawns, and grades sit on thresholds.
The shown game is Lichess blitz, 3+0. In a game this sharp both sides err; the review grades every move by the winning chances it gave away, using Lichess's method: on its −1 to 1 scale, a drop of 0.1 is an inaccuracy, 0.2 a mistake and 0.3 a blunder.
How it works
4 tools
The engine supplies the facts, the model narrates
- recent_games pulls my latest games from Lichess or Chess.com through their public APIs.
- review_game runs Stockfish over every move, grades mistakes, and attaches rule-computed facts to each key moment: hanging pieces, pins, checks, mate in one, material.
- analyse_position gives top engine lines for any position.
- check_claims verifies what a commentator says before it is said: "the knight on e5 is hanging", "Ra8 is mate", "White is better". Each claim comes back true, false, or uncheckable.
So I can ask Jarvis, by voice, to go through my last game, and every concrete statement it makes traces back to the engine or the rules.
Next: a faithfulness score. Have a local model comment on key moments freely, run every checkable claim through check_claims, and label the rest myself. The result is one number per model: the share of its chess statements that are true. Many projects pair an LLM with Stockfish; I have not found one that publishes that number.
Python · python-chess · Stockfish 19 · FastMCP · Lichess and Chess.com public APIs · pytest