HasData Booking.com MCP Server

Estadias no Booking.com por destino e datas, além de detalhes completos das propriedades, em JSON estruturado.

Documentação

Servidor MCP do Booking.com

Um servidor de Model Context Protocol (MCP) hospedado que oferece ao Claude, Cursor, Windsurf e qualquer outro cliente MCP duas ferramentas somente leitura do Booking.com. A busca é feita por destino e datas com filtros avançados, e a leitura de uma propriedade individual completa, tudo como JSON estruturado, sem necessidade de hospedagem.

Ele lê páginas públicas de propriedades no Booking.com que um visitante não autenticado pode ver.

1.000 créditos grátis todo mês, sem necessidade de cartão, o que equivale a 100 buscas no Booking.

https://mcp.hasdata.com/mcp?apis=booking

Glama score tool contract MCP Tools

Conteúdo

O que você precisa

Um cliente MCP e uma chave de API do HasData obtida no painel de controle, gratuita para criar sem cartão, e o plano gratuito cobre 100 chamadas por mês na taxa de 10 créditos. Este é um servidor remoto, então o caminho mais simples é uma URL e um cabeçalho x-api-key, sem necessidade de executar contêiner. Um cliente que só fala stdio o acessa por meio de um lançador leve, publicado como @hasdata/booking-mcp no npm e hasdata-booking-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/mcp?apis=booking
TransporteHTTP, transmissível
Cabeçalho de autenticaçãox-api-key: HASDATA_API_KEY

Clientes com suporte a OAuth podem adicionar a mesma URL como conector e entrar sem colocar uma chave em um arquivo de configuração.

Claude Code
claude mcp add --transport http booking "https://mcp.hasdata.com/mcp?apis=booking" \
  --header "x-api-key: HASDATA_API_KEY"
Claude Desktop

Configurações, depois Conectores, depois Adicionar conector personalizado, depois cole https://mcp.hasdata.com/mcp?apis=booking e entre.

Para o caminho via 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/booking-mcp é esse lançador, e ele lê a chave do ambiente. Adicione isto ao claude_desktop_config.json:

{
  "mcpServers": {
    "booking": {
      "command": "npx",
      "args": ["-y", "@hasdata/booking-mcp"],
      "env": { "HASDATA_API_KEY": "YOUR_KEY" }
    }
  }
}

Para Python em vez de Node, troque o lançador pelo pacote PyPI, que o uvx executa sem instalação manual:

{
  "mcpServers": {
    "booking": {
      "command": "uvx",
      "args": ["hasdata-booking-mcp"],
      "env": { "HASDATA_API_KEY": "YOUR_KEY" }
    }
  }
}
Cursor

~/.cursor/mcp.json para todos os projetos, ou .cursor/mcp.json para um único:

{
  "mcpServers": {
    "booking": {
      "url": "https://mcp.hasdata.com/mcp?apis=booking",
      "headers": { "x-api-key": "HASDATA_API_KEY" }
    }
  }
}
Windsurf

~/.codeium/windsurf/mcp_config.json. O Windsurf chama o campo de serverUrl, não de url:

{
  "mcpServers": {
    "booking": {
      "serverUrl": "https://mcp.hasdata.com/mcp?apis=booking",
      "headers": { "x-api-key": "HASDATA_API_KEY" }
    }
  }
}
VS Code

.vscode/mcp.json no espaço de trabalho:

{
  "servers": {
    "booking": {
      "type": "http",
      "url": "https://mcp.hasdata.com/mcp?apis=booking",
      "headers": { "x-api-key": "HASDATA_API_KEY" }
    }
  }
}

Exemplos de prompts

Prompts, não código. Cole um e o agente escolhe a ferramenta por conta própria. Cada um é anotado com as chamadas que faz, porque cada chamada bem-sucedida custa 10 créditos.

Pesquise no Booking.com por hotéis em Paris de 15 a 18 de setembro para dois adultos, e me dê os dez mais bem avaliados abaixo de US$ 700 pela estadia.

Uma chamada, 10 créditos. Preço, nota de avaliação e localização voltam no resultado da busca.

Pegue o primeiro resultado e traga os detalhes completos: instalações, regras da casa, as opções de quarto e as avaliações por categoria.

Uma chamada, 10 créditos. Esses dados estão na página da propriedade, que a ferramenta de detalhes lê por URL e datas.

Encontre hotéis quatro estrelas em Paris com cancelamento gratuito perto do centro, e liste preço e nota de avaliação.

