chess-support-mcp
Click on "Deploy 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., "@chess-support-mcp start a new chess game and show the board status"
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.
Chess Support MCP Server
An MCP server that manages the state of a chess game for LLMs/agents. It intentionally does not suggest moves. Instead, it provides tools to:
Create/reset game
Add a move (UCI)
List all moves
Get last N moves
Machine-friendly board JSON (square-to-piece map) in
get_status()Check if a move is legal
Get status (FEN, whose turn, check, game over, result)
Requirements
Python 3.13+
uv package manager
Run via uvx directly from GitHub (no local checkout)
You can run this MCP server without cloning by using uvx with a Git URL. Replace placeholders with your repo info and optional tag/commit.
Generic MCP config (Inspector-style):
{
"servers": {
"chess-support-mcp": {
"transport": {
"type": "stdio",
"command": "uvx",
"args": [
"--from",
"git+https://github.com/danilop/chess-support-mcp.git",
"chess-support-mcp"
]
}
}
}
}Claude Desktop mcpServers example:
{
"mcpServers": {
"chess-support-mcp": {
"command": "uvx",
"args": [
"--from",
"git+https://github.com/danilop/chess-support-mcp.git",
"chess-support-mcp"
]
}
}
}The first run may take longer while uvx resolves and builds the package; subsequent runs use cache.
Configure as a local MCP server (JSON)
Use stdio with uv run (no hardcoded paths). Example generic JSON config:
{
"servers": {
"chess-support-mcp": {
"transport": {
"type": "stdio",
"command": "uv",
"args": ["run", "chess-support-mcp"]
}
}
}
}Include a local path to your project without hardcoding a specific one by using a placeholder and setting the working directory via cwd (preferred), or by passing --project:
Option A (preferred: set working directory):
{
"servers": {
"chess-support-mcp": {
"transport": {
"type": "stdio",
"command": "uv",
"args": ["run", "chess-support-mcp"],
"cwd": "<ABSOLUTE_PATH_TO_PROJECT>"
}
}
}
}Option B (use uv's project flag):
{
"servers": {
"chess-support-mcp": {
"transport": {
"type": "stdio",
"command": "uv",
"args": ["run", "--project", "<ABSOLUTE_PATH_TO_PROJECT>", "chess-support-mcp"]
}
}
}
}Claude Desktop configuration (in its JSON settings), using mcpServers:
{
"mcpServers": {
"chess-support-mcp": {
"command": "uv",
"args": ["run", "chess-support-mcp"],
"cwd": "<ABSOLUTE_PATH_TO_PROJECT>"
}
}
}Tools (Methods)
create_or_reset_game()→ Reset to initial position. Returnsstatus(withpiecesmap), andmoves.get_status()→ Returns FEN;side_to_move(white/black);fullmove_number;halfmove_clock;ply_count;last_move_uci;last_move_san;who_moved_last; check flags;is_game_over;resultwhen over; and apiecesmap for machine reasoning.add_move(uci: str)→ Apply a move if legal (e.g.,e2e4,g1f3, promotion likee7e8q). Returns{ accepted, status }and, on success, alsomovesandmoves_detailed. On failure returns{ accepted:false, reason:"illegal"|"parse_error", expected_turn? }withstatusreflecting the unchanged position.is_legal(uci: str)→ Check legality of a UCI move in the current position.list_moves()→ All moves in UCI made so far.list_moves_detailed()→ All moves withply,side,uci,san.last_moves(n: int=1)→ Last N moves in UCI.last_moves_detailed(n: int=1)→ Last N moves withply,side,uci,san.board_ascii()→ ASCII board (optional, human-oriented). The normal API returns machine-friendly JSON instatus.pieces.
API design notes
Moves are always provided in UCI (e.g.,
e2e4,g1f3, promotionse7e8q). The server infers side-to-move from position; you never specify white/black when sending a move.get_status().side_to_movetells the model whose turn it is.who_moved_last,last_move_uci, andlast_move_sanhelp with context.Detailed move lists are provided in separate
*_detailedtools to keep the basic list simple and backwards compatible.
Notes
The server maintains one in-memory game.
The server does not provide hints or best moves.
Development
Run tests:
uv run pytest -qAvailable Tools
9 toolsadd_moveA
Apply a move in UCI format if legal.
Parameters:
uci: string like "e2e4", "g1f3", promotions like "e7e8q".
Returns (in result):
On success: { accepted:true, status: Status, moves:[...], moves_detailed:[...] } where Status is the same shape returned by get_status(), including last_move_{uci,san}.
On failure: { accepted:false, reason:"illegal", expected_turn:"white"|"black", status: Status }
Notes:
This tool validates legality only; it does not suggest or score moves.
Inputs: uci (required). Returns: result
board_asciiA
Return an ASCII representation of the board from White's perspective.
Notes:
This is a human-oriented view, suitable for displaying the board to users in UIs, logs, or chat.
For model reasoning, prefer the JSON map in get_status().pieces.
Inputs: no named parameters. Returns: result
create_or_reset_gameA
Create a new game or reset the current one to the initial position.
Returns (in result):
ok: boolean
status: object with the current position metadata:
fen: string (Forsyth–Edwards Notation)
side_to_move: "white" | "black"
fullmove_number: int
halfmove_clock: int
ply_count: int (number of half-moves made)
castling_rights: string like "KQkq" or "-"
en_passant_square: algebraic square like "e3" or "-"
last_move_uci: string | null
last_move_san: string | null
who_moved_last: "white" | "black" | null
is_check: boolean
is_game_over: boolean
result: string like "1-0", "0-1", "1/2-1/2" or null
pieces: object mapping squares to piece symbols, e.g. {"e4":"P", "e5":"p"}
moves: array of UCI strings for all moves played so far (empty after reset)
moves_detailed: array of { ply:int, side:"white"|"black", uci:string, san:string }
Notes:
This tool does not suggest moves; it only manages state.
Inputs: no named parameters. Returns: result
get_statusA
Get current position metadata for model-friendly planning.
Returns (in result):
fen, side_to_move, fullmove_number, halfmove_clock, ply_count
castling_rights, en_passant_square
last_move_uci, last_move_san, who_moved_last
is_check, is_game_over, result
pieces: square-to-piece map (e.g., {"a2":"P", "e1":"K"})
Inputs: no named parameters. Returns: result
is_legalA
Check if a UCI move is legal in the current position.
Returns (in result):
{ legal:boolean }.
If the UCI string cannot be parsed, { parse_error:string, legal:false }.
Inputs: uci (required). Returns: result
last_movesA
Return the last N moves in UCI (default 1).
Parameters:
n: integer >= 1. If n <= 0, returns an empty list.
Inputs: n. Returns: result
last_moves_detailedA
Return the last N moves with details (default 1).
Each item: { ply:int, side:"white"|"black", uci:string, san:string }. Parameters:
n: integer >= 1. If n <= 0, returns an empty list.
Inputs: n. Returns: result
list_movesA
Return all moves played so far in UCI, ordered from the start of the game.
Inputs: no named parameters. Returns: result
list_moves_detailedA
Return detailed move history.
Each item: { ply:int, side:"white"|"black", uci:string, san:string }
Inputs: no named parameters. Returns: result
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
Loading tool schema changelog…
TDQS
Scored across 9 tools
Most tools have clearly distinct purposes, but the closely named list_moves/list_moves_detailed and last_moves/last_moves_detailed differ only in detail level, which could cause misselection.
The naming is predominantly verb_noun in snake_case, but deviations like 'is_legal' and 'board_ascii' break the pattern, creating minor inconsistency.
Nine tools is within the typical well-scoped range, though list_moves and last_moves could potentially be consolidated with an optional limit parameter.
Core lifecycle is covered—create/reset, apply move, query status, history—but missing legal move enumeration and FEN import represent notable gaps for an agent.
Maintenance
Related MCP Connectors
Open chess platform where AI agents register, get matched and play each other. Referee only.
Chess MCP for Claude: engine analysis, attack maps, game review. One URL, no install.
Pedagogical chess intelligence for AI agents: explain positions and games for a target Elo.
Chess tools: game reviews for Chess.com and Lichess, FIDE ratings, openings, positions, puzzles.
Related MCP Servers
- -licenseNot gradedqualityNot gradedmaintenanceA Model Context Protocol server that enables LLM agents and humans to play chess games together with comprehensive game management capabilities including move validation, draw detection, and game state tracking.-
- FlicenseBqualityDmaintenanceEnables AI assistants to play, analyze, and track chess games with full rule validation and support for standard algebraic notation. It provides tools for position evaluation and game state persistence during user sessions.2-
- FlicenseAqualityDmaintenanceEnables AI assistants to play chess against users, manage games, make moves, and visualize boards with Stockfish AI opponent.81-
- AlicenseNot gradedqualityCmaintenanceEnables AI agents to play and analyze chess, validate moves, and view a live synchronized visual board in the browser through MCP tools.48 npmMIT