Best Western Hotels

Search Best Western hotels worldwide: descriptions, addresses, contacts, amenities and photos.

Should I use this

Quality & Safety

A
Description quality
100%
Schema completeness
87%
Naming quality
100%
Poisoning risk
100%
Permission match
100%
Protocol compliance
100%

Based on automated analysis of tool definitions and protocol compliance.

Context Cost

~3,132Tokens (tool definitions)
~7.5 KBTypical response size
Significant attention impact (2.45% of 128k context)

This is the approximate number of tokens consumed each time the server's tools are loaded into a model's context. Higher counts reduce the attention available for other tasks.

Install

One-Click Install

Add this to your `claude_desktop_config.json` file:

{
  "mcpServers": {
    "hotels": {
      "url": "https://mcp-hotel.bestwestern.fr/mcp"
    }
  }
}

Remote endpoints

https://mcp-hotel.bestwestern.fr/mcpstreamable-http

What it can do

Tool inventory

Tools (4)

🟒 Read-only🟑 WriteπŸ”΄ Deleteβšͺ Unknown
🟒search_hotels(city, country, min_stars, brand, status, ...)

Search the chain's hotels (worldwide, several thousand) by location, stars, brand, status and amenities, with pagination. All filters are optional and combined with AND. Always pass `country` (ISO code, e.g. "FR") together with `city` when the country is known or implied: a search on "Paris" alone returns Paris (Kentucky, US) and Paris (Ontario, CA) before Paris (France). Returns {"language", "total", "offset", "limit", "count", "next_offset", "hotels"}: `total` is the number of matching hotels, `next_offset` is null on the last page. Each hotel is a summary (hotel_id, name, brand, city, country, state, stars, status, lat, lng, cover_photo); use get_hotel_details for the full record. Geographic search: give a center (lat + lng, or near_hotel_id) and radius_km. Results are then sorted by distance, each hotel gets a `distance_km` field and the response a `center` field. Coordinates you supply for a landmark are approximate, so prefer a generous radius. Hotels without coordinates are excluded. No availability, rates or booking: this tool only returns descriptive information.

Input Schema

