Click on "Install Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@Reconnaissance Blind Chess MCP Serverstart an unranked game against trout as white"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
Reconnaissance Blind Chess MCP Server
An MCP (Model Context Protocol) server that enables LLM agents to play Reconnaissance Blind Chess (RBC) games remotely on rbc.jhuapl.edu against various bots.
Overview
This server provides tools for LLM agents to:
Play unranked games against specific bots (random, attacker, trout, Oracle, StrangeFish2, etc.)
Wait for and accept ranked game invitations
Choose colors (white, black, or random) for unranked games
Track game state, board positions, and move history
View ASCII representations of the current board
Submit sense actions and moves during gameplay
Installation
Prerequisites
Python 3.8 or higher
An account on rbc.jhuapl.edu
Setup
Clone or download this repository:
Create and activate a virtual environment:
Install dependencies:
Usage
Running the MCP Server
Start the server using:
The server communicates via stdio and is designed to be used with MCP-compatible clients (like Claude Desktop or other LLM interfaces).
Configuring Claude Desktop
Add this to your Claude Desktop configuration file:
macOS: ~/Library/Application Support/Claude/claude_desktop_config.json
Windows: %APPDATA%\Claude\claude_desktop_config.json
Adjust the path to match your installation directory.
Available Tools
1. start_unranked_game
Start an unranked game against a specific bot by sending an invitation (based on rc_play_on_server.py).
Parameters:
opponent_bot(string): Bot name (e.g., "random", "attacker", "trout", "oracle", "strangefish2")color(string): Color to play as ("white", "black", or "random")"white": Always play as white
"black": Always play as black
"random": 50/50 chance of either color
username(string): Your username on rbc.jhuapl.edupassword(string): Your password on rbc.jhuapl.edu
Example:
Notes:
The server sends an invitation to the bot via
server.send_invitation()The game starts automatically when the bot accepts the invitation
Use
list_active_gamesto see when the game has startedThe game ID is generated by the server upon invitation acceptance
2. start_ranked_game
Start listening for ranked game invitations from the RBC server. Automatically accepts invitations and plays games with assigned colors.
Parameters:
username(string): Your username on rbc.jhuapl.edupassword(string): Your password on rbc.jhuapl.edumax_concurrent_games(integer, optional): Maximum number of concurrent ranked games to play (default: 1)
Example:
Notes:
The listener runs continuously in the background, checking for invitations every 5 seconds
When an invitation is received, it's automatically accepted and a game starts
You'll be assigned a color by the server
Use
list_active_gamesto see which games are runningUse
stop_ranked_listenerto stop accepting new invitations
3. stop_ranked_listener
Stop listening for ranked game invitations.
Parameters: None
Example:
Notes:
Games already in progress will continue
You can start listening again with
start_ranked_game
4. get_game_state
Get the current state of a game including all tracking information.
Parameters:
game_id(string): The game ID returned when starting a game
5. get_board_ascii
Get an ASCII representation of the current board state with game information.
Parameters:
game_id(string): The game ID
Example Output:
6. submit_sense
Submit a sense action for the current turn. In RBC, sensing reveals a 3x3 area centered on the chosen square.
Parameters:
game_id(string): The game IDsquare(string): Square to sense (e.g., "e4", "d5") or "pass" to skip sensing
Example:
7. submit_move
Submit a move for the current turn.
Parameters:
game_id(string): The game IDmove(string): Move in UCI format (e.g., "e2e4", "e7e8q" for promotion) or "pass" to skip moving
Example:
8. list_active_games
List all currently active games.
Parameters: None
9. get_game_history
Get detailed move-by-move history of a game.
Parameters:
game_id(string): The game ID
Game Flow
Each turn in Reconnaissance Blind Chess follows this sequence:
Opponent Move Result: You're informed if your opponent captured one of your pieces
Sense Phase: Choose a square to sense (reveals 3x3 area around it)
Move Phase: Choose a move to make
Example Unranked Game Session
Example Ranked Game Session
RBC Rules Summary
Objective: Capture the opponent's king (not checkmate)
Sensing: Each turn, sense a 3x3 area to see the true board state
Moves: Make standard chess moves, but illegal moves may fail or be modified
No check warnings: Kings can move into check
Limited information: You only see what you sense and capture feedback
For complete rules, see: RBC Rules Documentation
API Documentation
This server implements the reconchess Player API. For full API details, see: Reconchess API Documentation
Game State Tracking
The server tracks for each game:
Current board state (based on your sensing)
Turn number
All opponent move results
All sense results
All your move results
Game history when complete
Resources
The server exposes game states as MCP resources at:
rbc://game/{game_id}- JSON representation of game state
Troubleshooting
Import Errors
If you see import errors for mcp, chess, or reconchess:
Connection Issues
Verify your rbc.jhuapl.edu credentials
Check that the server is accessible
Ensure you have an active internet connection
Game Timeout
Games have time limits. If a turn times out:
The server will auto-pass for sense/move
Check
seconds_leftin game state
Contributing
This is a basic implementation. Potential improvements:
Better error handling and retry logic
Support for local games
Game replay functionality
Enhanced board visualization
Tournament support
License
This project uses the reconchess library and follows its license terms.