Koskamo

Chessigma MCP

An official MCP server providing chess analysis tools including opening guides, position analysis via FEN, game summarization from PGN, daily puzzle retrieval, and Elo rating change estimation. It operates without requiring user authentication or installation, leveraging browser-based Stockfish for engine analysis.

Endpoint and access

No sign-in to connect and list tools. Individual tools may still need a vendor account, credentials, or permissions; check the documented prerequisites.

Chessigma MCP logo, by ChessigmaVendor evidenceStreamable HTTPNo sign-inEndpoint checked 2026-11-07Operated by Chessigma
MCP endpoint (Streamable HTTP)
https://www.chessigma.com/api/mcp
Vendor documentation

What its tools do

7 tools, grouped by the hints the server advertises. Hints are self-declared, not verified behavior.

7 of 7 have a description · 7 of 7 declare behavior hints · 6 of 7 with parameters document them all

Checks and signals

Each line is separate evidence, not a trust score.

  • Passed Endpoint answered the live check ·
  • Passed Official MCP Registry namespace is tied to chessigma.com ·
  • Passed Endpoint is on the registry namespace domain ·
  • Availability 1 of 1 checks passed in 30 days

What you can do with it

  • Get opening guides and ECO codes for chess openings
  • Analyze chess positions using FEN strings
  • Summarize chess games from PGN data
  • Retrieve and solve daily chess puzzles

Source and maintenance

Vendor evidenceRegistry 2.0.0
Maintenance checked

Protocol and capabilities

Server
chessigma-mcp 2.0.0
MCP protocol negotiated in check
2025-11-25
Tools
7 advertised
Resources
Not advertised
Resource templates
Not advertised
Prompts
Not advertised
Server-advertised capabilities
{
  "tools": {
    "listChanged": true
  }
}

Tools

7 advertised

get_opening_guide — Opening Guide
Advertised by the server during the last successful anonymous check.
Advertised read-only

Look up a chess opening by name or slug (for example "London System", "Caro-Kann" or "sicilian-defense") and return Chessigma's guide to it: the main line in SAN, a short summary, up to four key variations with the idea behind each, the strategy for each side, strengths and weaknesses. Full guides exist for 18 popular openings; any of about 3,700 catalogued opening names returns its name, ECO code and moves. When nothing matches, found is false and suggestions lists close names. Links open the opening's trainer and the analysis board on chessigma.com.

get_opening_guide input schema
{
  "type": "object",
  "$schema": "http://json-schema.org/draft-07/schema#",
  "required": [
    "opening"
  ],
  "properties": {
    "opening": {
      "type": "string",
      "maxLength": 80,
      "minLength": 2,
      "description": "Opening name or slug, e.g. \"London System\", \"caro-kann\", \"Sicilian Najdorf\"."
    }
  },
  "additionalProperties": false
}
get_opening_guide output schema
{
  "type": "object",
  "$schema": "http://json-schema.org/draft-07/schema#",
  "required": [
    "found",
    "name",
    "eco",
    "mainLine",
    "summary",
    "variations",
    "ideas",
    "strengths",
    "weaknesses",
    "trainerUrl",
    "analysisUrl",
    "suggestions"
  ],
  "properties": {
    "eco": {
      "type": [
        "string",
        "null"
      ]
    },
    "name": {
      "type": [
        "string",
        "null"
      ]
    },
    "found": {
      "type": "boolean"
    },
    "ideas": {
      "anyOf": [
        {
          "type": "object",
          "required": [
            "white",
            "black"
          ],
          "properties": {
            "black": {
              "type": "string"
            },
            "white": {
              "type": "string"
            }
          },
          "additionalProperties": false
        },
        {
          "type": "null"
        }
      ]
    },
    "summary": {
      "type": [
        "string",
        "null"
      ]
    },
    "mainLine": {
      "type": [
        "string",
        "null"
      ]
    },
    "strengths": {
      "type": "array",
      "items": {
        "type": "string"
      }
    },
    "trainerUrl": {
      "type": [
        "string",
        "null"
      ]
    },
    "variations": {
      "type": "array",
      "items": {
        "type": "object",
        "required": [
          "name",
          "moves",
          "idea"
        ],
        "properties": {
          "idea": {
            "type": "string"
          },
          "name": {
            "type": "string"
          },
          "moves": {
            "type": "string"
          }
        },
        "additionalProperties": false
      }
    },
    "weaknesses": {
      "type": "array",
      "items": {
        "type": "string"
      }
    },
    "analysisUrl": {
      "type": [
        "string",
        "null"
      ]
    },
    "suggestions": {
      "type": "array",
      "items": {
        "type": "string"
      }
    }
  },
  "additionalProperties": false
}
get_opening_guide annotations
{
  "title": "Opening Guide",
  "readOnlyHint": true,
  "openWorldHint": false,
  "idempotentHint": true,
  "destructiveHint": false
}
identify_opening — Identify Opening
Advertised by the server during the last successful anonymous check.
Advertised read-only

