Skip to main content
Glama

Chess Coach MCP

An open-source MCP server that turns any AI assistant (Claude Desktop, Cursor, Claude Code, ...) into a chess coach. It fetches your games from Lichess or Chess.com, runs them through Stockfish, and hands the AI structured ground truth so it can explain why you lost, in plain language.

"The game was decided by one move: 18. Bf4. It hung the bishop to the e5 pawn, and it ignored the pawn on f3, which took on g2, hit your rook and threatened to promote. 18. gxf3 was the safe move. Lesson: when a pawn lands next to your king, deal with it before anything else."

That paragraph is from a real game. See the complete worked example and the idea, flow and UI write-up.

How it flows

flowchart LR
    U([You]) -->|"coach my last game"| C[AI client<br/>Claude Desktop / Cursor]
    C <-->|MCP over stdio| S[chess-coach-mcp<br/>tools · resources · prompts]
    S -->|games| L[(Lichess / Chess.com)]
    S -->|UCI| SF[Stockfish<br/>auto-downloaded]
    S --> DB[(SQLite cache)]
  1. You ask for coaching. The AI calls get_recent_games, then analyze_game.

  2. The server fetches the PGN, runs every position through Stockfish, labels each move (best / good / inaccuracy / mistake / blunder) and returns JSON with the critical moments and their positions.

  3. The AI explains the mistakes in words and gives you one lesson. Follow-up questions are instant because the report is cached.

The position before the losing move, with the played move in red and the best move in green

Related MCP server: MCP Chess Server

Why

Today's option

What's wrong

Chess.com Game Review

Limited free uses per day, full version is paid

Lichess analysis

Free, but only shows numbers (?? -3.2), no words

Human coach

Explains properly, but expensive

Engines tell you what was wrong. Coaches tell you why. The hard part, explaining chess in natural language, is exactly what an LLM is good at. This server gives the LLM the data (your games) and the ground truth (engine evaluations) and gets out of the way.

What you can ask

  • "Coach me through my last game." (one game, three biggest mistakes, one lesson)

  • "What should I have played instead of 23...Qxb2?"

  • "Give me a weekly review. What keeps going wrong?"

  • "Which openings do I lose most with as Black?"

  • "Show me another game where I hung a piece to a fork."

Install

Requirements: Python 3.11+. Stockfish is optional: on first analysis the server downloads the official Stockfish release for your OS into its cache directory. If that is not possible it falls back to Lichess cloud evaluations (partial coverage).

pip install chess-coach-mcp
# or, from a clone:
pip install -e .

Claude Desktop

Add this to claude_desktop_config.json (see examples/claude_desktop_config.json):

{
  "mcpServers": {
    "chess-coach": {
      "command": "chess-coach-mcp"
    }
  }
}

Claude Code

claude mcp add chess-coach -- chess-coach-mcp

Any other MCP client

Run chess-coach-mcp as a stdio server. No hosting, no API keys.

Configuration (all optional)

Environment variable

Default

Meaning

STOCKFISH_PATH

auto-detect

Path to a Stockfish binary

CHESS_COACH_AUTO_DOWNLOAD

1

Download Stockfish automatically if none is found

CHESS_COACH_CACHE_DIR

~/.cache/chess-coach-mcp (%LOCALAPPDATA% on Windows)

Where games, reports and the engine are stored

CHESS_COACH_DEFAULT_DEPTH

14

Search depth for the first pass over every move

CHESS_COACH_REFINE_DEPTH

18

Depth used to double-check suspicious moves

CHESS_COACH_TIME_PER_POSITION

0.5

Max seconds per position in the first pass

CHESS_COACH_REFINE_TIME_PER_POSITION

2.0

Max seconds per position when double-checking

CHESS_COACH_ENGINE_THREADS

half your cores (1-4)

Stockfish threads

CHESS_COACH_ENGINE_HASH

128

Stockfish hash table in MB

LICHESS_TOKEN

none

Personal API token for higher Lichess rate limits

MCP surface

Tools

Tool

