MCP server for Chess.com API integration with comprehensive chess data access
This server implements 3 basic tools with minimal schema definition and inconsistent descriptions. All tools are present and registered with names and descriptions, but parameter documentation is sparse. The getPlayerProfile and getPlayerStats tools share an identical schema (GetPlayerProfileSchema) despite operating on different resources, which is a naming and schema reuse issue. getDailyPuzzle accepts no parameters (empty schema {}), which is correct. Descriptions are generic (9-11 words each) and do not explain WHEN to use each tool or what distinguishes them. No output schemas are documented, no error handling guidance is provided, and no parameter constraints (enums, ranges, formats) are visible. Tool compositions are simple and idempotent (all READ_ONLY), but lack the richness expected of production tools. This is below-median for community MCP servers.
Get the daily puzzle from Chess.com API.
Get a player's profile information from Chess.com API.
Get a player's statistics and ratings from Chess.com API.
Parameter descriptions missing: getPlayerProfile and getPlayerStats both accept 'username' but the description says 'The username of the player to get the profile for', this is copy-pasted and does not clarify what field 'username' is (e.g., Chess.com username, not email or user ID). LLMs cannot reliably disambiguate without explicit parameter docs.
No output schemas documented. Tool descriptions do not state what fields or structure the response contains (e.g., does getPlayerProfile return username, rating, country, followers, member_since?). LLMs cannot plan downstream tool calls or extract relevant data without knowing the response shape.
Schema reuse issue: getPlayerProfile and getPlayerStats both use GetPlayerProfileSchema despite operating on different resources and returning different data. This violates the single-responsibility principle and risks LLM confusion. Each tool should have its own named schema (e.g., GetPlayerStatsSchema).
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-22 | F | 43 | 2026-07-28+ | v2 |
| 2026-03-09 | F | 43 | - | v1 |
Generic tool descriptions lack context. 'Get a player's profile information from Chess.com API.' does not explain WHEN to call this vs getPlayerStats, what 'profile' includes, or what the use case is. Descriptions should be 50-200 chars and answer: What does it do? When to use it? What does it return?
No parameter constraints visible. Username is a free-form string with no length, format, or validation guidance. Error handling returns raw error messages ('Invalid username: <error>') without actionable recovery steps (e.g., 'Did you mean: ...?' or 'Try search_users() first.').
Error responses do not guide recovery. getPlayerProfile returns 'Invalid username: <error>' but does not suggest what the LLM should do next. Should it retry? Prompt the user? Call a search tool? This violates recovery-guide pattern.