chess.com MCP Server
Provides tools to fetch public player profile and stats from Chess.com.
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.com MCP Serverget stats for hikaru"
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.
Setting Up MCP server
This is for windows setup . You need python and uv installed on machine.If uv not installed then install using
pip install uv
Make a demo folder in windows
mkdir demo
cd demoInitialized virtual environment
demo>uv init
demo>uv venv
demo>.venv\Scripts\activate
(demo) c:\demo>uv add mcp[cli] requestsopen the folder in code
```bash
(demo) demo>code .Add Folder src and chess
With in VS code , click on folder icon and add folder named src
Inside the src folder add another folder named chess
Related MCP server: MCP Chess Server
Add File init.py
Add empty file inside chess folder __init__.py
Add chess_api.py
Add file named ```chess_api.py``` inside chess folder and add below codeimport requests
CHESS_API_BASE = "https://api.chess.com/pub"
headers = {
"accept": "application/json",
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) Python/3.10"
}
def get_player_profile(username):
url = f"{CHESS_API_BASE}/player/{username}"
response = requests.get(url, headers=headers)
response.raise_for_status()
return response.json()
def get_player_stats(username):
url = f"{CHESS_API_BASE}/player/{username}/stats"
response = requests.get(url, headers=headers)
response.raise_for_status()
return response.json()Add file server.py
Add another file named server.py inside chess folder and add below code
from mcp.server.fastmcp import FastMCP
mcp = FastMCP("chess.com")
from .chess_api import get_player_profile, get_player_stats
@mcp.tool()
def get_chess_player_profile(username: str):
"""Get the public profile for a Chess.com player by username."""
return get_player_profile(username)
@mcp.tool()
def get_chess_player_stats(username: str):
"""Get the stats for a Chess.com player by username."""
return get_player_stats(username)
def main():
mcp.run(transport="stdio")
if __name__ == "__main__":
main()Update the pyproject.toml file
The chess.server:main indicates there is chess folder inside src
and call main method in file server.py
[project.scripts]
chess = "chess.server:main"
[build-system]
requires = ["setuptools"]
build-backend = "setuptools.build_meta"
[tool.setuptools]
package-dir = {"" = "src"}
[tool.setuptools.packages.find]
where = ["src"]Run with MCP
demo>uv run chessNote the command chess match [project.scripts]
There will be no output , if you get any syntax errors it will show. Just
exit out of server console using Ctrl+C
Install Claude Desktop from official website
Add configuration file for Claude
Go to the folder C:\Users\{yourname}\AppData\Roaming. Or In run command type
%APPDATA% .Verify that the folder contains a subfolder named Claude.
create a new file name claude_desktop_config.json
add following contents into it . Update the driectory path based on your computer
eg C:\\temp\\AI\\MCP_ORL3\\demo
{
"mcpServers": {
"kannan-server": {
"command": "uv",
"args": [
"--directory",
"C:\\temp\\AI\\MCP_ORL3\\demo",
"run",
"chess"
]
}
}
}Restart Claude Desktop ,start a new chat
Look for icon SearchAndTools below prompt textbox
You will be able to see the mcp server agent named kannan-server ,based on the
name you provided in the configuration file.
Note to disable websearch. Now you can start searching for profile info and stats for Chess.com players using the commands you defined.
Available Tools
2 toolsget_chess_player_profileB
Get the public profile for a Chess.com player by username.
| Name | Required | Description | Default |
|---|---|---|---|
| username | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden. It mentions 'public profile', hinting that no auth is needed, but does not disclose any other behaviors such as rate limits, error responses, or that it is a read-only operation.
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 a single concise sentence that front-loads the action, resource, and parameter. Every word is purposeful and there is 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?
For a simple one-parameter tool with no annotations and no output schema, the description provides the core purpose. However, it could add more context about what the profile includes or any necessary prerequisites, making it adequate but not 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?
Schema coverage is 0%, so the description must compensate. It only restates the username parameter with 'by username', adding no extra meaning about format, case sensitivity, or usage nuances beyond what the schema already shows.
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 ('Get'), the resource ('public profile for a Chess.com player'), and the parameter ('by username'). It also distinguishes from sibling get_chess_player_stats by using 'profile' rather than 'stats'.
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 the tool's purpose but does not explicitly state when to use it over get_chess_player_stats. While the word 'profile' differentiates it from 'stats', there is no direct guidance on alternatives or when not to use it.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_chess_player_statsB
Get the stats for a Chess.com player by username.
| Name | Required | Description | Default |
|---|---|---|---|
| username | 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, but it only says 'Get the stats.' It does not mention return format, possible errors, rate limits, or what specific stats are included, leaving the agent without important 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 a single, front-loaded sentence with no wasted words. It efficiently communicates the core purpose and parameter, making it appropriately concise for a tool with one obvious parameter.
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 one-parameter tool, the description is minimally adequate: it names the action and the parameter. However, with no output schema and no annotations, it lacks details about the returned stats or failure behavior, which reduces completeness.
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's 'by username' adds some meaning by clarifying that the username is the Chess.com player identifier, but this largely repeats the schema's property name. It does not add format, constraints, or examples beyond what the input schema already provides.
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 stats for a Chess.com player, using the specific verb 'Get' and a distinct resource ('stats') that differentiates it from the sibling tool get_chess_player_profile. However, it does not explicitly mention the sibling or explain the distinction, so it falls short of a perfect score.
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 get_chess_player_profile. The description only states what it does, not the context or exclusions, so an agent has no assistance in choosing between the sibling tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
TDQS
The two tools are clearly distinct: one retrieves a player's profile, the other retrieves their stats. There is no overlap or ambiguity in their purposes.
Both tool names follow the identical pattern 'get_chess_player_<resource>', using consistent snake_case and the same verb-noun structure. This makes the naming highly predictable.
With only 2 tools, the server feels thin for a domain as broad as chess.com. This is at the borderline where a 1-2 tool set is acceptable if scoped tightly, but it limits overall usefulness.
The server covers only player profile and stats, missing common chess.com resources like games, tournaments, and leaderboards. This is a significant gap for a server claiming to represent the chess.com API, likely causing agent failures for broader queries.
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
Chess.com MCP — wraps the Chess.com public API (free, no auth)
Lichess public API: players, ratings, eval, tablebase, opening explorer
Minecraft profile lookups (UUID, profile, name history, blocked servers).
Roblox public profile + friends + badges + games + groups lookups.
Related MCP Servers
- FlicenseBqualityDmaintenanceEnables interaction with Chess.com's public API to retrieve player profiles and statistics including rating history and performance metrics for any Chess.com username.2
- AlicenseBqualityDmaintenanceProvides Chess.com player data integration, enabling AI assistants to fetch real-time chess player profiles and comprehensive statistics including ratings, game counts, and performance metrics from Chess.com's public API.2MIT
- FlicenseNot gradedqualityDmaintenanceProvides tools to interact with the Chess.com Public API for fetching real-time player profiles and detailed game statistics. It enables LLMs to access information like player ratings, win/loss records, and current online status.
- AlicenseNot gradedqualityDmaintenanceEnables AI assistants to explore player profiles, ratings, game archives, leaderboards, clubs, and puzzles via the Chess.com API.1MIT
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/KannanSudhakaran/webinar-mcp-aug27'
If you have feedback or need assistance with the MCP directory API, please join our Discord server