{
 "$schema": "https://static.modelcontextprotocol.io/schemas/mcp-server-card/v1.json",
 "version": "1.0",
 "protocolVersion": "2025-06-18",
 "serverInfo": {
  "name": "dove-living-buchen",
  "title": "Dove Living – Apartments Schwandorf direkt buchen",
  "version": "1.0.0"
 },
 "name": "de.dove-living.buchen/mcp",
 "description": "Dove Living: 3 Ferien-/Monteurapartments (bis 8 bzw. 6 Gäste) in Schwandorf (Bayern), Bahnhofstraße 9. Ablauf: 1) verfuegbarkeit_suchen(von, bis, gaeste) zeigt freie Apartments mit Endpreis; bei flexiblen Daten belegungskalender(listing, von). 2) optional angebot_berechnen. 3) buchung_anfragen nur auf ausdrücklichen Wunsch des Gastes mit Vorname, Nachname, E-Mail – liefert einen Link zur Zahlungsseite auf buchen.dove-living.de (30 Min. gültig); die Buchung ist erst nach der Kartenzahlung fest. 4) buchung_status zeigt die Reservierungsnummer. Preise/Verfügbarkeit kommen live aus Hostaway – nichts selbst berechnen. Datum JJJJ-MM-TT. English: vacation apartments in Schwandorf, Germany; search, quote, request a booking (guest pays on the operator's own payment page), check status. Answer in the user's language.",
 "websiteUrl": "https://buchen.dove-living.de/",
 "transport": {
  "type": "streamable-http",
  "endpoint": "/mcp",
  "url": "https://buchen.dove-living.de/mcp"
 },
 "remotes": [
  {
   "type": "streamable-http",
   "url": "https://buchen.dove-living.de/mcp"
  }
 ],
 "authentication": {
  "required": false,
  "schemes": []
 },
 "capabilities": {
  "tools": {
   "listChanged": false
  },
  "resources": {
   "listChanged": false
  }
 },
 "tools": [
  {
   "name": "verfuegbarkeit_suchen",
   "title": "Verfügbarkeit suchen",
   "description": "Sucht freie Dove-Living-Apartments in Schwandorf für einen Zeitraum und eine Gästezahl. Liefert je Apartment: frei ja/nein mit Grund, Mindestaufenthalt, max. Gäste und – wenn frei – den Endpreis inkl. Reinigung und MwSt. aus Hostaway.",
   "inputSchema": {
    "type": "object",
    "additionalProperties": false,
    "required": [
     "von",
     "bis",
     "gaeste"
    ],
    "properties": {
     "von": {
      "type": "string",
      "format": "date",
      "pattern": "^\\d{4}-\\d{2}-\\d{2}$",
      "description": "Anreisedatum JJJJ-MM-TT"
     },
     "bis": {
      "type": "string",
      "format": "date",
      "pattern": "^\\d{4}-\\d{2}-\\d{2}$",
      "description": "Abreisedatum JJJJ-MM-TT"
     },
     "gaeste": {
      "type": "integer",
      "minimum": 1,
      "maximum": 20,
      "description": "Anzahl Gäste"
     }
    }
   },
   "annotations": {
    "title": "Verfügbarkeit suchen",
    "readOnlyHint": true,
    "destructiveHint": false,
    "idempotentHint": true,
    "openWorldHint": false
   }
  },
  {
   "name": "angebot_berechnen",
   "title": "Angebot berechnen",
   "description": "Verbindlicher Preis für ein bestimmtes Apartment und Zeitraum (Hostaway priceDetails, mit Einzelposten) plus Verfügbarkeit, Check-in/-out-Zeiten und Adresse.",
   "inputSchema": {
    "type": "object",
    "additionalProperties": false,
    "required": [
     "listing",
     "von",
     "bis",
     "gaeste"
    ],
    "properties": {
     "listing": {
      "type": "integer",
      "enum": [
       542791,
       546331,
       548767
      ],
      "description": "Apartment-ID: 542791 (bis 8 Gäste), 546331 (bis 6), 548767 (bis 6)"
     },
     "von": {
      "type": "string",
      "format": "date",
      "pattern": "^\\d{4}-\\d{2}-\\d{2}$",
      "description": "Anreisedatum JJJJ-MM-TT"
     },
     "bis": {
      "type": "string",
      "format": "date",
      "pattern": "^\\d{4}-\\d{2}-\\d{2}$",
      "description": "Abreisedatum JJJJ-MM-TT"
     },
     "gaeste": {
      "type": "integer",
      "minimum": 1,
      "maximum": 20
     }
    }
   },
   "annotations": {
    "title": "Angebot berechnen",
    "readOnlyHint": true,
    "destructiveHint": false,
    "idempotentHint": true,
    "openWorldHint": false
   }
  },
  {
   "name": "buchung_anfragen",
   "title": "Buchung anfragen (Zahlungslink)",
   "description": "Reserviert den Zeitraum 30 Minuten und erzeugt einen Stripe-Checkout-Link für den Gast. Die Buchung wird erst nach erfolgreicher Kartenzahlung verbindlich; ohne Zahlung wird der Zeitraum automatisch freigegeben. Nur nach ausdrücklichem Wunsch des Gastes aufrufen.",
   "inputSchema": {
    "type": "object",
    "additionalProperties": false,
    "required": [
     "listing",
     "von",
     "bis",
     "gaeste",
     "vorname",
     "nachname",
     "email"
    ],
    "properties": {
     "listing": {
      "type": "integer",
      "enum": [
       542791,
       546331,
       548767
      ],
      "description": "Apartment-ID: 542791 (bis 8 Gäste), 546331 (bis 6), 548767 (bis 6)"
     },
     "von": {
      "type": "string",
      "format": "date",
      "pattern": "^\\d{4}-\\d{2}-\\d{2}$",
      "description": "Anreisedatum JJJJ-MM-TT"
     },
     "bis": {
      "type": "string",
      "format": "date",
      "pattern": "^\\d{4}-\\d{2}-\\d{2}$",
      "description": "Abreisedatum JJJJ-MM-TT"
     },
     "gaeste": {
      "type": "integer",
      "minimum": 1,
      "maximum": 20
     },
     "vorname": {
      "type": "string",
      "maxLength": 60
     },
     "nachname": {
      "type": "string",
      "maxLength": 60
     },
     "email": {
      "type": "string",
      "format": "email",
      "maxLength": 200
     },
     "telefon": {
      "type": "string",
      "maxLength": 40
     },
     "test_token": {
      "type": "string",
      "description": "Nur im Testbetrieb nötig (vom Betreiber erhalten)."
     }
    }
   },
   "annotations": {
    "title": "Buchung anfragen",
    "readOnlyHint": false,
    "destructiveHint": false,
    "idempotentHint": false,
    "openWorldHint": true
   }
  },
  {
   "name": "buchung_status",
   "title": "Buchungsstatus",
   "description": "Stand einer Buchungsanfrage (wartet auf Zahlung, bestätigt mit Reservierungsnummer, abgelaufen, erstattet). Parameter: buchungs_id aus buchung_anfragen.",
   "inputSchema": {
    "type": "object",
    "additionalProperties": false,
    "required": [
     "buchungs_id"
    ],
    "properties": {
     "buchungs_id": {
      "type": "string",
      "maxLength": 300
     }
    }
   },
   "annotations": {
    "title": "Buchungsstatus",
    "readOnlyHint": true,
    "destructiveHint": false,
    "idempotentHint": true,
    "openWorldHint": false
   }
  },
  {
   "name": "belegungskalender",
   "title": "Belegungskalender",
   "description": "Tagesgenaue Belegung eines Dove-Living-Apartments für bis zu 62 Tage ab 'von' (frei/belegt, Mindestaufenthalt, Anreise möglich) – ohne Preise. Für flexible Reisedaten oder um freie Lücken zu finden; den Preis danach mit angebot_berechnen holen.",
   "inputSchema": {
    "type": "object",
    "additionalProperties": false,
    "required": [
     "listing",
     "von"
    ],
    "properties": {
     "listing": {
      "type": "integer",
      "enum": [
       542791,
       546331,
       548767
      ],
      "description": "Apartment-ID: 542791 (bis 8 Gäste), 546331 (bis 6), 548767 (bis 6)"
     },
     "von": {
      "type": "string",
      "format": "date",
      "pattern": "^\\d{4}-\\d{2}-\\d{2}$",
      "description": "Erster Tag JJJJ-MM-TT"
     },
     "bis": {
      "type": "string",
      "format": "date",
      "pattern": "^\\d{4}-\\d{2}-\\d{2}$",
      "description": "Optional: Ende JJJJ-MM-TT (max. 62 Tage)"
     }
    }
   },
   "annotations": {
    "title": "Belegungskalender",
    "readOnlyHint": true,
    "destructiveHint": false,
    "idempotentHint": true,
    "openWorldHint": false
   }
  }
 ],
 "openapi": "https://buchen.dove-living.de/openapi.json",
 "llms_txt": "https://buchen.dove-living.de/llms.txt",
 "contact": {
  "email": "info@dove-living.de"
 },
 "legal": {
  "terms": "https://buchen.dove-living.de/buchungsbedingungen",
  "privacy": "https://buchen.dove-living.de/datenschutz",
  "imprint": "https://buchen.dove-living.de/impressum"
 },
 "documentation": "https://buchen.dove-living.de/hilfe",
 "mode": "test",
 "rateLimits": "Pro IP: 60 Anfragen/Minute, 5 Buchungsanfragen/Stunde"
}