{
  "protocolVersion": "0.3.0",
  "name": "HotelOne",
  "description": "Search and book independent hotels, inns and motels on HotelOne: live availability and prices, guests' questions answered from each hotel's own information, pre-filled booking links the guest confirms in one tap, booking requests the hotel confirms, and confirmed pay-at-hotel bookings for API key holders.",
  "url": "https://hotelone.site/api/mcp",
  "preferredTransport": "MCP",
  "additionalInterfaces": [
    {
      "url": "https://hotelone.site/api/mcp",
      "transport": "MCP"
    },
    {
      "url": "https://hotelone.site/api/agents/v1",
      "transport": "HTTP+JSON"
    }
  ],
  "provider": {
    "organization": "HotelOne",
    "url": "https://hotelone.site"
  },
  "version": "1.0.0",
  "iconUrl": "https://hotelone.site/icon.svg",
  "documentationUrl": "https://hotelone.site/assistants",
  "capabilities": {
    "streaming": false,
    "pushNotifications": false,
    "stateTransitionHistory": false,
    "extensions": [
      {
        "uri": "https://modelcontextprotocol.io/specification/2025-06-18/basic/transports#streamable-http",
        "description": "MCP server over Streamable HTTP (stateless JSON responses).",
        "required": false,
        "params": {
          "endpoint": "https://hotelone.site/api/mcp",
          "hotelEndpointTemplate": "https://hotelone.site/api/mcp/hotels/{propertyId}",
          "protocolVersions": [
            "2025-06-18",
            "2025-03-26",
            "2024-11-05"
          ],
          "openapi": "https://hotelone.site/openapi.json",
          "llms": "https://hotelone.site/llms.txt"
        }
      }
    ]
  },
  "securitySchemes": {
    "bearerAuth": {
      "type": "http",
      "scheme": "bearer",
      "bearerFormat": "ho_live_…",
      "description": "Only for create_booking. Hotel owners create keys in the console."
    }
  },
  "security": [],
  "defaultInputModes": [
    "application/json",
    "text/plain"
  ],
  "defaultOutputModes": [
    "application/json"
  ],
  "skills": [
    {
      "id": "search_hotels",
      "name": "Search hotels",
      "description": "Find HotelOne hotels by place (city, state, zip or area), by name, or by what the person wants (query: \"ocean view\", \"sauna\", \"motel\"). Pass checkIn and checkOut (YYYY-MM-DD) to get live availability and the cheapest price for the stay; guests and rooms default to 2 and 1. If the result has a note, pass it on: results may be the closest places, and with no hotels in the place, places lists where HotelOne has hotels. Start here, then call check_availability for the hotel the person picks. Each hotel has an id (propertyId) for the other tools.",
      "tags": [
        "search",
        "hotels",
        "availability"
      ],
      "examples": [
        "Find me a room in Santa Cruz next weekend for two and book it.",
        "Something in Monterey for 3 nights from November 12, under $250 a night."
      ],
      "inputModes": [
        "application/json"
      ],
      "outputModes": [
        "application/json"
      ]
    },
    {
      "id": "get_hotel",
      "name": "Hotel details",
      "description": "Everything about one hotel: description, address, phone, amenities, check-in and check-out times, cancellation policy, room types with starting prices, photos, and the hotel’s own answers to common questions. Use when the person wants to know more about a hotel.",
      "tags": [
        "hotel",
        "details"
      ],
      "inputModes": [
        "application/json"
      ],
      "outputModes": [
        "application/json"
      ]
    },
    {
      "id": "check_availability",
      "name": "Check availability",
      "description": "Live availability and exact prices (in the hotel’s currency, taxes and fees included) for every room type at one hotel for given dates and party. Suggest an option that is available and fits the party (fits_party), then use its room_type_id with get_booking_link. A party that wants different room types together (say a King and a Twin) can book them as one booking with items.",
      "tags": [
        "availability",
        "prices"
      ],
      "inputModes": [
        "application/json"
      ],
      "outputModes": [
        "application/json"
      ]
    },
    {
      "id": "get_booking_link",
      "name": "Get a booking link",
      "description": "The fastest way to book a room: returns a checkout link with the hotel, room, dates and party filled in (and the guest’s name, email and phone if you pass them), plus a summary with the total. Give the person the link and the summary — they open it, check the details and confirm in one tap. The link doesn’t hold the room or charge anything by itself. Use this by default. For different room types in one booking (e.g. 1 King and 2 Doubles), pass items (each roomTypeId and its rooms) instead of roomTypeId; guests is the whole party.",
      "tags": [
        "booking",
        "checkout"
      ],
      "inputModes": [
        "application/json"
      ],
      "outputModes": [
        "application/json"
      ]
    },
    {
      "id": "request_booking",
      "name": "Send a booking request",
      "description": "For people who can’t open a link (for example on a voice call): sends a booking request to the hotel’s team, who confirm with the guest and send a link to finish booking. Nothing is booked until then. Needs the guest’s full name and an email or phone number. For different room types in one booking (e.g. 1 King and 2 Doubles), pass items (each roomTypeId and its rooms) instead of roomTypeId; guests is the whole party. Before calling, read back the hotel, room, dates, number of guests and the total, and only call it after the person clearly says yes.",
      "tags": [
        "booking",
        "request"
      ],
      "inputModes": [
        "application/json"
      ],
      "outputModes": [
        "application/json"
      ]
    },
    {
      "id": "create_booking",
      "name": "Book now (pay at the hotel)",
      "description": "Makes a confirmed booking at any HotelOne hotel, paid at the hotel on arrival, and emails the guest a confirmation. Needs the guest’s first and last name and their own email. For different room types in one booking (e.g. 1 King and 2 Doubles), pass items (each roomTypeId and its rooms) instead of roomTypeId; guests is the whole party. Before calling, read back the hotel, room, dates, number of guests and the total, and only call it after the person clearly says yes. Returns a confirmation code to give the guest (one code for the whole booking, even with several room types).",
      "tags": [
        "booking",
        "api-key"
      ],
      "inputModes": [
        "application/json"
      ],
      "outputModes": [
        "application/json"
      ]
    },
    {
      "id": "find_booking",
      "name": "Find a booking",
      "description": "Look up an existing booking by its confirmation code and the guest’s last name: status, hotel, room, dates, until when changes are free, and how to change or cancel.",
      "tags": [
        "booking",
        "lookup"
      ],
      "examples": [
        "Find my booking — code ABC123, last name Smith."
      ],
      "inputModes": [
        "application/json"
      ],
      "outputModes": [
        "application/json"
      ]
    },
    {
      "id": "ask_hotel",
      "name": "Ask the hotel",
      "description": "Answer a guest’s question about a hotel — parking, pets, breakfast, Wi-Fi, check-in times, cancellation, getting there and more — from the hotel’s own saved answers. Pass the question in the guest’s words, or a topic key. If nothing matches, say you’re not sure and share the hotel’s phone number; never guess.",
      "tags": [
        "faq",
        "questions"
      ],
      "examples": [
        "Is parking free at The Saltwater Inn?"
      ],
      "inputModes": [
        "application/json"
      ],
      "outputModes": [
        "application/json"
      ]
    }
  ],
  "supportsAuthenticatedExtendedCard": false
}