Identify the chess opening of a move sequence, given as SAN movetext ("1. e4 c5 2. Nf3 d6") or a full PGN. Returns the ECO code and name from a catalogue of about 3,700 named lines, how many half-moves (plies) followed known theory from move one, the first move that left it, a link to Chessigma's trainer when the opening has one, and a link that opens the moves on the chessigma.com analysis board.

identify_opening input schema
{
  "type": "object",
  "$schema": "http://json-schema.org/draft-07/schema#",
  "required": [
    "moves"
  ],
  "properties": {
    "moves": {
      "type": "string",
      "maxLength": 20000,
      "minLength": 1,
      "description": "SAN movetext or a PGN; tags are optional."
    }
  },
  "additionalProperties": false
}
identify_opening output schema
{
  "type": "object",
  "$schema": "http://json-schema.org/draft-07/schema#",
  "required": [
    "found",
    "eco",
    "name",
    "bookPlies",
    "leftBookAt",
    "trainerUrl",
    "analysisUrl"
  ],
  "properties": {
    "eco": {
      "type": [
        "string",
        "null"
      ]
    },
    "name": {
      "type": [
        "string",
        "null"
      ]
    },
    "found": {
      "type": "boolean"
    },
    "bookPlies": {
      "type": "integer"
    },
    "leftBookAt": {
      "type": [
        "string",
        "null"
      ]
    },
    "trainerUrl": {
      "type": [
        "string",
        "null"
      ]
    },
    "analysisUrl": {
      "type": [
        "string",
        "null"
      ]
    }
  },
  "additionalProperties": false
}
identify_opening annotations
{
  "title": "Identify Opening",
  "readOnlyHint": true,
  "openWorldHint": false,
  "idempotentHint": true,
  "destructiveHint": false
}
analyze_position — Analyze Position
Advertised by the server during the last successful anonymous check.
Advertised read-only

Read a chess position from a FEN and return facts computed by the rules alone: side to move, status (normal, check, checkmate, stalemate or insufficient material), every legal move in SAN, the material count (pawn 1, knight 3, bishop 3, rook 5, queen 9) and the opening name when the position is a catalogued opening. This tool does not evaluate the position and does not choose a best move: the Stockfish engine runs in the user's browser at the returned analysisUrl (full analysis board) and bestMoveUrl (best move finder) on chessigma.com.

analyze_position input schema
{
  "type": "object",
  "$schema": "http://json-schema.org/draft-07/schema#",
  "required": [
    "fen"
  ],
  "properties": {
    "fen": {
      "type": "string",
      "maxLength": 100,
      "minLength": 10,
      "description": "The position in FEN. The two move counters may be omitted."
    }
  },
  "additionalProperties": false
}
analyze_position output schema
{
  "type": "object",
  "$schema": "http://json-schema.org/draft-07/schema#",
  "required": [
    "fen",
    "sideToMove",
    "status",
    "legalMoves",
    "material",
    "opening",
    "analysisUrl",
    "bestMoveUrl"
  ],
  "properties": {
    "fen": {
      "type": "string"
    },
    "status": {
      "enum": [
        "normal",
        "check",
        "checkmate",
        "stalemate",
        "insufficient_material"
      ],
      "type": "string"
    },
    "opening": {
      "anyOf": [
        {
          "type": "object",
          "required": [
            "eco",
            "name"
          ],
          "properties": {
            "eco": {
              "type": "string"
            },
            "name": {
              "type": "string"
            }
          },
          "additionalProperties": false
        },
        {
          "type": "null"
        }
      ]
    },
    "material": {
      "type": "object",
      "required": [
        "white",
        "black",
        "balance"
      ],
      "properties": {
        "black": {
          "type": "number"
        },
        "white": {
          "type": "number"
        },
        "balance": {
          "type": "number"
        }
      },
      "additionalProperties": false
    },
    "legalMoves": {
      "type": "array",
      "items": {
        "type": "string"
      }
    },
    "sideToMove": {
      "enum": [
        "white",
        "black"
      ],
      "type": "string"
    },
    "analysisUrl": {
      "type": "string"
    },
    "bestMoveUrl": {
      "type": "string"
    }
  },
  "additionalProperties": false
}
analyze_position annotations
{
  "title": "Analyze Position",
  "readOnlyHint": true,
  "openWorldHint": false,
  "idempotentHint": true,
  "destructiveHint": false
}
analyze_game — Analyze Game
Advertised by the server during the last successful anonymous check.
Advertised read-only

