Hotel & Vacation Rental MCP - live prices & reviews across Booking, Airbnb, Vrbo & Google Hotels について
StayingAPIのHotel & Vacation Rental MCPサーバーは、Booking.com、Airbnb、Vrbo、Google Hotelsを横断して宿泊施設、空室状況、料金、レビューを検索します。7つの読み取り専用ツールが統一スキーマでデータを返し、サイト間の料金比較にも対応します。
主な機能
- 014つのプラットフォームで宿泊先検索
- 02日ごとの空室状況確認
- 03プラットフォーム間の料金比較
- 04施設詳細とレビューの取得
- 05宿泊データの統一スキーマ
活用シーン
- 01場所と日程を指定して宿泊先を検索
- 02同じ施設のサイト別料金を比較
- 03日ごとの空室と最低宿泊数を確認
- 04宿泊施設のレビューを要約
MCP 対応
ホスト型Streamable HTTP MCPサーバーを通じて、7つの読み取り専用ツールを公開します。クライアントはOAuth 2.1で認証し、検索、空室確認、料金比較、レビュー取得、ジョブ確認を行えます。
設定
リモートサーバーはインストール不要です。クライアントを選んで設定をコピーするか、ワンクリックで導入できます。
https://mcp.stayingapi.com/mcpclaude mcp add --transport http com-stayingapi-hotel-vacation-rental https://mcp.stayingapi.com/mcp{"mcpServers":{"com-stayingapi-hotel-vacation-rental":{"type":"http","url":"https://mcp.stayingapi.com/mcp"}}}Cursor で開く{"servers":{"com-stayingapi-hotel-vacation-rental":{"type":"http","url":"https://mcp.stayingapi.com/mcp"}}}VS Code で開く{"mcpServers":{"com-stayingapi-hotel-vacation-rental":{"type":"http","url":"https://mcp.stayingapi.com/mcp"}}}{"mcpServers":{"com-stayingapi-hotel-vacation-rental":{"serverUrl":"https://mcp.stayingapi.com/mcp"}}}コマンドはターミナルで実行し、JSON は各クライアントの MCP 設定に貼り付けて再起動します。認可が必要なサーバーは初回接続時にログインを求めます。
ツール
詳細
ホテル・バケーションレンタル MCP - Booking.com、Airbnb、Vrbo、Google Hotels のリアルタイム料金、空室状況、レビュー
AI に尋ねるだけで、宿泊先を検索し、Booking.com、Airbnb、Vrbo、Google Hotels の料金を比較して、レビューを取得できます。ホスト型 MCP が 1 つ、最初に 300 クレジットを無料で利用でき、カードは不要です。
Claude、ChatGPT、Cursor、Claude Code、あらゆる MCP クライアントに対応する 7 つの読み取り専用ツール(検索、空室状況、掲載情報の詳細、料金、OTA 横断の料金比較、レビュー、ジョブのポーリング)を提供します。
予約プラットフォーム 4 つ、共通スキーマ 1 つ · 読み取り専用ツール 7 つ · OTA 横断の料金比較 · OAuth 2.1 に対応し、エージェントにキーを貼り付ける必要なし · 最初に 300 クレジットを無料で利用でき、カード不要 StayingAPI は、宿泊施設データを扱う独立したサービスです。StayingAPI は Airbnb、Booking.com、Vrbo、Google Hotels とは提携、推奨、後援関係にありません。これらは各所有者の商標であり、StayingAPI の API および MCP サーバーが照会できるデータソースを説明する目的で使用しています。
1 行でインストール
Claude Code
claude mcp add --transport http stayingapi https://mcp.stayingapi.com/mcp
Claude Desktop、ChatGPT、Cursor、その他すべての MCP クライアント — Streamable HTTP サーバーとして次を追加します。
https://mcp.stayingapi.com/mcp
貼り付ける API キーは不要です。最初の呼び出し時に OAuth サインインが開始されます(無料アカウント、300 クレジット、カード不要)。クライアントごとの手順はクイックインストールを、リポジトリ全体をエージェントプラグインとしてインストールする手順もご覧ください。
ホテル&バケーションレンタル MCP が選ばれる理由
すでに、4つのサイトを手作業で比較しているのではないでしょうか。Booking.com のホテル、Airbnb のアパート、Vrbo のヴィラ、そして料金を確認するための Google Hotels。どのサイトもページや評価尺度が異なり、登録するだけですぐに使える API もありません。
一度接続すれば、あとは尋ねるだけです。 この MCP サーバーを Claude、ChatGPT、Cursor、または任意の MCP クライアントに一度追加するだけで、AI アシスタントが実際の宿泊施設を検索し、指定した日程の実際の料金を提示し、ある施設の予約サイトごとの料金を比較して、統一されたレビューを読み取れるようになります。コードを書く必要も、設定を繰り返す必要もなく、会話の中で完結します。
すべての結果は統一された1つのスキーマで返されます。ホテルの客室もホリデーヴィラも同じ形式のオブジェクトを返し、評価は暗黙に換算されることなく各サービス固有の尺度で表示されます。また、複数の OTA を横断する比較では、各サイトのオファーに加え、算出された最安値と中央値も返されるため、自分で計算し直す必要はありません。
まずはお試しください:
Find 2-bed stays in Lisbon for these dates under EUR 150,
compare the top one's price across Airbnb, Booking.com and Vrbo,
and summarize its reviews.
この1つのプロンプトで、search_stays、compare_prices、get_reviews の3つのツールを使えます。コードを1行も書く必要はありません。
エージェントプラグインとしてインストール · 最も簡単
このリポジトリのルートは、適合する Agent Plugins 1.0.0 パッケージです。2026-08-06 に公開されたポータブル形式で、ChatGPT、Codex、Cursor、GitHub Copilot、Kiro、VS Code がサポートしています。一度インストールすれば、MCP サーバーと、どの質問にどのツールが答えるのか、複数プラットフォームへの問い合わせを低コストに抑える方法、Airbnb/Vrbo は5段階評価、Booking.com は10段階評価であることをエージェントに教える、同梱の stays スキルを利用できます。これにより、9と4.5を誤って比較することはありません。
plugin.json # Agent Plugins 1.0.0 manifest
mcp.json # hosted MCP server, streamable-http, OAuth (no keys)
skills/stays/SKILL.md # when + how to use the 7 read-only tools
.cursor-plugin/plugin.json # Cursor plugin manifest, same MCP + skill (+ marketplace.json)
VS Code — コマンドパレット → Chat: Install Plugin From Source を選択し、次を貼り付けます:
https://github.com/stayingapi/hotel-vacation-rental-mcp
または、settings.json でローカルクローンを登録します:
"chat.pluginLocations": { "/absolute/path/to/hotel-vacation-rental-mcp": true }
Cursor — サイドバーの Customize → プラグインを探す → Install。ローカルクローンの場合:
git clone https://github.com/stayingapi/hotel-vacation-rental-mcp ~/.cursor/plugins/local/stayingapi
続いて Developer: Reload Window を実行します。
Cursor に追加 — クローン不要で MCP サーバーのみを追加します。このディープリンクをブラウザーに貼り付けます:
cursor://anysphere.cursor-deeplink/mcp/install?name=stayingapi&config=eyJ1cmwiOiJodHRwczovL21jcC5zdGF5aW5nYXBpLmNvbS9tY3AifQ==
ChatGPT、Codex、GitHub Copilot、Kiro、その他のクライアント — クライアントのプラグイン機構で、このリポジトリまたはローカルクローンを指定します。Agent Plugins 1.0.0 が標準化しているのはパッケージ形式であり、インストール方法ではありません。そのため、各クライアント固有のインストール手順に従ってください。
30秒で試す
Find a 2-bedroom apartment in Split, Croatia for 12-15 June, 2 adults, under EUR 150 a night.
search_stays を1回呼び出すと、Airbnb、Booking.com、Vrbo、Google Hotels の結果が統合された1つの正規化済みリストとして返されます。各施設には予約 URL も含まれます。設定する API キーはありません — 最初の呼び出し時に OAuth サインインが開始されます(無料アカウント、300クレジット、カード不要)。続けて、通常ならブラウザーのタブを20個開いて行う操作を実行できます:
Is that one cheaper on Booking or Airbnb? → compare_prices (one call, every OTA)
Is it free all week, and what's the min stay? → check_availability (day by day)
7つのツールはすべて読み取り専用です。ここから予約、キャンセル、予約内容の変更はできません。
このパッケージに認証情報は含まれていません。Agent Plugins 1.0.0 ではシークレットの埋め込みが禁止されており、認証はクライアントが管理します。パッケージは次の手順で検証できます:
curl -sO https://agent-plugins.org/schemas/1.0.0/plugin.schema.json
curl -sO https://agent-plugins.org/schemas/1.0.0/mcp.schema.json
npx ajv-cli@5 validate --spec=draft2020 -s plugin.schema.json -d plugin.json
npx ajv-cli@5 validate --spec=draft2020 -s mcp.schema.json -d mcp.json
クイックインストール
要件:
おすすめ:AI が自動的に呼び出すよう、ルールを追加しましょう
クライアントのカスタム指示またはルールファイルに、以下を貼り付けてください。
When I mention a hotel, an Airbnb/Booking.com/Vrbo/Google Hotels listing, a place to stay, travel dates, or ask to compare accommodation prices or read stay reviews, automatically use the StayingAPI MCP tools to fetch real data before answering.
サーバー URL: https://mcp.stayingapi.com/mcp(Streamable HTTP トランスポート)
Claude へのインストール(デスクトップ版とウェブ版)— おすすめ
設定 → コネクタ → カスタムコネクタを追加 → 以下を貼り付けてください。
https://mcp.stayingapi.com/mcp
Claude がブラウザのポップアップで OAuth 2.1 のサインインを行い、コネクタを StayingAPI アカウントとそのクレジット残高に紐付けます。API キーは不要です。 7 つの読み取り専用ツールがツール一覧に表示されます。
デスクトップの設定ファイルを使う場合は、claude_desktop_config.json に追加してください。
{
"mcpServers": {
"stayingapi": {
"url": "https://mcp.stayingapi.com/mcp"
}
}
}
Claude Code へのインストール(CLI)
OAuth(おすすめ):
claude mcp add --transport http stayingapi https://mcp.stayingapi.com/mcp
次に Claude Code 内で /mcp を実行し、OAuth プロンプトに従ってください。
ヘッドレスで実行する場合や、キーを使いたい場合は、MCP サーバーのサインイン方式が OAuth のみであるため、スクリプトやバックエンドには stay_live_ キーを使ってREST APIを利用してください。
ChatGPT へのインストール
- 開発者モードを有効にします:設定 → アプリとコネクタ → 詳細設定。
- 設定 → コネクタ → MCP サーバーを追加に移動します(コネクタパネルで作成)。
- サーバー URL を貼り付けます。
https://mcp.stayingapi.com/mcp
- プロンプトが表示されたら OAuth サインインを完了します。API キーは不要です。
Cursor へのインストール(ワンクリックまたは手動)
ワンクリック: この README の上部にあるCursor にインストールバッジを使用してください。
手動: ~/.cursor/mcp.json(グローバル)または .cursor/mcp.json(プロジェクトごと)に追加してください。
{
"mcpServers": {
"stayingapi": {
"url": "https://mcp.stayingapi.com/mcp"
}
}
}
最初のツール呼び出しで OAuth サインインが開始されます。MCP サーバーでは API キーを使う方法はありません。
その他の MCP クライアント
https://mcp.stayingapi.com/mcp を Streamable HTTP MCP サーバーとして追加してください。
- 認証は Dynamic Client Registration による OAuth 2.1 + PKCE です。対応クライアントは自動的に認証されるため、設定は不要です。
- MCP サーバーは API キーを受け付けません。MCP OAuth に対応していないクライアントは接続できません。その場合は、
stay_live_キーを使ってREST APIを利用してください。
stayingapi.com/docs/mcpで検証済みの形式のみを、意図的に上記に掲載しています。お使いのクライアントが一覧にない場合、汎用の Streamable HTTP 設定が必要な設定のすべてです。
認証
MCP サーバーと REST API は同じアカウントと同じクレジット残高を使用しますが、サインイン方法は異なります。
- MCP サーバー:OAuth 2.1 + PKCE(S256)と Dynamic Client Registration のみです。 ブラウザのポップアップで一度認証すると、コネクターが StayingAPI アカウントにリンクされます。DCR 対応クライアントはすべてを自動的に検出するため、エージェントにキーを貼り付ける必要はありません。 MCP サーバーは API キーを受け付けず、MCP ツールの呼び出しはライブで実行されます。
- REST API:ベアラー API キーを使用します。 スクリプト、バックエンド、パイプライン向けです。キーは
stay_live_...(ライブソースに実際にファンアウト)またはstay_test_...(決定論的なサンドボックス用フィクスチャで、常にクレジット消費は 0)です。https://api.stayingapi.com/v1にAuthorization: Bearer stay_live_...として送信してください。
残高は共通、レート制限の枠は別です。 MCP の呼び出しは、REST キーと同じ単一のクレジット残高を使用します。REST はキーごとにレート制限され、MCP はユーザーごとにレート制限されます。枠は別ですが、ウォレットは共通です。
セキュリティに関する注意:
stay_live_キーはパスワードと同様に扱ってください。新しいキーのシークレットは一度だけ表示され、SHA-256 ハッシュとしてのみ保存されるため、復元できません。リポジトリにコミットしたり、共有設定に貼り付けたりしないでください。キーが漏えいした場合は、ダッシュボードから失効させて再発行してください。
利用可能なツール
7 つすべてが読み取り専用(readOnlyHint: true、idempotentHint: true の注釈付き)です。書き込みツールはないため、予約、キャンセル、変更は一切できません。各ツールは REST エンドポイントと 1 対 1 で対応し、同じ検証とキャッシュのパイプラインを実行して、同じ統一された { data, meta } エンベロープを返します。
1. search_stays
場所、日付、宿泊人数、フィルターを指定して複数のプラットフォームから宿泊施設を検索し、単一のスキーマに統合します。これは網羅性の高いエンドポイントであり、「1 つのスキーマですべてのプラットフォームに対応」を最も明確に示します。
| パラメーター | 型 | 必須 | 備考 |
|---|---|---|---|
location | string | はい | 地名(Split, HR)または lat,lng |
checkIn / checkOut | date | いいえ | YYYY-MM-DD。両方を同時に指定する必要があります。過去の日付は指定できません |
adults / children / childAges[] / rooms | integer | いいえ | childAges[] の長さは children と一致する必要があります |
propertyType[] | enum[] | いいえ | hotel | apartment | house | villa | cottage | other |
amenities[] | enum[] | いいえ | 正規化されたアメニティ分類 |
minBedrooms / priceMin / priceMax / minGuestRating | number | いいえ | 正規化後に適用されるフィルター |
platforms[] | enum[] | いいえ | airbnb | booking | vrbo | google。ファンアウト先を指定します |
limit / cursor / sort / currency | mixed | いいえ | limit は 1~40。sort = recommended | price_asc | price_desc | rating_desc |
レスポンス(抜粋):
{
"data": [
{
"id": "stays_booking_abramovic2",
"platform": "booking",
"platformListingId": "abramovic2",
"url": "https://www.booking.com/hotel/hr/abramovic2.html",
"name": "Apartments Abramović",
"propertyType": "apartment",
"location": { "lat": 43.51, "lng": 16.44, "city": "Split", "country": "HR" },
"starRating": null,
"guestRating": 9.1, "ratingScale": 10, "reviewCount": 142,
"maxOccupancy": 4, "bedrooms": 2, "bathrooms": 1,
"amenities": ["pool", "kitchen", "air_conditioning", "wifi"],
"host": { "name": "Marko", "isSuperhost": false },
"price": { "currency": "USD", "nightlyPrice": 303, "totalPrice": 2122, "nights": 7 }
}
],
"meta": {
"platforms": ["airbnb", "booking"],
"cached": false, "partial": false, "currency": "USD",
"pagination": { "limit": 20, "cursor": null, "nextCursor": "eyJ…", "hasMore": true },
"platformResults": [
{ "platform": "airbnb", "status": "ok", "cached": false, "count": 18 },
{ "platform": "booking", "status": "ok", "cached": true, "count": 20 }
],
"warnings": []
}
}
2. check_availability
1 つのプラットフォームで、既知のリスティング(または複数のリスティング)について、指定した日付範囲の日ごとの空室状況を確認します。各日について、空室かどうか、最低宿泊日数、およびチェックイン、チェックアウト、予約が可能かどうかを返します。
| パラメーター | 型 | 必須 | 備考 |
|---|---|---|---|
platform | enum | はい | 単一のプラットフォーム。ファンアウトするツールではありません |
listingId / listingIds[] / url | string | いずれか 1 つ | リスティング ID、複数の ID、またはリスティングの完全な URL |
startDate / endDate | date | はい | 過去の日付は指定できません。期間は最大 365 日です |
onlyAvailable | boolean | いいえ | true の場合、予約可能な日付のみを返します |
レスポンス(抜粋):
{
"data": [
{
"platform": "airbnb",
"listingId": "42307961",
"dates": [
{ "date": "2026-07-13", "available": true, "minNights": 7, "checkIn": true, "checkOut": false, "bookable": true },
{ "date": "2026-07-14", "available": true, "minNights": 7, "checkIn": false, "checkOut": false, "bookable": true }
]
}
],
"meta": { "platforms": ["airbnb"], "cached": false, "partial": false, "warnings": [] }
}
3. get_listing
1 件のリスティングの正規化された詳細情報です。標準分類に基づくアメニティ、写真、ホスト、位置情報、評価に加え、日付を指定すると、ライブ価格が埋め込まれます。詳細情報は 24 時間キャッシュされ、埋め込まれた価格がある場合は価格 TTL の 1 時間でキャッシュされます。読み取り時に組み立てられるため、古い価格が新しい詳細情報に付随することはありません。
| パラメーター | 型 | 必須 | 備考 |
|---|---|---|---|
platform | enum | はい | vrbo | booking | airbnb | google |
id | string | はい | プラットフォーム固有のリスティング ID。ソースの値をそのまま指定します |
checkIn / checkOut | date | いいえ | 指定すると、ベストエフォートのライブ価格が埋め込まれます |
adults / children / childAges[] / currency | mixed | いいえ | 日付を指定した場合にのみ使用されます |
レスポンス(抜粋):
{
"data": {
"id": "stays_booking_abramovic2",
"platform": "booking",
"platformListingId": "abramovic2",
"name": "Apartments Abramović",
"propertyType": "apartment",
"location": { "lat": 43.51, "lng": 16.44, "city": "Split", "country": "HR" },
"guestRating": 9.1, "ratingScale": 10, "reviewCount": 142,
"maxOccupancy": 4, "bedrooms": 2, "bathrooms": 1,
"amenities": ["pool", "kitchen", "air_conditioning", "wifi"],
"images": ["https://…"],
"host": { "name": "Marko", "isSuperhost": false },
"price": { "currency": "USD", "nightlyPrice": 303, "totalPrice": 2122, "nights": 7 }
},
"meta": { "platforms": ["booking"], "cached": false, "partial": false, "warnings": [] }
}
4. get_price
1 件のリスティングについて、指定した日付と宿泊人数に基づく実際の価格見積もりを取得します。search_stays が返すプラットフォーム固有の ID(Airbnb と Vrbo では数値、Booking.com と Google Hotels ではスラッグ文字列)またはリスティングの完全な URL を指定します。レスポンスは常に実際の数値価格または型付きエラーとなり、別の宿泊施設の価格が返されることはありません。
| パラメーター | 型 | 必須 | 備考 |
|---|---|---|---|
platform | enum | はい | vrbo | booking | airbnb | google |
listingId | string | はい | search_stays.platformListingId のネイティブ ID。代わりに url を指定することもできます |
checkIn / checkOut | date | はい | YYYY-MM-DD。checkOut は checkIn より後の日付にします |
adults / children / childAges[] / currency | mixed | いいえ | ISO-4217 通貨。値はそのまま引き渡され、レスポンスにも含まれます |
レスポンス(抜粋):
{
"data": {
"platform": "booking",
"listingId": "abramovic2",
"currency": "EUR",
"nightlyPrice": 303,
"totalPrice": 2122,
"fees": { "cleaning": null, "service": null, "taxes": null },
"nights": 7,
"occupancy": { "adults": 2, "children": 2, "childAges": [8, 13] },
"source": "booking",
"url": "https://www.booking.com/hotel/hr/abramovic2.html"
},
"meta": { "platforms": ["booking"], "cached": false, "partial": false, "warnings": [] }
}
5. compare_prices
主力ツールです。 Google Hotels のバックボーンを通じて施設を特定し、1 回の呼び出しで複数の予約サイトの価格を比較します。レスポンスには個別のオファーに加え、StayingAPI が算出した min と median が主要フィールドとして含まれるため、最安価格と各サイトの標準的な価格を再計算せずに確認できます。
| パラメーター | 型 | 必須 | 備考 |
|---|---|---|---|
name / googleHotelId / location | string | いずれか 1 つ | 特定する施設名、正確な Google Hotels ID、または施設を絞り込む場所 |
checkIn / checkOut | date | はい | YYYY-MM-DD。過去の日付は指定できません |
adults / children / childAges[] / currency | mixed | いいえ | ISO-4217 通貨。値はそのまま引き渡され、レスポンスにも含まれます |
レスポンス(抜粋):
{
"data": {
"property": "Hotel X, Sibenik",
"checkIn": "2026-07-13",
"checkOut": "2026-07-20",
"currency": "EUR",
"min": 2122,
"median": 2151,
"offers": [
{ "ota": "booking.com", "totalPrice": 2122, "currency": "EUR", "url": "https://…" },
{ "ota": "expedia", "totalPrice": 2180, "currency": "EUR", "url": "https://…" }
]
},
"meta": { "platforms": ["google"], "cached": false, "partial": false, "warnings": [] }
}
6. get_reviews
1 つのプラットフォーム上の 1 件のリスティングについて、正規化されたページ分割形式のレビューを取得します。各評価には、プラットフォーム固有の評価スケールが保持され、併記されます(Airbnb、Vrbo、TripAdvisor は 5 段階、Booking.com、Expedia、Hotels.com は 10 段階)。暗黙にスケール変換されることはないため、9 と 4.5 が誤って比較されることはありません。
| パラメーター | 型 | 必須 | 備考 |
|---|---|---|---|
platform | enum | はい | プラットフォームの列挙値 |
listingId / url | string | いずれか 1 つ | そのプラットフォーム上のリスティング ID、またはリスティングの完全な URL |
limit / cursor | mixed | いいえ | limit は 1~100。カーソルは不透明な base64 文字列です |
language / minRating / sort | mixed | いいえ | ISO-639-1 フィルター。sort = recent | rating_desc | rating_asc |
レスポンス(抜粋):
{
"data": [
{
"platform": "booking",
"listingId": "abramovic2",
"reviewId": "r987",
"rating": 9, "ratingScale": 10,
"title": "Perfect family stay",
"text": "Spotless apartment a short walk from the old town…",
"author": "Jane D.", "date": "2026-05-10", "tripType": "family",
"language": "en", "ownerResponse": "Thank you!",
"liked": "Location and cleanliness", "disliked": null
}
],
"meta": {
"platforms": ["booking"], "cached": false, "partial": false,
"pagination": { "limit": 20, "cursor": null, "nextCursor": "eyJ…", "hasMore": true },
"warnings": []
}
}
7. get_job
非同期ジョブとして返された、長時間実行されるスクレイピングをポーリングします。リクエストの実行に約 8 秒を超える時間がかかると予測される場合、ジョブハンドルが返されます。エージェントは status が completed または failed になるまで get_job を呼び出します。ポーリングにクレジットは一切かかりません。基盤の処理に対する課金は、正常に完了したときに 1 回だけ行われます。
| パラメーター | 型 | 必須 | 備考 |
|---|---|---|---|
jobId | string | はい | 元の呼び出しで返されたハンドル。結果は 24 時間保持されます |
実行中のレスポンス、および完了時のレスポンス(抜粋):
// While running - polling is free
{
"data": { "jobId": "job_3kf…", "status": "running", "pollUrl": "/v1/jobs/job_3kf…", "estimatedSeconds": 12 },
"meta": { "creditsCharged": 0, "platforms": ["vrbo"] }
}
// On success - the payload arrives in data.result, in the same unified schema
{
"data": { "jobId": "job_3kf…", "status": "completed", "result": [ /* the endpoint's payload */ ] },
"meta": {
"platforms": ["vrbo"], "currency": "USD",
"platformResults": [ { "platform": "vrbo", "status": "ok", "cached": false, "count": 15 } ],
"warnings": []
}
}
失敗したジョブでも呼び出し自体は成功し、status: "failed" と、data.error にネストされた理由({ type, code, message, retryable } オブジェクト)が返されます。失敗した処理は無料です。
取得できるデータ
ホテルでも別荘でも、すべての呼び出しで同じ統一された { data, meta } エンベロープが返されます。
| フィールドグループ | 例 |
|---|---|
| 識別情報 | id、platform、platformListingId、正規リスティングの url |
| 基本情報 | 物件タイプ、寝室数、バスルーム数、最大宿泊人数、位置情報(lat/lng/市/国) |
| 評価 | 明示的な ratingScale(5 または 10。暗黙的に再スケーリングされることはありません)を含む guestRating、reviewCount、starRating |
| アメニティ | 4 つのすべてのプラットフォームで共通の標準分類(pool、kitchen、air_conditioning、wifi など) |
| 料金 | nightlyPrice、totalPrice、nights、currency、および内訳(清掃費、サービス料、税金)を含む fees |
| プラットフォーム間の比較 | サイトごとの offers[] と、StayingAPI が算出した min および median |
| 空室状況 | 日ごとの available、minNights、checkIn、checkOut、bookable |
| レビュー | ネイティブの評価尺度での評価、タイトル、本文、投稿者、日付、旅行タイプ、言語、オーナーの返信、「良かった点/悪かった点」 |
| ホストとメディア | ホスト名、スーパーホストのフラグ、高解像度の写真 URL |
| 呼び出しメタデータ | requestId、プラットフォームごとのステータス、キャッシュフラグ、ページネーションカーソル、警告 |
対応範囲: Booking.com、Airbnb、Vrbo、Google Hotels。ホテルと短期賃貸を同じスキーマで扱うため、1 つの連携で宿泊施設全体をカバーできます。
ユースケースとプロンプト
| ユースケース | プロンプトの例 |
|---|---|
| 旅行計画 | 「5 月 12 日から 19 日まで、リスボンで、キッチンとエアコン付き、1 泊 150 EUR 未満の寝室 2 室の宿泊施設を探し、ゲスト評価順に並べてください。」 |
| サイト間の価格裁定 | 「7 月 13 日から 20 日まで、スプリトにあるこのホテルに大人 2 名で泊まる場合、Booking.com と他のサイトでは料金はいくらですか?最安値は中央値よりどれくらい安いですか?」 |
| レビューの要約 | 「このリスティングの最新レビュー 50 件を取得し、繰り返し挙がっている苦情を 3 つ教えてください。また、ホストが返信しているかどうかも教えてください。」 |
| 空室状況の確認 | 「この Vrbo のヴィラは、8 月中に 7 泊できる期間がありますか?最低宿泊日数はいくつですか?」 |
| 家族に適した宿泊施設 | 「同じ日程で、大人 2 名と 8 歳、13 歳の子ども 2 名の場合、この 3 件のうち全員が実際に宿泊できるのはどれですか?手数料込みの合計金額はいくらですか?」 |
| 市場調査 | 「7 月の第 1 週にスプリトのアパートメントを調査してください。一般的な 1 泊料金はいくらで、私の物件はそれと比べてどうですか?」 |
| 料金の同等性チェック | 「この 5 軒のホテルについて、予約サイトごとの料金を比較し、いずれかのサイトの料金が中央値から 10 パーセントを超えて乖離しているホテルに印を付けてください。」 |
料金
| スタータークレジット | 登録時に 300 クレジットを無料で付与。カード不要 |
| サンドボックス(REST API) | stay_test_ キーは、0 クレジットで決定的なフィクスチャを返します。期限はありません。MCP ツールの呼び出しはライブです |
| 失敗した呼び出し | 失敗、空、ブロック、未検出の呼び出しに料金は一切かかりません。creditsCharged は 0 です |
| 非同期ポーリング | get_job のポーリングは常に 0 クレジットです。処理料金は成功時に一度だけ請求されます |
| 有料プラン | クレジット制です。現在の呼び出しごとの料金とプラン価格:stayingapi.com/pricing |
この README では、有料料金の数値を記載しない方針です。これにより、最新の料金ページとの不一致を防いでいます。MCP と REST は同じ単一のクレジット残高を使用します。MCP 専用のウォレットや料金体系はありません。
トラブルシューティング
まず error.type(クラス。HTTP ステータスに 1 対 1 で対応)で分岐し、次に error.code(安定した、より詳細な理由)で分岐してください。すべてのエラーには requestId、retryable フラグ、docUrl も含まれます。
401 authentication_error - 認証情報がないか、無効です
コード:missing_api_key、invalid_api_key、revoked_api_key。
- MCP:コネクターを削除して再追加し、再認証してください。MCP サーバーは OAuth サインインのみを受け付けるため、ここで貼り付けた API キーは常に拒否されます。
- REST API:キーが
stay_live_またはstay_test_で始まっていること、余分な空白が混入していないこと、ダッシュボードで取り消されていないことを確認してください(取り消されたキーはすぐにrevoked_api_keyを返します)。 - 認証は検証、課金、上流での処理より先に確認されるため、401 で課金されることはありません。
403 permission_denied - 通常はメールアドレスの確認が原因です
コード:email_unverified、scope_insufficient、subscription_required。
- よくあるのは
email_unverifiedです。アカウントのメールアドレスを確認するまで、ライブクレジットはロックされています。REST API では、stay_test_サンドボックスキーに影響はなく、引き続き全フィクスチャを無料で返すため、確認前にエンドツーエンドで構築できます。 subscription_requiredは、有効な有料サブスクリプションがない状態でチャージを試みたことを意味します。チャージはサブスクライバー向けの追加機能です。
402 insufficient_credits
コード:credit_balance_too_low。残高が、呼び出しに必要な料金を下回っています。推測するのではなく、プログラムで確認してください。アカウントエンドポイントは credits.balance、plan、キーの env、および rateLimit.requestsPerMinute を返します。stayingapi.com/pricing でチャージするか、プランをアップグレードしてください。
400 invalid_request - リクエスト自体に問題があります
最も一般的なコード:missing_parameter、invalid_date_range(checkOut は checkIn より厳密に後である必要があります)、date_in_past(UTC で判定)、child_ages_mismatch(childAges[] の長さは children と等しくする必要があります)、window_too_long(空き状況の検索期間は最大 365 日です)、invalid_cursor、limit_out_of_range、mutually_exclusive_params(listingId と url の両方を指定したか、どちらも指定していません)、needs_country。
needs_country については補足が必要です。Booking.com のスラッグだけを get_listing に渡すと、どの国のものか特定できません。Booking.com のスラッグは全世界で一意ではなく、同じスラッグが国ごとに存在するためです。国を指定するか、リスティングの完全な URL を渡してください。
404 not_found - 意図的に発生する場合もあります
コード:listing_not_found、job_not_found、identity_mismatch。
identity_mismatch は意図的なものです。解決されたリスティングの正規の識別情報がリクエスト内容と一致しない場合、StayingAPI は、もっともらしく見える誤ったデータを返すのではなく、別の施設を返すことを拒否します。job_not_found は、期限切れのジョブ(結果の保持期間は 24 時間)や、別のアカウントに属するジョブに対しても発生します。ジョブ ID はアクセス権を付与するものではありません。
429 rate_limited
コード:rate_limit_exceeded。再試行可能です。間隔を詰めて繰り返すのではなく、Retry-After ヘッダーに従ってください。MCP はユーザーごと、REST はキーごとにレート制限されます。制限枠は別々ですが、クレジット残高は共有です。
503 / 504 上流の問題
upstream_unavailable(all_actors_failed、actor_blocked)は、すべての主要ソースとフォールバックソースでの処理に失敗したか、ブロックされたことを意味します。upstream_timeout は、同期的な上流処理がリクエストの期限を超過したことを意味します。どちらもバックオフして再試行でき、クレジットは消費されません。長時間のスクレイピングでは、代わりに非同期処理が使用される想定です。get_job でポーリングするジョブハンドルが返されます。
OAuth で接続できない
- ポップアップブロッカーがサインインウィンドウを停止していないことを確認してから、Cookie を消去し、コネクターの認証を再試行してください。
- OAuth の検出は、サーバーの 401 応答を起点に開始されます。クライアントがまったく接続できない場合は、MCP OAuth 2.1 の Dynamic Client Registration に対応しているか確認してください。MCP サーバーに API キーのフォールバックはありません。OAuth に対応していない場合は、
stay_live_キーを使って REST API を利用してください。
ジョブが止まっている、または「completed」なのに結果が空
`estimatedSeconds` は推定値であり、保証ではありません。通常、ジョブは数十秒で完了しますが、処理が遅いプラットフォームでは 240 秒を超える場合があるため、数分単位で見積もってください。**失敗した**ジョブでも HTTP 200 が返され、理由はトップレベルのエラーエンベロープではなく `data.error` に格納されます。そのため、`data.status === "failed"` を条件に分岐してください。完了したジョブには `meta.pagination: null` が含まれます。カーソルページネーションは、同期的に返されるリストレスポンスにのみ適用されます。REST API としても利用可能
エージェントではなく、アプリやバックエンドを構築していますか?同じデータを、シンプルな JSON REST サービスとして利用できます。
| MCP | REST API | |
|---|---|---|
| 最適な用途 | AI アシスタントとエージェント | アプリ、バックエンド、パイプライン |
| セットアップ | URL を追加し、一度認証 | Bearer キー、コードによる連携 |
| 認証 | OAuth 2.1 + PKCE(エージェントにキーは不要) | Authorization: Bearer stay_live_... |
| レート制限 | ユーザーごと | キーごと |
| クレジット | 共通の残高 | 共通の残高 |
| スキーマ | 同一の統合スキーマ | 同一の統合スキーマ |
| 利用開始 | この README | クイックスタート · API リファレンス · OpenAPI |
ベース URL:https://api.stayingapi.com/v1。7 つの MCP ツールは、/v1/search、/v1/availability、/v1/listing/{platform}/{id}、/v1/price、/v1/price-compare、/v1/reviews、/v1/jobs/{jobId} にそれぞれ 1 対 1 で対応しています。
接続
- ウェブサイト: stayingapi.com
- MCP ガイド: stayingapi.com/docs/mcp
- ドキュメント: stayingapi.com/docs · OpenAPI: api.stayingapi.com/openapi.json
- ワークフローとレシピ: stayingapi.com/workflows
- ステータス: status.stayingapi.com
- お問い合わせ: [email protected]
- 掲載先: awesome-agent-plugins。同じチームが管理する、オープンスタンダードに準拠した検証済み Agent Plugins のディレクトリです。
関連リポジトリ - StayingAPI のオープンリソースセットの一部です:hotel-api · airbnb-api · booking-com-api · vrbo-api · google-hotels-api · travel-api · travel-workflows · travel-skills
MCP レジストリ
公式の Model Context Protocol Registry に、次の内容で公開されています。
com.stayingapi/hotel-vacation-rental-mcp
このリポジトリのレジストリマニフェスト:server.json(MCP レジストリ)· smithery.yaml(Smithery)· glama.json(Glama)。
FAQ
2026 年に Airbnb や Booking.com の API はありますか?
今日登録してすぐに利用できるものはありません。Airbnb にはオープンな公開 API がなく、アクセスはパートナープログラムを通じて提供されています。対象は承認済みのソフトウェアパートナーや物件管理システムであり、一般の開発者ではありません。Booking.com の Demand API も同様で、認証情報を取得するにはパートナーまたはアフィリエイト契約と承認プロセスが必要です。Vrbo は Expedia Group のパートナー API プログラムに含まれており、Google Hotels のデータはセルフサービスの開発者向け API ではなく、ホテルパートナーのフィードを通じて提供されます。このギャップがあるため、「airbnb api」は旅行テック分野で最も検索されている一方、最もサービスが不足している検索キーワードの一つです。StayingAPI はセルフサービスの代替手段です。登録して、カード不要で 300 クレジットが付与されるキーを取得すれば、1 つの REST API またはこの MCP サーバーを通じて 4 つすべてのソースの宿泊施設データをクエリでき、すべてのレスポンスが同じスキーマに正規化されます。
ホテルまたは宿泊施設の MCP とは何ですか?
ホテルまたは宿泊施設の MCP は、AI エージェントが直接呼び出せるツールとして宿泊施設のデータを公開する Model Context Protocol サーバーです。宿泊施設を検索し、日ごとの空室状況を確認し、掲載情報の詳細をすべて取得し、特定の日付の実際の料金を照会し、その料金を予約サイト間で比較し、正規化されたレビューを読み取れます。チャットに検索結果をコピーする代わりに、アシスタントが会話の途中でライブデータを取得して推論するため、検索してから最適な候補の料金を調べ、さらにレビューを要約するという手順を自動で連携できます。このサーバーは https://mcp.stayingapi.com/mcp でホストされ、Streamable HTTP トランスポートを使用し、Booking.com、Airbnb、Vrbo、Google Hotels を単一の統合スキーマでカバーする、読み取り専用の 7 つのツールを公開しています。Claude、ChatGPT、Cursor、Claude Code、その他すべての MCP クライアントで動作し、OAuth 2.1 で認証するため、API キーをエージェントに貼り付ける必要はなく、ここから予約、キャンセル、予約内容の変更を行うこともできません。
StayingAPI REST API とこの MCP サーバーの違いは何ですか? どちらも同じサービスへの 2 つの入り口であり、別々の製品ではありません。REST API はアプリ、バックエンド、データパイプライン向けです。ベアラーキーを送ると JSON が返り、処理の流れは自分で制御します。MCP サーバーは AI アシスタントやエージェント向けです。URL を 1 つ追加して OAuth 2.1 で一度認証すると、7 つのツールをモデルが自分で呼び出せるようになります。内部では、同じ検証、同じアダプターとキャッシュのパイプライン、同じ統合スキーマ、同じエラー分類体系、そして同じ単一のクレジット残高を使用します。MCP 専用のウォレットや料金体系はありません。実質的な違いはレート制限だけです。REST はキーごと、MCP はユーザーごとに適用されます。自分でコードを書く場合は REST、モデルに処理させる場合は MCP を選んでください。
単一プラットフォームの API やスクレイパーとは何が違いますか?
単一プラットフォームの API では 1 つの情報源の情報しか得られないため、「このヴィラは Booking.com と Vrbo のどちらが安いか」といったプラットフォーム横断の質問には、構造上答えられません。SERP スクレイパーは未加工のページスナップショットを渡すため、自分で解析・正規化する必要があります。また、評価尺度も標準化された設備分類体系もなく、解析した行が問い合わせた物件である保証もありません。このサーバーは 4 つの情報源を1 つのスキーマで返し、ネイティブの評価尺度を明示して、暗黙に換算することはありません。また、各サイトのオファーに加え、算出された最低値と中央値を返す compare_prices を提供します。さらに、推測による回答は行いません。掲載情報の正規化された識別情報が問い合わせ内容と一致しない場合、もっともらしい誤った物件情報を返すのではなく、identity_mismatch エラーを返します。失敗した呼び出し、結果が空の呼び出し、ブロックされた呼び出しに料金が発生することはありません。
AI を使って Booking.com、Airbnb、Vrbo のホテル料金を比較するにはどうすればよいですか?
この MCP サーバーをアシスタントに接続し、「このホテルの 7 月 13 日から 20 日までの料金を予約サイト間で比較して」と自然な言葉で尋ねてください。モデルは物件名と日付を指定して compare_prices を呼び出します。指定した通貨で各サイトの合計金額が返され、StayingAPI が算出した min と median のフィールドも含まれるため、アシスタントは最安のオファーだけでなく、通常の価格と比べてどの程度安いかも伝えられます。複数のサイトで異なる名前を使って掲載されている、短期賃貸の同一物件を探す場合は、まず search_stays で候補を見つけ、次に各プラットフォームで get_price を呼び出して、指定した日付と宿泊人数に応じた正確な料金を取得するのが一般的な流れです。クイックインストール の自動呼び出しルールを追加すると、宿泊について話題にした際に、アシスタントが必要に応じてこれらのツールを自動で使うようになります。
AI エージェントはホテルだけでなく、バケーションレンタルや短期賃貸も検索できますか?
はい。意図的にそうしており、ホテルとバケーションレンタルの両方に対応する MCP である理由です。ホテルは Google Hotels と Booking.com、短期賃貸は Airbnb と Vrbo 経由で取得します。重要なのは、どちらも同じオブジェクト形式で返されることです。市内中心部のホテルの客室も、田舎の別荘も、物件タイプ、寝室数、バスルーム数、最大宿泊人数、統一されたアメニティ一覧、明示された評価スケール付きのゲスト評価、料金内訳付きの価格を返します。そのためエージェントは、「Split の近くで 4 人が泊まれて、プール付きのホテルかアパートメントを、安いほうで」と一度の検索で答えられます。2 つのインテグレーションを実行して結果を照合する必要はありません。search_stays は platforms[] フィルターと propertyType[] フィルターを受け付けるため、レンタルだけ、ホテルだけに絞り込むことも、両方を比較することもできます。
どのようなデータが返されますか?
すべてのツールが同じ { data, meta } エンベロープを返します。物件レコードには、識別情報(プラットフォーム、プラットフォーム固有の掲載 ID、正規 URL)、基本情報(物件タイプ、寝室数、バスルーム数、最大宿泊人数、地理情報)、9 段階の評価が 5 段階の 4.5 と混同されないよう、明示的な ratingScale が付いたゲスト評価、4 つのプラットフォーム間で統一された正規のアメニティ一覧、ホストの詳細、フル解像度の写真 URL、1 泊あたりの料金、合計料金、宿泊数、料金内訳を含む価格が含まれます。空室状況では、日ごとの available、minNights、checkIn、checkOut、bookable が返されます。レビューでは、元のスケールでの評価、タイトル、本文、投稿者、日付、旅行タイプ、言語、オーナーの返信、気に入った点・気に入らなかった点が返されます。meta ブロックには常にリクエスト ID、プラットフォームごとのステータスとキャッシュフラグ、ページネーションカーソル、警告が含まれるため、一部の結果と完全な結果を見分けられます。
Claude、ChatGPT、または Cursor に追加するにはどうすればよいですか?
Claude Desktop と Claude Web:Settings、Connectors、Add custom connector の順に開き、https://mcp.stayingapi.com/mcp を貼り付けて OAuth ポップアップを完了します。Claude Code:claude mcp add --transport http stayingapi https://mcp.stayingapi.com/mcp を実行し、続いて /mcp を実行して認証します。ChatGPT:Settings、Apps & Connectors、Advanced settings で Developer Mode を有効にし、その後 Settings、Connectors、Add MCP server の順に開いて、同じ URL を貼り付け、OAuth プロンプトを完了します。Cursor:この README の上部にあるワンクリックバッジを使うか、すべてのプロジェクトに追加する場合は {"mcpServers":{"stayingapi":{"url":"https://mcp.stayingapi.com/mcp"}}} を ~/.cursor/mcp.json に、1 つのプロジェクトだけに追加する場合は .cursor/mcp.json に追加します。ほかの MCP クライアントも使用できます。同じ URL を Streamable HTTP サーバーとして追加すれば、Dynamic Client Registration に対応するクライアントは追加の設定なしで OAuth をネゴシエートします。サーバーはホストされているため、どの場合もセットアップは 1 分もかかりません。インストールも、ランタイムの管理も、パッケージの更新も不要です。クライアントごとの詳しい手順は Quick Install にあります。間違った設定ブロックでは得られる唯一のインストール機会を無駄にする可能性があるため、公式ドキュメントに照らして検証済みの設定のみを掲載しています。
料金はいくらですか?
登録すると、カード不要で無料クレジットを 300 件分利用できます。また、REST API では stay_test_ サンドボックスキーを使うと、決定論的なテストデータを永久に無料で取得できるため、何も支払うことなくインテグレーション全体を構築してテストできます。その後はクレジット制となり、現在の呼び出しごとの料金とプラン料金は 料金ページで確認できます。この README には有料の料金をあえて記載していないため、ここで古くなることはありません。プランにかかわらず、常に無料のものが 3 つあります。失敗した呼び出し、空の呼び出し、ブロックされた呼び出し(creditsCharged は 0)、get_job のポーリング、そしてすべての REST サンドボックス呼び出しです。MCP と REST は同じ 1 つの残高を使うため、MCP サーバーを追加しても別の請求は発生しません。アカウントのメールアドレスを認証するとライブクレジットが利用可能になります。それまではサンドボックスをすべて利用できます。
StayingAPI は Airbnb、Booking.com、Vrbo、Google Hotels と提携していますか?
いいえ。StayingAPI は独立したサービスです。StayingAPI は Airbnb、Booking.com、Vrbo、Google Hotels と提携、承認、または後援を受けていません。これらは各所有者の商標であり、StayingAPI の API と MCP サーバーが照会できるデータソースを示すために、説明目的で使用しています。 当社は予約プラットフォームのパートナー、再販業者、または認定インテグレーションではなく、いずれとも契約を結んでおらず、いずれもこのプロジェクトを推奨、審査、承認していません。プラットフォーム名はこの README 全体、platforms[] 列挙型、ツールのパラメーターで、各呼び出しの対象となるデータソースを示す説明ラベルとしてのみ使用しています。これは価格比較ツールが確認対象の店舗名を挙げるのと同じです。StayingAPI は予約の申し込み、キャンセル、変更を行いません。7 つのツールはすべて読み取り専用で、readOnlyHint: true と注釈されており、書き込みツールは一切ありません。実際に宿泊先を予約する場合は、各宿泊施設とともに返される正式な掲載ページの url にアクセスし、そのプラットフォームで直接予約してください。
API キーを取得 — 300 クレジット無料、カード不要 · MCP ドキュメント · 料金 · ステータス
MIT ライセンスのもとで公開されています。StayingAPI は独立したサービスであり、いかなる予約プラットフォームとも提携しておらず、推奨も受けていません。プラットフォーム名は各所有者の商標です。
コメント
AI アプリケーションが外部のツールやデータソースに統一的な方法で接続するためのオープンなプロトコルです。クライアントはモデルとの対話を担い、MCP サーバーはツール・リソース・プロンプトテンプレートを提供します。標準メッセージでやり取りするため、1 つのサーバーを複数のクライアントで再利用できます。