Charter Boats

Pesquise mais de 14.000 barcos de fretamento com preços ao vivo, além de marinas, ancoradouros, rotas e itinerários. Onze ferramentas somente leitura, sem autenticação.

Servidor MCP hospedado

npx add-mcp 'https://charter.boats/mcp'

Instala no Claude Code, Codex, Cursor e outros

Documentação

Igual na API v1.0 e v1.1

O servidor MCP Charter Boats permite que Claude, ChatGPT, Cursor e qualquer assistente de IA compatível com MCP pesquise barcos, locais, POIs, rotas, viagens e conteúdo — com widgets HTML ricos para cartões visuais de barcos e destinos.

Endpoint: https://charter.boats/mcp Página de instalação / início rápido: abra https://charter.boats/mcp em um navegador. Transporte: HTTP Streamable (JSON-RPC 2.0). Autenticação: Nenhuma. O servidor repassa apenas o IP do chamador para a API, então uma chave de API enviada para /mcp não tem efeito — chamadas MCP não são atribuídas a uma conta nem marcadas com afiliado. Veja também Limites de taxa. Especificação: MCP Apps 2026-01-26.

Implantação

O servidor é um Cloudflare Worker roteado em charter.boats/mcp. Ele faz proxy das chamadas de ferramentas para a API de IA do Charter Boats (https://charter.boats/api/ai/*) e serve dois widgets HTML como recursos de MCP App.

AI assistant → https://charter.boats/mcp (CF Worker) → charter.boats/api/ai/*

Uma única URL /mcp lida com três coisas:

  • GET com Accept: text/html → página de instalação / início rápido (HTML)
  • GET com Accept: application/json → JSON de informações do servidor
  • POST → MCP JSON-RPC

Ferramentas

Onze ferramentas somente leitura. Cada uma retorna a resposta subjacente da API como structuredContent (que os widgets renderizam) além de um breve resumo em texto para o modelo. Uma busca que não encontra nada ainda retorna o bloco de resultados zero da API — no_results (searched, why, try_next) e note — em structuredContent.

Busca

FerramentaDescriçãoWidget
search_boatsBarcos por local, tipo, datas, capacidade, orçamento. Retorna até 8 com preços, imagens, links de reserva.✓ barcos
search_locationsMarinas, portos e ancoradouros de três maneiras — veja abaixo. Até 10, cada um com sua foto, contagem de barcos e tarifa diária mais barata, em um mapa numerado.✓ locais
search_poisRestaurantes, combustível, mantimentos, etc. perto de um destino. Até 10.—
search_routesTravessias à vela entre destinos. Até 5.—
search_tripsRoteiros selecionados de vários dias. Até 5.—
search_contentArtigos, guias, FAQs (busca semântica); type: "api" pesquisa estas documentações da API. Até 5.—

search_locations responde a três perguntas diferentes, escolhidas pelos inputs que você envia:

  • Por nome — q (mínimo 2 caracteres): "Lefkada", "Dubrovnik".
  • Por popularidade em uma área — region (uma região de navegação como os hóspedes a chamam: Dalmácia, Jônicas, Cíclades…), country, city, opcionalmente type (marina, harbour, anchorage, bay, mooring, spot — as mesmas palavras que os resultados trazem de volta, sendo spot uma parada não classificada) e month (1-12, padrão o mês atual). Classificado por sort: popularity (padrão — tráfego de embarcações observado para aquele mês), boats (tamanho da frota de fretamento) ou rating.
  • Por alcance a partir de um lugar — from (um id ou slug de local de um resultado anterior) mais within_nm (10, 20, 35, 55 ou 100; padrão 35): os lugares onde barcos foram registrados navegando a partir dali, dos mais percorridos primeiro, com distância estimada e horas a 6 nós.

Veja Buscar Locais para a resposta de cada modo.

Detalhe

FerramentaDescrição
get_boat_detailsEspecificações completas, disponibilidade de 365 dias + faixas de preço, slots de check-in/check-out reserváveis, taxas obrigatórias/opcionais, descontos ativos, política de cancelamento, horários de check-in/out.
get_boat_standoutsO que é melhor ou pior em um barco em comparação com barcos semelhantes para uma semana — cada prós e contras com como se compara; qualquer coisa não listada é comum para barcos como ele. compare_by escolhe barcos semelhantes por preço (padrão), hóspedes ou comprimento; cutoff_pct e fallback definem o quanto é nomeado. Veja O Que se Destaca.
get_poi_detailsDescrição, horário de funcionamento, endereço, contato, marinas próximas, ofertas especiais. POIs não carregam avaliação nem contagem de comentários.
get_location_detailsDescrição, comodidades, contato, contagem de barcos e tarifa diária mais barata, além de insight rastreado por AIS: quão movimentado é mês a mês (contra seu próprio pico, nunca outro lugar), como os barcos o usam (parcela de visitas noturnas, duração típica de parada diurna, a que hora enche), se é uma joia escondida, para onde os barcos navegam a partir dele (dos mais percorridos primeiro, cada um com sua parcela das viagens rastreadas e um tempo de navegação estimado a 6 nós), e a base reservável mais próxima.
get_trip_detailsParadas dia a dia, distâncias, atividades, destaques, notas.

Esquemas completos de entrada são expostos via tools/list — visualize-os no MCP Inspector conectando-se a https://charter.boats/mcp.

Predefinições de prompt

O servidor registra três prompts exibidos como iniciadores de um clique em clientes compatíveis:

  • plan-sailing-trip — destino + hóspedes/datas/orçamento opcionais
  • find-charter-boat — local + tipo/hóspedes/datas opcionais
  • explore-destination — destino único, exibe marinas + POIs + rotas

Widgets de UI

Dois widgets HTML são servidos como recursos de MCP App:

WidgetURIUsado por
Barcosui://widget/boats-{hash}.htmlsearch_boats
Locaisui://widget/locations-{hash}.htmlsearch_locations

O {hash} é um hash do próprio HTML daquele widget, então a URI muda se e somente se o widget mudar. O ChatGPT armazena em cache recursos MCP por URI sem expiração — uma URI fixa significa que um widget reimplantado nunca é relido, não importa quantas vezes seja lançado — e a orientação da OpenAI é dar ao template uma nova URI quando seu HTML, JS ou CSS mudar. Leia os valores atuais de resources/list; nunca codifique um. Uma leitura de uma URI publicada anteriormente (incluindo o ui://widget/boats.html original sem hash) ainda retorna o widget atual em vez de um erro, então um host segurando uma URI obsoleta degrada para metadados-antigos-mas-marcação-correta em vez de um cartão quebrado.

Ambos os widgets:

  • Usam o tipo MIME text/html;profile=mcp-app.
  • Declaram seu CSP de imagem duas vezes: _meta.ui.csp.resourceDomains (o padrão MCP Apps, que o Claude lê) e _meta["openai/widgetCSP"].resource_domains (a chave de compatibilidade snake_case, que é a única que o ChatGPT lê — sem ela, o ChatGPT aplica um padrão bloqueado e cada foto de barco renderiza como uma imagem quebrada). _meta.ui.prefersBorder / openai/widgetPrefersBorder e _meta.ui.resourceUri / openai/outputTemplate são pareados da mesma forma.
  • Listam origens exatas, nunca curingas — o ChatGPT rejeita uma entrada *.example.com e uma entrada ruim descarta a lista inteira. O conjunto permitido é charter.boats, media.charter.boats, a origem direta do nosso bucket de armazenamento, e wsrv.nl. Fotos de barcos e locais são servidas de media.charter.boats (listado explicitamente, já que uma origem de host CSP corresponde apenas àquele host e charter.boats não cobre seus subdomínios), e uma foto de barco ainda não copiada para nosso armazenamento é redimensionada via wsrv. O widget de locais também desenha um mapa estático de seus resultados de charter.boats/api/ai/map, com pinos numerados como os cartões abaixo — o token do Mapbox permanece em nosso servidor, e search_pois não tem widget — seus valores image_url são repassados como armazenados (alguns em nosso bucket de armazenamento, muitos no endereço próprio de um site de terceiros: um site de avaliações, o site de um local, um guia local), e nada os renderiza dentro de um widget.
  • Implementam o handshake completo de MCP Apps: sandbox-resource-ready → ui/initialize (com protocolVersion, appInfo, appCapabilities) → ui/notifications/initialized → renderiza em ui/notifications/tool-result.
  • Reportam altura via ui/notifications/size-changed, medida de body.scrollHeight / #app (o elemento do documento retorna 0 dentro do sandbox do Claude).
  • Roteiam cliques de links através de ui/open-link já que iframes com sandbox bloqueiam target="_blank".
  • Respeitam o tema do host: theme: 'dark' | 'light' explícito de host-context-changed substitui o fallback de CSS prefers-color-scheme.

Instalação

Para usuários finais: abra https://charter.boats/mcp em qualquer navegador — a página tem etapas de instalação copiar-e-colar para Claude.ai, Claude Desktop, ChatGPT, Cursor e MCP Inspector.

Referência rápida

Claude.ai / Claude Desktop: Configurações → Conectores → Adicionar conector personalizado → https://charter.boats/mcp (Pro/Max/Team/Enterprise necessário).

ChatGPT: Configurações → Apps → Criar app → Servidor MCP → https://charter.boats/mcp. A renderização de widgets requer o programa ChatGPT Apps; o Modo desenvolvedor mostra chamadas de ferramentas apenas como texto.

Cursor: adicione a ~/.cursor/mcp.json:

{
  "mcpServers": {
    "charter-boats": { "url": "https://charter.boats/mcp" }
  }
}

MCP Inspector: npx @modelcontextprotocol/inspector → Streamable HTTP → https://charter.boats/mcp.

Limites de taxa

Chamadas de ferramentas estão sujeitas ao limite de taxa /api/ai/* sem chave, contado no IP que chama /mcp — o servidor encaminha esse endereço, então cada chamador é limitado individualmente, não agrupado com todos os outros usuários de MCP. Claude e ChatGPT, chamando das faixas de endereço publicadas da Anthropic e da OpenAI, são contados por plataforma em vez de por IP (veja Limites de taxa). Ele não encaminha nenhuma chave. Uma chamada limitada aparece como um erro de ferramenta (API 429) cuja mensagem vincula à mesma busca em charter.boats.

Diferenças do Custom GPT

Ambas as integrações chamam os mesmos endpoints /api/ai/*, mas os expõem de forma diferente:

RecursoCustom GPT (Actions)Servidor MCP
ProtocoloOpenAPI 3.1Model Context Protocol (Streamable HTTP)
UI ricaNãoSim — widgets de barcos + locais
TransporteHTTPSJSON-RPC sobre HTTP
Estado de sessãoID de conversa do GPTSem estado por requisição
Limite de taxaAté 30 / 10 min por usuário OpenAI, mais o limite diário por IPPor IP chamador — veja Limites de taxa
HostsSomente ChatGPTClaude, ChatGPT Apps, Cursor, Continue, qualquer cliente MCP