Skip to main content
Glama
brettadams0

chesscom-mcp

by brettadams0
README.md
# chesscom-mcp

[![CI](https://github.com/brettadams0/chesscom-mcp/actions/workflows/ci.yml/badge.svg)](https://github.com/brettadams0/chesscom-mcp/actions/workflows/ci.yml)
[![License: MIT](https://img.shields.io/badge/License-MIT-blue.svg)](LICENSE)
[![Node](https://img.shields.io/badge/node-%E2%89%A520-brightgreen.svg)](package.json)

An MCP server over the [Chess.com public data API](https://www.chess.com/news/view/published-data-api).
Read-only, and the upstream API needs no authentication — there is no token to
manage and nothing to expire, which makes this the simplest of the set.

Runs over stdio and is registered in `~/.claude.json` as `chesscom`.

## Tools

| Tool | Purpose |
|---|---|
| `chess_get_profile` | Public profile — name, title, country, followers, join date |
| `chess_get_stats` | Ratings and W/L/D per format (bullet, blitz, rapid, daily, puzzles) |
| `chess_get_current_games` | Daily/correspondence games in progress; `onlyMyTurn` filters to games awaiting a move |
| `chess_get_game_archives` | Index of available monthly archive URLs for a player |
| `chess_get_games_by_month` | Every game a player played in a given year/month, with PGNs |
| `chess_get_titled_players` | Usernames holding a given title (GM, IM, FM, …) |
| `chess_get_leaderboards` | Current Chess.com leaderboards across all categories |
| `chess_get_club` | Club profile by URL-ID |
| `chess_get_clubs` | Clubs a given player belongs to |

## Layout

```
src/client.js   thin fetch wrapper over api.chess.com/pub, shared error handling
src/chess.js    all nine tool registrations
src/index.js    McpServer construction + stdio transport
```

## Running it

```bash
npm ci
npm start        # stdio server; expects an MCP client on the other end
```

Registered for Claude Code with:

```bash
claude mcp add chesscom -- node <path>/chesscom-mcp/src/index.js
```

## Tests

```bash
npm test
```

Registration plus the fetch wrapper's URL, headers and error handling, using a
stubbed `fetch`. No network calls, so it is safe in CI.

## Notes

- The upstream API is rate-limited but generous, and serves cached responses.
  Bursts of `chess_get_games_by_month` across many months are the realistic way
  to hit a limit.
- Usernames are case-insensitive upstream but are URL-encoded here before use.
- `credentials/` and `.env` are gitignored on principle even though this server
  has no secrets today — so that adding auth later can't leak one by accident.

TDQS

A3.5/5.0

Scored across 9 tools

Disambiguation5/5

Each tool targets a distinct aspect of Chess.com data: titled players, leaderboards, profiles, stats, current games, archives, games by month, and clubs. No ambiguity.

Naming Consistency5/5

All tools follow a consistent 'chess_get_<noun>' pattern in snake_case, making them predictable and easy to select.

Tool Count5/5

9 tools is well-scoped for a chess server, covering player info, games, and clubs without excess or deficiency.

Completeness4/5

Covers most essential areas (profiles, stats, games, clubs), but misses puzzle/rush data and tournament info, which are minor gaps.

Maintenance

ActivitySlowing
ResponsivenessNo issues