Comme d'autres l'ont dit, l'UCI est l'API que vous souhaitez. Les spécifications complètes du protocole sont ici (le fichier zip est extrait dans un fichier texte): http://download.shredderchess.com/div/uci.zip
C'est en fait très simple et simple, un moteur UCI doit répondre et répondre en texte clair via stdin, stdout et stderr. En fait, vous devriez pouvoir lancer le binaire exécutable de n'importe quel moteur UCI sur votre plate-forme et émettre les commandes UCI manuellement.
UCI facilite les instructions d'une interface graphique ou d'un autre moteur pour dire au moteur spécifique de faire tout ce que vous voulez qu'il fasse, y compris d'analyser un fichier PGN spécifique (le chargement se fait via l'interface graphique ou un frontal similaire, les mouvements bruts sont ensuite introduits dans le moteur sous forme algébrique étendue, comme e4 devenant e2e4). Les deuxième et troisième points de vos exigences sont standard avec UCI, mais il appartient à chaque développeur de moteur de les prendre en charge (compte tenu de la légèreté de ces exigences, cela devrait être la plupart d'entre elles).
Voici un exemple d'UCI en action sur la ligne de commande:
bash-3.2$ ./stockfish-5-64
Stockfish 5 64 by Tord Romstad, Marco Costalba and Joona Kiiski
uci
id name Stockfish 5 64
id author Tord Romstad, Marco Costalba and Joona Kiiski
option name Write Debug Log type check default false
option name Write Search Log type check default false
option name Search Log Filename type string default SearchLog.txt
option name Book File type string default book.bin
option name Best Book Move type check default false
option name Contempt Factor type spin default 0 min -50 max 50
option name Mobility (Midgame) type spin default 100 min 0 max 200
option name Mobility (Endgame) type spin default 100 min 0 max 200
option name Pawn Structure (Midgame) type spin default 100 min 0 max 200
option name Pawn Structure (Endgame) type spin default 100 min 0 max 200
option name Passed Pawns (Midgame) type spin default 100 min 0 max 200
option name Passed Pawns (Endgame) type spin default 100 min 0 max 200
option name Space type spin default 100 min 0 max 200
option name Aggressiveness type spin default 100 min 0 max 200
option name Cowardice type spin default 100 min 0 max 200
option name Min Split Depth type spin default 0 min 0 max 12
option name Threads type spin default 1 min 1 max 128
option name Hash type spin default 32 min 1 max 16384
option name Clear Hash type button
option name Ponder type check default true
option name OwnBook type check default false
option name MultiPV type spin default 1 min 1 max 500
option name Skill Level type spin default 20 min 0 max 20
option name Emergency Move Horizon type spin default 40 min 0 max 50
option name Emergency Base Time type spin default 60 min 0 max 30000
option name Emergency Move Time type spin default 30 min 0 max 5000
option name Minimum Thinking Time type spin default 20 min 0 max 5000
option name Slow Mover type spin default 80 min 10 max 1000
option name UCI_Chess960 type check default false
uciok
isready
readyok
quit
bash-3.2$
Les commandes que j'ai lancées étaient uci, isready et quit.
Pour utiliser les commandes UCI, vous avez essentiellement deux choix principaux; vous pouvez utiliser une interface existante (par exemple ChessX, Arena et une foule d'autres) ou vous pouvez écrire votre propre code pour envoyer des instructions à un moteur ou à un groupe de moteurs. Je pense qu'il peut déjà y avoir des wrappers Python pour accéder aux moteurs UCI, mais je devrais vérifier. Il y a définitivement python-chess (import d'échecs) et pychess (import pychess), je ne me souviens juste pas de l'étendue de leurs fonctions. Je ne me souviens pas où se cache pychess (probablement github ou google code), mais python-chess peut être installé avec pip.