Airbnb MCP Server について
Airbnb MCP Server は、MCP Bundle(MCPB)形式で提供される MCP サーバーで、Airbnb の宿泊施設を検索し、物件の詳細を取得します。AI アシスタントから宿泊先を調べたいユーザーに適しています。ホスト型の openbnb.ai も案内されています。
主な機能
- 01地域・日付・人数による物件検索
- 02価格帯と物件タイプによる絞り込み
- 03物件詳細、設備、ハウスルールの取得
- 04設定によるジオコーディングの無効化
活用シーン
- 01AI アシスタント上で都市ごとの宿泊先を比較
- 02特定の物件の設備や宿泊ルールを確認
MCP 対応
本プロジェクトは、airbnb_search と airbnb_listing_details の 2 つのツールを MCP クライアントに公開する MCP サーバーです。
設定
ローカルサーバーの設定はどのクライアントでも共通です。コピーしてクライアントの MCP 設定ファイルに貼り付けてください。
ツール
2掲載時のツール一覧 · 3 週間前に更新
| パラメーター | 型 | 必須 | 説明 |
|---|---|---|---|
| location | string | はい | 検索する場所(市区町村、州など) |
| placeId | string | いいえ | Google Maps の Place ID(location パラメーターより優先) |
| checkin | string | いいえ | チェックイン日(YYYY-MM-DD) |
| checkout | string | いいえ | チェックアウト日(YYYY-MM-DD) |
| adults | number | いいえ | 大人の人数 |
| children | number | いいえ | 子どもの人数 |
| infants | number | いいえ | 乳幼児の人数 |
| pets | number | いいえ | ペットの数 |
| minPrice | number | いいえ | 宿泊料金の下限 |
| maxPrice | number | いいえ | 宿泊料金の上限 |
| cursor | string | いいえ | ページネーションに使用する Base64 エンコード文字列 |
| propertyType | enum | いいえ | 物件タイプで絞り込み:'entire_home'(住宅・アパート全体)、'private_room'(共有住宅内の個室)、'shared_room'(相部屋・ドミトリー形式の部屋)、'hotel_room'(ホテルの客室)entire_home | private_room | shared_room | hotel_room |
| ignoreRobotsText | boolean | いいえ | このリクエストでは robots.txt のルールを無視する |
詳細
Airbnbの検索とリスティング - MCPバンドル(MCPB)
高度なフィルタリング機能と詳細な宿泊施設情報の取得に対応した、Airbnbのリスティング検索用MCPバンドルです。Model Context Protocol(MCP)サーバーをMCPバンドル(MCPB)形式でパッケージ化しているため、互換性のあるAIアプリケーションに簡単にインストールして利用できます。
🚀 ローカルサーバーを実行したくない場合は、openbnb.aiをお試しください
👉 openbnb.aiは、ローカルでのセットアップなしで同じ問題(Airbnbのリスティング検索)を解決する、ホスト型MCPサーバーです。
このサーバーをご自身でインストールして実行する手間を避けたい場合は、**openbnb.ai**をご利用ください。MCPクライアントから直接接続できる、独立した完全ホスト型の代替サービスです。このオープンソースサーバーが提供する機能に加えて、次の機能も利用できます。
- ✅ セットアップ不要 — Nodeも
npxも設定ファイルも不要で、更新を管理する必要もありません - ✅ 高度なフィルター — ここで紹介する基本ツールよりも充実した検索コントロールを利用できます
- ✅ MCP UI — 結果をプレーンテキストだけでなく、インタラクティブなUIコンポーネントで閲覧できます
- ✅ 管理・メンテナンス済み — サービスの稼働を任せられます
セットアップ手順とMCPクライアントの接続情報は、**openbnb.ai**をご覧ください。
オープンソースサーバーをセルフホストする場合は、以下をお読みください。
特長
🔍 高度な検索機能
- 都市、州、地域に対応した場所ベースの検索
- クライアント側のジオコーディングによる海外の場所の検索。米国外のクエリ(例:「Paris, France」「Copenhagen, Denmark」)でも、正しい都市の検索結果が返されます
- 正確な場所の指定に使えるGoogle Maps Place IDとの連携
- 一軒家全体、個室、相部屋、ホテルの部屋を対象にした宿泊施設タイプのフィルタリング
- チェックイン日とチェックアウト日を指定できる日付フィルタリング
- 大人、子ども、乳幼児、ペットを指定できる宿泊人数の設定
- 最低価格と最高価格を指定できる価格帯のフィルタリング
- 大量の検索結果を閲覧するためのページネーション対応
🏠 宿泊施設の詳細情報
- アメニティ、ポリシー、特長を含む包括的なリスティング情報
- 座標や周辺地域の詳細を含む場所情報
- 予約を判断する際に役立つハウスルールとポリシー
- 宿泊施設の説明と主な特長
- 予約しやすい、Airbnbリスティングへの直接リンク
🛡️ セキュリティとコンプライアンス
- テスト用に設定で無視できる、robots.txtへの準拠
- リクエストの停止を防ぐタイムアウト管理
- 詳細なログ記録を備えた強化されたエラー処理
- レート制限への配慮と節度あるAPIの利用
- MCPBユーザー設定による安全な設定
インストール
Claude Desktopの場合
この拡張機能はMCPバンドル(.mcpb)ファイルとしてパッケージ化されています。インストールするには:
- 最新リリースから
.mcpbファイルをダウンロードします - ファイルを開きます — Claude Desktopにインストールダイアログが表示されます
- 必要に応じて拡張機能の設定を行います
robots.txtを無視するには、Claude Desktopの設定を開いて拡張機能に移動し、robots.txtを無視の切り替えを有効にします。
Cursor などの場合
始める前に、npx が動作するよう、デスクトップに Node.js がインストールされていることを確認してください。
-
次の場所に移動します:Cursor Settings > Tools & Integrations > New MCP Server
-
次のいずれかを
mcp.jsonに追加します:{ "mcpServers": { "airbnb": { "command": "npx", "args": [ "-y", "@openbnb/mcp-server-airbnb" ] } } }すべてのリクエストで robots.txt を無視するには、
--ignore-robots-txt引数を使った次のバージョンを使用します。{ "mcpServers": { "airbnb": { "command": "npx", "args": [ "-y", "@openbnb/mcp-server-airbnb", "--ignore-robots-txt" ] } } } -
再起動します。
設定
この拡張機能では、次のオプションをユーザーが設定できます。
robots.txt を無視する
- タイプ:ブール値(チェックボックス)
- デフォルト:
false - 説明:Airbnb へのリクエスト時に robots.txt の制限を回避します
- 推奨事項:テスト目的で必要な場合を除き、無効のままにしてください
サードパーティのジオコーディングを無効にする
- タイプ:ブール値(チェックボックス)
- 環境変数:
DISABLE_GEOCODING - デフォルト:
false - 説明:Photon/Nominatim によるジオコーディングの手順をスキップし、Airbnb に場所の文字列を独自に解決させます。有効にすると、PR 前の動作に戻り、すべての検索は
airbnb.comのみに送信され、サードパーティへの呼び出しは発生しません。 - 推奨事項:サードパーティへの外部通信を一切発生させたくない場合を除き、無効のままにしてください。有効にすると、米国外の検索で不正確な結果が返されることがあります。外部サービスを参照してください。
ツール
airbnb_search
包括的なフィルタリングオプションを使って、Airbnb のリスティングを検索します。
パラメーター:
location(必須):検索する場所(例:「San Francisco, CA」)。placeIdを指定せずに入力した場合、サーバーはクライアント側で Photon/Nominatim を介してこの文字列をジオコーディングします。外部サービスを参照してください。placeId(任意):Google Maps の Place ID。locationを上書きし、クライアント側のジオコーディングを完全にスキップします(サードパーティへの呼び出しは発生しません)。checkin(任意):YYYY-MM-DD 形式のチェックイン日checkout(任意):YYYY-MM-DD 形式のチェックアウト日adults(任意):大人の人数(デフォルト:1)children(任意):子どもの人数(デフォルト:0)infants(任意):乳幼児の人数(デフォルト:0)pets(任意):ペットの数(デフォルト:0)minPrice(任意):1泊あたりの最低料金maxPrice(任意):1泊あたりの最高料金cursor(任意):検索結果を閲覧するためのページネーションカーソルpropertyType(任意):物件タイプで絞り込みます —entire_home、private_room、shared_room、またはhotel_roomignoreRobotsText(任意):このリクエストで robots.txt を上書きします
戻り値:
- 物件の詳細、料金、直接リンクを含む検索結果
- 追加の検索結果を閲覧するためのページネーション情報
- 参照用の検索 URL
airbnb_listing_details
特定の Airbnb リスティングの詳細情報を取得します。
パラメーター:
id(必須):Airbnb リスティング IDcheckin(任意):YYYY-MM-DD 形式のチェックイン日checkout(任意):YYYY-MM-DD 形式のチェックアウト日adults(任意):大人の人数(デフォルト:1)children(任意):子どもの人数(デフォルト:0)infants(任意):乳幼児の人数(デフォルト:0)pets(任意):ペットの数(デフォルト:0)ignoreRobotsText(任意):このリクエストで robots.txt を無視します
戻り値:
- 以下を含む物件の詳細情報:
-
座標を含む所在地の詳細
-
seeAllAmenitiesGroupsとしてのアメニティと設備。アメニティのカテゴリをキーとするオブジェクトなので、カテゴリを直接指定できます。Airbnb で取り消し線付きで表示されるアメニティは、独自の"Not included"カテゴリに含まれます。{ "seeAllAmenitiesGroups": { "Bathroom": "Hair dryer", "Heating and cooling": "AC - split type ductless system, Heating", "Not included": "Dryer, Hot water" } } -
ハウスルールとポリシー
-
物件の特徴と説明
-
リスティングへの直接リンク
-
技術的な詳細
アーキテクチャ
- ランタイム:Node.js 18+
- プロトコル:stdio トランスポート経由の Model Context Protocol(MCP)
- フォーマット:MCP Bundle(MCPB)v0.3
- 依存関係:セキュリティと信頼性を確保するため、外部依存関係は最小限です
外部サービス
airbnb.com に加えて、このサーバーは位置情報のクエリを正確な地図の境界ボックスに変換するため、2 つのサードパーティサービスにジオコーディングのリクエストを送信します。これにより、多くの米国外のクエリで誤った結果を生成する Airbnb 独自のサーバー側ジオコーダーを回避します(例:「Paris, France」がヴァンデ県に、「Copenhagen, Denmark」がウィスコンシン州に位置付けられます)。
| サービス | エンドポイント | 用途 | 備考 |
|---|---|---|---|
| Photon | photon.komoot.io | プライマリジオコーダー。placeId を指定しないすべての検索で呼び出されます | Komoot がホストする無料の OSM ベースサービスです。検索ごとに 1 回リクエストします。 |
| Nominatim | nominatim.openstreetmap.org | フォールバックジオコーダー。Photon が境界ボックスを返さなかった場合にのみ呼び出されます | OSMF の利用ポリシーの対象です(最大で約 1 リクエスト/秒)。 |
各検索では、リクエストに含まれる location 文字列のみをジオコーダーに送信します。他のリクエストフィールド、IP ジオロケーション、トラッキング識別子は送信しません。もちろん、location 文字列はユーザーが入力した文字列と同じです。
**オプトアウト:**ジオコーダーをスキップする方法は 2 つあります。
- **リクエストごと:**明示的な
placeIdを指定します。placeIdが指定されている場合、サーバーはサードパーティへの呼び出しを行わず、Airbnb 独自の場所検索を直接使用します。 - **全体設定:**環境変数
DISABLE_GEOCODING=trueを設定します。サーバーは Photon/Nominatim を完全にスキップし、未加工の位置情報文字列を Airbnb に渡します。これにより、すべての検索で以前の PR 前の動作に戻り、サードパーティへの送信トラフィックが確実にゼロになります。ただし、Airbnb 独自のジオコーダーが正しく処理できない米国外の場所では、結果が不正確になります。デフォルトはfalseです。
ジオコーダーに接続できない場合、または結果が返されない場合、サーバーは以前と同様に位置情報文字列を Airbnb に直接送信します。そのため、障害時の最悪のケースでも、海外の検索結果が以前の(不正確な)動作に戻るだけで、検索そのものが完全に失敗することはありません。
エラー処理
- タイムスタンプ付きの包括的なエラーログ
- Airbnb のページ構造が変更された場合のグレースフルな縮退動作
- ネットワークリクエストのタイムアウト保護
- トラブルシューティング用の詳細なエラーメッセージ
セキュリティ対策
- デフォルトで robots.txt を遵守
- リクエストのタイムアウト制限
- 入力の検証とサニタイズ
- 環境変数の安全な取り扱い
- 機密データを保存しません
パフォーマンス
- Cheerio による効率的な HTML 解析
- 適切な場合にリクエストをキャッシュ
- メモリ使用量を最小限に抑制
- 起動と応答が高速
互換性
- プラットフォーム:macOS、Windows、Linux
- Node.js:18.0.0 以上
- Claude Desktop:0.10.0 以上
- その他の MCP クライアント:MCP 対応アプリケーションであれば利用できます
開発
ソースからビルドする
# Install dependencies
npm install
# Build the project
npm run build
# Watch for changes during development
npm run watch
テスト
# Build, then run both suites
npm test
npm test は、ビルド済みサーバーを stdio 経由で実行し、実際にツールを呼び出します。
test-extension.js— MCP ハンドシェイク、ツール一覧の取得、検索、リスティングの詳細、ジオコーディングの各経路(Photon、Nominatim へのフォールバック)test-amenities.js— 複数の公開中リスティングからアメニティを抽出し、Airbnb 上で取り消し線が引かれているアメニティが、リスティングで提供されているものとして表示されないことを確認します
どちらのテストもネットワーク経由で airbnb.com とジオコーダーにアクセスするため、接続が必要です。また、Airbnb がページ構造を変更すると失敗する場合があります。これらの変更を検出することが目的ですが、そのため無人で実行する CI のゲートには適していません。
サーバーは直接実行することもできます。
# Run with robots.txt compliance (default)
node dist/index.js
# Run with robots.txt ignored (for testing)
node dist/index.js --ignore-robots-txt
法的および倫理的な考慮事項
- Airbnb の利用規約を遵守:この拡張機能は、正当な調査と予約の支援を目的としています
- Robots.txt の遵守:この拡張機能は、デフォルトで robots.txt を尊重します
- レート制限:Airbnb のサーバーに過度な負荷をかけないよう、リクエスト頻度に配慮してください
- データの利用:正当な目的に限り、公開されている情報のみを抽出してください
サポート
- 問題:GitHub Issues でバグや機能リクエストを報告してください
- ドキュメント:リポジトリで追加のドキュメントを確認できます
- コミュニティ:MCP および MCPB の開発に関するディスカッションに参加してください
ライセンス
MIT License — 詳細は LICENSE ファイルを参照してください。
貢献
貢献を歓迎します!貢献ガイドラインをお読みのうえ、改善点についてプルリクエストを送信してください。
注:この拡張機能は Airbnb, Inc. とは提携していません。公開されている Airbnb のリスティングを検索、分析するために設計された独立したツールです。
コメント
AI アプリケーションが外部のツールやデータソースに統一的な方法で接続するためのオープンなプロトコルです。クライアントはモデルとの対話を担い、MCP サーバーはツール・リソース・プロンプトテンプレートを提供します。標準メッセージでやり取りするため、1 つのサーバーを複数のクライアントで再利用できます。