Input

Returns

get_recent_games

username, platform (lichess/chesscom), count

game ids, opponent, your result, opening, date

analyze_game

game_id, platform?, username?, depth?

per-move evals, cp loss, labels, best line, accuracy, critical moments

find_blunders

game_id, platform?, username?, threshold?, only_user?

only the moves that lost >= threshold cp, with FEN and best line

get_opening_stats

username, platform?, color?, count?

win/draw/loss per opening, weakest openings

engine_status

which engine is in use and cache statistics

Game ids can be bare (abcd1234, 123456789) or full URLs from either site.

Resources

URI

Content

chess://games/{username}/recent

JSON list of recent Lichess games

chess://{platform}/games/{username}/recent

JSON list of recent games on a platform

chess://game/{game_id}/pgn

Raw PGN (platform guessed from the id)

chess://{platform}/game/{game_id}/pgn

Raw PGN

Prompts

Prompt

Arguments

What it does

coach_my_last_game

username, platform

Fetch + analyze your last game, explain the 3 biggest mistakes

weekly_review

username, platform

Analyze the last 7 days, find recurring patterns behind your losses

How the analysis works

  1. The game's PGN is fetched (and cached in SQLite).

  2. Every position is evaluated by Stockfish at depth 14 (capped at half a second each). Evaluations are clamped to +/-1000 centipawns so that "+15 to +9" in a won position is not counted as a blunder.

  3. For each move, centipawn loss = how much the mover's evaluation dropped compared with the engine's best move. Moves are labelled:

    Centipawn loss

    Label

    > 300

    blunder

    100 - 300

    mistake

    50 - 100

    inaccuracy

    otherwise

    good / best

  4. Suspicious moves are re-checked at depth 18 (up to two seconds each) so shallow false positives disappear. A 40-move game takes roughly 30-60 seconds the first time.

  5. Per-player accuracy uses the Lichess formula. The report (JSON) is cached, so asking follow-up questions about the same game is instant.

Design notes

  • core/ has zero MCP imports. Tools, resources and prompts are thin wrappers over it. The chess logic is testable without an MCP client and reusable from a CLI or web app.

  • Tools, resources and prompts are separate packages. The server uses all three MCP primitives, not just tool calling.

  • Engine access is pluggable. StockfishEngine (local UCI subprocess) and LichessCloudEngine (HTTP) implement the same two-method protocol, and tests use a fake.

  • Everything is cached. Games and reports are stored in SQLite keyed by game id, depth and engine, so repeated questions never re-run the engine.

Project layout

src/chess_coach_mcp/
├── server.py        # builds the MCPServer, registers everything, runs stdio
├── services.py      # shared cache / HTTP / engine instances, game resolution
├── config.py        # environment-driven settings
├── tools/           # get_recent_games, analyze_game, find_blunders, get_opening_stats
├── resources/       # chess://games/..., chess://game/.../pgn
├── prompts/         # coach_my_last_game, weekly_review
├── core/            # engine.py, analysis.py, cache.py, models.py, pgn.py  (no MCP imports)
└── clients/         # lichess.py, chesscom.py
tests/               # unit tests with a fake engine and mocked HTTP

Documentation

  • docs/IDEA.md: the idea, the system flow, what the UI looks like, data shape.

  • docs/EXAMPLE.md: one real game, start to finish, tool calls and coaching.

  • docs/PLAN.md: the original project plan this was built from.

Development

git clone https://github.com/deven1003/chess-coach-mcp
cd chess-coach-mcp
pip install -e ".[dev]"
ruff check . && ruff format --check .
pytest

Try the server interactively with the MCP inspector:

npx @modelcontextprotocol/inspector chess-coach-mcp

Roadmap

  • v1: Lichess + Chess.com games, Stockfish analysis, blunder classification, prompts

  • v1.2: multi-game pattern detection (recurring tactical motifs, tagged automatically)

  • v2: puzzle suggestions from the Lichess puzzle database based on your weaknesses

  • v2: opening repertoire recommendations via the Lichess opening explorer

