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

Glama score tool contract MCP Tools npm PyPI License

Conteúdo

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.

CampoValor
URLhttps://mcp.hasdata.com/api/mcp?apis=airbnb
TransporteHTTP, transmissível
Cabeçalho de autenticaçãox-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âmetroTipoObrigatórioObservações
locationstringsimO local a buscar, como Austin, Texas
checkInstringsimData de check-in, YYYY-MM-DD
checkOutstringData de check-out, YYYY-MM-DD
adults / children / infants / petsnúmeroComposição de hóspedes, cada um uma contagem
nextPageTokenstringO 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âmetroTipoObrigatórioObservações
urlstringsimUma 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 AirbnbEste servidor
PropósitoGerenciar seus próprios anúnciosLer o mercado público
AcessoAprovação de parceiroUma chave e uma URL
Busca no mercadoNãoSim
ConfiguraçãoOnboarding de negóciosNenhuma
SaídaPayloads de parceiroJSON 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çõesAirbnb Scraper API
Documentação do servidorDocumentação do servidor MCP
Todas as 57 ferramentas em um servidorHasData/hasdata-mcp
Tutoriais para clientesClientes e integrações MCP
Tudo o mais que extraímosAirbnb Scraper API e mais 54
Planos e custos de créditosPlanos e custos de créditos
Chaves e usoPainel HasData
Lançador Node no npm@hasdata/airbnb-mcp
Lançador Python no PyPIhasdata-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.