Sergio Adan Bermudez

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.

EngineStockfish 19
Server review of a 39-ply game6.5 s
Claim types checked8

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.

move played · White's lines (3D)engine's choice · Black's lines (3D)hanging piece (3D)

Key moments · click to jump

Moves · graded by winning chances lost

analyse one game · Stockfish 19 in your browsernothing is uploaded

Shown above: my win over JoseGarciaMolina, reviewed by the jarvis-chess server. Load any game to replace it.

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