# Remote-MCP-Server für Live-Preise und Verfügbarkeit

Version: `1.3.0`

## Öffentlicher Endpunkt

```text
https://ferienhaus-schwarzwald-todtnauberg.de/beds24-api/mcp/
```

- Transport: `streamable-http`
- Authentifizierung: keine
- Zugriff: ausschließlich lesend
- Protokollversion: `2025-06-18`
- Werkzeug: `get_live_prices_and_availability`
- Buchungen und Zahlungen: nicht möglich

## Unterstützte Unterkünfte

- `linx`: Ferienhaus Im Birkenweg, Rheinau-Linx
- `fewo`: Ferienwohnung im Scheuermatthof, Todtnauberg
- `chalet`: Schwarzwald-Chalet Scheuermatthof, Todtnauberg
- `alle`: gemeinsame Abfrage aller drei Unterkünfte

## MCP-Client verbinden

MCP-fähige Clients können den HTTPS-Endpunkt direkt als Remote-MCP-Server eintragen. Ein Plugin ist dafür nicht erforderlich. Eine übertragbare Beispielkonfiguration liegt unter:

```text
https://ferienhaus-schwarzwald-todtnauberg.de/beds24-api/mcp/client-config.example.json
```

Die genaue Oberfläche und der Name des Konfigurationsfeldes hängen vom verwendeten MCP-Client ab. Der Client muss Streamable HTTP unterstützen.

## Server finden

Der MCP-Server wird öffentlich an folgenden Stellen genannt:

- API-Übersicht: `https://ferienhaus-schwarzwald-todtnauberg.de/beds24-api/`
- Dokumentation: `https://ferienhaus-schwarzwald-todtnauberg.de/preise-anfrage/live-preise-verfuegbarkeit.html`
- KI-Hinweise: `https://ferienhaus-schwarzwald-todtnauberg.de/llms.txt`
- Server-Metadaten: `https://ferienhaus-schwarzwald-todtnauberg.de/beds24-api/mcp/server.json`

Der Server ist im offiziellen MCP Registry veröffentlicht:

```text
de.ferienhaus-schwarzwald-todtnauberg/live-preise
```

Registry-Abfrage:

```text
https://registry.modelcontextprotocol.io/v0.1/servers?search=de.ferienhaus-schwarzwald-todtnauberg%2Flive-preise
```

Die Registry-Veröffentlichung verbessert die Auffindbarkeit für MCP-Clients und nachgelagerte Kataloge. Sie bewirkt nicht, dass jeder allgemeine KI-Chat den Server automatisch verwendet; der jeweilige Client muss Remote-MCP und die Einbindung oder Suche nach Registry-Einträgen unterstützen.

### Neue Version im offiziellen MCP Registry veröffentlichen

Der Namensraum `de.ferienhaus-schwarzwald-todtnauberg` wird per HTTP über diese öffentliche Nachweisdatei bestätigt:

```text
https://ferienhaus-schwarzwald-todtnauberg.de/.well-known/mcp-registry-auth
```

Der private Ed25519-Schlüssel liegt außerhalb des Webroots und gehört niemals in dieses Paket. Für jede neue Veröffentlichung muss die Versionsnummer in `server.json` und in `index.php` gemeinsam erhöht werden.

Nach Installation des offiziellen `mcp-publisher` im Verzeichnis dieser `server.json`:

```text
# Privaten Schlüssel aus der geschützten PEM-Datei einlesen, ohne ihn auszugeben
MCP_PRIVATE_HEX="$(openssl pkey \
  -in /mnt/web005/a2/00/51140000/htdocs/config-secrets/mcp-registry/registry-ed25519-key.pem \
  -noout -text | grep -A3 'priv:' | tail -n +2 | tr -d ' :\n')"

# Domaininhaberschaft über HTTPS bestätigen
/mnt/web005/a2/00/51140000/htdocs/scheuermatthof_de/contao-prod/var/mcp-registry/mcp-publisher \
  login http \
  --domain=ferienhaus-schwarzwald-todtnauberg.de \
  --private-key="$MCP_PRIVATE_HEX"

unset MCP_PRIVATE_HEX

# Danach die lokale server.json veröffentlichen
/mnt/web005/a2/00/51140000/htdocs/scheuermatthof_de/contao-prod/var/mcp-registry/mcp-publisher \
  publish \
  /mnt/web005/a2/00/51140000/htdocs/scheuermatthof_de/contao-prod/public/beds24-api/mcp/server.json

# Veröffentlichung kontrollieren
curl 'https://registry.modelcontextprotocol.io/v0.1/servers?search=de.ferienhaus-schwarzwald-todtnauberg/live-preise'
```