Summarize a chess game given as a PGN or as plain SAN movetext: players, result, number of plies, the opening and how long it followed theory, how the game ended (checkmate, stalemate, draw by rule, or unfinished or resigned) and the final position. Returns a link that opens the whole game on the chessigma.com analysis board, where the Stockfish engine runs in the user's browser, and, when the PGN's Link or Site tag is a Chess.com live game or a Lichess game, a link to that game's move-by-move review. It never evaluates moves itself and stores nothing.

analyze_game input schema
{
  "type": "object",
  "$schema": "http://json-schema.org/draft-07/schema#",
  "required": [
    "pgn"
  ],
  "properties": {
    "pgn": {
      "type": "string",
      "maxLength": 20000,
      "minLength": 1,
      "description": "The game as PGN, or SAN movetext such as \"1. e4 e5 2. Nf3\"."
    }
  },
  "additionalProperties": false
}
analyze_game output schema
{
  "type": "object",
  "$schema": "http://json-schema.org/draft-07/schema#",
  "required": [
    "white",
    "black",
    "result",
    "plies",
    "opening",
    "ending",
    "finalFen",
    "analysisUrl",
    "reviewUrl",
    "note"
  ],
  "properties": {
    "note": {
      "type": "string"
    },
    "black": {
      "type": [
        "string",
        "null"
      ]
    },
    "plies": {
      "type": "integer"
    },
    "white": {
      "type": [
        "string",
        "null"
      ]
    },
    "ending": {
      "enum": [
        "checkmate",
        "stalemate",
        "draw_by_rule",
        "unfinished_or_resigned"
      ],
      "type": "string"
    },
    "result": {
      "type": "string"
    },
    "opening": {
      "anyOf": [
        {
          "type": "object",
          "required": [
            "eco",
            "name",
            "bookPlies"
          ],
          "properties": {
            "eco": {
              "type": "string"
            },
            "name": {
              "type": "string"
            },
            "bookPlies": {
              "type": "integer"
            }
          },
          "additionalProperties": false
        },
        {
          "type": "null"
        }
      ]
    },
    "finalFen": {
      "type": "string"
    },
    "reviewUrl": {
      "type": [
        "string",
        "null"
      ]
    },
    "analysisUrl": {
      "type": [
        "string",
        "null"
      ]
    }
  },
  "additionalProperties": false
}
analyze_game annotations
{
  "title": "Analyze Game",
  "readOnlyHint": true,
  "openWorldHint": false,
  "idempotentHint": true,
  "destructiveHint": false
}
review_online_game — Review Online Game
Advertised by the server during the last successful anonymous check.
Advertised read-onlyOpen-world

Turn the link of a public Chess.com live game or a Lichess game into a chessigma.com link that imports the game and opens a move-by-move review, computed by Stockfish in the user's browser. Nothing is fetched when this tool runs: the game is read from Chess.com or Lichess only when the user opens the link. Chess.com daily (correspondence) games are not supported; ask for the PGN instead.

