{"$schema":"https://static.modelcontextprotocol.io/schemas/2025-10-17/server.schema.json","name":"za.co.flagline/flagline","title":"Flagline","description":"Read-only South African surf lifesaving results: search athletes, clubs and competitions; profiles, results, club points tables, head-to-heads.","version":"1.0.0","websiteUrl":"https://flagline.co.za/developers","remotes":[{"type":"streamable-http","url":"https://flagline.co.za/mcp"}],"capabilities":{"tools":{"listChanged":false}},"authentication":{"required":false,"schemes":["bearer"],"note":"Optional API key (Authorization: Bearer fl_…) raises rate limits."},"tools":[{"name":"search","title":"Search athletes, clubs and competitions by name","description":"Typo-tolerant name search. Returns up to `limit` of each type. Juniors can be found by first name (or first name + initial), never by surname.","annotations":{"readOnlyHint":true}},{"name":"get_athlete","title":"An athlete's profile: club, career stats, form by discipline, season stats","description":"Everything on the athlete's Flagline profile except the results list (use get_athlete_results). Limited athletes (juniors) have isLimited=true and a \"First L.\" name.","annotations":{"readOnlyHint":true}},{"name":"get_athlete_results","title":"An athlete's results, by competition, newest first","description":"Paginated (max 50 competitions per page). Each entry is one division the athlete raced, with the final placing.","annotations":{"readOnlyHint":true}},{"name":"get_head_to_head","title":"Head-to-head record between two athletes","description":"Wins and losses in heats both athletes raced (lower place wins), by discipline, plus the most recent shared heats.","annotations":{"readOnlyHint":true}},{"name":"get_club","title":"A club's profile with its season summary and season-by-season trend","description":"Season defaults to the club's latest season with results.","annotations":{"readOnlyHint":true}},{"name":"get_club_roster","title":"Athletes who raced for a club in a season","description":"Display names only (juniors as \"First L.\"), paginated (max 50 per page).","annotations":{"readOnlyHint":true}},{"name":"get_club_medals","title":"A club's medals at each competition in a season","description":"Points, gold/silver/bronze per competition, and the club's place there by points (official LiveHeats points where published, else 8→1 on final places).","annotations":{"readOnlyHint":true}},{"name":"list_competitions","title":"Competitions: upcoming (soonest first) and/or with results (newest first)","description":"Without `status`, upcoming competitions come first, then the season's results. `season` defaults to the latest season with results.","annotations":{"readOnlyHint":true}},{"name":"get_competition","title":"A competition with its club table (ranked by points)","description":"Header, counts and the club table: clubs ranked by points (pointsBasis says official LiveHeats points or computed 8→1), medals alongside. Use list_divisions for its divisions and winners.","annotations":{"readOnlyHint":true}},{"name":"list_divisions","title":"A competition's divisions with each winner","description":"Division ids here are the `division` argument of get_division_results.","annotations":{"readOnlyHint":true}},{"name":"get_division_results","title":"Heat-by-heat results of one division","description":"Heats newest round first (Final first), paginated by heat (max 50 per page).","annotations":{"readOnlyHint":true}},{"name":"get_pointscore","title":"Season club pointscore by region and series","description":"Season club pointscore: each club's official LiveHeats competition points added up (a competition's official points are never computed by Flagline). Without `region`, every region's table plus its series tables; `series` keeps series tables whose name contains it. Competitions with no official points are listed, not scored. `season` defaults to the season the /pointscore page opens on (the latest completed one, or for a `region` its latest season with a table). Paginated over standings rows (max 50 per page).","annotations":{"readOnlyHint":true}},{"name":"get_rankings","title":"Athlete rankings by Flagline Rating for one discipline group, age group and gender","description":"Paginated (max 50 per page), best first. One list = one discipline group × age group × gender, optionally one province. Juniors are \"First L.\" with isLimited=true. Settled ratings are ranked first; provisional ratings (under 10 rated heats) follow, unranked (rank null), when provisional=true or, by default, when fewer than 10 settled athletes match (meta.provisionalIncluded). How ratings work: https://flagline.co.za/about/ratings.","annotations":{"readOnlyHint":true}},{"name":"get_records","title":"National and provincial records: most titles, most medals in a season, longest finals streak, most competitions, most heats","description":"One record list at a time, best first, paginated (max 50 per page). Individual races only; optionally one squad band, discipline, province and season (default All-time). Juniors are \"First L.\" with isLimited=true. There are no age-based or negative records.","annotations":{"readOnlyHint":true}},{"name":"get_series","title":"A series: official athlete standings per division, club series table and rounds","description":"A series across seasons (slug as in flagline.co.za/series/<slug>, e.g. \"rescue-sport-series\"). Athlete standings are LiveHeats' official series points; every division's leaders, or one division's full table with `division` (a key from `divisions`). The club table is the series pointscore: each round's official club points added up. Juniors are \"First L.\" with isLimited=true; relays are not listed. `season` defaults to the series' latest season with results.","annotations":{"readOnlyHint":true}},{"name":"get_venue","title":"A beach: competitions held there, top clubs and athletes, field sizes and disciplines","description":"Known beaches only (slug as in flagline.co.za/venues/<slug>, e.g. \"kings-beach\"); city-only venues have none. `season` defaults to all-time; `band` keeps one squad band. There is no surf-conditions data. Juniors are \"First L.\" with isLimited=true.","annotations":{"readOnlyHint":true}},{"name":"get_discipline","title":"One discipline across SA: field sizes by season, top clubs, most golds, strongest fields and championship winners","description":"The discipline hub's numbers for one squad band (default open), optionally one season (default All-time), province and squad. Individual golds are per gender; juniors are \"First L.\" with isLimited=true. Rating leaders are the discipline's rating group: use get_rankings with group = discipline.ratingGroup. Records: get_records with discipline. Positive lists only.","annotations":{"readOnlyHint":true}},{"name":"list_seasons","title":"Seasons with results","description":"Seasons run 1 October to 30 September (LSA's competition season) and are written \"2025/26\" (parameter form \"2025-26\").","annotations":{"readOnlyHint":true}}],"_meta":{"za.co.flagline":{"openapi":"https://flagline.co.za/api/v1/openapi.json","terms":"https://flagline.co.za/developers/terms"}}}