Skip to main content
Glama

Opening Explorer

opening_explorer
Read-onlyIdempotent

Opening explorer. scope: "lichess" (community), "masters" (top 2200+ humans), "player" (single user). As of mid-2026 Lichess began requiring a Personal API Token on every explorer.lichess.ovh request — pass yours via _apiKey. Create one (free) at https://lichess.org/account/oauth/token; no scopes required for read-only Explorer access.

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
fenNoMutually exclusive with play.
playNoUCI move list, comma-separated. Mutually exclusive with fen.
movesNoNumber of top moves to return (default 12, max 64).
scopeYeslichess | masters | player
playerNoUsername (only for scope=player).
speedsNoComma-sep: ultraBullet,bullet,blitz,rapid,classical,correspondence
_apiKeyYesLichess Personal API Token (free, https://lichess.org/account/oauth/token).
ratingsNoComma-sep (lichess scope): 0,1000,1200,1400,1600,1800,2000,2200,2500

Output Schema

TableJSON Schema
NameRequiredDescriptionDefault
fenNoPosition FEN
movesNoTop moves from this position
openingNoOpening information
topGamesNoTop games from this position
recentGamesNoRecent games from this position

Schema Changelog

Changes observed during successful MCP inspections. Dates show when Glama detected each change.

  1. Changed2 schema fields changed
    • addedInput schema / properties / _apiKey
      Added value: +{
      +  "description": "Lichess Personal API Token (free, https://lichess.org/account/oauth/token).",
      +  "type": "string"
      +}
    • changedInput schema / required
      Previous value: -[
      -  "scope"
      -]New value: +[
      +  "scope",
      +  "_apiKey"
      +]
  2. Changed2 schema fields changed
    • addedInput schema / examples
      Added value: +[
      +  {
      +    "fen": "rnbqkbnr/pppppppp/8/8/4P3/8/PPPP1PPP/RNBQKBNR b KQkq e3 0 1",
      +    "scope": "lichess"
      +  },
      +  {
      +    "play": "e2e4,c7c5",
      +    "player": "hikaru",
      +    "scope": "player",
      +    "speeds": "blitz,rapid"
      +  }
      +]
    • changedOutput schema / (root)
      Previous value: -nullNew value: +{
      +  "properties": {
      +    "fen": {
      +      "description": "Position FEN",
      +      "type": "string"
      +    },
      +    "moves": {
      +      "description": "Top moves from this position",
      +      "items": {
      +        "properties": {
      +          "averageRating": {
      +            "description": "Average player rating",
      +            "type": "number"
      +          },
      +          "black": {
      +            "description": "Black wins %",
      +            "type": "number"
      +          },
      +          "draws": {
      +            "description": "Draws %",
      +            "type": "number"
      +          },
      +          "games": {
      +            "description": "Number of games",
      +            "type": "number"
      +          },
      +          "san": {
      +            "description": "Move in SAN notation",
      +            "type": "string"
      +          },
      +          "uci": {
      +            "description": "Move in UCI notation",
      +            "type": "string"
      +          },
      +          "white": {
      +            "description": "White wins %",
      +            "type": "number"
      +          }
      +        },
      +        "type": "object"
      +      },
      +      "type": "array"
      +    },
      +    "opening": {
      +      "description": "Opening information",
      +      "properties": {
      +        "eco": {
      +          "description": "ECO code",
      +          "type": "string"
      +        },
      +        "name": {
      +          "description": "Opening name",
      +          "type": "string"
      +        }
      +      },
      +      "type": "object"
      +    },
      +    "recentGames": {
      +      "description": "Recent games from this position",
      +      "items": {
      +        "type": "object"
      +      },
      +      "type": "array"
      +    },
      +    "topGames": {
      +      "description": "Top games from this position",
      +      "items": {
      +        "properties": {
      +          "black": {
      +            "properties": {
      +              "name": {
      +                "description": "Player name",
      +                "type": "string"
      +              },
      +              "rating": {
      +                "description": "Rating",
      +                "type": "number"
      +              }
      +            },
      +            "type": "object"
      +          },
      +          "id": {
      +            "description": "Game ID",
      +            "type": "string"
      +          },
      +          "result": {
      +            "description": "Game result",
      +            "type": "string"
      +          },
      +          "white": {
      +            "properties": {
      +              "name": {
      +                "description": "Player name",
      +                "type": "string"
      +              },
      +              "rating": {
      +                "description": "Rating",
      +                "type": "number"
      +              }
      +            },
      +            "type": "object"
      +          }
      +        },
      +        "type": "object"
      +      },
      +      "type": "array"
      +    }
      +  },
      +  "type": "object"
      +}
  3. First observed

TDQS

B3.3/5.0
Behavior4/5

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

Annotations already declare readOnlyHint, openWorldHint, idempotentHint, and destructiveHint. The description adds critical context: the 2026 change requiring a Personal API Token, where to create it, and that no scopes are needed for read-only access. This is valuable beyond annotations.

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?

The description is two sentences, concise and front-loaded. The first sentence covers purpose and scope; the second covers authentication. However, it is slightly choppy and could be more structured.

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

Completeness3/5

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

Given the complexity (8 params, output schema exists), the description covers core aspects but does not explain mutual exclusivity of fen/play or guide scope selection. It is adequate but not comprehensive.

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

Parameters3/5

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

Schema coverage is 100%, so the baseline is 3. The description adds minimal additional meaning beyond the schema; it briefly mentions scope options and API key in the description but does not expand on parameter interactions or formats beyond the schema.

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

Purpose3/5

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

The description starts with 'Opening explorer' but lacks a specific verb and resource. It explains scope options and API key but does not clearly state what the tool does (e.g., 'Retrieve opening statistics'). The purpose is inferred from the name, but it's vague.

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?

The description outlines scope options and API key requirement, implying when to use the tool, but it does not explicitly exclude cases or mention alternatives among many sibling tools. No guidance on when not to use.

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

Try in Browser

Glama MCP Gateway

Add one secure layer between your agents and this server.

TDQS

B3.3/5.0
Disambiguation2/5

The server mixes chess tools with numerous data query tools from Pipeworx, causing significant overlap. Multiple ask_pipeworx variants (ask_pipeworx, ask_pipeworx_beta, ask_pipeworx_grounded) and deep_research have similar purposes, making it difficult for an agent to choose correctly. Chess tools are distinct but compete with many unrelated tools.

Naming Consistency2/5

Tool names follow no consistent pattern: chess tools use mostly underscores (top_players, opening_explorer), Pipeworx tools use mixed styles (ask_pipeworx, deep_research, entity_profile), and memory/subscription tools use simple verbs (remember, subscribe). The naming is inconsistent across the set.

Tool Count2/5

With 41 tools, the count is high and unfocused. A chess server would typically have 10-15 tools; the remaining 31 tools from Pipeworx are unrelated and overwhelm the set. The server tries to cover too many domains, making it bloated for its primary purpose.

Completeness2/5

The chess-specific tools (10) cover basic queries but lack deeper chess analysis (e.g., puzzles, board evaluation). The extensive Pipeworx tools are out of scope for a Lichess server, resulting in an incomplete surface for the expected domain and an excessive surface for unrelated data lookups.