License

MIT

Available Tools

5 tools
analyze_gameA
Read-only

Run a full engine analysis of one game and classify every move.

Returns evaluation before/after each move, centipawn loss, a label (best/good/inaccuracy/mistake/blunder), the engine's best move and line, per-player accuracy and error counts, and the five most critical moments with their FEN so you can explain why a move was bad. Results are cached, so repeat calls are instant.

Args: game_id: Game id or URL from Lichess or Chess.com (as returned by get_recent_games). platform: "lichess" or "chesscom". Guessed from the id when omitted. username: The player to coach. Required for Chess.com games that were not fetched via get_recent_games; otherwise optional (adds user_color/user_result). depth: Engine search depth (default 14; 18+ is slower but more precise).

NameRequiredDescriptionDefault
depthNo
game_idYes
platformNo
usernameNo

Output Schema

NameRequiredDescription

No output parameters

TDQS

A4.2/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Beyond readOnlyHint/openWorldHint, the description adds genuinely useful behavior: results are cached so repeat calls are instant, and depth 18+ is slower but more precise. It also discloses the Chess.com username precondition, a real failure mode. Nothing contradicts the annotations — this is a read-only external-fetch-and-analyze operation.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded with the outcome and the payoff ('explain why a move was bad'), followed by a clean Args block. The return-value enumeration partly duplicates the output schema, but it is tight and no sentence is filler.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a four-parameter analysis tool with an output schema, the definition covers inputs, defaults, caching, and cost/latency tradeoffs. Minor omissions remain — no mention of what happens on an invalid or unsupported game id, and no relationship to engine_status despite engine availability being a likely precondition.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

With 0% schema description coverage, the description carries the full burden and does so: game_id accepts an id or URL from either platform, platform enumerates exactly 'lichess'/'chesscom' and is guessed when omitted, username's conditional requirement and its effect on user_color/user_result are stated, and depth's default of 14 with the 18+ tradeoff is given.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description opens with a specific verb and scope: 'Run a full engine analysis of one game and classify every move', then enumerates the outputs (eval before/after, centipawn loss, labels, accuracy, critical moments). An agent can tell it apart from find_blunders by the 'every move' / 'five most critical moments' framing, though it never explicitly names the sibling it replaces.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Usage context is concrete: game_id comes 'as returned by get_recent_games', username is required only for Chess.com games not fetched via that tool, and depth trades speed for precision. What is missing is explicit routing against siblings — nothing says when to prefer find_blunders or get_opening_stats over a full analysis.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

engine_statusA
Read-only

Report which chess engine the server is using (local Stockfish or Lichess cloud fallback), where it lives, and cache statistics. Useful for troubleshooting.

NameRequiredDescriptionDefault

No parameters

Output Schema

NameRequiredDescription

No output parameters

TDQS

A4.1/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The readOnlyHint annotation already establishes this is a safe, non-mutating read, so the description only needs to add context. It contributes by disclosing that the payload covers engine identity, filesystem location, and cache statistics, but says nothing about whether the result reflects live state, whether the fallback can be switched, or any cost/latency of the check.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single sentence, front-loaded with the primary fact (which engine is active) and back-loaded with the secondary detail (location, cache stats) and the usage hint. No filler.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With an output schema present, no parameters, and a read-only annotation, the description carries only what structured data cannot: that this is a diagnostics call and what categories of information it surfaces. That is sufficient for an agent to decide to call it.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The tool takes zero parameters, which is the baseline-4 case; the description correctly implies a no-argument global query rather than promising any filtering options. Nothing further is needed on this dimension.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb ("Report") and a precise resource (the active chess engine), and enumerates the possible values (local Stockfish vs. Lichess cloud fallback) plus the extra fields returned (location, cache statistics). This is unmistakably a diagnostic/status tool, so it cannot be confused with the sibling analysis tools.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

"Useful for troubleshooting" implies the usage context but gives no explicit when-to-use or when-not-to-use conditions, and names no alternative. It does not say whether to call this before or after a failed analysis, which is the most likely reason an agent would reach for it.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

