Skip to main content
Glama
lappi

rttf-mcp

by lappi

Server Configuration

Describes the environment variables required to run the server.

NameRequiredDescriptionDefault
RTTF_MCP_ALLOW_RESTRICTEDNoAllows access to restricted data (player matches and head-to-head). Set to '1', 'true', 'yes', or 'on' to enable; '0', 'false', 'no', 'off' or unset disables. Any other value prevents the server from starting.0

Instructions

Guidance the server publishes about itself, which clients place ahead of the tool catalog so the model reads it before choosing anything.

This server publishes no instructions, or was last inspected before Glama recorded them.

Capabilities

Features and capabilities supported by this server

Protocol revision2025-11-25

CapabilityDetails
tools
{
  "listChanged": false
}
prompts
{
  "listChanged": false
}
resources
{
  "subscribe": false,
  "listChanged": false
}
experimental
{}

Tools

Functions exposed to the LLM to take actions

NameDescription
get_playerA

Профиль игрока rttf.ru: рейтинги по категориям, история рейтинга, сводка и последние турниры с местом и балансом. Один запрос к сайту.

player_id — число из адреса профиля на сайте (rttf.ru/players/28415). Поиска по имени нет ни в одном режиме: сайт закрыл его в robots.txt. Выйти на игрока можно через list_players или через итоговую таблицу турнира (get_tournament).

Анкета: player_id, name (ФИО как на сайте), city (город со страной в скобках, как на сайте), sports_rank (спортивный разряд, например "МС"), playing_hand ("левая" | "правая") — каждое null, если игрок его не указал. equipment — инвентарь: blade (основание), rubber_right и rubber_left (накладки), каждое {item_id, name} или null.

categories — словарь по коду категории; ключ есть, только если у игрока есть такая вкладка на сайте. Отсутствие ключа означает «категории у игрока нет», а не сбой. Замеренные коды:

  • "s" — одиночный разряд, основной рейтинг RTTF;

  • "d" — парный разряд. Своего рейтинга у пар на сайте нет: rating_current, rating_max и rating_max_date равны null, а rating_history пуст. В турнирах пары стоят одиночные рейтинги партнёров на момент турнира и их сумма (pair_rating_at_event);

  • "f" — рейтинг ФНТР (федерации), внешний к RTTF. Для него есть только текущее значение, максимум и история; stats, recent_tournaments и recent_tournaments_truncated равны null. Прочие коды (h, p, m, w, r) в замерах не встретились; такая категория придёт под своим кодом с подписью сайта в label. Отдельной категории для нерабочей руки на сайте не найдено; playing_hand — это игровая рука из анкеты.

Рейтинги — целые, и это округление внутреннего дробного значения, а не усечение (проверено на различающем случае). Рейтинг бывает отрицательным: у новичка после неудачного турнира -18, а перед следующим турниром сайт сбрасывает его до 1.

rating_history — полный график рейтинга по датам турниров (у ФНТР — по месяцам). Первая точка может иметь date null: это стартовый рейтинг.

stats — сводка категории; поля, которых на сайте нет (rank_position у пар), равны null.

recent_tournaments — НЕ ВСЕ турниры, а не больше десяти последних по категории: полный список сайт отдаёт только через закрытый /results. recent_tournaments_truncated равно true, когда stats.tournaments_played больше длины списка. Для каждого турнира: rating_before_event и rating_after_event — рейтинг игрока до и после этого турнира, rating_delta — изменение (пустая ячейка сайта — это 0.0), bonus — бонус за призовое место или null, place — место или null, если сайт его не указал (лиги), wins/losses — баланс встреч в турнире.

ДАННЫЕ УРОВНЯ МАТЧА В ЭТОМ РЕЖИМЕ НЕ ВЫДАЮТСЯ: соперники, счёт,
длительность и дельта отдельных встреч, лучшие победы, очные встречи.
Это не поломка и не отсутствие данных на сайте, а сознательное
ограничение: rttf.ru закрыл эти разделы в robots.txt, и сервер
запущен без RTTF_MCP_ALLOW_RESTRICTED. Не делайте вывода, что у игрока нет матчей, —
турниры с местом и балансом побед в ответе есть.
get_tournamentA

Турнир rttf.ru: метаданные и итоговая таблица. Один запрос.

tournament_id — число из адреса турнира (rttf.ru/tournaments/243702).

Матчей турнира в ответе нет ни в каком режиме: на странице турнира их нет вовсе (этапы выложены картинками), а список игр лежит в закрытом /games.

Метаданные: tournament_id, title, date, start_time, hall ({hall_id, name} или null), address. limit — ограничение по рейтингу как на сайте: число, "отк" (открытый) или "дети". doubles — парный ли турнир. has_results — сыгран ли турнир; у несыгранного standings пуст, а счётчики, average_rating и coefficient равны null.

Счётчики сыгранного турнира зависят от вида: у одиночного — participants (участников) и games (встреч), а pairs и players равны null; у парного — pairs (пар), players (игроков) и games, а participants равно null.

registered / registration_limit — сколько заявилось и лимит заявок (null, если лимита нет). У парного турнира сайт считает заявки парами.

Одиночная таблица: place, player_id, name (как на сайте, с логином в скобках), city, rating_before_event, rating_delta, rating_after_event — рейтинги до и после ЭТОГО турнира, а не сегодняшние; wins/losses — встречи, sets_won/sets_lost — партии.

