Inside Airbnb について
Inside Airbnb は、短期賃貸の調査向け MCP サーバーで、対象都市の Airbnb 統計と条件指定可能なリスティング情報を提供します。価格、部屋タイプ、近隣地区、空室状況などを含み、都市ごとのスクレイピング日も確認できます。
主な機能
- 01対象都市とリスティング数の一覧
- 02都市・部屋タイプ・地区別の価格中央値
- 03リスティング情報の条件指定検索
- 04空室状況とレビュー数の取得
活用シーン
- 01都市間の短期賃貸価格の比較
- 02地区や部屋タイプ別の掲載状況分析
- 03価格や部屋タイプによるリスティング絞り込み
MCP 対応
対象都市の一覧、都市別サマリー、リスティング検索の MCP ツールを提供します。Pipeworx ゲートウェイへの接続、またはローカルの stdio MCP サーバーとして実行できますが、単独実行では検索データを利用できません。
設定
リモートサーバーはインストール不要です。クライアントを選んで設定をコピーするか、ワンクリックで導入できます。
https://gateway.pipeworx.io/inside-airbnb/mcpclaude mcp add --transport http pipeworx-io-inside-airbnb https://gateway.pipeworx.io/inside-airbnb/mcp{"mcpServers":{"pipeworx-io-inside-airbnb":{"type":"http","url":"https://gateway.pipeworx.io/inside-airbnb/mcp"}}}Cursor で開く{"servers":{"pipeworx-io-inside-airbnb":{"type":"http","url":"https://gateway.pipeworx.io/inside-airbnb/mcp"}}}VS Code で開く{"mcpServers":{"pipeworx-io-inside-airbnb":{"type":"http","url":"https://gateway.pipeworx.io/inside-airbnb/mcp"}}}{"mcpServers":{"pipeworx-io-inside-airbnb":{"serverUrl":"https://gateway.pipeworx.io/inside-airbnb/mcp"}}}コマンドはターミナルで実行し、JSON は各クライアントの MCP 設定に貼り付けて再起動します。認可が必要なサーバーは初回接続時にログインを求めます。
ツール
44| パラメーター | 型 | 必須 | 説明 |
|---|---|---|---|
| q | string | いいえ | question の別名。 |
| ask | string | いいえ | question の別名。 |
| text | string | いいえ | question の別名。 |
| input | string | いいえ | question の別名。 |
| packs | array | いいえ | 任意。ルーティング対象をこれらのパックスラッグに限定します(例:["sec-form-d","sec-13f"])。その場合、ルーターは該当パック内のツールのみを選択します。省略すると、デフォルトの全カタログへのルーティングになります。スラッグは list_packs / search_packs / https://pipeworx.io/directory から取得できます。リストにない、または不明なスラッグは無視され、_meta.pack_scope.ignored に記載されます。該当するスラッグが 1 つもない場合は、カタログ全体にルーティングし、_meta.pack_scope.full_catalog:true を設定します(空の回答にはなりません)。 |
| query | string | いいえ | question の別名。 |
| prompt | string | いいえ | question の別名。 |
| message | string | いいえ | question の別名。 |
| question | string | はい | 自然言語での質問またはリクエスト。query、q、prompt、text、input、ask、message をエイリアスとして使用できます。 |
詳細
@pipeworx/inside-airbnb
都市別の短期賃貸(Airbnb)リスティング:宿泊料金の中央値、部屋タイプと地域別の内訳、およびフィルター可能なリスティング単位の行データ(料金、部屋タイプ、空室状況、レビュー数)。このパックが読み込んだすべての都市が対象です。Fleet #2973。
Pipeworx の一部です。AI エージェントを1784以上のライブデータソースに接続するMCPゲートウェイです。これは独立した非公式の連携であり、上流プロバイダーとの提携、同社による承認、または同社による公開はありません。
ツール
list_str_cities()— 対象となるすべての都市と、リスティング数、全体の宿泊料金の中央値、その都市独自のスクレイピング日(data_as_of— 対象期間は都市ごとに異なります)。str_city_summary(city)— リスティングの総数、全体の料金中央値、部屋タイプ別の内訳(一軒家/アパート全体、個室、シェアルーム、ホテルの部屋。各タイプの件数と料金中央値を表示)、およびリスティング数が多い地域(各地域の件数と料金中央値を表示)。対象外の都市を指定すると、その都市名を示して拒否し、対象となるすべての都市を列挙します。str_listings(city, neighbourhood?, room_type?, min_price?, max_price?, limit?, offset?)— リスティング単位の行データ:ID、公開リスティングURL、リスティング名、地域、部屋タイプ、料金、最低宿泊数、レビュー数、最終レビュー日、availability_365、およびホストのリスティング総数(単なる数値)。limitのデフォルトは50(最大200)です。一致する行が返却件数を超える場合は、黙って省略せず、truncated: trueとtotal_matchingを付けて返します。
都市名は柔軟に解決されます("NYC"、"New York"、"new-york-city" はすべて使用できます。src/store.ts の CITY_ALIASES を参照)。room_type は4つの標準値、または柔軟な一致を受け付けます("apartment" → "Entire home/apt")。
個人データ
Inside Airbnb のリスティングごとの生データファイルには、すべての行に host_id、host_profile_id、host_name(ホストの名前)、license(地域の登録番号が含まれる場合があります)が含まれます。この4列はいずれもローダーで読み込まれず、このパックがデータを提供するD1テーブルにも存在しません。誤って選択される可能性のある列がないのであり、単に応答の形式から除外されているのではありません。calculated_host_listings_count は単なる件数で識別子ではないため保持されます。これはホストが運営するリスティングの数であり、ホストが誰かを示すものではありません。すべての応答はリスティング単位または都市/地域単位の情報のみです。料金、部屋タイプ、空室状況、地域、レビュー数、およびそれらから作成された集計に加え、リスティングIDと公開されている https://www.airbnb.com/rooms/<id> URL(どちらもAirbnbのサイトですでに公開されています)が含まれます。
認証
キーは不要です。ツールが応答するのは、データを保持するPipeworxゲートウェイ経由のみです。単独で npm install しても読み取れるデータはなく、そこで各ツールを呼び出すと、空のリストを返す代わりに「このランタイムではバインドされていません」という明確なエラーが発生します。
ライセンス
Inside Airbnb は CC BY 4.0
(https://creativecommons.org/licenses/by/4.0/) で公開しています。Inside Airbnb 独自の帰属表示要件に従い、ここのすべてのツールの応答には、このライセンスを記載した source、source_url、license、attribution フィールドが含まれます。
データソース
- Inside Airbnb、都市別リスティング概要 — CC BY 4.0 のもとで都市ごとに独立してスクレイピング・公開されている、公開Airbnbリスティングデータのコミュニティ管理スナップショットです。このプロジェクトが公開しているのは都市ごとの一括ファイルのみで(ライブクエリAPIはありません)、そのためこのパックはプロキシではなくコピーを作成します(
scripts/inside-airbnb/load-data.mjs)。PUBLISHERとDATASETのみを記載してください。ダウンロードパス、ディレクトリ、ファイル名、エンドポイント、フィードURL、クエリ形式は記載しないでください(CLAUDE.md の手順9b)。ルートはscripts/inside-airbnb/load-data.mjsにのみ存在します。
カバー範囲
北米、ヨーロッパ、アジア太平洋地域の主要都市を厳選し、南米、アフリカ、中東の都市もいくつか含めています。現在の正確な対象都市一覧は list_str_cities を、完全なテーブル(スラッグ、国、スクレイピング日)は scripts/inside-airbnb/load-data.mjs をご覧ください。これはInside Airbnbが公開しているすべての都市を網羅するものではありません(対象は100都市以上です)。地域の幅広さを考慮して選んだ代表的な都市の一部です。対象範囲を広げるには、ローダーの CITIES テーブルに行を追加し、--cities <new-slug> を指定して再実行します。スキーマやツールに変更はありません。
既知の制約 — このパックを拡張する前にお読みください
各都市のスクレイピング日は個別に管理されており、ずれていきます。 Inside Airbnbは都市ごとに独自の頻度で再スクレイピングを行っているため(およそ四半期ごとですが、都市間で同期されていません)、同じ実行で読み込んだ都市間でも data_as_of が異なるのは当然です。これはバグではなく、このパックが都市ごとに保持する唯一の真のデータ来歴情報です。データを更新する際は、ローダーに組み込まれた日付を再利用するのではなく、https://insideairbnb.com/get-the-data/ で各都市の現在の日付を再確認してください。
中央値はクエリ時ではなく、読み込み時に事前計算されます。 D1/SQLiteには MEDIAN() 集約関数がありません。また、リクエストごとに地域ごとに通常の整数オフセットサブクエリを一度実行すると、D1のクエリごとのCPU予算を大きく超過してしまいます。ローダーはNodeで都市全体のメモリ上の価格配列を使い、都市全体、部屋タイプ別、地域別のすべての中央値を一度だけ計算し、その結果を保存します。そのため、str_city_summary はN回ではなく、1回の SELECT で済みます。集計項目を拡張する(価格パーセンタイルを追加するなど)場合は、実行時のクエリではなく、ローダーの集計処理を変更する必要があります。
listings.name はリスティング自体のタイトルであり、ホストの情報ではありません。 これはホストが物件について記載した自由記述のテキスト(例:「公園近くの居心地のよいワンルーム」)であり、除外対象ではありません。このパックが削除する4つの個人情報フィールドには該当しません。ホストがリスティングのタイトルに自分の名前を記載していた場合でも、その情報はすでにAirbnbの公開ページに掲載されています。このパックが host_name 列の内容を参照することは一切なく、その列は個人情報として明示的に区別されています。そのため、この列でInside Airbnbが公開している内容を超えて情報が露出することはありません。
データの更新または拡張
node scripts/inside-airbnb/load-data.mjs # full reload, all covered cities
node scripts/inside-airbnb/load-data.mjs --cities paris,london # reload a subset
node scripts/inside-airbnb/load-data.mjs --concurrency 4 # be gentler on the upstream
Pipeworx Cloudflareアカウントに wrangler でログインしている必要があります。実行するたびに、cities、neighbourhoods、listings は追記ではなく、DROPして再読み込みすることで置き換えられます。対象は指定した都市です。--cities で一部の都市を指定して再読み込みしても、スキーマ全体のDROPと再構築が行われます。そのため、全件読み込み後に一部の都市だけを指定して実行しても、ほかの都市のテーブルが残るのは、DROP TABLE と CREATE TABLE が都市ごとではなく、実行全体につき一度だけ行われるためです。一部の都市を指定して再実行するのは、その都市の解析をテストするためであり、本番環境の一部更新には使用しないでください。本番環境のデータを更新する場合は、保持するすべての都市を指定するか、--cities を省略してください。
クイックスタート
MCPクライアント(Claude Desktop、Cursor、Windsurfなど)に追加します:
{
"mcpServers": {
"inside-airbnb": {
"url": "https://gateway.pipeworx.io/inside-airbnb/mcp"
}
}
}
このエンドポイントが実際に提供するもの
https://gateway.pipeworx.io/inside-airbnb/mcp の tools/list は、上の表にあるツールに加えて、共有 Pipeworx メタツール(ask_pipeworx、discover_tools、search_within、remember/recall など、ゲートウェイ全体で使えるツール群)も返します。そのため、表示されるツール数はこの表より多くなります。単一パックのエンドポイントでは現在、パック固有のツールとあわせて、共有ツールが約 30 個表示されます。接続の initialize レスポンスには正確な範囲が記載され、その日の状況を確認するための信頼できる情報となります。
これは意図的な設計であり、偶然に多重化されているわけではありません。メタツールを使えば、このパックの対象外の質問にも、カタログ全体を検索する ask_pipeworx 経由で回答できます。MCP サーバーをもう 1 つ追加する必要はありません。現時点では、メタツールを含めずにパックのエンドポイントを接続する方法はありません。追加のスキーマによるコンテキスト消費が、ルーティングの利点を上回る場合は、複数のパックエンドポイントではなく、フルゲートウェイに一度だけ接続してください。
または、Pipeworx のフルゲートウェイに接続すると、このパックのツールだけでなく、すべてのパックのツールが直接一覧表示されます。
{
"mcpServers": {
"pipeworx": {
"url": "https://gateway.pipeworx.io/mcp"
}
}
}
どちらの URL も、同じゲートウェイと同じ 1784 以上のデータソースに接続します。異なるのは、どのパックのツールが直接一覧表示されるかだけです。どちらから接続しても、ask_pipeworx ですべてのツールを利用できます。
MCP クライアントがない場合:HTTP 経由で呼び出す
curl -X POST https://gateway.pipeworx.io/v1/tools/list_str_cities \
-H 'Content-Type: application/json' \
-d '{}'
最初の呼び出しにアカウントは不要です。任意のツールを確認するには、GET https://gateway.pipeworx.io/v1/tools/list_str_cities を実行します。ツールを検索するには、{"query":"..."} を指定して POST https://gateway.pipeworx.io/v1/tools/search_packs を実行します。
スタンドアロン(ゲートウェイアカウント不要)
このパッケージはローカルの stdio MCP サーバーとしても実行できます。Pipeworx アカウントも、ゲートウェイへの往復通信も不要です。
{
"mcpServers": {
"inside-airbnb": {
"command": "npx",
"args": ["-y", "@pipeworx/mcp-inside-airbnb"]
}
}
}
または、直接実行して起動することを確認できます。
npx -y @pipeworx/mcp-inside-airbnb
stdin/stdout 経由で MCP を通信し、このパックのツールのみを対象に initialize/tools/list/tools/call に応答します。上記のゲートウェイ接続で追加される共有メタツールは含まれません。同じソース、同じツールで、ask_pipeworx によるルーティングはありません。
ask_pipeworx の使用
ツールを直接呼び出す代わりに、自然な英語で質問できます。この方法は、上記のパックエンドポイントでも、フルゲートウェイでも使えます。
ask_pipeworx({ question: "your question about Inside Airbnb data" })
ゲートウェイが適切なツールを選択し、引数を自動的に設定します。
詳細
ライセンス
MIT
コメント
AI アプリケーションが外部のツールやデータソースに統一的な方法で接続するためのオープンなプロトコルです。クライアントはモデルとの対話を担い、MCP サーバーはツール・リソース・プロンプトテンプレートを提供します。標準メッセージでやり取りするため、1 つのサーバーを複数のクライアントで再利用できます。