{
  "type": "object",
  "properties": {
    "city": {
      "anyOf": [
        {
          "type": "string"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "description": "City name, partial match ignoring case, accents, hyphens and St/Ste abbreviations (e.g. 'Saint-Γ‰tienne' = 'saint etienne' = 'St Etienne'; 'Saint' matches every city containing 'Saint'). If no city matches, the response lists close city names in `city_suggestions`. City names are ambiguous worldwide: combine with `country` whenever the country is known.",
      "title": "City"
    },
    "country": {
      "anyOf": [
        {
          "maxLength": 2,
          "minLength": 2,
          "type": "string"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "description": "ISO 3166-1 alpha-2 country code, uppercase (FR, US, CA, DE...). Strongly recommended together with `city` to avoid homonyms (Paris FR vs Paris US/CA).",
      "title": "Country"
    },
    "min_stars": {
      "anyOf": [
        {
          "maximum": 5,
          "minimum": 1,
          "type": "integer"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "description": "Minimum star rating (1-5). Hotels without a star rating are excluded when set. For an exact rating, filter the results on their `stars` field.",
      "title": "Min Stars"
    },
    "brand": {
      "anyOf": [
        {
          "type": "string"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "description": "Partial match on the sub-brand, ignoring case and accents (e.g. 'Plus', 'Premier', 'Signature Collection')",
      "title": "Brand"
    },
    "status": {
      "anyOf": [
        {
          "enum": [
            "open",
            "closed",
            "renovation"
          ],
          "type": "string"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "description": "Hotel status",
      "title": "Status"
    },
    "required_amenities": {
      "description": "Amenity IDs the hotel must ALL have, uppercase (e.g. [\"POOL\", \"PARKING\"]). Unknown IDs raise an error listing the valid ones; the catalogue is also available via get_amenities without hotel_id.",
      "items": {
        "type": "string"
      },
      "title": "Required Amenities",
      "type": "array"
    },
    "language": {
      "default": "fr",
      "description": "Language of the multilingual fields of the results. Accepted values: fr, en, de, it, es. A text missing in the requested language is returned in French.",
      "enum": [
        "fr",
        "en",
        "de",
        "it",
        "es"
      ],
      "title": "Language",
      "type": "string"
    },
    "limit": {
      "default": 20,
      "description": "Maximum number of hotels to return (1-100)",
      "maximum": 100,
      "minimum": 1,
      "title": "Limit",
      "type": "integer"
    },
    "offset": {
      "default": 0,
      "description": "Number of matching hotels to skip, for pagination. Pass the `next_offset` value of the previous response.",
      "minimum": 0,
      "title": "Offset",
      "type": "integer"
    },
    "lat": {
      "anyOf": [
        {
          "maximum": 90,
          "minimum": -90,
          "type": "number"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "description": "Latitude of the search center (-90 to 90). Use with `lng` and `radius_km`.",
      "title": "Lat"
    },
    "lng": {
      "anyOf": [
        {
          "maximum": 180,
          "minimum": -180,
          "type": "number"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "description": "Longitude of the search center (-180 to 180). Use with `lat` and `radius_km`.",
      "title": "Lng"
    },
    "near_hotel_id": {
      "anyOf": [
        {
          "type": "string"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "description": "Use this hotel's coordinates as the search center (instead of lat/lng) to find other hotels around it; the hotel itself is excluded. Use with `radius_km`.",
      "title": "Near Hotel Id"
    },
    "radius_km": {
      "anyOf": [
        {
          "exclusiveMinimum": 0,
          "maximum": 200,
          "type": "number"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "description": "Search radius in kilometres (up to 200). Required with lat/lng or near_hotel_id.",
      "title": "Radius Km"
    }
  },
  "title": "search_hotelsArguments"
}

Output Schema

{
  "type": "object",
  "properties": {
    "language": {
      "description": "Language of the returned texts",
      "title": "Language",
      "type": "string"
    },
    "total": {
      "description": "Number of hotels matching the filters",
      "title": "Total",
      "type": "integer"
    },
    "offset": {
      "title": "Offset",
      "type": "integer"
    },
    "limit": {
      "title": "Limit",
      "type": "integer"
    },
    "count": {
      "description": "Number of hotels in this page",
      "title": "Count",
      "type": "integer"
    },
    "next_offset": {
      "anyOf": [
        {
          "type": "integer"
        },
        {
          "type": "null"
        }
      ],
      "description": "Offset of the next page, null on the last page",
      "title": "Next Offset"
    },
    "center": {
      "anyOf": [
        {
          "additionalProperties": true,
          "type": "object"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "description": "Center of a geographic search: {lat, lng, radius_km}, plus near_hotel_id if used",
      "title": "Center"
    },
    "city_suggestions": {
      "anyOf": [
        {
          "items": {
            "type": "string"
          },
          "type": "array"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "description": "When `city` matches no hotel: close city names to retry with",
      "title": "City Suggestions"
    },
    "hotels": {
      "items": {
        "$ref": "#/$defs/HotelSummary"
      },
      "title": "Hotels",
      "type": "array"
    }
  },
  "required": [
    "language",
    "total",
    "offset",
    "limit",
    "count",
    "next_offset",
    "hotels"
  ],
  "$defs": {
    "HotelSummary": {
      "additionalProperties": true,
      "properties": {
        "hotel_id": {
          "title": "Hotel Id",
          "type": "string"
        },
        "name": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "title": "Name"
        },
        "brand": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "title": "Brand"
        },
        "city": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "title": "City"
        },
        "country": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "title": "Country"
        },
        "state": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "title": "State"
        },
        "stars": {
          "anyOf": [
            {
              "type": "integer"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "title": "Stars"
        },
        "status": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "title": "Status"
        },
        "lat": {
          "anyOf": [
            {
              "type": "number"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "title": "Lat"
        },
        "lng": {
          "anyOf": [
            {
              "type": "number"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "title": "Lng"
        },
        "cover_photo": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "title": "Cover Photo"
        },
        "distance_km": {
          "anyOf": [
            {
              "type": "number"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "Distance from the search center, only for geographic searches",
          "title": "Distance Km"
        }
      },
      "required": [
        "hotel_id"
      ],
      "title": "HotelSummary",
      "type": "object"
    }
  },
  "title": "SearchResult"
}
🟒get_hotel_details(hotel_id, language)

Return the complete details of one hotel (descriptions, address, location, contacts, policies, page URL, amenity IDs). Requires a valid hotel_id: call search_hotels first if you only know the hotel name or city. No availability, rates or booking: for those, give the user the page_url or the contact details of the hotel.

Input Schema

{
  "type": "object",
  "properties": {
    "hotel_id": {
      "description": "Hotel ID as returned by search_hotels (e.g. PAR-87155)",
      "title": "Hotel Id",
      "type": "string"
    },
    "language": {
      "default": "fr",
      "description": "Language of the texts. Accepted values: fr, en, de, it, es. A text missing in the requested language is returned in French.",
      "enum": [
        "fr",
        "en",
        "de",
        "it",
        "es"
      ],
      "title": "Language",
      "type": "string"
    }
  },
  "required": [
    "hotel_id"
  ],
  "title": "get_hotel_detailsArguments"
}

Output Schema

{
  "type": "object",
  "properties": {
    "language": {
      "description": "Language of the returned texts",
      "title": "Language",
      "type": "string"
    },
    "hotel_id": {
      "title": "Hotel Id",
      "type": "string"
    },
    "name": {
      "anyOf": [
        {
          "type": "string"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "title": "Name"
    },
    "brand": {
      "anyOf": [
        {
          "type": "string"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "title": "Brand"
    },
    "stars": {
      "anyOf": [
        {
          "type": "integer"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "title": "Stars"
    },
    "status": {
      "anyOf": [
        {
          "type": "string"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "title": "Status"
    },
    "description_short": {
      "anyOf": [
        {
          "type": "string"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "title": "Description Short"
    },
    "description_long": {
      "anyOf": [
        {
          "type": "string"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "title": "Description Long"
    },
    "page_url": {
      "anyOf": [
        {
          "type": "string"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "title": "Page Url"
    },
    "address": {
      "anyOf": [
        {
          "additionalProperties": true,
          "type": "object"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "title": "Address"
    },
    "location": {
      "anyOf": [
        {
          "additionalProperties": true,
          "type": "object"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "title": "Location"
    },
    "contact": {
      "anyOf": [
        {
          "additionalProperties": true,
          "type": "object"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "title": "Contact"
    },
    "policies": {
      "anyOf": [
        {
          "additionalProperties": true,
          "type": "object"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "title": "Policies"
    },
    "amenities_ids": {
      "default": [],
      "items": {
        "type": "string"
      },
      "title": "Amenities Ids",
      "type": "array"
    }
  },
  "required": [
    "language",
    "hotel_id"
  ],
  "additionalProperties": true,
  "title": "HotelDetails"
}
🟒get_amenities(hotel_id, amenity_id, language)

Return the amenities of one hotel, or the chain's global amenity catalogue when hotel_id is omitted. Call it without hotel_id to discover the valid amenity IDs to use in search_hotels. No availability, rates or booking: this tool only returns descriptive information.

Input Schema

{
  "type": "object",
  "properties": {
    "hotel_id": {
      "anyOf": [
        {
          "type": "string"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "description": "Hotel ID from search_hotels. If omitted, returns the chain's full amenity catalogue.",
      "title": "Hotel Id"
    },
    "amenity_id": {
      "anyOf": [
        {
          "type": "string"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "description": "Restrict to one amenity ID, uppercase (e.g. POOL, WIFI_INTERNET, PARKING, RESTAURANT, FITNESS). Unknown IDs raise an error listing the valid ones; with hotel_id, an empty list means the hotel does not have this amenity.",
      "title": "Amenity Id"
    },
    "language": {
      "default": "fr",
      "description": "Language of the labels. Accepted values: fr, en, de, it, es. A text missing in the requested language is returned in French.",
      "enum": [
        "fr",
        "en",
        "de",
        "it",
        "es"
      ],
      "title": "Language",
      "type": "string"
    }
  },
  "title": "get_amenitiesArguments"
}

Output Schema

{
  "type": "object",
  "properties": {
    "language": {
      "description": "Language of the returned texts",
      "title": "Language",
      "type": "string"
    },
    "amenities": {
      "items": {
        "$ref": "#/$defs/Amenity"
      },
      "title": "Amenities",
      "type": "array"
    }
  },
  "required": [
    "language",
    "amenities"
  ],
  "$defs": {
    "Amenity": {
      "additionalProperties": true,
      "properties": {
        "amenity_id": {
          "title": "Amenity Id",
          "type": "string"
        },
        "name": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "title": "Name"
        },
        "icon": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "title": "Icon"
        }
      },
      "required": [
        "amenity_id"
      ],
      "title": "Amenity",
      "type": "object"
    }
  },
  "title": "AmenitiesResult"
}
🟒get_hotel_photos(hotel_id, cover_only, language)

Return the photo gallery of a hotel (URLs and captions), optionally limited to the cover photo. No availability, rates or booking: this tool only returns descriptive information.

Input Schema

{
  "type": "object",
  "properties": {
    "hotel_id": {
      "description": "Hotel ID as returned by search_hotels (e.g. PAR-87155)",
      "title": "Hotel Id",
      "type": "string"
    },
    "cover_only": {
      "anyOf": [
        {
          "type": "boolean"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "description": "If true, return only the cover photo",
      "title": "Cover Only"
    },
    "language": {
      "default": "fr",
      "description": "Language of the captions. Accepted values: fr, en, de, it, es. A text missing in the requested language is returned in French.",
      "enum": [
        "fr",
        "en",
        "de",
        "it",
        "es"
      ],
      "title": "Language",
      "type": "string"
    }
  },
  "required": [
    "hotel_id"
  ],
  "title": "get_hotel_photosArguments"
}

Output Schema

{
  "type": "object",
  "properties": {
    "language": {
      "description": "Language of the returned texts",
      "title": "Language",
      "type": "string"
    },
    "photos": {
      "items": {
        "$ref": "#/$defs/Photo"
      },
      "title": "Photos",
      "type": "array"
    }
  },
  "required": [
    "language",
    "photos"
  ],
  "$defs": {
    "Photo": {
      "additionalProperties": true,
      "properties": {
        "id": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "title": "Id"
        },
        "url": {
          "title": "Url",
          "type": "string"
        },
        "caption": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "title": "Caption"
        },
        "is_cover": {
          "anyOf": [
            {
              "type": "boolean"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "title": "Is Cover"
        }
      },
      "required": [
        "url"
      ],
      "title": "Photo",
      "type": "object"
    }
  },
  "title": "PhotosResult"
}

Community

Rate this Server

Evidence

Recent observations

verifiedversion not recorded4 tools