HasData Airbnb について
HasData Airbnb は、Airbnb の宿泊先を検索し、個別のリスティング詳細を取得するホスト型 MCP サーバーです。公開リスティングページから読み取り専用の構造化データを返し、Airbnb の開発者アカウントや提携承認は不要です。
主な機能
- 01場所または地図範囲で宿泊先を検索
- 02日程とゲスト数で検索を絞り込み
- 03URL からリスティング詳細を取得
- 04料金、評価、設備、ホスト情報を返却
活用シーン
- 01旅行向けに空室の宿泊先を絞り込み
- 02場所ごとの検索結果を比較
- 03リスティングの設備とホスト情報を確認
MCP 対応
リモート MCP サーバーは、リスティング検索と物件詳細という 2 つの読み取り専用 Airbnb ツールを公開します。MCP クライアントは HasData API キーを使ったストリーミング HTTP 接続、または提供される stdio ランチャーで接続できます。
設定
リモートサーバーはインストール不要です。クライアントを選んで設定をコピーするか、ワンクリックで導入できます。
https://mcp.hasdata.com/mcp?apis=airbnbclaude mcp add --transport http com-hasdata-airbnb https://mcp.hasdata.com/mcp?apis=airbnb{"mcpServers":{"com-hasdata-airbnb":{"type":"http","url":"https://mcp.hasdata.com/mcp?apis=airbnb"}}}Cursor で開く{"servers":{"com-hasdata-airbnb":{"type":"http","url":"https://mcp.hasdata.com/mcp?apis=airbnb"}}}VS Code で開く{"mcpServers":{"com-hasdata-airbnb":{"type":"http","url":"https://mcp.hasdata.com/mcp?apis=airbnb"}}}{"mcpServers":{"com-hasdata-airbnb":{"serverUrl":"https://mcp.hasdata.com/mcp?apis=airbnb"}}}コマンドはターミナルで実行し、JSON は各クライアントの MCP 設定に貼り付けて再起動します。認可が必要なサーバーは初回接続時にログインを求めます。
https://mcp.hasdata.com/mcp?apis=airbnb認証が必要ツール
2| パラメーター | 型 | 必須 | 説明 |
|---|---|---|---|
| pets | number | いいえ | ペットの数。 |
| neLat | number | いいえ | 地図のバウンディングボックスの北東角の緯度。4 つの境界ボックス座標をすべて指定すると、場所ではなくボックス内でリスティングを検索します。 |
| neLng | number | いいえ | 地図のバウンディングボックスの北東角の経度。 |
| swLat | number | いいえ | 地図のバウンディングボックスの南西角の緯度。 |
| swLng | number | いいえ | 地図のバウンディングボックスの南西角の経度。 |
| adults | number | いいえ | 大人の人数。 |
| checkIn | string | はい | リスティングのチェックイン日。 |
| infants | number | いいえ | 乳幼児の人数。 |
| checkOut | string | いいえ | リスティングのチェックアウト日。 |
| children | number | いいえ | 子どもの人数。 |
| location | string | いいえ | リスティングを検索する場所。完全な地図バウンディングボックス(neLat、neLng、swLat、swLng)を指定しない場合は必須です。 |
| nextPageToken | string | いいえ | 次のページの結果を取得するためのトークン。 |
詳細
Airbnb MCP サーバー
Claude、Cursor、Windsurf、その他のあらゆる MCP クライアントに、読み取り専用の Airbnb ツールを 2 つ提供するホスト型 Model Context Protocol(MCP)サーバーです。場所の名前や地図上のエリアから宿泊先を検索し、個別のリスティングの全情報を構造化 JSON として取得できます。Airbnb の開発者アカウントもパートナー承認も必要ありません。
ログアウト状態の訪問者が閲覧できる公開リスティングページを読み取ります。
毎月 1,000 クレジットを無料で利用でき、カードも不要です。Airbnb へのリクエスト 100 回分に相当します。
https://mcp.hasdata.com/mcp?apis=airbnb
目次
必要なもの
MCP クライアントと、ダッシュボードで取得する HasData API キーが必要です。カード不要で無料で作成でき、無料枠では 10 クレジットのレートで月に約 100 回のリクエストを利用できます。これはリモートサーバーのため、最も簡単な方法は URL と x-api-key ヘッダーを使うことです。コンテナを実行する必要はなく、手順のどこにも Airbnb の開発者アカウントは必要ありません。stdio のみを話すクライアントは、下記のとおり npm では @hasdata/airbnb-mcp、PyPI では hasdata-airbnb-mcp として公開されている軽量ランチャーを介して接続できます。
クイックスタート
サーバー URL はすべてのクライアントで同じです。Claude Code と Claude Desktop では実際に接続して使用します。その他のブロックは、各クライアントがリモートサーバー向けにドキュメントで定めている形式に従っています。
| 項目 | 値 |
|---|---|
| URL | https://mcp.hasdata.com/mcp?apis=airbnb |
| トランスポート | HTTP、ストリーミング可能 |
| 認証ヘッダー | x-api-key: HASDATA_API_KEY |
OAuth に対応しているクライアントでは、同じ URL をコネクターとして追加し、設定ファイルにキーを記述せずにサインインできます。
Claude Code
claude mcp add --transport http airbnb "https://mcp.hasdata.com/mcp?apis=airbnb" \
--header "x-api-key: HASDATA_API_KEY"
Claude Desktop
「設定」、「コネクター」、「カスタムコネクターを追加」の順に選択し、https://mcp.hasdata.com/mcp?apis=airbnb を貼り付けてサインインします。
設定ファイルを使う場合、Claude Desktop が読み込めるのはローカル(stdio)サーバーのみのため、stdio ランチャー経由でリモートサーバーに接続します。@hasdata/airbnb-mcp パッケージがこのランチャーとして機能し、キーは環境変数から読み込みます。claude_desktop_config.json に次の内容を追加します。
{
"mcpServers": {
"airbnb": {
"command": "npx",
"args": ["-y", "@hasdata/airbnb-mcp"],
"env": { "HASDATA_API_KEY": "YOUR_KEY" }
}
}
}
Node の代わりに Python を使う場合は、ランチャーを PyPI パッケージに置き換えます。uvx を使えば、手動でインストールせずに実行できます。
{
"mcpServers": {
"airbnb": {
"command": "uvx",
"args": ["hasdata-airbnb-mcp"],
"env": { "HASDATA_API_KEY": "YOUR_KEY" }
}
}
}
Cursor
すべてのプロジェクトで使う場合は ~/.cursor/mcp.json、特定のプロジェクトで使う場合は .cursor/mcp.json を使用します。
{
"mcpServers": {
"airbnb": {
"url": "https://mcp.hasdata.com/mcp?apis=airbnb",
"headers": { "x-api-key": "HASDATA_API_KEY" }
}
}
}
Windsurf
~/.codeium/windsurf/mcp_config.json。Windsurf では url ではなく serverUrl というフィールド名を使います。
{
"mcpServers": {
"airbnb": {
"serverUrl": "https://mcp.hasdata.com/mcp?apis=airbnb",
"headers": { "x-api-key": "HASDATA_API_KEY" }
}
}
}
VS Code
ワークスペース内の .vscode/mcp.json を使用します。
{
"servers": {
"airbnb": {
"type": "http",
"url": "https://mcp.hasdata.com/mcp?apis=airbnb",
"headers": { "x-api-key": "HASDATA_API_KEY" }
}
}
}
プロンプトの例
コードではなく、プロンプトです。いずれかを貼り付けると、エージェントが自分でツールを選択します。成功した呼び出しは毎回 10 クレジットを消費するため、それぞれの呼び出し回数を記載しています。
9 月 15 日から 18 日まで、オースティンで大人 2 人が泊まれる宿を検索し、1 泊 200 ドル未満で評価の高いものを 10 件教えてください。
1 回の呼び出しで 10 クレジット。評価と 1 泊あたりの料金は検索結果に含まれます。
上位の結果について、すべてのアメニティ、ゲスト数と寝室数、ホストの詳細を取得してください。
1 回の呼び出しで 10 クレジット。これらの情報は物件ページにあり、詳細ツールが URL を使って読み取ります。
オースティンとナッシュビルで、ゲスト 2 人が 3 泊する場合の 1 泊あたりの料金を比較してください。
2 回の呼び出しで 20 クレジット。各都市で 1 回ずつ検索します。
このリスティング URL について、ベッド数とバスルーム数、ホストがスーパーホストかどうかを教えてください。
1 回の呼び出しで 10 クレジット。
検索結果は、順位付けや候補の絞り込みに必要な情報に意図的に限定しています。アメニティ、ベッド、ホスト、詳細な説明は物件ツールから取得します。そのため、候補を絞り込んでから 3 件の物件を調べるプロンプトでは、検索が 1 回、物件情報の取得が 3 回必要です。
ツール
| ツール | 返される内容 |
|---|---|
hasdata_airbnb_listing_getAirbnbListings | リスティング ID と URL、タイトル、説明、座標、写真、評価とレビュー件数、バッジ、宿泊料金の合計、テキスト形式の 1 泊あたりの料金、および Airbnb が表示する場合は割引料金を含む価格オブジェクト。1 回の呼び出しにつき 10 クレジット |
hasdata_airbnb_property_getAirbnbPropertyDetails | タイトル、ゲスト数・寝室数・ベッド数・バスルーム数をテキストで記載した概要、説明、住所と座標、評価とレビュー件数、写真、宿泊可能人数、ホストのプロフィール、それぞれに利用可否フラグが付いたアメニティ、安全情報と物件に関する注意事項。価格情報はありません。1 回の呼び出しにつき 10 クレジット |
ツールは 2 つで、どちらも読み取り専用です。以下のサンプルは実際の呼び出しから抜粋したものですが、Airbnb の更新に伴って数値は変わります。データの構造を示すものとしてご覧ください。各ツール名はエンドポイントのリファレンスにリンクしており、すべてのフィールドが記載されています。
サンプルはペイロードであり、レスポンス全体ではありません。tools/call の結果にはテキストブロックが 1 つ含まれ、そのテキスト自体が url、status、text、json を含む JSON で、スクレイピングしたデータは json の下に格納されています。生の JSON-RPC レスポンスでは、パス result.content[0].text を取得して解析し、.json を参照します。チャットクライアントはこの処理を行いますが、エンドポイントに直接アクセスするコードでは行われません。
Airbnbのリスティングを取得
hasdata_airbnb_listing_getAirbnbListings
地名と日付、またはマップ上のエリアを指定して検索結果のページを取得します。
| パラメーター | 型 | 必須 | 備考 |
|---|---|---|---|
checkIn | string | はい | チェックイン日、YYYY-MM-DD |
location | string | 下記参照 | 検索する場所。例:Austin, Texas |
neLat / neLng / swLat / swLng | number | 下記参照 | マップの境界ボックスの北東と南西の角 |
checkOut | string | チェックアウト日、YYYY-MM-DD | |
adults / children / infants / pets | number | ゲストの構成。それぞれ人数を指定します | |
nextPageToken | string | 前回のレスポンスに含まれる pagination.nextPageToken |
checkIn は常に必須です。それに加えて、このツールでは location またはマップの境界ボックス全体のいずれかを指定します。境界ボックスとして認識されるのは、4つの角すべてが指定されている場合のみです。4つのうち3つだけを指定すると、指定されていない角に対して requiredIfExistsAny エラーが発生します。境界ボックスを使うと、Airbnbに地名がないエリアを検索できます。このようなエリアは地名では指定できません。
properties 配列と pagination を返します。pagination に含まれる nextPageToken と pageTokens を使って、検索結果を順に取得できます。各物件には、id、url、title、latitude、longitude、短い説明文の description、photos 配列、rating、reviews、Guest favorite や Superhost などの badges 配列、price オブジェクトが含まれます。price には、originalPrice、宿泊料金が割引されている場合の省略可能な discountedPrice、for 3 nights のような qualifier、および breakdown が含まれます。
検索結果は意図的に簡潔な内容になっています。ベッド数、バスルーム数、アメニティ、ホスト、詳細な説明はここには含まれず、以下の物件ツールで取得します。検索結果に寝室数が含まれるとは限りません。
{
"id": "17545365",
"url": "https://www.airbnb.com/rooms/17545365",
"title": "Home in East Austin",
"latitude": 30.25741,
"longitude": -97.73366,
"description": "Downtown Casa - neighborhood feel, close to it all",
"rating": 4.87,
"reviews": 601,
"badges": ["Guest favorite"],
"price": {
"originalPrice": "$607",
"discountedPrice": "$447",
"qualifier": "for 3 nights",
"breakdown": [{ "description": "3 nights x $149.00", "price": "$447.00" }]
}
}
Airbnbの物件詳細を取得
hasdata_airbnb_property_getAirbnbPropertyDetails
URLを指定して、1件のリスティングの詳細を取得します。
| パラメーター | 型 | 必須 | 備考 |
|---|---|---|---|
url | string | はい | AirbnbのリスティングURL。検索結果の url フィールド |
title、["4 guests", "2 bedrooms", "2 beds", "2 baths"] のような overview 配列、詳細な description、rating、reviews、address、latitude、longitude、photos 配列、guestCapacity、host オブジェクト、amenities 配列、safetyAndPropertyInfo を返します。host オブジェクトには、name、isSuperhost、isVerified、ホスト自身の reviews、rating、yearsHosting が含まれます。各アメニティには title、type、省略可能な description、available フラグが含まれます。そのため、フィルターでは available を確認し、リストにあるすべてのアメニティが利用可能だとは仮定しません。
{
"id": "17545365",
"title": "Downtown Casa - neighborhood feel, close to it all",
"overview": ["4 guests", "2 bedrooms", "2 beds", "2 baths"],
"rating": 4.87,
"reviews": 601,
"address": "Austin, Texas, United States",
"guestCapacity": 4,
"host": { "name": "Deanna", "isSuperhost": true, "isVerified": true, "reviews": 1273, "rating": 4.86, "yearsHosting": 11 },
"amenities": [
{ "title": "Wifi", "type": "SYSTEM_WI_FI", "available": true },
{ "title": "Free washer – In unit", "type": "SYSTEM_WASHER", "available": true }
]
}
エラーと失敗パス
ツール呼び出しでクライアントが 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 を返し、問題のあるフィールドを示します。データは取得されず、課金もされません。
空室のない検索は、エラーではなく properties 配列が空の成功結果を返します。 空きのない場所と日付範囲でも、requestMetadata.status は ok に設定されて返されます。反復処理を行う前に配列の長さを確認してください。
削除済みのリスティングは、requestMetadata.status が error に設定された 400 を返します。 古い検索結果の URL が、すでに存在しない宿泊施設を指している場合があります。
データを含む結果には、サポートへの問い合わせで伝えると役立つ requestMetadata.id も含まれています。
料金、無料枠、制限
各 Airbnb ツールの料金は、呼び出しが成功するごとに 10 クレジットです。レスポンスのサイズによって料金は変わりません。数十件の宿泊施設が載った検索ページも、2 件のページと同じ料金です。
無料枠は毎月 1,000 クレジットで、カード登録は不要です。Airbnb の呼び出し 100 回分に相当します。請求サイクルに合わせて更新されるため、呼び出し数の少ないエージェントなら無料枠のまま利用し続けられます。
有料プランは、200,000 クレジットの月額 59 ドルから利用できます。呼び出し 20,000 回分に相当します。単価は利用量に応じて下がり、エントリープランの呼び出し 1,000 回あたり 1.48 ドルから、Basic では 0.60 ドル、Growth ティアでは 0.41 ドルになります。最新の料金は料金ページをご覧ください。
プランによって同時実行数も決まります。無料枠では一度に 1 リクエスト、Startup では 5、Basic では 15、Growth ティアでは 50~500 です。無人で実行するものでは、超過時のケースを考慮して処理してください。
200 以外のステータスで返されたリクエストには課金されません。何も見つからなかった場合でも、成功した呼び出しとしてカウントされます。
ツールの選択
apis クエリパラメーターによって、エージェントに表示されるツールが決まります。ツールが少ないほど、ツール定義に使うコンテキストが減り、モデルが誤ったツールを選ぶ可能性も低くなります。
?apis=airbnb the two tools in this repo
?apis=airbnb,booking add Booking.com stays
?apis=airbnb,google_maps add Google Maps places
このパラメーターには、airbnb のようなプロバイダー名と、airbnb_listing のような個別の API 名を指定できます。スペルを間違えた名前は無視されます。すべての名前が間違っている場合、リクエストは 400 で失敗し、本文には認識されなかった値と有効な値がすべて記載されます。このパラメーターを省略すると、同じエンドポイントから HasData の全 57 ツールが表示されます。
比較
Airbnbには公開検索APIがありません。AirbnbのAPIプログラムは、自分のリスティングを管理するためのパートナーおよび共同ホスト向け連携機能であり、市場の情報を取得する手段ではありません。宿泊先の検索や任意のリスティング情報の取得には、公開ページのスクレイピングが唯一の方法であり、このサーバーは安定したスキーマを通じてそれを実現します。
| AirbnbパートナーAPI | このサーバー | |
|---|---|---|
| 目的 | 自分のリスティングを管理する | 公開市場の情報を取得する |
| アクセス | パートナー承認 | 1つのキーと1つのURL |
| 市場全体を検索 | いいえ | はい |
| セットアップ | ビジネス向けオンボーディング | 不要 |
| 出力 | パートナー向けペイロード | 構造化JSON、価格と評価を解析済み |
このサーバーが行わないこと。 予約、メッセージ送信、ホスト用ダッシュボード、ゲストデータの取得は行いません。ログアウト状態の訪問者が閲覧できる情報を読み取ります。
よくある質問
Airbnb公式のMCPサーバーはありますか?
Airbnbは公開していません。このサーバーはHasDataがメンテナンスしており、公開ページを読み取るため、Airbnbの開発者アカウントは必要ありません。
Airbnb MCPサーバーとは何ですか?
AIクライアントが呼び出せるツールとしてAirbnbのデータを公開するサーバーです。クライアントがModel Context Protocol経由でツール呼び出しを送信し、サーバーがデータを取得して構造化JSONを返し、モデルがその結果を処理します。このサーバーは2つのツールを公開し、リモートで実行されます。
Airbnb APIキーやパートナーアカウントは必要ですか?
いいえ。必要な認証情報はHasDataキーのみです。ツールは公開されているAirbnbページを読み取るため、パートナー向けオンボーディングはありません。
検索結果にベッド数やアメニティが表示されないのはなぜですか?
Airbnbの検索カードにはこれらの情報が掲載されていないためです。物件ページに掲載されており、詳細ツールはURLからその情報を読み取ります。検索で候補を絞り込んでから、物件ツールを呼び出して詳細を確認してください。
ゲスト数、ペット、日付で絞り込めますか?
はい。リスティングツールでは、checkIn、checkOut、およびadults、children、infants、petsの人数を指定でき、その人数と期間に応じた空室状況と料金を返します。
他のHasData APIと一緒に使えますか?
はい。apisパラメーターにはリストを指定でき、?apis=airbnb,bookingと指定すると、エージェントでAirbnbとBooking.comの両方を利用できます。パラメーターを省略すると、すべてのAPIを利用できます。
コンプライアンスと個人データ
HasDataは公開されているデータのみを取得します。プラットフォームの利用規約により自動アクセスが制限されている場合があり、コンプライアンスの遵守はお客様の責任です。収集するデータに個人情報が含まれる場合は、GDPR、CCPA、またはお客様の管轄区域における同等の規則に基づき、適法な処理根拠があることを確認してください。
HasDataのリンク
| 製品ページとリクエストビルダー | Airbnb Scraper API |
| サーバーのドキュメント | MCP server docs |
| 1つのサーバーで使える全57ツール | HasData/hasdata-mcp |
| クライアント別のガイド | MCP clients and integrations |
| その他のスクレイピング対象 | Airbnb Scraper API and 54 more |
| プランとクレジット料金 | Plans and credit costs |
| キーと利用状況 | HasData dashboard |
| npmのNodeランチャー | @hasdata/airbnb-mcp |
| PyPIのPythonランチャー | hasdata-airbnb-mcp |
開発
このリポジトリは、リモートサーバーの設定とドキュメントです。ビルド手順はなく、コンテナ化するものもありません。
test/ のテストでは、ここでのコミットなしに変更される可能性があるツールの契約を検証します。?apis=airbnb がちょうど2つのツールを返すこと、すべてのツールで必須パラメーターが引き続き宣言されていること、名前が変更されていないこと、使用中のキーが実際に受け付けられることを確認します。最後のチェックでは実際にツールを呼び出すため、正しい理由で失敗する可能性のあるカナリアの代償として10クレジットがかかります。
# macOS and Linux
HASDATA_API_KEY=your_key_here npm test
# Windows PowerShell
$env:HASDATA_API_KEY="your_key_here"; npm test
同じテストスイートは、プッシュのたびにCIで実行され、スケジュールに従って週に1回も実行されます。これは、誰もこのリポジトリに変更を加えていなくても、上流のツール一覧が変わる可能性があるためです。失敗した場合、ツール一覧が変わったか、キーが使えなくなったか、エンドポイントに到達できなかったことを意味し、アサーションメッセージでどれに該当するかがわかります。
コントリビューション
ツールの表とレスポンスのサンプルは変更されやすいため、そこを修正するのが最も有用なコントリビューションです。実行した呼び出しと、その結果得られたレスポンスを記載してください。フォークからのプルリクエストでは、キーなしでテストスイートが実行され、ライブチェックは失敗扱いになる代わりにスキップされます。
ライセンス
MITです。LICENSE を参照してください。
コメント
AI アプリケーションが外部のツールやデータソースに統一的な方法で接続するためのオープンなプロトコルです。クライアントはモデルとの対話を担い、MCP サーバーはツール・リソース・プロンプトテンプレートを提供します。標準メッセージでやり取りするため、1 つのサーバーを複数のクライアントで再利用できます。