Booking MCP Server
Booking.com MCP Server
ホステッドの Model Context Protocol (MCP) サーバーで、Claude、Cursor、Windsurf、その他のあらゆる MCP クライアントに、読み取り専用の Booking.com ツールを 2 つ提供します。目的地と日付で滞在を検索でき、豊富なフィルターに対応しています。また、単一の物件を完全に読み取ることもできます。すべて構造化された JSON として返され、Booking.com アカウントもホスティングも不要です。
ログアウトした訪問者が閲覧できる Booking.com の公開物件ページを読み取ります。
https://mcp.hasdata.com/api/mcp?apis=booking
目次
Related MCP server: Hotels MCP Server
必要なもの
必要なのは、MCPクライアントと、ダッシュボードで作成できるHasData APIキーです。カード不要で無料作成でき、トライアルでは10クレジットレートで100回の呼び出しが利用できます。これはリモートサーバーのため、最も簡単な方法はURLとx-api-keyヘッダーを使うことです。コンテナを実行する必要もなく、フローの中にBooking.comアカウントは一切登場しません。stdioのみをサポートするクライアントは、npmでは@hasdata/booking-mcp、PyPIではhasdata-booking-mcpとして公開されている薄いランチャーを介してアクセスします。下記を参照してください。
クイックスタート
サーバーURLはすべてのクライアントで同じです。Claude CodeとClaude Desktopで実際に動作確認しています。他のブロックは、各クライアントが公式に文書化しているリモートサーバーの形式に従っています。
フィールド | 値 |
URL |
|
トランスポート | HTTP, streamable |
認証ヘッダー |
|
OAuthに対応したクライアントは、同じURLをコネクタとして追加し、設定ファイルにキーを書かずにサインインできます。
claude mcp add --transport http booking "https://mcp.hasdata.com/api/mcp?apis=booking" \
--header "x-api-key: HASDATA_API_KEY"設定 → コネクタ → カスタムコネクタの追加 の順に進み、https://mcp.hasdata.com/api/mcp?apis=booking を貼り付けてサインインします。
設定ファイルを使う方法では、Claude Desktopはローカル(stdio)サーバーのみを読み込むため、リモートサーバーにはstdioランチャー経由で接続します。@hasdata/booking-mcpパッケージがそのランチャーで、環境変数からキーを読み取ります。claude_desktop_config.jsonに次を追加してください:
{
"mcpServers": {
"booking": {
"command": "npx",
"args": ["-y", "@hasdata/booking-mcp"],
"env": { "HASDATA_API_KEY": "YOUR_KEY" }
}
}
}Nodeの代わりにPythonを使う場合は、ランチャーをPyPIパッケージに置き換えます。uvxなら手動インストールなしで実行できます:
{
"mcpServers": {
"booking": {
"command": "uvx",
"args": ["hasdata-booking-mcp"],
"env": { "HASDATA_API_KEY": "YOUR_KEY" }
}
}
}全プロジェクトで使うには~/.cursor/mcp.jsonを、1つのプロジェクトだけなら.cursor/mcp.jsonを使用します:
{
"mcpServers": {
"booking": {
"url": "https://mcp.hasdata.com/api/mcp?apis=booking",
"headers": { "x-api-key": "HASDATA_API_KEY" }
}
}
}~/.codeium/windsurf/mcp_config.jsonを使用します。Windsurfはフィールド名をurlではなくserverUrlと呼びます:
{
"mcpServers": {
"booking": {
"serverUrl": "https://mcp.hasdata.com/api/mcp?apis=booking",
"headers": { "x-api-key": "HASDATA_API_KEY" }
}
}
}ワークスペース内の.vscode/mcp.jsonを使用します:
{
"servers": {
"booking": {
"type": "http",
"url": "https://mcp.hasdata.com/api/mcp?apis=booking",
"headers": { "x-api-key": "HASDATA_API_KEY" }
}
}
}プロンプト例
プロンプトであり、コードではありません。いずれかを貼り付けると、エージェントが自らツールを選択します。各プロンプトには必要な呼び出し回数が注記されています。成功した呼び出しは毎回10クレジット消費するためです。
パリのホテルを9月15日から18日まで大人2人で検索し、その滞在で$700以下の高評価トップ10を教えて。
1回の呼び出しで10クレジット。価格、レビュースコア、場所は検索結果に含まれます。
トップの結果を取得し、その詳細をすべて取得してください:設備、ハウスルール、客室オプション、カテゴリー別評価。
1回の呼び出しで10クレジット。これらは物件ページにあり、詳細ツールがURLと日付で読み取ります。
4つ星で無料キャンセル対応、中心部に近いパリのホテルを検索し、価格とレビュースコアを一覧にして。
1回の呼び出しで10クレジット。星評価、キャンセルポリシー、距離は同じ1リクエスト内のフィルターです。
同じ日付で、パリの最安宿泊施設とローマの最安宿泊施設を比較して。
2回の呼び出しで20クレジット。都市ごとに1回の検索です。
物件ツールには検索と同じ日付とゲスト人数が必要です。利用可能状況と価格は期間に依存するためです。候補を絞り込むための検索1回と、3件の物件に対する詳細呼び出しを行う場合、検索1回+物件呼び出し3回になります。
ツール
読み取り専用のツールが2つあります。以下のサンプルは実際の呼び出しから抜粋したもので、価格は常に変動しています。形を掴むためのものとして見てください。各ツール名はエンドポイントのリファレンスにリンクしており、完全なフィールド一覧が記載されています。
サンプルはペイロードであり、レスポンス全体ではありません。tools/callの結果にはテキストブロックが1つ含まれ、そのテキスト自体がurl、status、text、jsonを持つJSONで、スクレイピングされたデータはjsonの下にあります。生のJSON-RPCレスポンスからは、result.content[0].textをパースした後、その中の.jsonにアクセスします。チャットクライアントはこれを自動的に展開しますが、エンドポイントに直接接続するコードでは手動で行う必要があります。
Booking.comの検索結果を取得
hasdata_booking_search_getBookingSearchResults
目的地と日付に基づく宿泊施設の1ページ分を返します。
パラメーター | 型 | 必須 | 備考 |
| string | はい | 目的地。例: |
| string | はい |
|
| number | はい | ゲストの構成。子供がいない場合は |
| string | カンマ区切りの年齢。 | |
| string |
| |
| array | 物件タイプ、星評価、ゲストスコアの区分 | |
| array | 設備、客室内設備、キャンセル条件のフィルター | |
| number | 宿泊全体の価格帯 | |
| number | 1ページあたり約25件。次のページは |
リファレンスには、距離、食事、バリアフリー、ベッドの好み、旅行グループなど、完全なフィルターセットが記載されています。
searchInformation、results配列、そしてpage、totalResults、totalPagesを含むpaginationを返します。各結果には、hotelId、title、url、提供されているroomとbedTypes、locationオブジェクト、policiesオブジェクト、priceオブジェクト、星のrating、score、count、テキストラベルを持つreviewsオブジェクト、そしてphotoが含まれます。
price内の割引フィールドは、アップストリームのキーを反映してdicsount(dicsountRawとdicsountParsed)と綴られています。discountではなく、その綴りで読み取ってください。また、ratingは公式の星評価で、reviews.scoreは10点満点のゲストスコアであり、2つの異なる数値です。
{
"hotelId": 50724,
"title": "Hôtel du Jardin des Plantes",
"url": "https://www.booking.com/hotel/fr/timjardindesplantes.html",
"room": "Comfort Double Room",
"location": { "city": "Paris", "address": "5 rue Linné", "mainDistance": "0.9 miles from downtown", "centrallyLocated": true },
"policies": { "freeCancellation": true, "noPrepayment": true },
"price": { "pricePerStayParsed": 451.36, "priceBeforeDiscountParsed": 885.03, "dicsountParsed": 433.66, "currency": "USD" },
"rating": 3,
"reviews": { "score": 7.5, "count": 1721, "text": "Good" }
}Booking.comの物件詳細を取得
hasdata_booking_place_getBookingPlaceDetails
1件の物件を、そのURLと滞在期間に基づいて完全に返します。
パラメーター | 型 | 必須 | 備考 |
| string | はい | Booking.comの物件URL。検索結果の |
| string | はい |
|
| number | はい | ゲスト構成。検索ツールと同じ意味 |
| string | カンマ区切りの年齢。 |
ページの内容を1つのフラットなオブジェクトではなくセクションとして返します:overview(id、title、propertyType、構造化されたaddress、description、highlights、mostPopularFacilities、photos)、bookingDetails(価格の基準となる期間と通貨)、利用可能なスイートのrooms配列(各要素にはname、beds、facilities、価格付きのvariantsが含まれます)、facilitiesリスト、houseRules、カテゴリ別スコアのratings配列、reviews、そしてquestionsAndAnswers。
{
"overview": {
"id": "50724",
"title": "Hôtel du Jardin des Plantes",
"propertyType": "HOTEL",
"address": { "country": "France", "zipcode": "75005" },
"mostPopularFacilities": ["Non-smoking rooms", "Free Wifi", "24-hour front desk"]
},
"bookingDetails": { "checkIn": "2026-09-15", "checkOut": "2026-09-18", "adults": 2, "rooms": 1, "currency": "USD" },
"ratings": [
{ "label": "Average", "value": 7.5, "votes": 1721 },
{ "label": "Cleanliness", "value": 7.8 }
]
}エラーと失敗パス
ツール呼び出しでHTTPエラーコードがクライアントに返ることはほとんどありません。MCPレイヤーは200で応答し、失敗内容を結果の中に入れ、isErrorをtrueに設定して、理由をテキストとして返します。エージェントは、ステータス行を期待する場所でメッセージを読み取ります。
誤ったキーは、接続失敗ではなくツール出力として表面化します。 tools/listは空でない任意のキーを受け入れ、両方のツールを返すため、クライアントはハンドシェイクを完了して緑色を示します。その後の最初のツール呼び出しで、isError: trueとテキストHasData API error: 401 Unauthorizedが返ってきます。フローのそれ以前には問題を報告するものがないため、この文字列に注意してください。
キーが存在しない場合は、唯一の実際のHTTPエラーになります。 認証はすべてのツールより前に実行され、接続自体が401で失敗します。CORSヘッダーが存在するため、ブラウザクライアントは不透明なネットワーク障害ではなくステータスを読み取ります。
ツールのスキーマに違反する引数は、スクレイピングになる前に拒否されます。 サーバーはisError: trueとテキストMCP error -32602: Input validation errorで応答し、問題のあるフィールドを指定します。childrenAgesが対応しないchildrenの数、またはチェックイン以前のチェックアウトは、ここで検出されます。
空室のない検索は、空のresults配列を持つ成功結果を返します、エラーではありません。空室がない目的地と期間でも、requestMetadata.statusがokに設定されて返ってきます。反復処理の前に配列の長さを確認してください。
解決できない物件URLは400を返します。requestMetadata.statusはerrorに設定されます。
データを含む結果には、サポートで引用する価値のある requestMetadata.id も含まれます。
料金、無料枠、制限
各Booking.comツールは、成功した呼び出し1回につき10クレジットを消費します。レスポンスのサイズによって料金は変わりません。25件の滞在先が含まれる検索ページも、2件だけのページも同じコストです。
無料トライアルはカード不要で30日間1,000クレジットで、Booking.comの呼び出し100回分に相当します。その後も、アクティブなアカウントは残高が100を下回るたびに毎日100クレジットが補充されるため、利用量の少ないエージェントであれば無料枠で無期限に稼働できます。
有料プランは月額49ドルからで、200,000クレジット(20,000回の呼び出し)を含みます。単価は利用量に応じて下がり、エントリープランでは1,000回の呼び出しあたり2.45ドル、Businessでは0.99ドル、Growthでは0.83ドル、最大の高容量プランでは0.75ドルです。
また、プランによって同時実行数も決まります。無料トライアルは同時に1リクエスト、Startupは15、Businessは30、Growthは50、高容量プランは200〜1,500です。無人で動作するものでは、オーバーフロー(超過)のケースを防御的に処理してください。
200以外のステータスで返ってきたリクエストは課金されません。成功しても結果が見つからなかった呼び出しも、やはり1回の呼び出しです。
ツールの選択
apis クエリパラメータは、エージェントが参照できるツールを決定します。ツールが少ないほど、ツール定義に消費されるコンテキストが減り、モデルが誤ったツールを選択する可能性も低くなります。
?apis=booking the two tools in this repo
?apis=booking,airbnb add Airbnb stays
?apis=booking,google_travel add Google Hotels and Flightsこのパラメータは、booking のようなプロバイダー名や、booking_search のような個別のAPI名を受け取ります。スペルミスのある名前は無視されます。すべての名前が間違っている場合、リクエストは400で失敗し、レスポンス本文には認識できなかった名前と有効な値の両方が一覧表示されます。パラメータを省略すると、同じエンドポイントでHasDataの全57ツールが公開されます。
比較
Booking.com自身のプログラムであるDemand APIとアフィリエイトパートナーネットワークは、予約を送って報酬を得る承認済みパートナー向けのものであり、公開市場を読むためのセルフサービス手段ではありません。滞在先の検索や任意の物件の読み取りには、公開ページをスクレイピングする方法が適しており、このサーバーはそれを安定したスキーマの背後で実現しています。
Booking.com パートナープログラム | このサーバー | |
目的 | 承認済みアフィリエイトとして予約を送る | 公開市場を読む |
アクセス | パートナーの承認 | 1つのキーと1つのURL |
市場全体の検索 | パートナー条件内 | 可能(豊富なフィルター付き) |
セットアップ | ビジネス向けオンボーディング | 不要 |
出力 | パートナーフィード | 構造化JSON、価格とスコアは解析済み |
このサーバーが行わないこと。 予約、支払い、パートナーコミッション、アカウントデータは一切扱いません。ログアウトした訪問者がBooking.comで見られるものだけを読み取ります。
FAQ
公式のBooking.com MCPサーバーはありますか?
Booking.comは公式のものを公開していません。このサーバーはHasDataが保守しており、公開ページを読み取るため、Booking.comのアカウントは不要です。
Booking.com MCPサーバーとは何ですか?
Booking.comのデータを、AIクライアントが呼び出せるツールとして公開するサーバーです。クライアントはModel Context Protocolを介してツール呼び出しを送信し、サーバーがデータを取得して構造化JSONを返し、モデルがその結果を処理します。このサーバーは2つのツールを公開し、リモートで動作します。
Booking.comのアカウントやパートナー承認は必要ですか?
いいえ。必要な認証情報はあなたのHasDataキーだけです。ツールは公開されているBooking.comのページを読み取るため、パートナー向けオンボーディングはありません。
宿泊施設ツールに日付が必要なのはなぜですか?
空室状況、部屋のオプション、価格はすべて滞在期間に依存するためです。検索時に指定したものと同じ checkInDate、checkOutDate、ゲスト数を渡すと、詳細情報はその期間を反映します。
ratingとreview scoreの違いは何ですか?
rating は宿泊施設の公式の星評価です。reviews.score は10点満点中のゲストレビュースコアです。3つ星のホテルでもゲストスコアが9.0のことがあるため、意図した方を読み取ってください。
他のHasData APIと併用できますか?
はい。apis パラメータはリストを受け取り、?apis=booking,airbnb と指定すると、エージェントはBooking.comに加えてAirbnbも利用できます。パラメータを省略すると、すべてのツールを利用できます。
HasDataはBooking.comと提携していますか?
いいえ。HasDataは独立したサービスであり、Booking.comと提携しておらず、Booking.comの承認やスポンサーを受けているわけでもありません。Booking.comはそれぞれの所有者の商標です。
コンプライアンスと個人データ
HasDataは公開されているデータのみにアクセスします。プラットフォームの利用規約が自動アクセスを制限している場合があり、コンプライアンスの遵守はお客様自身の責任です。収集するデータに個人情報が含まれる場合は、GDPR、CCPA、またはお客様の管轄区域の同等の規則に基づく正当な根拠があることを確認してください。
HasDataリンク
プロダクトページとリクエストビルダー | |
サーバードキュメント | |
全57ツールを1つのサーバーで | |
クライアントのウォークスルー | |
その他すべてのスクレイピング対象 | |
プランとクレジット料金 | |
キーと利用状況 | |
npmのNodeランチャー | |
PyPIのPythonランチャー |
開発
このリポジトリは、リモートサーバーの設定情報とドキュメントです。ビルド手順はなく、コンテナ化するものもありません。
test/ 内のテストは、ツール契約を検証します。これは、このリポジトリへのコミットなしでも壊れ得る部分です。テストは、?apis=booking が正確に2つのツールを返すこと、すべてのツールが必須パラメータを宣言していること、名前が変更されていないこと、使用中のキーが実際に受け入れられることを確認します。最後のチェックは実際にツールを呼び出して10クレジットを消費します。これは、正しい理由で失敗し得るカナリアのコストです。
# macOS and Linux
HASDATA_API_KEY=your_key_here npm test
# Windows PowerShell
$env:HASDATA_API_KEY="your_key_here"; npm test同じスイートは、プッシュのたびと週1回のスケジューでCIで実行されます。誰かがこのリポジトリに触れなくても上流のツールリストが変更される可能性があるためです。失敗は、ツールリストが変更されたか、キーが機能しなくなったか、エンドポイントに到達できなかったことを意味し、アサーションメッセージがその原因を示します。
コントリビューション
ツールの表とレスポンスサンプルの修正が最も有用なコントリビューションです。これらの部分はズレやすいためです。実行した呼び出しと取得したレスポンスを含めてください。フォークからのプルリクエストでは、スイートがキーなしで実行され、ライブチェックはレッドになる代わりにスキップされます。
ライセンス
MIT。 LICENSE を参照してください。
Available Tools
2 toolshasdata_booking_place_getBookingPlaceDetailsbooking_place: GET /AInspect
Get Booking Hotel Details
Fetches a single Booking.com property by its full URL for the given stay dates (checkInDate / checkOutDate) and guest composition (rooms, adults, children with ages). Returns the property identity (hotelId, title, address, coordinates), policies (free cancellation, no prepayment, child/pet stays), price, rating and review summary, photos, and the list of available room suites for the requested window. Use to enrich property listings with real-time availability and pricing, monitor a specific competitor hotel over time, validate amenities and photos before displaying venue details to end users, or fetch full details after discovering the property URL via the Booking Search endpoint.
| Name | Required | Description | Default |
|---|---|---|---|
| url | Yes | Full Booking.com URL of the property page. Only `booking.com` and `www.booking.com` hosts are accepted. | |
| rooms | Yes | Number of rooms to book. | |
| adults | Yes | Number of adult guests across all rooms. | |
| children | Yes | Number of child guests across all rooms (0–10). Pass `0` if there are no children. | |
| currency | No | Currency of the prices returned in the response. Use `hotelCurrency` to keep each property's native currency. Provide one exact documented value (52 allowed), e.g. `hotelCurrency`, `usd`. | |
| language | No | Language of the Booking.com interface and localized fields in the response. | |
| checkInDate | Yes | Check-in date in `YYYY-MM-DD` format. Must be in the future and earlier than `checkOutDate`. | |
| checkOutDate | Yes | Check-out date in `YYYY-MM-DD` format. Must be later than `checkInDate`. | |
| childrenAges | No | Comma-separated list of child ages, one entry per child (each `0`–`17`). Required when `children > 0` and the number of ages must equal `children`. Example: `1,3,7` |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the behavioral burden. It discloses that this is a read-style 'Fetches' operation, that it returns real-time availability and pricing, and it summarizes the outputs including policies, ratings, photos, and room suites. It does not mention limiting behaviors such as rate handling or response failure conditions, but it is substantially transparent for a GET-like lookup.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a well-organized paragraph: what it does, what it returns, and when to use it. The first line 'Get Booking Hotel Details' is slightly redundant with the name, but the rest of the description avoids unnecessary noise and information is front-loaded.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema and no annotations, the description compensates by listing the key return categories and explaining enriched use cases. It could include more detail about exact response structure or error conditions, but for the AI agent the combination of schema, use cases, and return summary is enough to select and invoke the tool correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema provides full descriptions for all 9 parameters, so the schema does most of the parameter work. The description adds context by tying the inputs to stay dates and guest composition, and by mentioning the URL origin flow from search, but it does not deepen the individual parameter semantics.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a specific verb and resource: 'Fetches a single Booking.com property by its full URL.' It names the key inputs and outputs and distinguishes itself from the sibling by being a detail lookup for an already-known property URL rather than a discovery/search call.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives concrete use cases: enrich property listings, monitor a competitor hotel, validate amenities/photos, and fetch details after a search. It does not explicitly state when not to use it versus the search endpoint, but it clearly implies this tool is for known URLs and detailed property data.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
hasdata_booking_search_getBookingSearchResultsbooking_search: GET /AInspect
Get Booking Search Results
Searches Booking.com for accommodations by destination keyword and stay dates (checkInDate / checkOutDate) with guest composition (rooms, adults, children with ages) and rich filtering: property type, star rating, review score, hotel and room facilities, distance from center, reservation policy, bed preference, travel group, online payment, accessibility, plus optional price range and bedroom/bathroom counts. Pagination is page-based with 25 results per page; locale is controlled by language and currency. Returns each hotel's hotelId, title and Booking URL, location info (city, address, coordinates, distance to center / nearest beach), policies (free cancellation, no prepayment, child/pet stays), price (per stay, before discount, discount, currency), rating, review summary and main photo. Use to power travel-planning agents, OTA price/inventory monitoring, hotel competitor analysis, lead-generation in the hospitality vertical, or to feed hotelId / URL into the Booking Place endpoint for full property details.
| Name | Required | Description | Default |
|---|---|---|---|
| page | No | Page number of the search results. Booking.com returns 25 results per page; pass `2` for results 26–50, `3` for 51–75, etc. | |
| sort | No | Sort order applied by Booking.com to the results page. | |
| rooms | Yes | Number of rooms to book. | |
| adults | Yes | Number of adult guests across all rooms. | |
| keyword | Yes | Free-text destination query. Usually a city, region or neighborhood (e.g. `Paris`, `Manhattan, New York`); a specific property name is also accepted. | |
| meals__ | No | Filter by available meal plans. Multiple values are combined with OR. | |
| bedrooms | No | Minimum number of bedrooms in the property. | |
| children | Yes | Number of child guests across all rooms (0–10). Pass `0` if there are no children. | |
| currency | No | Currency of the prices returned in the response. Use `hotelCurrency` to keep each property's native currency. Provide one exact documented value (52 allowed), e.g. `hotelCurrency`, `usd`. | |
| language | No | Language of the Booking.com interface and localized fields in the response. | |
| rating__ | No | Filter by official star rating. Multiple values are combined with OR. | |
| bathrooms | No | Minimum number of bathrooms in the property. | |
| price_max_ | No | Maximum total price for the stay, in the requested `currency`. Must be `>= 20` and greater than `price[min]`. Required if `price[min]` is omitted. | |
| price_min_ | No | Minimum total price for the stay, in the requested `currency`. Must be `>= 10`. Required if `price[max]` is omitted. | |
| checkInDate | Yes | Check-in date in `YYYY-MM-DD` format. Must be in the future and earlier than `checkOutDate`. | |
| checkOutDate | Yes | Check-out date in `YYYY-MM-DD` format. Must be later than `checkInDate`. | |
| childrenAges | No | Comma-separated list of child ages, one entry per child (each `0`–`17`). Required when `children > 0` and the number of ages must equal `children`. Example: `1,3,7` | |
| facilities__ | No | Filter by property-level facilities. Multiple values are combined with OR. | |
| reviewScore__ | No | Filter by minimum guest review score bucket. Multiple values are combined with OR. | |
| travelGroup__ | No | Filter by travel-group oriented stay options. Multiple values are combined with OR. | |
| propertyType__ | No | Filter by property type. Multiple values are combined with OR. | |
| bedPreference__ | No | Filter by bed configuration. Multiple values are combined with OR. | |
| onlinePayment__ | No | Filter by online payment options. | |
| roomFacilities__ | No | Filter by in-room facilities. Multiple values are combined with OR. | |
| reservationPolicy__ | No | Filter by reservation flexibility. Multiple values are combined with OR. | |
| roomAccessibility__ | No | Filter by in-room accessibility features. Multiple values are combined with OR. | |
| distanceFromCenter__ | No | Filter by distance from the destination center. Multiple values are combined with OR. | |
| propertyAccessibility__ | No | Filter by property-level accessibility features. Multiple values are combined with OR. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden, and it does a good job: it reports that this is an external Booking.com search, that pagination is page-based with 25 results per page, that language and currency control locale, and it enumerates the returned hotel data. It does not cover possible errors, rate limits, or authorization requirements, but for a read-oriented search tool the behavioral disclosure is sufficient.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is long, but given the tool's 28 parameters and rich return payload, nearly every sentence adds useful information. It is front-loaded with the core search behavior and filters before covering output and use cases; only the list of use cases is somewhat optional, but it still helps an agent choose the tool.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description provides a complete picture for selecting and invoking the tool: required search inputs, available filters, pagination, locale handling, output contents, and the relationship with the Booking Place endpoint. Since there is no output schema, the explicit enumeration of return fields is especially valuable and covers what an agent needs to understand the result shape.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema already documents all 28 parameters with 100% coverage, so the baseline is 3. The description restates filter categories and some behaviors (e.g., guest composition, price range, pagination), but it adds limited semantic value beyond what the schema already provides for each parameter.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states a specific action ('Searches Booking.com for accommodations') and a specific resource (destination keyword, stay dates, guest composition). It also differentiates itself from the sibling tool by noting that the returned `hotelId` / URL can be fed into the Booking Place endpoint for full property details.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives strong usage context: it is for travel-planning, price/inventory monitoring, competitor analysis, and lead generation, and it points to the Booking Place endpoint as a downstream step for full property details. However, it does not explicitly state when NOT to use this tool or offer a direct comparison between the search and place endpoints, so the alternative guidance is implied rather than fully explicit.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections. Dates show when Glama detected each change.
2 tool updates
v1.0.0- First observed
hasdata_booking_place_getBookingPlaceDetails - First observed
hasdata_booking_search_getBookingSearchResults
TDQS
Search and place details have clear boundaries: search accepts destination criteria and returns property lists, while place details consumes a single property URL and returns full property information. The overlap in returned pricing/rating fields is expected, not confusing.
Both tool names follow the same hasdata_booking_<endpoint>_get... pattern, using place and search as distinct resource endpoints. The naming is consistent across the set, even though the operation suffix uses camelCase.
Two tools is a minimal but reasonable set for a search-then-detail workflow. However, the count sits at the thin edge of the expected 3-15 tool range, leaving little room for exploration beyond the two core endpoints.
The tool surface covers the intended read-only Booking.com workflow: search for accommodations, then fetch a single property's full details. There are no dead ends for travel-planning or OTA data monitoring use cases.
Maintenance
Related MCP Connectors
Hotel booking MCP server. Search, book, and manage reservations across 250K+ properties worldwide.
AI marketplace — flights, tours, activities, transport & more via MCP. No auth required.
Live Booking.com hotel prices, plus per-country pricing for rate-parity monitoring.
Airbnb stays by location and dates, and full listing details, as structured JSON.
Related MCP Servers
- AlicenseBqualityDmaintenanceEnables users to search Airbnb listings with advanced filtering options and retrieve detailed property information through an MCP server interface.22,792MIT
- FlicenseNot gradedqualityDmaintenanceA Model Context Protocol (MCP) server that allows LLMs to search for hotels and destinations using the Booking.com API.28-

Dida Hotel MCPofficial
AlicenseNot gradedqualityBmaintenanceEnables AI agents to search and book hotels globally with real-time pricing and inventory from over 2 million properties.81MIT- FlicenseNot gradedqualityCmaintenanceProvides two MCP servers: one for searching real-time flight prices via FlightAPI.io and another for hotel prices via Booking.com through RapidAPI, both accessible over Streamable HTTP.-
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/HasData/booking-mcp'
If you have feedback or need assistance with the MCP directory API, please join our Discord server