find_blundersA
Read-only

Return only the moves that lost at least threshold centipawns, with the position (FEN), the engine's best move and the best line, sorted from worst to least bad.

Cheaper to read than analyze_game when you only need the mistakes.

Args: game_id: Game id or URL from Lichess or Chess.com. platform: "lichess" or "chesscom". Guessed from the id when omitted. username: The player to coach; required for uncached Chess.com games. threshold: Minimum centipawn loss to include (100 = mistakes and blunders). only_user: If true, return only the mistakes made by username.

NameRequiredDescriptionDefault
game_idYes
platformNo
usernameNo
only_userNo
thresholdNo

Output Schema

NameRequiredDescription

No output parameters

TDQS

A4.3/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true and openWorldHint=true, matching a read-only fetch against Lichess/Chess.com, so the safety profile is covered. The description adds useful behavior beyond that — deterministic sort order and the fact that results are filtered rather than exhaustive. However, the phrase 'uncached Chess.com games' hints at caching without explaining it, and nothing is said about failure modes such as an unresolvable game id or an unavailable engine.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single front-loaded sentence states the return shape, the sort order, and the cost tradeoff, followed by a one-line routing hint and a compact per-argument block. No sentence is redundant and the highest-value information comes first.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

An output schema exists, so the description needn't fully define return values, and it still summarises them accurately. For a five-parameter, network-dependent tool the coverage is strong; the remaining gap is error and edge-case behavior (bad id, platform-guess failure, empty result when no move exceeds the threshold).

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0% with five parameters, so the description has to carry the full load and largely does: game_id accepts an id or URL, platform is guessed when omitted, username is only conditionally required, and threshold is anchored with a concrete scale (100 = mistakes and blunders). The one soft spot is the interaction between only_user and username when only_user=true but no username was supplied, which is left implicit.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description gives a specific verb and resource ('Return only the moves that lost at least threshold centipawns') and states the exact payload — FEN, engine best move, best line, sorted worst-to-best. It also explicitly contrasts itself with a named sibling ('Cheaper to read than analyze_game when you only need the mistakes'), so an agent can separate it from that tool without opening either schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The routing rule against analyze_game is explicit, and the Args block states the conditional requirement that username is needed for uncached Chess.com games. What's missing is any exclusion or fallback guidance — e.g. what to do if the id can't be resolved to a platform, or whether to analyze the whole game first.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_opening_statsA
Read-only

Win/draw/loss record per opening over a player's recent games.

Helps spot openings the player struggles with. Each row carries the game ids so you can dig into a specific loss with find_blunders.

Args: username: The player's username. platform: "lichess" (default) or "chesscom". color: "white", "black" or "both" (default). count: How many recent games to look at (1-300). group_by_family: Group variations under their opening family (default true).

NameRequiredDescriptionDefault
colorNoboth
countNo
platformNolichess
usernameYes
group_by_familyNo

Output Schema

NameRequiredDescription

No output parameters

TDQS

