Como outros já disseram, UCI é a API que você deseja. As especificações completas do protocolo estão aqui (o arquivo zip é extraído para um arquivo de texto): http://download.shredderchess.com/div/uci.zip
Na verdade, é muito direto e simples, um mecanismo UCI deve responder e responder em texto sem formatação através de stdin, stdout e stderr. De fato, você deve poder iniciar o binário executável de qualquer mecanismo UCI em sua plataforma e emitir os comandos UCI manualmente.
A UCI facilita as instruções de uma GUI ou outro mecanismo para instruir o mecanismo específico a fazer o que você deseja, incluindo analisar um arquivo PGN específico (o carregamento é feito através da GUI ou de um front-end similar, as movimentações brutas são então alimentados ao motor em forma algébrica estendida, como e4 se tornando e2e4). O segundo e o terceiro ponto de seus requisitos são padrão com a UCI, mas cabe a cada desenvolvedor de mecanismo dar suporte a eles (dado o quão baixos esses requisitos são, essa deve ser a maioria deles).
Aqui está um exemplo de UCI em ação na linha de comando:
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$
Os comandos que eu emitei foram uci, isready e quit.
Para utilizar os comandos UCI, você basicamente tem duas opções principais; você pode usar uma interface existente (por exemplo, ChessX, Arena e vários outros) ou pode escrever seu próprio código para emitir instruções para um mecanismo ou grupo de mecanismos. Acredito que já pode haver wrappers Python para acessar os mecanismos UCI, mas eu precisaria verificar novamente. Definitivamente, há python-xadrez (import chess) e pychess (import pychess), simplesmente não consigo me lembrar da extensão de suas funções. Não me lembro onde o pychess está escondido (provavelmente no github ou no google code), mas o python-chess pode ser instalado com o pip.