dtb-members-mcp
MCP-Server fuer Vereins-Mitgliederdaten aus einem lokalen CSV- oder Excel-Export. Die lokale Datei ist die fuehrende Datenquelle. Ein Playwright-basierter DTB/nuLiga-Refresh ist vorbereitet, wird aber nur auf expliziten Tool-Aufruf gestartet und erzwingt noch keinen Download.
Installation
npm install
npm run build
Konfiguration
Kopiere .env.example nach .env und passe die Pfade an. Keine echten Zugangsdaten ins Repository einchecken.
MEMBERS_FILE_PATH=./data/mitglieder.csv
ARCHIVE_DIR=./data/archive
DOWNLOAD_DIR=./data/downloads
DTB_USERNAME=
DTB_PASSWORD=
DTB_LOGIN_URL=https://dtb.liga.nu
DTB_MEMBERS_URL=
Lege den DTB/nuLiga-Export lokal ab, zum Beispiel als data/mitglieder.csv, oder setze MEMBERS_FILE_PATH auf den Pfad deiner lokalen Datei. Mitgliederdaten werden nicht ins Repository eingecheckt.
Start
npm start
Fuer Entwicklung:
npm run dev
npm run typecheck
Hermes/MCP Beispiel
{
"mcpServers": {
"dtb-members": {
"command": "node",
"args": ["S:/Code/tennis-mcp/dist/server.js"],
"env": {
"MEMBERS_FILE_PATH": "S:/Code/tennis-mcp/data/mitglieder.csv"
}
}
}
}
Tools
get_data_status: geladene Datei, Aenderungsdatum, Mitgliederzahl, erkannte Spalten.list_members: Mitglieder mitlimitundoffsetauflisten.search_members: Freitextsuche ueber Name, E-Mail, Ort und Mitgliedsnummer.get_member: eindeutige Suche nach Mitgliedsnummer, E-Mail oder Name.filter_members: Filter nach Alter, Geschlecht, Status, Ort, Mannschaft, Lizenz und Eintrittsdatum.round_birthdays: runde Geburtstage in einem Jahr.birthdays_between: Geburtstage zwischen zwei Datumswerten im FormatYYYY-MM-DD.member_statistics: Gesamtzahl, aktiv/inaktiv, Geschlecht und Altersgruppen.reload_local_file: lokale Datei neu laden.refresh_members_from_dtb: defensiver Playwright-Platzhalter fuer spaeteren DTB/nuLiga-Download.
Beispielabfragen
{ "tool": "get_data_status", "arguments": {} }
{ "tool": "list_members", "arguments": { "limit": 10, "offset": 0 } }
{ "tool": "search_members", "arguments": { "query": "Berlin", "limit": 20 } }
{ "tool": "filter_members", "arguments": { "minAge": 7, "maxAge": 17, "includeInactive": false } }
{ "tool": "round_birthdays", "arguments": { "year": 2026 } }
{ "tool": "birthdays_between", "arguments": { "from": "2026-01-01", "to": "2026-01-31" } }
Daten und Datenschutz
CSV- oder Excel-Dateien sollen manuell aus DTB/nuLiga exportiert und lokal abgelegt werden. .env, data/*.csv, data/*.xlsx, data/downloads/ und data/archive/ sind in .gitignore ausgeschlossen. Der Server loggt keine Mitgliedsdaten und gibt bei Fehlern keine Passwoerter aus.
Der optionale Playwright-Refresh haengt von der konkreten Login- und Portalstruktur ab. Wenn Zugangsdaten oder Ziel-URL fehlen, liefert refresh_members_from_dtb eine klare Fehlermeldung. Wenn Selektoren nicht eindeutig erkannt werden, bricht die Funktion mit einem Hinweis ab, damit die konkreten Portal-Selektoren spaeter sauber ergaenzt werden koennen.