{"openapi":"3.1.0","info":{"title":"Lichess (BYOK) API","version":"0.1.0","description":"Lichess (BYOK) lets an AI assistant read your own Lichess data through the Lichess API with a key you supply (personal API token (no scopes are needed for these read tools)). Read-only: 8 tools (get_my_profile, get_user, get_rating_history, get_perf_stats, list_teams_of_user, get_team, search_teams, get_daily_puzzle). The BYOK key travels with each request, is used for that one call only and is...\n\nEvery operation is read-only or compute-only. The same tools are available over MCP (streamable HTTP) at https://byok-lichess.connectorbay.com/mcp.","contact":{"name":"Unify Dynamics LLC","email":"agent@connectorbay.com","url":"https://connectorbay.com/byok-lichess/docs"},"termsOfService":"https://connectorbay.com/byok-lichess/terms"},"servers":[{"url":"https://byok-lichess.connectorbay.com"}],"externalDocs":{"url":"https://connectorbay.com/byok-lichess/docs"},"security":[{"upstreamKey":[]}],"components":{"securitySchemes":{"bearer":{"type":"http","scheme":"bearer","description":"Optional. A Pro API key raises rate limits; no credentials are required."},"upstreamKey":{"type":"apiKey","in":"header","name":"X-Upstream-Key","description":"Your own key for the service this connector wraps (bring your own key). Used for that one call only; never stored, logged or cached."}},"schemas":{"Error":{"type":"object","properties":{"ok":{"const":false},"error":{"type":"object"}}}}},"paths":{"/v1/tools/get_my_profile":{"post":{"operationId":"get_my_profile","summary":"Show the Lichess account the token belongs to: username, title, ratings per game type, game counts, play time, bio and p","description":"Show the Lichess account the token belongs to: username, title, ratings per game type, game counts, play time, bio and profile link. Use for \"What is my Lichess rating in blitz and bullet\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{},"title":"get_my_profileArguments","type":"object"}}}},"responses":{"200":{"description":"Tool result. `ok: true` on success; `ok: false` with a structured `error` (provider_unavailable, upstream_error, bad_input) when the tool could not answer.","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"422":{"description":"Arguments failed validation","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded (see Retry-After)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-read-only":true}},"/v1/tools/get_user":{"post":{"operationId":"get_user","summary":"Get the public profile of any Lichess user by name: ratings per game type, win/loss/draw counts, play time, title, bio a","description":"Get the public profile of any Lichess user by name: ratings per game type, win/loss/draw counts, play time, title, bio and account age. Use for \"What are the ratings of Lichess user thibault\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"username":{"description":"Lichess username, for example 'thibault'.","maxLength":30,"title":"Username","type":"string"}},"required":["username"],"title":"get_userArguments","type":"object"}}}},"responses":{"200":{"description":"Tool result. `ok: true` on success; `ok: false` with a structured `error` (provider_unavailable, upstream_error, bad_input) when the tool could not answer.","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"422":{"description":"Arguments failed validation","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded (see Retry-After)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-read-only":true}},"/v1/tools/get_rating_history":{"post":{"operationId":"get_rating_history","summary":"Get a user's rating history for every game type: a list of series, each with name and points [year, month (0 = January),","description":"Get a user's rating history for every game type: a list of series, each with name and points [year, month (0 = January), day, rating], at most one point per day. Use for \"How has the Lichess rating of thibault changed over time\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"username":{"description":"Lichess username, for example 'thibault'.","maxLength":30,"title":"Username","type":"string"}},"required":["username"],"title":"get_rating_historyArguments","type":"object"}}}},"responses":{"200":{"description":"Tool result. `ok: true` on success; `ok: false` with a structured `error` (provider_unavailable, upstream_error, bad_input) when the tool could not answer.","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"422":{"description":"Arguments failed validation","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded (see Retry-After)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-read-only":true}},"/v1/tools/get_perf_stats":{"post":{"operationId":"get_perf_stats","summary":"Get detailed performance statistics of a user for one game type: current rating with deviation, number of games, rank an","description":"Get detailed performance statistics of a user for one game type: current rating with deviation, number of games, rank and percentile. Use for \"What are thibault's rapid statistics on Lichess\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"username":{"description":"Lichess username, for example 'thibault'.","maxLength":30,"title":"Username","type":"string"},"perf":{"description":"Game type: ultraBullet, bullet, blitz, rapid, classical, correspondence, chess960, crazyhouse, antichess, atomic, horde, kingOfTheHill, racingKings, threeCheck.","enum":["ultraBullet","bullet","blitz","rapid","classical","correspondence","chess960","crazyhouse","antichess","atomic","horde","kingOfTheHill","racingKings","threeCheck"],"title":"Perf","type":"string"}},"required":["username","perf"],"title":"get_perf_statsArguments","type":"object"}}}},"responses":{"200":{"description":"Tool result. `ok: true` on success; `ok: false` with a structured `error` (provider_unavailable, upstream_error, bad_input) when the tool could not answer.","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"422":{"description":"Arguments failed validation","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded (see Retry-After)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-read-only":true}},"/v1/tools/list_teams_of_user":{"post":{"operationId":"list_teams_of_user","summary":"List the teams a Lichess user belongs to with name, description, member count and leader. Use for \"Which Lichess teams i","description":"List the teams a Lichess user belongs to with name, description, member count and leader. Use for \"Which Lichess teams is thibault in\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"username":{"description":"Lichess username, for example 'thibault'.","maxLength":30,"title":"Username","type":"string"}},"required":["username"],"title":"list_teams_of_userArguments","type":"object"}}}},"responses":{"200":{"description":"Tool result. `ok: true` on success; `ok: false` with a structured `error` (provider_unavailable, upstream_error, bad_input) when the tool could not answer.","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"422":{"description":"Arguments failed validation","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded (see Retry-After)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-read-only":true}},"/v1/tools/get_team":{"post":{"operationId":"get_team","summary":"Get one Lichess team by id: name, description, member count, leader and whether it is open to join. Use for \"Tell me abo","description":"Get one Lichess team by id: name, description, member count, leader and whether it is open to join. Use for \"Tell me about the Lichess team lichess-swiss\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"team_id":{"description":"Team id as shown in the team URL, for example 'lichess-swiss'.","maxLength":60,"title":"Team Id","type":"string"}},"required":["team_id"],"title":"get_teamArguments","type":"object"}}}},"responses":{"200":{"description":"Tool result. `ok: true` on success; `ok: false` with a structured `error` (provider_unavailable, upstream_error, bad_input) when the tool could not answer.","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"422":{"description":"Arguments failed validation","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded (see Retry-After)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-read-only":true}},"/v1/tools/search_teams":{"post":{"operationId":"search_teams","summary":"Search Lichess teams by keyword, paged, with name, description and member count. Use for \"Find Lichess teams about codin","description":"Search Lichess teams by keyword, paged, with name, description and member count. Use for \"Find Lichess teams about coding\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"text":{"anyOf":[{"maxLength":100,"type":"string"},{"type":"null"}],"default":null,"description":"Keyword to search for in team names, for example 'coders'.","title":"Text"},"page":{"anyOf":[{"maximum":1000,"minimum":1,"type":"integer"},{"type":"null"}],"default":1,"description":"Page number, starting at 1.","title":"Page"}},"title":"search_teamsArguments","type":"object"}}}},"responses":{"200":{"description":"Tool result. `ok: true` on success; `ok: false` with a structured `error` (provider_unavailable, upstream_error, bad_input) when the tool could not answer.","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"422":{"description":"Arguments failed validation","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded (see Retry-After)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-read-only":true}},"/v1/tools/get_daily_puzzle":{"post":{"operationId":"get_daily_puzzle","summary":"Get the current daily Lichess puzzle: puzzle id, rating, play count, themes, start position (FEN) and solution moves, pl","description":"Get the current daily Lichess puzzle: puzzle id, rating, play count, themes, start position (FEN) and solution moves, plus the source game id. Use for \"What is today's Lichess daily puzzle\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{},"title":"get_daily_puzzleArguments","type":"object"}}}},"responses":{"200":{"description":"Tool result. `ok: true` on success; `ok: false` with a structured `error` (provider_unavailable, upstream_error, bad_input) when the tool could not answer.","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"422":{"description":"Arguments failed validation","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded (see Retry-After)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-read-only":true}}}}