Skip to main content
Glama
ratho13

aidoo-mcp-server

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

B3.2/5.0

Scored across 25 tools

Disambiguation5/5

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.

Naming Consistency4/5

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.

Tool Count3/5

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.

Completeness3/5

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.

Maintenance

ActivityInactive
ResponsivenessNo issues