get_club_members
Retrieve and list all members of a Chess.com club by providing its unique URL identifier. Access club membership data directly.
Instructions
Get members of a club on Chess.com
Input Schema
| Name | Required | Description | Default |
|---|---|---|---|
| url_id | Yes |
Output Schema
| Name | Required | Description | Default |
|---|---|---|---|
| result | Yes |
Implementation Reference
- src/chess_mcp/server.py:224-236 (handler)The main handler for the 'get_club_members' tool. It is decorated with @mcp.tool and calls make_api_request to fetch club members from the Chess.com API endpoint 'club/{url_id}/members'.
@mcp.tool(description="Get members of a club on Chess.com") async def get_club_members(url_id: str) -> Dict[str, Any]: """ Get members of a club on Chess.com. Args: url_id: The URL identifier of the club Returns: Club members data """ logger.info("Fetching club members", url_id=url_id) return await make_api_request(f"club/{url_id}/members") - src/chess_mcp/server.py:224-224 (registration)The tool is registered via the @mcp.tool decorator on line 224, which registers 'get_club_members' as an MCP tool with the description 'Get members of a club on Chess.com'.
@mcp.tool(description="Get members of a club on Chess.com") - src/chess_mcp/server.py:26-80 (helper)The make_api_request helper function that handles the actual HTTP request to the Chess.com API. It is used by get_club_members with endpoint 'club/{url_id}/members'.
async def make_api_request( endpoint: str, params: Optional[Dict[str, Any]] = None, accept_json: bool = True ) -> Union[Dict[str, Any], str]: """ Make a request to the Chess.com API. Args: endpoint: The API endpoint to request params: Optional query parameters accept_json: Whether to accept JSON response (True) or PGN (False) Returns: JSON response as dict or text response as string Raises: httpx.HTTPError: If the request fails """ url = f"{config.base_url}/{endpoint}" headers = { "accept": "application/json" if accept_json else "application/x-chess-pgn" } logger.debug( "Making API request", endpoint=endpoint, url=url, accept_json=accept_json, has_params=params is not None ) async with httpx.AsyncClient() as client: try: response = await client.get(url, headers=headers, params=params or {}) response.raise_for_status() if accept_json: result = response.json() logger.debug("API request successful", endpoint=endpoint, response_type="json") return result else: result = response.text logger.debug("API request successful", endpoint=endpoint, response_type="text") return result except httpx.HTTPError as e: logger.error( "API request failed", endpoint=endpoint, url=url, error=str(e), error_type=type(e).__name__ ) raise - src/chess_mcp/server.py:225-236 (schema)The function signature defines the input schema: a single 'url_id' string parameter. The return type is Dict[str, Any] (JSON data from the API).
async def get_club_members(url_id: str) -> Dict[str, Any]: """ Get members of a club on Chess.com. Args: url_id: The URL identifier of the club Returns: Club members data """ logger.info("Fetching club members", url_id=url_id) return await make_api_request(f"club/{url_id}/members") - tests/test_server.py:233-239 (helper)Test for get_club_members that patches make_api_request to return mock data and verifies the function returns the expected result.
async def test_get_club_members(): mock_members = {"members": ["member1", "member2"]} with patch("chess_mcp.server.make_api_request", new=AsyncMock(return_value=mock_members)): result = await get_club_members("test-club") assert result == mock_members