A4.4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint and openWorldHint, so the safety profile is covered; the description adds that each row carries game ids and that variations are folded under families by default, which is genuine behavioral context. It says nothing about pagination, performance, or behavior on invalid usernames/platforms.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded summary followed by a short rationale and a compact Args block — no wasted sentences. The Args list is somewhat verbose in phrasing but is justified given the zero schema coverage.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a 5-parameter read-only analytics tool with an output schema, the description covers purpose, the analytical intent, parameter values, and the downstream workflow. Only edge-case handling (invalid platform, fewer games than count) is unaddressed, which is minor given the output schema exists.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description carries the full burden and does: it documents all five parameters, including allowed values for platform and color, the 1-300 range for count, and the default-true semantics of group_by_family. This is meaning the schema cannot supply on its own.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The first line names a specific aggregation (win/draw/loss record) over a specific resource (openings) and scope (a player's recent games). It is clearly distinguishable from siblings like get_recent_games (raw list) and find_blunders (mistake drill-down), which the description itself references.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It states the analytical use case ('spot openings the player struggles with') and explicitly routes follow-up work to find_blunders via the per-row game ids. It stops short of saying when to prefer get_recent_games instead, so there is no explicit exclusion rule.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_recent_gamesA
Read-only

List a player's most recent games from Lichess or Chess.com.

Returns one entry per game with the game_id (use it with analyze_game / find_blunders), the opponent, the result from the player's point of view, the opening and the date. Games are cached locally so later tools can find them by id.

Args: username: The player's username on the chosen platform. platform: "lichess" (default) or "chesscom". count: How many games to return (1-100).

NameRequiredDescriptionDefault
countNo
platformNolichess
usernameYes

Output Schema

NameRequiredDescription

No output parameters

TDQS

A4.4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true and openWorldHint=true, so safety is covered. The description adds real context beyond that: one entry per game, the fields returned, and the fact that games are cached locally so subsequent tools can resolve them by id — a side effect worth knowing. It does not mention failure modes for private or nonexistent accounts on an open-world network call.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single front-loaded purpose sentence, a compact return-format note, and an Args block that earns its space precisely because schema coverage is 0%. No filler or repeated phrasing.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The output schema covers return values, so the description needn't re-document them, and it instead supplies the caching behavior and downstream linkage an agent needs. What's missing for an open-world fetch tool is any note on rate limits, authentication, or behavior when the username is invalid.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description carries the burden and largely does: it states the accepted platform values ("lichess" default or "chesscom"), which the schema does not, and constrains count to 1-100 with a default of 10. Username is described only minimally as the player's handle on the chosen platform.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description opens with a specific verb and resource (list a player's most recent games) and names the two supported sources, Lichess and Chess.com. It also implicitly separates itself from siblings by pointing to analyze_game / find_blunders as downstream consumers of the returned game_id.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It clearly establishes the context of use: fetch recent games, then pass the game_id to analyze_game or find_blunders. There is no explicit statement of when NOT to use it (e.g., versus get_opening_stats for aggregate results), so it falls short of a full when/when-not/alternatives treatment.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections.

  1. 5 tool updatesv0.1.0
    • First observedanalyze_game
    • First observedengine_status
    • First observedfind_blunders
    • First observedget_opening_stats
    • First observedget_recent_games

TDQS

A4.3/5.0

Scored across 5 tools

Disambiguation5/5

Each tool has a clearly distinct role: fetching games, full game analysis, blunder-only extraction, engine diagnostics, and opening statistics. The overlap between analyze_game and find_blunders is explicitly framed as a cheaper subset, so selection is unambiguous.

Naming Consistency4/5

Most tools follow a predictable verb_noun pattern (get_recent_games, analyze_game, find_blunders, get_opening_stats), but engine_status is a noun phrase without a verb. The deviation is minor and still readable.

Tool Count5/5

Five tools is well-scoped for a chess coaching server, and each tool covers a distinct part of the workflow: game discovery, analysis, mistake extraction, opening review, and engine diagnostics.

Completeness4/5

The surface covers the core coaching workflow from fetching games through analysis and opening review. Minor gaps exist, such as no player profile/rating lookup or explicit opening recommendation tool, but agents can work around these.

Maintenance

ActivityMaintained
ResponsivenessNo issues

Related MCP Connectors

Related MCP Servers

  • A
    license
    Not graded
    quality
    A
    maintenance
    Enables comprehensive chess analysis through Stockfish engine integration, positional evaluation, puzzle training, game review, and access to extensive chess databases. Provides visual board rendering, interactive game viewers, and tactical puzzle training with 3+ million problems from Lichess.
    34
    AGPL 3.0
  • A
    license
    B
    quality
    D
    maintenance
    Provides 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.
    2
    MIT
  • A
    license
    Not graded
    quality
    D
    maintenance
    Enables AI assistants to explore player profiles, ratings, game archives, leaderboards, clubs, and puzzles via the Chess.com API.
    2
    MIT