aidoo-mcp-server
# Aidoo MCP Server
MCP Server für die Aidoo Fitnessstudio-Verwaltungssoftware. Ermöglicht den Zugriff auf Mitglieder, Verträge, Kurse, Buchungen und mehr direkt aus Claude heraus.
## Voraussetzungen
1. **Aidoo API-Zugang**: Sie benötigen einen API-Key von Aidoo. Kontaktieren Sie dafür Burkhard Westermann (westermann@aidoo.de).
2. **Node.js**: Version 18 oder höher
## Installation
```bash
cd "/Users/rthode/projects/AIDOO MCP"
npm install
npm run build
```
## Konfiguration
### Umgebungsvariablen
| Variable | Erforderlich | Beschreibung |
|----------|--------------|--------------|
| `AIDOO_API_KEY` | Ja | Ihr Aidoo API Bearer Token |
| `AIDOO_BASE_URL` | Nein | API URL (Standard: `https://api.aidoo-online.de:10015`) |
| `AIDOO_GYM_ID` | Nein | Standard Studio-ID für Abfragen |
### Claude Desktop Konfiguration
Fügen Sie folgendes zu Ihrer Claude Desktop Konfiguration hinzu (`~/Library/Application Support/Claude/claude_desktop_config.json`):
```json
{
"mcpServers": {
"aidoo": {
"command": "node",
"args": ["/Users/rthode/projects/AIDOO MCP/dist/index.js"],
"env": {
"AIDOO_API_KEY": "ihr-api-key-hier",
"AIDOO_GYM_ID": "ihre-gym-id"
}
}
}
}
```
### Claude Code Konfiguration
Für Claude Code fügen Sie den Server in Ihre `.mcp.json` ein:
```json
{
"mcpServers": {
"aidoo": {
"command": "node",
"args": ["/Users/rthode/projects/AIDOO MCP/dist/index.js"],
"env": {
"AIDOO_API_KEY": "ihr-api-key-hier",
"AIDOO_GYM_ID": "ihre-gym-id"
}
}
}
}
```
## Verfügbare Tools
### Mitglieder (Members)
| Tool | Beschreibung |
|------|--------------|
| `aidoo_list_members` | Mitglieder auflisten/suchen |
| `aidoo_get_member` | Einzelnes Mitglied abrufen |
| `aidoo_create_member` | Neues Mitglied erstellen |
| `aidoo_update_member` | Mitglied aktualisieren |
### Verträge (Contracts)
| Tool | Beschreibung |
|------|--------------|
| `aidoo_list_contracts` | Verträge auflisten/suchen |
| `aidoo_get_contract` | Einzelnen Vertrag abrufen |
| `aidoo_get_expiring_contracts` | Auslaufende Verträge finden |
### Kurse (Classes)
| Tool | Beschreibung |
|------|--------------|
| `aidoo_list_classes` | Kurse auflisten |
| `aidoo_get_class` | Einzelnen Kurs abrufen |
| `aidoo_get_schedule` | Kursplan für Zeitraum |
### Buchungen (Bookings)
| Tool | Beschreibung |
|------|--------------|
| `aidoo_list_bookings` | Buchungen auflisten |
| `aidoo_get_member_bookings` | Buchungen eines Mitglieds |
| `aidoo_create_booking` | Kursbuchung erstellen |
| `aidoo_cancel_booking` | Buchung stornieren |
### Studios (Gyms)
| Tool | Beschreibung |
|------|--------------|
| `aidoo_list_gyms` | Studios auflisten |
| `aidoo_get_gym` | Studio-Details abrufen |
### Trainer
| Tool | Beschreibung |
|------|--------------|
| `aidoo_list_trainers` | Trainer auflisten |
| `aidoo_get_trainer` | Trainer-Details abrufen |
### Check-Ins
| Tool | Beschreibung |
|------|--------------|
| `aidoo_list_checkins` | Check-ins auflisten |
| `aidoo_create_checkin` | Check-in durchführen |
### Webhooks
| Tool | Beschreibung |
|------|--------------|
| `aidoo_list_webhooks` | Webhooks auflisten |
| `aidoo_create_webhook` | Webhook erstellen |
| `aidoo_delete_webhook` | Webhook löschen |
### Statistiken
| Tool | Beschreibung |
|------|--------------|
| `aidoo_get_member_statistics` | Mitglieder-Statistiken |
| `aidoo_get_gym_statistics` | Studio-Statistiken |
## Beispiel-Anfragen
### Mitglieder suchen
```
"Zeige mir alle Mitglieder mit Nachname Müller"
→ Nutzt aidoo_list_members mit lastname="Müller"
```
### Auslaufende Verträge
```
"Welche Verträge laufen im nächsten Monat aus?"
→ Nutzt aidoo_get_expiring_contracts
```
### Kursplan abrufen
```
"Zeige mir den Kursplan für diese Woche"
→ Nutzt aidoo_get_schedule
```
### Webhook für Kündigungen
```
"Benachrichtige mich bei Vertragsänderungen"
→ Nutzt aidoo_create_webhook mit entity_name="contract"
```
## Extensions (Verknüpfte Daten)
Die Aidoo API unterstützt das Laden verknüpfter Daten über den `extensions` Parameter:
```
aidoo_list_members mit extensions=["contracts", "bookings"]
→ Lädt Mitglieder inkl. deren Verträge und Buchungen
```
Mögliche Extensions je nach Entität:
- **members**: `contracts`, `bookings`, `checkins`
- **contracts**: `member`
- **classes**: `trainer`, `room`, `bookings`
- **bookings**: `member`, `class`
## Entwicklung
```bash
# Development-Modus mit Hot-Reload
npm run dev
# Mit MCP Inspector testen
npm run inspect
```
## Hinweise
- Die API ist auf maximal 100 Ergebnisse pro Anfrage begrenzt. Nutzen Sie `limit` und `offset` für Paging.
- Nach dem Erstellen eines Webhooks kann es bis zu 1 Minute dauern, bis er aktiv ist.
- Der API-Zugang erfordert eine Partnerschaftsvereinbarung mit Aidoo.
## Lizenz
MIT
TDQS
Scored across 25 tools
Each tool targets a distinct resource and action, with clear separation between list/get/create/update/cancel/delete operations. Even the convenience get_member_bookings and get_expiring_contracts are clearly distinct from their list counterparts by specific filtering intent.
Tools follow a consistent aidoo_verb_noun pattern, but get is used for both single-item fetches and list-returning queries (e.g., get_expiring_contracts, get_member_bookings), while list is reserved for standard collection listings. This is a minor deviation from the ideal verb-per-action style.
With 25 tools, the server is on the heavier side, covering multiple domain areas (members, contracts, bookings, checkins, etc.). While each tool has a purpose, the count feels large for a single server and might benefit from splitting into focused services.
The surface provides solid read coverage for all major resources and write operations for members, bookings, checkins, and webhooks. However, there is no create/update/delete for contracts, classes, trainers, or gyms, leaving notable lifecycle gaps for core domain objects.