review_online_game input schema
{
  "type": "object",
  "$schema": "http://json-schema.org/draft-07/schema#",
  "required": [
    "url"
  ],
  "properties": {
    "url": {
      "type": "string",
      "maxLength": 300,
      "minLength": 10,
      "description": "A Chess.com live game link or a Lichess game link."
    }
  },
  "additionalProperties": false
}
review_online_game output schema
{
  "type": "object",
  "$schema": "http://json-schema.org/draft-07/schema#",
  "required": [
    "platform",
    "reviewUrl",
    "note"
  ],
  "properties": {
    "note": {
      "type": "string"
    },
    "platform": {
      "enum": [
        "chesscom",
        "lichess"
      ],
      "type": "string"
    },
    "reviewUrl": {
      "type": "string"
    }
  },
  "additionalProperties": false
}
review_online_game annotations
{
  "title": "Review Online Game",
  "readOnlyHint": true,
  "openWorldHint": true,
  "idempotentHint": true,
  "destructiveHint": false
}
get_daily_puzzle — Get Daily Puzzle
Advertised by the server during the last successful anonymous check.
Advertised read-only

Get Chessigma's daily chess puzzle: today's by default, or a past day's via date (YYYY-MM-DD, from 2024-01-01 to today in UTC). The position (fen) is given with the solver to move, after the opponent's last move. The solution is in SAN, with the solver's moves at even indexes and the opponent's replies at odd ones. Do not reveal the solution unless the user asks for it. If today's puzzle is not out yet, the latest one is returned: check date. playUrl opens the puzzle on chessigma.com.

get_daily_puzzle input schema
{
  "type": "object",
  "$schema": "http://json-schema.org/draft-07/schema#",
  "properties": {
    "date": {
      "type": "string",
      "pattern": "^\\d{4}-\\d{2}-\\d{2}$",
      "description": "A day from 2024-01-01 to today (UTC). Omit for today."
    }
  },
  "additionalProperties": false
}
get_daily_puzzle output schema
{
  "type": "object",
  "$schema": "http://json-schema.org/draft-07/schema#",
  "required": [
    "date",
    "puzzleId",
    "fen",
    "sideToMove",
    "opponentLastMove",
    "rating",
    "themes",
    "solution",
    "playUrl"
  ],
  "properties": {
    "fen": {
      "type": "string"
    },
    "date": {
      "type": "string"
    },
    "rating": {
      "type": "number"
    },
    "themes": {
      "type": "array",
      "items": {
        "type": "string"
      }
    },
    "playUrl": {
      "type": "string"
    },
    "puzzleId": {
      "type": "string"
    },
    "solution": {
      "type": "array",
      "items": {
        "type": "string"
      }
    },
    "sideToMove": {
      "enum": [
        "white",
        "black"
      ],
      "type": "string"
    },
    "opponentLastMove": {
      "type": "string"
    }
  },
  "additionalProperties": false
}
get_daily_puzzle annotations
{
  "title": "Get Daily Puzzle",
  "readOnlyHint": true,
  "openWorldHint": false,
  "idempotentHint": true,
  "destructiveHint": false
}
calculate_elo — Calculate Elo
Advertised by the server during the last successful anonymous check.
Advertised read-only

Estimate a player's new Elo rating after a single game with the Elo formula. Pure arithmetic, no chess engine. The system field picks a K-factor default for FIDE, Chess.com or Lichess, but the result is an Elo estimate: Chess.com and Lichess use Glicko ratings, so their real rating changes differ.

calculate_elo input schema
{
  "type": "object",
  "$schema": "http://json-schema.org/draft-07/schema#",
  "required": [
    "yourRating",
    "opponentRating",
    "result"
  ],
  "properties": {
    "result": {
      "enum": [
        "win",
        "draw",
        "loss"
      ],
      "type": "string"
    },
    "system": {
      "enum": [
        "fide",
        "chesscom",
        "lichess"
      ],
      "type": "string",
      "default": "fide"
    },
    "kFactor": {
      "type": "integer",
      "maximum": 100,
      "minimum": 1
    },
    "yourRating": {
      "type": "integer",
      "maximum": 4000,
      "minimum": 100
    },
    "opponentRating": {
      "type": "integer",
      "maximum": 4000,
      "minimum": 100
    }
  },
  "additionalProperties": false
}
calculate_elo output schema
{
  "type": "object",
  "$schema": "http://json-schema.org/draft-07/schema#",
  "required": [
    "yourRating",
    "opponentRating",
    "result",
    "system",
    "kFactor",
    "expectedScore",
    "newRating",
    "change",
    "calculatorUrl"
  ],
  "properties": {
    "change": {
      "type": "number"
    },
    "result": {
      "enum": [
        "win",
        "draw",
        "loss"
      ],
      "type": "string"
    },
    "system": {
      "enum": [
        "fide",
        "chesscom",
        "lichess"
      ],
      "type": "string"
    },
    "kFactor": {
      "type": "number"
    },
    "newRating": {
      "type": "number"
    },
    "yourRating": {
      "type": "number"
    },
    "calculatorUrl": {
      "type": "string"
    },
    "expectedScore": {
      "type": "number"
    },
    "opponentRating": {
      "type": "number"
    }
  },
  "additionalProperties": false
}
calculate_elo annotations
{
  "title": "Calculate Elo",
  "readOnlyHint": true,
  "openWorldHint": false,
  "idempotentHint": true,
  "destructiveHint": false
}

