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:
GETcomAccept: text/html→ página de instalação / início rápido (HTML)GETcomAccept: application/json→ JSON de informações do servidorPOST→ 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
| Ferramenta | Descrição | Widget |
|---|---|---|
search_boats | Barcos por local, tipo, datas, capacidade, orçamento. Retorna até 8 com preços, imagens, links de reserva. | ✓ barcos |
search_locations | Marinas, 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_pois | Restaurantes, combustível, mantimentos, etc. perto de um destino. Até 10. | — |
search_routes | Travessias à vela entre destinos. Até 5. | — |
search_trips | Roteiros selecionados de vários dias. Até 5. | — |
search_content | Artigos, 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, opcionalmentetype(marina,harbour,anchorage,bay,mooring,spot— as mesmas palavras que os resultados trazem de volta, sendospotuma parada não classificada) emonth(1-12, padrão o mês atual). Classificado porsort:popularity(padrão — tráfego de embarcações observado para aquele mês),boats(tamanho da frota de fretamento) ourating. - Por alcance a partir de um lugar —
from(um id ou slug de local de um resultado anterior) maiswithin_nm(10,20,35,55ou100; 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
| Ferramenta | Descrição |
|---|---|
get_boat_details | Especificaçõ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_standouts | O 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_details | Descriçã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_details | Descriçã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_details | Paradas 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 opcionaisfind-charter-boat— local + tipo/hóspedes/datas opcionaisexplore-destination— destino único, exibe marinas + POIs + rotas
Widgets de UI
Dois widgets HTML são servidos como recursos de MCP App:
| Widget | URI | Usado por |
|---|---|---|
| Barcos | ui://widget/boats-{hash}.html | search_boats |
| Locais | ui://widget/locations-{hash}.html | search_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/widgetPrefersBordere_meta.ui.resourceUri/openai/outputTemplatesão pareados da mesma forma. - Listam origens exatas, nunca curingas — o ChatGPT rejeita uma entrada
*.example.come uma entrada ruim descarta a lista inteira. O conjunto permitido écharter.boats,media.charter.boats, a origem direta do nosso bucket de armazenamento, ewsrv.nl. Fotos de barcos e locais são servidas demedia.charter.boats(listado explicitamente, já que uma origem de host CSP corresponde apenas àquele host echarter.boatsnã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 decharter.boats/api/ai/map, com pinos numerados como os cartões abaixo — o token do Mapbox permanece em nosso servidor, esearch_poisnão tem widget — seus valoresimage_urlsã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(comprotocolVersion,appInfo,appCapabilities) →ui/notifications/initialized→ renderiza emui/notifications/tool-result. - Reportam altura via
ui/notifications/size-changed, medida debody.scrollHeight/#app(o elemento do documento retorna 0 dentro do sandbox do Claude). - Roteiam cliques de links através de
ui/open-linkjá que iframes com sandbox bloqueiamtarget="_blank". - Respeitam o tema do host:
theme: 'dark' | 'light'explícito dehost-context-changedsubstitui o fallback de CSSprefers-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:
| Recurso | Custom GPT (Actions) | Servidor MCP |
|---|---|---|
| Protocolo | OpenAPI 3.1 | Model Context Protocol (Streamable HTTP) |
| UI rica | Não | Sim — widgets de barcos + locais |
| Transporte | HTTPS | JSON-RPC sobre HTTP |
| Estado de sessão | ID de conversa do GPT | Sem estado por requisição |
| Limite de taxa | Até 30 / 10 min por usuário OpenAI, mais o limite diário por IP | Por IP chamador — veja Limites de taxa |
| Hosts | Somente ChatGPT | Claude, ChatGPT Apps, Cursor, Continue, qualquer cliente MCP |