Uma chamada, 10 créditos. Classificação por estrelas, política de cancelamento e distância são filtros em uma única solicitação.

Compare a estadia mais barata em Paris contra Roma para as mesmas datas.

Duas chamadas, 20 créditos, uma busca por cidade.

A ferramenta de propriedade precisa das mesmas datas e contagens de hóspedes da busca, porque disponibilidade e preço dependem do período. Uma busca para pré-selecionar mais uma chamada de detalhes em três propriedades é uma busca e três chamadas de propriedade.

Ferramentas

FerramentaO que retorna
hasdata_booking_place_getBookingPlaceDetailsA identidade da propriedade (hotelId, título, endereço, coordenadas), políticas (cancelamento gratuito, sem pré-pagamento, estadias com crianças/animais), preço, avaliação e resumo de comentários, fotos e…. 10 créditos por chamada
hasdata_booking_search_getBookingSearchResultsO hotelId de cada hotel, título e URL do Booking, informações de localização (cidade, endereço, coordenadas, distância ao centro / praia mais próxima), políticas (cancelamento gratuito, sem…. 10 créditos por chamada

Duas ferramentas, somente leitura. Os exemplos abaixo foram reduzidos de chamadas reais, e os preços mudam constantemente. Leia-os como formatos. Cada nome de ferramenta leva à referência do endpoint, que traz a lista completa de campos.

Os exemplos 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 isso.

Obter resultados de busca do Booking.com

hasdata_booking_search_getBookingSearchResults

Uma página de estadias por destino e datas.

ParâmetroTipoObrigatórioObservações
keywordstringsimDestino, como Paris ou um nome específico de propriedade
checkInDate / checkOutDatestringsimYYYY-MM-DD, check-in no futuro e antes do check-out
rooms / adults / childrennumbersimComposição de hóspedes. Passe children: 0 quando não houver
childrenAgesstringIdades separadas por vírgula, obrigatório quando children > 0
sortstringpriceLowestFirst, ratingHighToLow, bestReviewedAndLowestPrice, distanceFromDowntown e mais
propertyType__ / rating__ / reviewScore__arrayTipo de propriedade, classificação por estrelas e faixas de nota dos hóspedes
facilities__ / roomFacilities__ / reservationPolicy__arrayFiltros de instalações, do quarto e de cancelamento
price_min_ / price_max_numberFaixa de preço da estadia total
pagenumberCerca de 25 resultados por página, 2 para a próxima página

A referência documenta o conjunto completo de filtros, incluindo distância, refeições, acessibilidade, preferência de cama e grupo de viagem.

Retorna searchInformation, um array de results, e pagination com page, totalResults e totalPages. Cada resultado carrega hotelId, title, url, o room e o bedTypes oferecidos, um objeto location, um objeto policies, um objeto price, a rating de estrelas, um objeto reviews com score, count e um rótulo de texto, e um photo.

O par de descontos em price é discountRaw e discountParsed. Versões anteriores escreviam errado como dicsountRaw e dicsountParsed, e essa grafia não existe mais, então código escrito para ela não lê nada. Observe também que rating é a classificação oficial por estrelas, enquanto reviews.score é a nota dos hóspedes de 0 a 10, dois números diferentes.

{
  "hotelId": 50724,
  "title": "Hôtel du Jardin des Plantes",
  "url": "https://www.booking.com/hotel/fr/timjardindesplantes.html",
  "room": "Comfort Double Room",
  "location": { "city": "Paris", "address": "5 rue Linné", "mainDistance": "0.9 miles from downtown", "centrallyLocated": true },
  "policies": { "freeCancellation": true, "noPrepayment": true },
  "price": { "pricePerStayParsed": 451.36, "priceBeforeDiscountParsed": 885.03, "discountParsed": 433.66, "currency": "USD" },
  "rating": 3,
  "reviews": { "score": 7.5, "count": 1721, "text": "Good" }
}

Obter detalhes da propriedade do Booking.com

hasdata_booking_place_getBookingPlaceDetails

Uma propriedade completa, pela URL e pelo período da estadia.

ParâmetroTipoObrigatórioObservações
urlstringsimUma URL de propriedade do Booking.com, o campo url de um resultado de busca
checkInDate / checkOutDatestringsimYYYY-MM-DD, o período para precificar e verificar disponibilidade
rooms / adults / childrennumbersimComposição de hóspedes, mesmo significado da ferramenta de busca
childrenAgesstringIdades separadas por vírgula, obrigatório quando children > 0

Retorna a página em seções em vez de um único objeto plano: overview (id, title, propertyType, um address estruturado, um description, highlights, mostPopularFacilities e photos), bookingDetails (o período e a moeda que os preços refletem), um array de rooms das suítes disponíveis, cada uma com name, beds, facilities e variants com preço, uma lista de facilities, houseRules, um array de ratings com notas por categoria, reviews e questionsAndAnswers.

{
  "overview": {
    "id": "50724",
    "title": "Hôtel du Jardin des Plantes",
    "propertyType": "HOTEL",
    "address": { "country": "France", "zipcode": "75005" },
    "mostPopularFacilities": ["Non-smoking rooms", "Free Wifi", "24-hour front desk"]
  },
  "bookingDetails": { "checkIn": "2026-09-15", "checkOut": "2026-09-18", "adults": 2, "rooms": 1, "currency": "USD" },
  "ratings": [
    { "label": "Average", "value": 7.5, "votes": 1721 },
    { "label": "Cleanliness", "value": 7.8 }
  ]
}

Prompts e recursos

O servidor expõe 16 recursos, um por parâmetro cujos valores aceitos são uma lista fixa. Ler um é mais barato do que aprender o vocabulário com uma chamada rejeitada, e não custa créditos. Cada URI é hasdata://booking/<parameter>.

ParâmetroValoresO que seleciona
language45Idioma da interface do Booking.com e dos campos localizados na resposta.
currency52Moeda dos preços retornados na resposta. Use hotelCurrency para manter a moeda nativa de cada propriedade.
sort10Ordem de classificação aplicada pelo Booking.com à página de resultados.
propertyType__8Filtro por tipo de propriedade. Vários valores são combinados com OU.
rating__5Filtro por classificação oficial por estrelas. Vários valores são combinados com OU.
reviewScore__4Filtro por faixa mínima de nota de avaliação dos hóspedes. Vários valores são combinados com OU.
distanceFromCenter__3Filtro por distância do centro do destino. Vários valores são combinados com OU.
propertyAccessibility__7Filtro por recursos de acessibilidade no nível da propriedade. Vários valores são combinados com OU.
meals__2Filtro por planos de refeição disponíveis. Vários valores são combinados com OU.
facilities__13Filtro por instalações no nível da propriedade. Vários valores são combinados com OU.
roomFacilities__25Filtro por instalações no quarto. Vários valores são combinados com OU.
roomAccessibility__11Filtro por recursos de acessibilidade no quarto. Vários valores são combinados com OU.
bedPreference__2Filtro por configuração de cama. Vários valores são combinados com OU.
reservationPolicy__2Filtro por flexibilidade de reserva. Vários valores são combinados com OU.
onlinePayment__1Filtro por opções de pagamento online.
travelGroup__2Filtro por opções de estadia voltadas a grupos de viagem. Vários valores são combinados com OU.

A lista é servida sem chave de API, então um cliente pode lê-la antes de o usuário se cadastrar.

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 da ferramenta, não como conexão falha. O tools/list aceita qualquer chave não vazia e retorna as duas ferramentas, então o cliente conclui 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 ocorre antes de qualquer ferramenta, e a própria conexão falha com 401. Os 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 raspagem. O servidor responde com isError: true e o texto MCP error -32602: Input validation error, nomeando o campo problemático. Uma contagem de children sem o childrenAges correspondente, ou um check-out na mesma data ou antes do check-in, é capturado aqui.

Uma busca sem disponibilidade retorna um resultado bem-sucedido com um array results vazio, não um erro. Um destino e um período sem nada disponível ainda retornam com requestMetadata.status definido como ok. Teste o comprimento do array antes de iterar.

Uma URL de propriedade que não resolve mais retorna 400 com requestMetadata.status definido como error.

Resultados que trazem dados também trazem um requestMetadata.id que vale citar no suporte.

Preços, plano gratuito e limites

Cada ferramenta do Booking.com custa 10 créditos por chamada bem-sucedida. O tamanho da resposta não muda o preço. Uma página de busca com 25 estadias custa o mesmo que uma com duas.

O plano gratuito é 1.000 créditos por mês sem cartão, o que equivale a 100 chamadas do Booking.com. Ele renova com o ciclo de cobrança, então um agente de baixo volume roda no plano gratuito indefinidamente.

Os planos pagos começam em US$ 59 por mês para 200.000 créditos, o que equivale a 20.000 chamadas. O preço unitário cai com o volume, de US$ 2,95 por 1.000 chamadas no plano inicial para US$ 1,19 no Basic e US$ 0,83 nos níveis Growth. Os valores atuais estão na página de preços.

Seu plano também define a concorrência. O plano gratuito permite 1 requisição por vez, o Startup 5, o Basic 15, e os níveis Growth vão de 50 a 500. Trate o caso de estouro de forma defensiva em qualquer coisa não supervisionada.

Uma requisição que retorna 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 com definições de ferramentas e menos chances de o modelo escolher a errada.

?apis=booking                    the two tools in this repo
?apis=booking,airbnb             add Airbnb stays
?apis=booking,google_travel      add Google Hotels and Flights

O parâmetro aceita nomes de provedores como booking e nomes individuais de APIs como booking_search. 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 foi reconhecido 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

Os próprios programas do Booking.com, a Demand API e a rede de parceiros afiliados, são para parceiros aprovados que enviam reservas e ganham comissão, não uma forma autônoma de ler o mercado público. Para buscar estadias e ler propriedades arbitrárias, raspar as páginas públicas é o caminho, e este servidor faz isso por trás de um esquema estável.

Programas de parceiros do Booking.comEste servidor
PropósitoEnviar reservas como afiliado aprovadoLer o mercado público
AcessoAprovação de parceiroUma chave e uma URL
Busca no mercadoDentro dos termos do parceiroSim, com filtros ricos
ConfiguraçãoOnboarding empresarialNenhuma
SaídaFeeds de parceirosJSON estruturado, preço e nota pré-processados

O que este servidor não faz. Sem reservas, sem pagamentos, sem comissão de parceiro, sem dados de conta. Ele lê o que um visitante desconectado pode ver no Booking.com.

FAQ

Existe um servidor MCP oficial do Booking.com?

O Booking.com não publica um. Este é mantido pela HasData e lê páginas públicas do Booking.com.

O que é um servidor MCP do Booking.com?

Um servidor que expõe dados do Booking.com 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 conta no Booking.com ou aprovação de parceiro?

Não. A única credencial é sua chave da HasData. Não há onboarding de parceiro, porque as ferramentas leem páginas públicas do Booking.com.

Por que a ferramenta de propriedade precisa de datas?

Porque disponibilidade, opções de quarto e preço dependem do período da estadia. Passe os mesmos checkInDate, checkOutDate e contagens de hóspedes que você usou na busca, e o detalhe refletirá esse período.

Qual é a diferença entre classificação e nota de avaliação?

rating é a classificação oficial por estrelas da propriedade. reviews.score é a nota de avaliação dos hóspedes, de 0 a 10. Um hotel de três estrelas pode ter nota 9,0 dos hóspedes, então leia a que você quer.

Posso usar isso junto com outras APIs da HasData?

Sim. O parâmetro apis aceita uma lista, e ?apis=booking,airbnb dá ao seu agente o Booking.com mais o Airbnb. Remova o parâmetro e você recebe tudo.

A HasData é afiliada ao Booking.com?

Não. A HasData é um serviço independente e não é afiliada, endossada ou patrocinada pelo Booking.com. Booking.com é uma marca registrada de seu respectivo proprietário.

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. Onde os dados coletados incluírem informações pessoais, garanta que você tenha uma base legal para isso sob o GDPR, CCPA ou as regras equivalentes na sua jurisdição.

Links da HasData

Página do produto e construtor de requisiçõesBooking.com Scraper API
Documentação do servidorMCP server docs
Todas as 57 ferramentas em um servidorHasData/hasdata-mcp
Tutoriais de clientesMCP clients and integrations
Tudo o mais que raspamosBooking.com Scraper API and 54 more
Planos e custos de créditosPlans and credit costs
Chaves e usoHasData dashboard
Lançador Node no npm@hasdata/booking-mcp
Lançador Python no PyPIhasdata-booking-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=booking retorna exatamente duas ferramentas, que toda 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 10 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 em CI a cada push e uma vez por semana em um agendamento, porque a lista de ferramentas upstream pode mudar sem ninguém tocar neste repositório. Uma falha significa que a lista de ferramentas mudou, a chave parou de funcionar ou o endpoint ficou inacessível, e a mensagem da asserçã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 recebeu. 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.