chess-support-mcp
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., "@chess-support-mcpstart 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.
| Name | Required | Description | Default |
|---|---|---|---|
| uci | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Even without annotations, the description discloses the main behavioral contract: it returns accepted true/false, provides an illegal reason and expected_turn on failure, and returns Status. It also explicitly notes the tool does not suggest or score moves. It could mention prerequisites like an active game, but the failure and return contracts are well specified.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is well organized with Parameters, Returns, and Notes sections. It is concise yet complete, with no filler, and every sentence contributes functional information such as examples, return shape, and validation behavior.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's moderate complexity and the absence of annotations, the description covers the essential invocation contract: input format, success/failure result shape, and the tool's limited role. It does not explicitly state that an existing game is required, but this is inferable from the sibling create_or_reset_game and get_status tools and the Status return value.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema only provides 'uci' as a string with no description, so the parameter semantics are fully carried by the description. The description adds concrete UCI examples, including regular moves like 'e2e4' and promotion notation like 'e7e8q', which meaningfully compensates for the 0% schema coverage.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb ('Apply') and clear resource ('move in UCI format'), while adding the legality constraint. It is easily distinguished from sibling tools like is_legal (which would only validate) and list_moves (which would list options), because this tool actually changes the game state.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description states that the tool 'validates legality only' and explicitly says it does not suggest or score moves, which gives useful context for when to use it. It does not directly name alternatives like is_legal or list_moves, but the action-oriented language and sibling names make the intended usage clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
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.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the burden. It discloses that the output is human-oriented ASCII from White's perspective, and that it differs from the JSON representation. While it does not explicitly state 'read-only' or 'no side effects', the verb 'Return' clearly implies a read operation, and the tool's purpose is well explained.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is compact and front-loaded. The first sentence states the core purpose, and the bullet points provide necessary context and usage guidance without redundancy. Every sentence contributes value.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
This is a simple tool with no parameters and a clear output. The description covers its purpose, perspective, use case, and points to an alternative for a different use case. The output schema exists and handles return-value details, so no further completeness issues.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool has zero parameters, so the schema is empty and 100% covered. Per the rubric, baseline is 4. The description adds no parameter-specific information, but none is needed.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool returns an ASCII representation of the board from White's perspective. It distinguishes the tool from get_status by noting that the JSON map is preferred for model reasoning, effectively differentiating the two sibling tools.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It explicitly states when to use this tool (human-oriented display in UIs, logs, or chat) and when not to use it (for model reasoning, prefer get_status().pieces). This provides clear guidance on choosing between board_ascii and the alternative.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
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.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden of disclosing behavior. It thoroughly details the return structure (ok, status, moves, moves_detailed) and explicitly states the reset behavior (empty moves array after reset). It also clarifies the tool's non-advisory scope, adding meaningful context beyond simple 'resets game.'
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is well-organized: a one-sentence purpose statement, followed by a structured list of return fields. While the list is lengthy, each item adds semantic value (e.g., explaining castling rights and en passant notation). It could be trimmed if the output schema already covers these details, but the description remains efficient and front-loaded.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a zero-parameter, state-manipulation tool with no annotations, the description is exceptionally complete. It explains the full return payload, the reset semantics, and the tool's scope ('does not suggest moves'). It leaves no ambiguity about what happens when invoked and what information the caller receives.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool has zero parameters, so the schema requires no explanation. Per the rubric, a baseline of 4 is appropriate for 0-parameter tools. The description adds no parameter-specific semantics because none are needed, and it doesn't mislead about inputs.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with 'Create a new game or reset the current one to the initial position,' which is a specific verb+resource statement. It clearly distinguishes itself from siblings like add_move or get_status by focusing on state initialization/reset, and reinforces this with the note that it does not suggest moves.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description includes the note 'This tool does not suggest moves; it only manages state,' which provides a clear exclusion and implied usage context. While it doesn't explicitly name alternatives like get_status for queries, the sibling list and the tool's own purpose make the appropriate use case clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
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"})
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Since no annotations are provided, the description carries the burden. The verb 'Get' and the read-only nature of returning metadata imply a safe operation, but it does not explicitly state that it has no side effects, nor does it mention error conditions or prerequisites. Acceptable but with gaps.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise, front-loaded with the main verb and purpose, followed by a well-organized bullet list of return fields. Every line adds value; no redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With zero parameters and an output schema present, the description still goes beyond by listing key return values with an example. It fully covers what the agent needs to select and invoke the tool appropriately.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool has zero parameters, so the baseline is 4. The description correctly omits parameter details, and there is no parameter information to add beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool gets current position metadata for model-friendly planning, and enumerates the exact fields returned, distinguishing it from siblings like list_moves and board_ascii.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage through 'for model-friendly planning' and the nature of the returned data, but it does not explicitly name alternatives or when not to use this tool. No exclusionary guidance is provided.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
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 }.
| Name | Required | Description | Default |
|---|---|---|---|
| uci | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the behavioral burden. It discloses the return format ({legal:boolean}) and the parse_error edge case, which adds useful context beyond the bare purpose. It does not state side effects, but the verb 'check' implies non-mutation.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two sentences, front-loaded with the primary purpose and followed by return details. There is no fluff or redundant information—every sentence earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description covers the return values and the parse-error case, which is important given no output schema is shown. The requirement of an active game is implied by 'current position' but not explicitly stated, which is a minor gap for a simple tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The description clarifies that the 'uci' parameter is a UCI move string, adding meaning to the otherwise bare schema field. However, it does not specify the exact UCI format or provide examples, so the compensation for 0% schema coverage is minimal but sufficient for a single parameter.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action ('Check if a UCI move is legal') and the resource ('in the current position'), distinguishing it from sibling tools that manipulate or list moves. This is a specific verb+resource combination with no ambiguity.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies when to use it—to validate a move before adding it—but does not explicitly contrast with alternatives like add_move or state when not to use it. There is no explicit context or exclusions, so it falls at the implied-usage level.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
last_movesA
Return the last N moves in UCI (default 1).
Parameters:
n: integer >= 1. If n <= 0, returns an empty list.
| Name | Required | Description | Default |
|---|---|---|---|
| n | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden of behavioral disclosure. It explicitly states the default behavior, the parameter constraint (n >= 1), and the edge case outcome (empty list when n <= 0). It also clarifies the UCI format. This provides useful behavioral context beyond a simple operation, though it does not cover aspects like ordering or handling of insufficient history.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is brief and front-loaded with the core purpose. The parameter section is clearly separated and adds necessary detail. It is appropriately sized for a simple tool, though it could be slightly more compact by integrating the default mention.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's simplicity and the presence of an output schema, the description covers the essential behavior and parameter semantics. However, it misses usage guidance and sibling differentiation, particularly the distinction between last_moves and last_moves_detailed. This gap reduces completeness for an agent deciding which tool to invoke.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema only provides the type and default for the n parameter. The description adds crucial semantics by specifying the minimum value (>= 1) and the exact behavior for invalid input (empty list), which is not present in the schema. This fully compensates for the 0% schema description coverage.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool returns the last N moves in UCI format, with a default of 1. This identifies a specific verb and resource. However, it does not explicitly distinguish itself from sibling tools like last_moves_detailed, though the format mention provides some implicit distinction.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no guidance on when to use this tool versus alternatives such as list_moves or last_moves_detailed. The description only explains what the tool does and parameter behavior, leaving the agent to infer usage context.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| n | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the burden. It discloses the default value, the input constraint (n>=1), the edge case of empty list for n<=0, and the exact structure of each returned item. This is good transparency beyond the basic function.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is compact, front-loads the main purpose, and uses a clear list for parameters and output format. Every sentence adds value.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple read-only tool with one parameter and an output schema, the description covers the essential behavior, edge cases, and output format. It could mention ordering but that's implied by 'last N'. Overall near-complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema only defines n with a type and default. The description adds the constraint n>=1, the behavior for n<=0, and the return item structure, significantly enriching the parameter meaning despite 0% schema coverage.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool returns the last N moves with details, specifying the default. It distinguishes itself from sibling tools like 'last_moves' by adding 'with details' and from 'list_moves_detailed' by limiting to last N.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description does not provide any guidance on when to use this tool versus alternatives such as 'last_moves' or 'list_moves_detailed'. No explicit context or exclusions are given.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_movesA
Return all moves played so far in UCI, ordered from the start of the game.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the burden. It discloses output format (UCI) and ordering, but does not mention edge cases (e.g., empty game), side effects (none), or explicit read-only nature. It adds some context beyond the schema, but not comprehensive.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
One sentence that is concise, front-loaded with the main purpose, and contains no fluff. Every word contributes.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The tool is simple (no params, has output schema). The description covers the essential behavior: returns all moves in UCI, ordered. It doesn't explain return values, but output schema exists. Could mention empty list scenario, but not necessary. Complete enough for basic use.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool has zero parameters, and the schema properties are empty. Baseline for 0 params is 4. The description adds no parameter details because none exist, which is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb 'return' and resource 'all moves played so far' with format (UCI) and ordering (from start). It clearly distinguishes from siblings like last_moves (partial) and list_moves_detailed (likely more detail).
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No explicit guidance on when to use this tool versus alternatives like last_moves or list_moves_detailed. The phrase 'so far' implies current game context, but no exclusions or alternative references are provided.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_moves_detailedA
Return detailed move history.
Each item: { ply:int, side:"white"|"black", uci:string, san:string }
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the burden. It discloses the return item structure (ply, side, uci, san) and uses 'Return' to imply a read-only operation. However, it does not mention ordering, empty-game behavior, or whether this is the full move history versus a subset, which would be useful behavioral context.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two short lines, front-loaded with the core action and immediately followed by the return format. Every sentence adds value and there is no redundant content.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a no-parameter, simple read tool, the description is nearly complete: it states the purpose and the return item shape. The output schema exists, so further return-value explanation is unnecessary. It does not explicitly disambiguate from last_moves_detailed or list_moves, which is a minor gap.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool has zero parameters and an empty schema, so parameter semantics are trivially satisfied. The baseline for 0 params is 4; no parameter description is needed.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states 'Return detailed move history,' identifying the specific resource and the detail level. It does not explicitly contrast with siblings like list_moves or last_moves_detailed, but the word 'detailed' and the included item format provide some differentiation.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance is given about when to use this tool versus alternatives. Siblings include list_moves, last_moves, and last_moves_detailed, but the description does not explain whether this returns all moves, recent moves, or how 'detailed' compares to the other list tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
TDQS
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
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Related MCP Connectors
Pedagogical chess intelligence for AI agents: explain positions and games for a target Elo.
Live Texas Hold'em for AI agents. The tools teach the rules; the bluffing is up to your model.
Chess.com MCP — wraps the Chess.com public API (free, no auth)
Games for AI agents. Each game runs inside a single context window.
Related MCP Servers
- AlicenseNot gradedqualityDmaintenanceEnables playing chess games with legal move validation and AI opponent moves powered by the Stockfish engine. Supports multiple concurrent games and provides moves in UCI format.MIT
- FlicenseNot gradedqualityDmaintenanceEnables 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.
- AlicenseAqualityAmaintenanceEnables Large Language Models to play chess agentically with real-time HTML board visualization and a hybrid AI engine featuring ten difficulty levels. It supports interactive games between users and agents, including a web dashboard to monitor active matches.4MIT
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/danilop/chess-support-mcp'
If you have feedback or need assistance with the MCP directory API, please join our Discord server