Prompts

Not advertised

No prompt definitions available.

Resources

Not advertised

No resource definitions available.

30-day availability

Aggregated from read-only remote checks; this is not a tool-execution or security guarantee.

Successful checks
1 of 1 (100%)
Average latency
2181 ms
95th percentile latency
2181 ms

Maintenance history

Public check and source-refresh events. Editorial and ownership records remain private.

  • · probe · passed · 2181 ms · metadata changed · 7 tool(s)

Connect from your client

Each snippet registers the same endpoint; pick the client you use.

This server is operated by the named third party. Listing and endpoint checks are not an endorsement or a security audit. Review the operator's permissions, terms, and data handling before connecting. How listings are checked and corrected.

Claude Code

Run this once in a terminal. It registers the remote server. Use --scope project to write .mcp.json for the repo.
Claude Code configuration
claude mcp add --transport http chessigma-mcp https://www.chessigma.com/api/mcp

Codex

Run this once. Codex stores MCP servers in ~/.codex/config.toml (or .codex/config.toml in a trusted project).
Codex configuration
codex mcp add chessigma-mcp --url https://www.chessigma.com/api/mcp

Cursor

Merge this server into .cursor/mcp.json in your project, then enable chessigma-mcp in your MCP settings.
Cursor configuration
{
  "mcpServers": {
    "chessigma-mcp": {
      "url": "https://www.chessigma.com/api/mcp"
    }
  }
}

Cline

Merge this into cline_mcp_settings.json (Cline → MCP Servers → Configure).
Cline configuration
{
  "mcpServers": {
    "chessigma-mcp": {
      "type": "streamableHttp",
      "url": "https://www.chessigma.com/api/mcp",
      "disabled": false
    }
  }
}

VS Code

Merge this server into .vscode/mcp.json. Use MCP: List Servers to start chessigma-mcp and inspect its tools.
VS Code configuration
{
  "servers": {
    "chessigma-mcp": {
      "type": "http",
      "url": "https://www.chessigma.com/api/mcp"
    }
  }
}

Gemini CLI

Run this once. It writes .gemini/settings.json in the current project; pass --scope user for ~/.gemini/settings.json.
Gemini CLI configuration
gemini mcp add --transport http chessigma-mcp https://www.chessigma.com/api/mcp

Claude Desktop

Open Claude Settings > Connectors > Add custom connector, enter this server URL and enable it for the conversation. This is a manual remote-connector handoff, not a desktop JSON configuration.
Claude Desktop configuration
https://www.chessigma.com/api/mcp

Windsurf

Merge this into ~/.codeium/windsurf/mcp_config.json, then refresh MCP in Cascade. Windsurf remote servers use serverUrl, not url.
Windsurf configuration
{
  "mcpServers": {
    "chessigma-mcp": {
      "serverUrl": "https://www.chessigma.com/api/mcp"
    }
  }
}

Let your agent find its tools

Find servers like Chessigma MCP from your agent. Add Koskamo once to search the index for endpoints, access requirements, and client setup. Public discovery needs no key.

Do you run Chessigma MCP?

Prove ownership with a DNS record, a well-known file, or your Official MCP Registry entry, and your edits publish immediately. Proofs are re-checked weekly; admins can still hide or remove a listing.

Claim this listing