Skip to main content
Glama
LarsZilch

dtb-members-mcp

by LarsZilch
README.md
# 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

```bash
npm install
npm run build
```

## Konfiguration

Kopiere `.env.example` nach `.env` und passe die Pfade an. Keine echten Zugangsdaten ins Repository einchecken.

```dotenv
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

```bash
npm start
```

Fuer Entwicklung:

```bash
npm run dev
npm run typecheck
```

## Hermes/MCP Beispiel

```json
{
  "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 mit `limit` und `offset` auflisten.
- `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 Format `YYYY-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

```json
{ "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.