HasData Airbnb MCP Server
Estadias no Airbnb por local e datas, além de detalhes completos do anúncio, em JSON estruturado.
Documentação
Servidor MCP da Airbnb
Um servidor de Model Context Protocol (MCP) hospedado que oferece ao Claude, Cursor, Windsurf e qualquer outro cliente MCP duas ferramentas somente leitura da Airbnb. A busca permanece por local e datas, e lê um único anúncio por completo, tudo como JSON estruturado, sem conta de desenvolvedor da Airbnb e sem aprovação de parceiro.
Ele lê páginas públicas de anúncios que um visitante desconectado pode ver.
https://mcp.hasdata.com/api/mcp?apis=airbnb
Conteúdo
- O que você precisa
- Início rápido
- Exemplos de prompts
- Ferramentas
- Erros e caminhos de falha
- Preços, camada gratuita e limites
- Seleção de ferramentas
- Como se compara
- Perguntas frequentes
- Links da HasData
- Desenvolvimento
- Contribuição
- Licença
O que você precisa
Um cliente MCP e uma chave de API da HasData do painel, gratuita para criar sem cartão, e o teste cobre cerca de 200 chamadas na taxa de 5 créditos. Este é um servidor remoto, então o caminho mais simples é uma URL e um cabeçalho x-api-key, sem contêiner para executar e sem conta de desenvolvedor da Airbnb em nenhum lugar do fluxo. Um cliente que só fala stdio o acessa por meio de um lançador leve, publicado como @hasdata/airbnb-mcp no npm e hasdata-airbnb-mcp no PyPI, mostrado abaixo.
Início rápido
A URL do servidor é a mesma para todos os clientes. Nós o executamos na prática no Claude Code e no Claude Desktop. Os outros blocos seguem o formato documentado de cada cliente para um servidor remoto.
| Campo | Valor |
|---|---|
| URL | https://mcp.hasdata.com/api/mcp?apis=airbnb |
| Transporte | HTTP, transmissível |
| Cabeçalho de autenticação | x-api-key: HASDATA_API_KEY |
Clientes com suporte a OAuth podem adicionar a mesma URL como um conector e entrar sem colocar uma chave em um arquivo de configuração.
Claude Code
claude mcp add --transport http airbnb "https://mcp.hasdata.com/api/mcp?apis=airbnb" \
--header "x-api-key: HASDATA_API_KEY"
Claude Desktop
Configurações, depois Conectores, depois Adicionar conector personalizado, depois cole https://mcp.hasdata.com/api/mcp?apis=airbnb e entre.
Para o caminho do arquivo de configuração, o Claude Desktop carrega apenas servidores locais (stdio), então ele acessa um servidor remoto por meio de um lançador stdio. O pacote @hasdata/airbnb-mcp é esse lançador, e ele lê a chave do ambiente. Adicione isto a claude_desktop_config.json:
{
"mcpServers": {
"airbnb": {
"command": "npx",
"args": ["-y", "@hasdata/airbnb-mcp"],
"env": { "HASDATA_API_KEY": "YOUR_KEY" }
}
}
}
Para Python em vez de Node, troque o lançador pelo pacote PyPI, que uvx executa sem instalação manual:
{
"mcpServers": {
"airbnb": {
"command": "uvx",
"args": ["hasdata-airbnb-mcp"],
"env": { "HASDATA_API_KEY": "YOUR_KEY" }
}
}
}
Cursor
~/.cursor/mcp.json para todos os projetos, ou .cursor/mcp.json para um:
{
"mcpServers": {
"airbnb": {
"url": "https://mcp.hasdata.com/api/mcp?apis=airbnb",
"headers": { "x-api-key": "HASDATA_API_KEY" }
}
}
}
Windsurf
~/.codeium/windsurf/mcp_config.json. O Windsurf chama o campo serverUrl, não url:
{
"mcpServers": {
"airbnb": {
"serverUrl": "https://mcp.hasdata.com/api/mcp?apis=airbnb",
"headers": { "x-api-key": "HASDATA_API_KEY" }
}
}
}
VS Code
.vscode/mcp.json no espaço de trabalho:
{
"servers": {
"airbnb": {
"type": "http",
"url": "https://mcp.hasdata.com/api/mcp?apis=airbnb",
"headers": { "x-api-key": "HASDATA_API_KEY" }
}
}
}
Exemplos de prompts
Prompts, não código. Cole um e o agente escolhe a ferramenta sozinho. Cada um é anotado com as chamadas que faz, porque cada chamada bem-sucedida custa 5 créditos.
Busque estadias em Austin para dois adultos de 15 a 18 de setembro e me dê as dez mais bem avaliadas abaixo de US$ 200 por noite.
Uma chamada, 5 créditos. Avaliação e preço por noite voltam no resultado da busca.
Pegue o melhor resultado e extraia as comodidades completas, a contagem de hóspedes e quartos e os detalhes do anfitrião.
Uma chamada, 5 créditos. Esses dados estão na página da propriedade, que a ferramenta de detalhes lê pela URL.
Compare o preço por noite de uma estadia de três noites para dois hóspedes em Austin com Nashville.
Duas chamadas, 10 créditos, uma busca por cidade.
Para esta URL de anúncio, me diga quantas camas e banheiros tem e se o anfitrião é um Superhost.
Uma chamada, 5 créditos.
Um resultado de busca é deliberadamente leve, suficiente para classificar e pré-selecionar. As comodidades, camas, anfitrião e descrição completa vêm da chamada de propriedade, então um prompt que pré-seleciona e depois inspeciona três casas é uma busca mais três chamadas de propriedade.
Ferramentas
Duas ferramentas, somente leitura. As amostras abaixo são reduzidas de chamadas reais, e os números mudam conforme a Airbnb atualiza. Leia-as como formatos. Cada nome de ferramenta vincula à referência de endpoint, que traz a lista completa de campos.
As amostras são o payload, não a resposta inteira. Um resultado tools/call carrega um bloco de texto, e esse texto é em si JSON contendo url, status, text e json, com os dados extraídos sob json. De uma resposta JSON-RPC bruta, o caminho é result.content[0].text, analisado, depois .json. Um cliente de chat desembrulha isso para você, e código que fala diretamente com o endpoint não faz.
Obter anúncios da Airbnb
hasdata_airbnb_listing_getAirbnbListings
Uma página de resultados de busca por local e datas.
| Parâmetro | Tipo | Obrigatório | Observações |
|---|---|---|---|
location | string | sim | O local a buscar, como Austin, Texas |
checkIn | string | sim | Data de check-in, YYYY-MM-DD |
checkOut | string | Data de check-out, YYYY-MM-DD | |
adults / children / infants / pets | número | Composição de hóspedes, cada um uma contagem | |
nextPageToken | string | O pagination.nextPageToken da resposta anterior |
Retorna um array properties e pagination, cujos nextPageToken e pageTokens percorrem o conjunto de resultados. Cada propriedade carrega id, url, title, latitude, longitude, um slogan curto description, um array photos, rating, reviews, um array badges como Guest favorite ou Superhost, e um objeto price. price contém originalPrice, um discountedPrice opcional quando a estadia está com desconto, um qualifier como for 3 nights, e um breakdown.
Um resultado de busca é intencionalmente leve. Camas, banheiros, comodidades, o anfitrião e a descrição completa não estão aqui; eles vêm da ferramenta de propriedade abaixo. Não espere uma contagem de quartos em um resultado de busca.
{
"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" }]
}
}
Obter detalhes da propriedade da Airbnb
hasdata_airbnb_property_getAirbnbPropertyDetails
Um anúncio completo, pela URL.
| Parâmetro | Tipo | Obrigatório | Observações |
|---|---|---|---|
url | string | sim | Uma URL de anúncio da Airbnb, o campo url de um resultado de busca |
Retorna title, um array overview como ["4 guests", "2 bedrooms", "2 beds", "2 baths"], o description completo, rating, reviews, address, latitude, longitude, um array photos, guestCapacity, um objeto host, um array amenities, e safetyAndPropertyInfo. O objeto host carrega name, isSuperhost, isVerified, o próprio reviews do anfitrião, rating e yearsHosting. Cada comodidade carrega um title, um type, um description opcional e um sinalizador available, então um filtro lê available, não assume que toda comodidade listada está presente.
{
"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 }
]
}
Erros e caminhos de falha
Seu cliente quase nunca vê um código de erro HTTP de uma chamada de ferramenta. A camada MCP responde 200 e coloca a falha dentro do resultado, com isError definido como true e o motivo como texto. O agente lê uma mensagem onde você poderia esperar uma linha de status.
Uma chave errada aparece como saída de ferramenta, não como conexão falha. tools/list aceita qualquer chave não vazia e retorna ambas as ferramentas, então o cliente completa o handshake e mostra verde. A primeira chamada de ferramenta então volta com isError: true e o texto HasData API error: 401 Unauthorized. Fique atento a essa string, porque nada antes no fluxo relata o problema.
Uma chave ausente é o único erro HTTP real. A autorização roda antes de qualquer ferramenta, e a conexão em si falha com 401. Cabeçalhos CORS estão presentes, e um cliente de navegador lê o status e não uma falha de rede opaca.
Um argumento que quebra o esquema de uma ferramenta é rejeitado antes de virar uma extração. O servidor responde com isError: true e o texto MCP error -32602: Input validation error, nomeando o campo problemático. Nada é buscado e nada é cobrado.
Uma busca sem disponibilidade retorna um resultado bem-sucedido com um array properties vazio, não um erro. Um local e intervalo de datas sem nada aberto ainda volta com requestMetadata.status definido como ok. Teste o comprimento do array antes de iterar.
Um anúncio que foi removido retorna 400 com requestMetadata.status definido como error. Uma URL de uma busca antiga pode apontar para uma casa que não existe mais.
Resultados que carregam dados também carregam um requestMetadata.id que vale citar no suporte.
Preços, camada gratuita e limites
Cada ferramenta da Airbnb custa 5 créditos por chamada bem-sucedida. O tamanho da resposta não muda o preço. Uma página de busca com dezenas de estadias custa o mesmo que uma com duas.
O teste gratuito é 1.000 créditos por 30 dias sem cartão, o que equivale a 200 chamadas da Airbnb. Depois disso, uma conta ativa continua recebendo 100 créditos recarregados diariamente sempre que o saldo cair abaixo de 100, então um agente de baixo volume roda na camada gratuita indefinidamente.
Planos pagos começam em US$ 49 por mês para 200.000 créditos, o que equivale a 40.000 chamadas. O preço unitário cai com o volume, de US$ 1,23 por 1.000 chamadas no plano inicial para US$ 0,50 no Business, US$ 0,42 no Growth e US$ 0,37 nos maiores planos de alto volume.
Seu plano também define concorrência. O teste gratuito permite 1 requisição por vez, Startup 15, Business 30, Growth 50, e os planos de alto volume rodam de 200 a 1.500. Trate o caso de estouro defensivamente em qualquer coisa não supervisionada.
Uma requisição que volta com status diferente de 200 não é cobrada. Uma chamada bem-sucedida que não encontra nada ainda é uma chamada.
Seleção de ferramentas
O parâmetro de consulta apis decide quais ferramentas seu agente vê. Menos ferramentas significa menos contexto gasto em definições de ferramentas e menos chances de o modelo alcançar a errada.
?apis=airbnb the two tools in this repo
?apis=airbnb,booking add Booking.com stays
?apis=airbnb,google_maps add Google Maps places
O parâmetro aceita nomes de provedores como airbnb e nomes de APIs individuais como airbnb_listing. Nomes com erro de digitação são ignorados. Se todos os nomes estiverem errados, a requisição falha com 400, e o corpo lista tanto o que não reconheceu quanto todos os valores válidos. Remova o parâmetro e o mesmo endpoint expõe todas as 57 ferramentas da HasData.
Como se compara
A Airbnb não tem API pública de busca. Seu programa de API é uma integração de parceiro e co-anfitrião para gerenciar seus próprios anúncios, não uma forma de ler o mercado. Para buscar estadias e ler anúncios arbitrários, extrair as páginas públicas é o único caminho, e este servidor faz isso por trás de um esquema estável.
| API de parceiro da Airbnb | Este servidor | |
|---|---|---|
| Propósito | Gerenciar seus próprios anúncios | Ler o mercado público |
| Acesso | Aprovação de parceiro | Uma chave e uma URL |
| Busca no mercado | Não | Sim |
| Configuração | Onboarding de negócios | Nenhuma |
| Saída | Payloads de parceiro | JSON estruturado, preço e avaliação pré-analisados |
O que este servidor não faz. Sem reservas, sem mensagens, sem painel de anfitrião, sem dados de hóspedes. Ele lê o que um visitante desconectado pode ver.
Perguntas frequentes
Existe um servidor MCP oficial da Airbnb?
A Airbnb não publica um. Este é mantido pela HasData e lê páginas públicas, por isso não precisa de conta de desenvolvedor da Airbnb.
O que é um servidor MCP da Airbnb?
Um servidor que expõe dados do Airbnb como ferramentas que um cliente de IA pode chamar. O cliente envia uma chamada de ferramenta pelo Model Context Protocol, o servidor busca os dados e retorna JSON estruturado, e o modelo trabalha com o resultado. Este expõe duas ferramentas e roda remotamente.
Preciso de uma chave de API do Airbnb ou conta de parceiro?
Não. A única credencial é a sua chave HasData. Não há integração de parceiro, porque as ferramentas leem páginas públicas do Airbnb.
Por que o resultado da busca não mostra camas ou comodidades?
Porque o Airbnb não as coloca no cartão de busca. Elas ficam na página da propriedade, que a ferramenta de detalhes lê pela URL. Busque para fazer uma lista curta e depois chame a ferramenta de propriedade para obter profundidade.
Posso filtrar por hóspedes, animais de estimação ou datas?
Sim. A ferramenta de listagem aceita checkIn, checkOut e as contagens de adults, children, infants e pets, e retorna disponibilidade e preços para esse grupo e período.
Posso usar isso junto com outras APIs HasData?
Sim. O parâmetro apis aceita uma lista, e ?apis=airbnb,booking dá ao seu agente Airbnb mais Booking.com. Remova o parâmetro e você obtém tudo.
Conformidade e dados pessoais
A HasData acessa apenas dados publicamente disponíveis. Os termos de uma plataforma podem restringir o acesso automatizado, e você é responsável pela sua própria conformidade. Quando os dados que você coleta incluem informações pessoais, certifique-se de ter uma base legal para isso sob o GDPR, CCPA ou as regras equivalentes na sua jurisdição.
Links HasData
| Página do produto e construtor de solicitações | Airbnb Scraper API |
| Documentação do servidor | Documentação do servidor MCP |
| Todas as 57 ferramentas em um servidor | HasData/hasdata-mcp |
| Tutoriais para clientes | Clientes e integrações MCP |
| Tudo o mais que extraímos | Airbnb Scraper API e mais 54 |
| Planos e custos de créditos | Planos e custos de créditos |
| Chaves e uso | Painel HasData |
| Lançador Node no npm | @hasdata/airbnb-mcp |
| Lançador Python no PyPI | hasdata-airbnb-mcp |
Desenvolvimento
Este repositório é configuração e documentação para um servidor remoto. Não há etapa de build e nada para containerizar.
Os testes em test/ verificam o contrato das ferramentas, a parte que pode quebrar sem um commit aqui. Eles verificam que ?apis=airbnb retorna exatamente duas ferramentas, que cada ferramenta ainda declara seus parâmetros obrigatórios, que nenhum nome mudou e que a chave em uso é realmente aceita. Essa última verificação chama uma ferramenta de verdade e custa 5 créditos, que é o preço de um canário que pode falhar pelo motivo certo.
# macOS and Linux
HASDATA_API_KEY=your_key_here npm test
# Windows PowerShell
$env:HASDATA_API_KEY="your_key_here"; npm test
A mesma suíte roda no CI a cada push e uma vez por semana em um agendamento, porque a lista de ferramentas upstream pode mudar sem que ninguém toque neste repositório. Uma falha significa que a lista de ferramentas mudou, a chave parou de funcionar ou o endpoint estava inacessível, e a mensagem da verificação diz qual.
Contribuindo
Correções nas tabelas de ferramentas e nos exemplos de resposta são a contribuição mais útil, porque são as partes que se desatualizam. Inclua a chamada que você fez e a resposta que obteve. Pull requests de forks rodam a suíte sem chave, e as verificações ao vivo são puladas em vez de ficarem vermelhas.
Licença
MIT. Veja LICENSE.