Парная таблица: place, pair — два игрока с одиночными рейтингами на момент турнира, pair_rating_at_event — их сумма, wins/losses, sets_won/sets_lost. Дельты и рейтинга после у пар сайт не публикует.

average_rating — средний рейтинг участников с двумя знаками: сайт считает его по внутренним дробным рейтингам, поэтому среднее целых из таблицы с ним точно не совпадёт. coefficient — коэффициент турнира (у парных null).

list_playersA

Листает рейтинг игроков rttf.ru окнами по сто строк. Один запрос.

Это единственный разрешённый способ выйти на игрока без поиска по имени (поиск сайт закрыл в robots.txt). Строки идут по убыванию рейтинга.

city — код региона ("r77" — Москва и МО, "r78" — Санкт-Петербург и ЛО) или числовой код города ("1" — Москва, "2" — Санкт-Петербург); коды видны в ссылках городов на сайте и в поле city.city_id ответа. Пусто — вся страна.

max_rating — верхняя граница окна (от 1 до 4000). Первый вызов — без неё; следующий — с max_rating из next_max_rating ответа. Соседние окна ПЕРЕКРЫВАЮТСЯ: сайт сравнивает границу с внутренним дробным рейтингом, а показывает округлённый, и без перекрытия часть игроков выпадала бы. Повторы между окнами отбрасывайте по player_id.

Ответ повторяет city и max_rating запроса. next_max_rating равно null в трёх случаях: список кончился (строк меньше ста); stalled_on_tie равно true — следующее окно не уже текущего, потому что сто строк уместились в один-два соседних показанных рейтинга, и дальше окнами не пройти, остальные игроки с этими рейтингами через разрешённые адреса недоступны; или окно дошло до рейтинга ниже 1 — такое окно сайт молча игнорирует, и эти игроки тоже недоступны.

players — строки окна: rank, player_id, name, is_team, city ({city_id, name} или null), rating, updated. rank — место в ОБЩЕМ рейтинге, даже при фильтре по городу. is_team — корпоративная команда, а не человек: сайт ставит их в общий рейтинг наравне с игроками. city равно null, если город не указан. updated — дата последнего изменения рейтинга.

search_tournamentsA

Ближайшие и недавние турниры rttf.ru по фильтрам. Один запрос.

Фильтра по датам и по названию нет: сайт закрыл оба в robots.txt. Доступны: city (как в list_players), hall_id (число из адреса зала, rttf.ru/halls/1073) и tournament_type — один из кодов сайта: s одиночные, d парные, t командные, p пинг-понг, r ракетлон, w шах-понг, v ветеранские, c детские, l лесенки, h форовые, m мини-теннис, t2/t3/t4 триатлон, d12 дуатлон.

upcoming — ближайшие турниры, past — прошедшие, от свежих к старым; в каждом списке не больше ста строк, листания нет (подгрузка на сайте идёт через закрытый адрес). Без фильтров сто прошедших покрывают примерно полтора дня; с фильтром по залу — несколько недель. upcoming_total и past_total — счётчик «итого» сайта, если он показан (в коротких отфильтрованных списках), иначе null. upcoming_truncated и past_truncated равны true, когда строк на сайте больше, чем в ответе. filters повторяет применённые фильтры (city, hall_id, tournament_type); пустые не включаются.

Строка: tournament_id, date, start_time, limit, hall_name (краткое имя зала), doubles, ladder (лесенка), live (идёт сейчас), registration_open, average_rating (null, если сайт не посчитал), registered / registration_limit, games (сыграно встреч или null).

get_hallA

Зал (клуб) rttf.ru. Один запрос.

hall_id — число из адреса зала (rttf.ru/halls/1073); оно же приходит в get_tournament (hall.hall_id) и в сводке игрока (stats.most_frequent_hall.hall_id).

Поля: hall_id, name, address, metro (список станций или null), opening_hours, tables — число столов, website, representative_player_id — профиль представителя зала на сайте; каждое из них null, если зал его не заполнил. amenities и paid_amenities — удобства, бесплатные и платные: списки, пустые, если значков нет. rating — оценка посетителей или null: overall и aspects (словарь «аспект как на сайте» -> оценка).

Контакты зала не отдаются намеренно: там личные телефоны сотрудников. Турниры зала — search_tournaments(hall_id=...).

Prompts

Interactive templates invoked by user choice

NameDescription

No prompts

Resources

Contextual data attached and managed by the client

NameDescription

No resources

TDQS

A4.6/5.0

Scored across 5 tools

Disambiguation5/5

Each tool targets a distinct resource and action: single player, single hall, single tournament, player listing, tournament search. There is no meaningful overlap; get_player/list_players and get_tournament/search_tournaments are clearly separated by entity vs collection.

Naming Consistency5/5

All tools follow a consistent lower_snake_case verb_noun pattern: get_ for individual resources and list_/search_ for collection queries. The naming convention is uniform and predictable.

Tool Count5/5

Five tools is well-scoped for a read-only sports data domain covering players, halls, and tournaments. Each tool earns its place and there is no bloat or obvious missing core resource.

Completeness4/5

The core domain is well covered: player profiles, halls, tournament standings, player ratings listing, and tournament search. Minor gaps exist due to intentional site restrictions, such as no match-level data, no player name search, and no paginated tournament search, but these are clearly documented workarounds rather than accidental omissions.

Maintenance

ActivityMaintained
ResponsivenessNo issues