Der private Schlüssel darf niemals in dieses Paket, in das Webverzeichnis, in `server.json` oder in eine öffentliche Konfigurationsdatei aufgenommen werden.

## Erforderliche Werkzeugparameter

| Parameter | Typ | Zulässige Werte |
|---|---|---|
| `objekt` | String | `linx`, `fewo`, `chalet`, `alle` |
| `checkin` | Datum | `YYYY-MM-DD` |
| `checkout` | Datum | `YYYY-MM-DD` |
| `adults` | Integer | mindestens 1 |
| `children` | Integer | optional, Standard `0`, höchstens 26 |

`objekt`, `checkin`, `checkout` und `adults` sind erforderlich. Nennt ein Nutzer keine Kinder, verwendet der Server automatisch `children=0`; der Agent soll deshalb nicht eigens nach Kindern fragen. Werden Kinder ausdrücklich genannt, wird nur deren Anzahl übertragen. Kinderalter werden weder benötigt noch verarbeitet.

## Ablauf eines MCP-Aufrufs

### 1. Verbindung initialisieren

```text
curl -sS -X POST 'https://ferienhaus-schwarzwald-todtnauberg.de/beds24-api/mcp/' \
  -H 'Content-Type: application/json' \
  -H 'Accept: application/json, text/event-stream' \
  --data '{"jsonrpc":"2.0","id":1,"method":"initialize","params":{"protocolVersion":"2025-06-18","capabilities":{},"clientInfo":{"name":"mcp-test","version":"1.0"}}}'
```

### 2. Werkzeuge abrufen

```text
curl -sS -X POST 'https://ferienhaus-schwarzwald-todtnauberg.de/beds24-api/mcp/' \
  -H 'Content-Type: application/json' \
  -H 'Accept: application/json, text/event-stream' \
  --data '{"jsonrpc":"2.0","id":2,"method":"tools/list","params":{}}'
```

### 3. Preis und Verfügbarkeit abfragen

```text
curl -sS -X POST 'https://ferienhaus-schwarzwald-todtnauberg.de/beds24-api/mcp/' \
  -H 'Content-Type: application/json' \
  -H 'Accept: application/json, text/event-stream' \
  --data '{"jsonrpc":"2.0","id":3,"method":"tools/call","params":{"name":"get_live_prices_and_availability","arguments":{"objekt":"linx","checkin":"2027-11-14","checkout":"2027-11-17","adults":6,"children":0}}}'
```

## Antwort auswerten

- `available=true`: Zeitraum ist für die angefragte Belegung buchbar.
- `available=false`: Zeitraum ist bestätigt nicht buchbar oder die Belegung wurde überschritten.
- `available=null`: Status konnte technisch nicht zuverlässig bestimmt werden.
- `totalPrice`: vollständiger Gesamtpreis, wenn `priceCompleteness=complete` ist.
- `alternativeStays`: ausschließlich live bestätigte alternative Zeiträume.
- `alternativeProperties`: ausschließlich live bestätigte andere Ferienobjekte.
- `bookingPage`: externe Buchungsseite; der MCP-Server nimmt selbst keine Buchung vor.

Preise, Verfügbarkeiten und fehlende Kombinationen dürfen nicht geschätzt oder extrapoliert werden. Maßgeblich bleibt die Bestätigung im tatsächlichen Buchungsvorgang.

## Weitere technische Endpunkte

- JSON-API: `https://ferienhaus-schwarzwald-todtnauberg.de/beds24-api/beds24-preise.php`
- HTML-Ergebnis: `https://ferienhaus-schwarzwald-todtnauberg.de/preise-anfrage/live-preis-ergebnis.html`
- Nutzungsbedingungen: `https://ferienhaus-schwarzwald-todtnauberg.de/preise-anfrage/live-preise-verfuegbarkeit.html#nutzungsbedingungen`
