Charter Boats
Busca más de 14,000 barcos de alquiler con precios en vivo, además de marinas, fondeaderos, rutas e itinerarios. Once herramientas de solo lectura, sin autenticación.
Servidor MCP alojado
npx add-mcp 'https://charter.boats/mcp'Se instala en Claude Code, Codex, Cursor y más
Documentación
Igual en la API v1.0 y v1.1
El servidor MCP de Charter Boats permite a Claude, ChatGPT, Cursor y cualquier asistente de IA compatible con MCP buscar barcos, ubicaciones, POIs, rutas, viajes y contenido, con widgets HTML enriquecidos para tarjetas visuales de barcos y destinos.
Endpoint: https://charter.boats/mcp Página de instalación / inicio rápido: abre https://charter.boats/mcp en un navegador. Transporte: HTTP Streamable (JSON-RPC 2.0). Autenticación: Ninguna. El servidor solo pasa la IP del llamante a la API, por lo que una clave de API enviada a /mcp no tiene efecto: las llamadas MCP no se atribuyen a una cuenta ni se etiquetan con afiliados. Consulta también Límites de velocidad. Especificación: MCP Apps 2026-01-26.
Implementación
El servidor es un Cloudflare Worker enrutado en charter.boats/mcp. Actúa como proxy de las llamadas de herramientas hacia la API de IA de Charter Boats (https://charter.boats/api/ai/*) y sirve dos widgets HTML como recursos de MCP Apps.
AI assistant → https://charter.boats/mcp (CF Worker) → charter.boats/api/ai/*
Una única URL /mcp maneja tres cosas:
GETconAccept: text/html→ página de instalación / inicio rápido (HTML)GETconAccept: application/json→ JSON de información del servidorPOST→ MCP JSON-RPC
Herramientas
Once herramientas de solo lectura. Cada una devuelve la respuesta subyacente de la API como structuredContent (que los widgets renderizan) más un breve resumen de texto para el modelo. Una búsqueda que no encuentra nada aún devuelve el bloque de resultados cero de la API — no_results (searched, why, try_next) y note — en structuredContent.
Búsqueda
| Herramienta | Descripción | Widget |
|---|---|---|
search_boats | Barcos por ubicación, tipo, fechas, capacidad, presupuesto. Devuelve hasta 8 con precios, imágenes, enlaces de reserva. | ✓ barcos |
search_locations | Marinas, puertos y fondeaderos de tres maneras: ver más abajo. Hasta 10, cada uno con su foto, número de barcos y tarifa diaria más barata, en un mapa numerado. | ✓ ubicaciones |
search_pois | Restaurantes, combustible, supermercados, etc. cerca de un destino. Hasta 10. | — |
search_routes | Travesías a vela entre destinos. Hasta 5. | — |
search_trips | Itinerarios seleccionados de varios días. Hasta 5. | — |
search_content | Artículos, guías, preguntas frecuentes (búsqueda semántica); type: "api" busca en esta documentación de la API. Hasta 5. | — |
search_locations responde tres preguntas diferentes, elegidas según qué entradas envíes:
- Por nombre —
q(mínimo 2 caracteres): "Lefkada", "Dubrovnik". - Por popularidad en un área —
region(una región de navegación como la dicen los usuarios: Dalmacia, el Jónico, las Cícladas…),country,city, opcionalmentetype(marina,harbour,anchorage,bay,mooring,spot— las mismas palabras que los resultados devuelven, siendospotuna parada no clasificada) ymonth(1-12, por defecto el mes actual). Clasificado porsort:popularity(por defecto — tráfico de embarcaciones observado para ese mes),boats(tamaño de la flota de chárter) orating. - Por alcance desde un lugar —
from(un id o slug de ubicación de un resultado anterior) máswithin_nm(10,20,35,55o100; por defecto 35): los lugares donde se registró que los barcos navegaron desde allí, primero los más transitados, con distancia estimada y horas a 6 nudos.
Consulta Buscar ubicaciones para la respuesta de cada modo.
Detalle
| Herramienta | Descripción |
|---|---|
get_boat_details | Especificaciones completas, disponibilidad de 365 días + rangos de precios, franjas de check-in/check-out reservables, tarifas obligatorias/opcionales, descuentos activos, política de cancelación, horarios de check-in/out. |
get_boat_standouts | Qué es mejor o peor de un barco en comparación con barcos similares durante una semana: cada pro y contra con su comparación; cualquier cosa no listada es normal para barcos como ese. compare_by elige barcos similares por precio (por defecto), huéspedes o eslora; cutoff_pct y fallback establecen cuánto se nombra. Consulta Qué destaca. |
get_poi_details | Descripción, horario de apertura, dirección, contacto, marinas cercanas, ofertas especiales. Los POIs no llevan calificación ni recuento de reseñas. |
get_location_details | Descripción, comodidades, contacto, número de barcos y tarifa diaria más barata, más información de AIS rastreado: qué tan concurrido está mes a mes (contra su propio pico, nunca otro lugar), cómo lo usan los barcos (proporción de visitas nocturnas, duración típica de la parada diurna, a qué hora se llena), si es una joya oculta, hacia dónde navegan los barcos desde allí (primero los más transitados, cada uno con su proporción de los viajes rastreados y un tiempo de navegación estimado a 6 nudos), y la base reservable más cercana. |
get_trip_details | Paradas día a día, distancias, actividades, puntos destacados, notas. |
Los esquemas completos de entrada se exponen a través de tools/list — míralos en MCP Inspector conectándote a https://charter.boats/mcp.
Ajustes preestablecidos de prompt
El servidor registra tres prompts que se muestran como iniciadores de un clic en clientes compatibles:
plan-sailing-trip— destino + huéspedes/fechas/presupuesto opcionalesfind-charter-boat— ubicación + tipo/huéspedes/fechas opcionalesexplore-destination— destino único, muestra marinas + POIs + rutas
Widgets de interfaz
Dos widgets HTML se sirven como recursos de MCP Apps:
| Widget | URI | Usado por |
|---|---|---|
| Barcos | ui://widget/boats-{hash}.html | search_boats |
| Ubicaciones | ui://widget/locations-{hash}.html | search_locations |
El {hash} es un hash del HTML propio de ese widget, por lo que la URI cambia si y solo si el widget cambia. ChatGPT almacena en caché los recursos MCP por URI sin caducidad — una URI fija significa que un widget reimplementado nunca se vuelve a leer, sin importar cuántas veces se publique — y la guía de OpenAI es dar a la plantilla una nueva URI cuando cambia su HTML, JS o CSS. Lee los valores actuales de resources/list; nunca codifiques uno. Una lectura de una URI previamente publicada (incluido el ui://widget/boats.html original sin hash) aún devuelve el widget actual en lugar de un error, por lo que un host con una URI obsoleta degrada a metadatos antiguos pero marcado correcto en lugar de una tarjeta rota.
Ambos widgets:
- Usan el tipo MIME
text/html;profile=mcp-app. - Declaran su CSP de imágenes dos veces:
_meta.ui.csp.resourceDomains(el estándar de MCP Apps, que Claude lee) y_meta["openai/widgetCSP"].resource_domains(la clave de compatibilidad snake_case, que es la única que ChatGPT lee — sin ella ChatGPT aplica un valor predeterminado bloqueado y cada foto de barco se renderiza como una imagen rota)._meta.ui.prefersBorder/openai/widgetPrefersBordery_meta.ui.resourceUri/openai/outputTemplateestán emparejados de la misma manera. - Listan orígenes exactos, nunca comodines — ChatGPT rechaza una entrada
*.example.comy una entrada mala descarta toda la lista. El conjunto permitido escharter.boats,media.charter.boats, el origen directo de nuestro bucket de almacenamiento ywsrv.nl. Las fotos de barcos y ubicaciones se sirven desdemedia.charter.boats(listado explícitamente, ya que una fuente de host CSP coincide solo con ese host ycharter.boatsno cubre sus subdominios), y una foto de barco aún no copiada a nuestro almacenamiento se redimensiona a través de wsrv. El widget de ubicaciones también dibuja un mapa estático de sus resultados desdecharter.boats/api/ai/map, con pines numerados como las tarjetas debajo — el token de Mapbox permanece en nuestro servidor, ysearch_poisno tiene widget — sus valoresimage_urlse pasan tal como están almacenados (algunos en nuestro bucket de almacenamiento, muchos en la dirección propia de un sitio de terceros: un sitio de reseñas, el sitio web de un lugar, una guía local), y nada los renderiza dentro de un widget. - Implementan el protocolo de enlace completo de MCP Apps:
sandbox-resource-ready→ui/initialize(conprotocolVersion,appInfo,appCapabilities) →ui/notifications/initialized→ renderizar enui/notifications/tool-result. - Reportan altura a través de
ui/notifications/size-changed, medida desdebody.scrollHeight/#app(el elemento del documento devuelve 0 dentro del sandbox de Claude). - Enrutan los clics de enlaces a través de
ui/open-linkya que los iframes en sandbox bloqueantarget="_blank". - Respetan el tema del host:
theme: 'dark' | 'light'explícito dehost-context-changedanula el respaldo CSSprefers-color-scheme.
Instalación
Para usuarios finales: abre https://charter.boats/mcp en cualquier navegador — la página tiene pasos de instalación de copiar y pegar para Claude.ai, Claude Desktop, ChatGPT, Cursor y MCP Inspector.
Referencia rápida
Claude.ai / Claude Desktop: Configuración → Conectores → Añadir conector personalizado → https://charter.boats/mcp (se requiere Pro/Max/Team/Enterprise).
ChatGPT: Configuración → Apps → Crear app → Servidor MCP → https://charter.boats/mcp. El renderizado de widgets requiere el programa ChatGPT Apps; el modo Desarrollador muestra las llamadas de herramientas solo como texto.
Cursor: añade a ~/.cursor/mcp.json:
{
"mcpServers": {
"charter-boats": { "url": "https://charter.boats/mcp" }
}
}
MCP Inspector: npx @modelcontextprotocol/inspector → Streamable HTTP → https://charter.boats/mcp.
Límites de velocidad
Las llamadas de herramientas están sujetas al límite de velocidad sin clave /api/ai/*, contado en la IP que llama a /mcp — el servidor reenvía esa dirección, por lo que cada llamante está limitado por su cuenta, no agrupado con todos los demás usuarios de MCP. Claude y ChatGPT, que llaman desde los rangos de direcciones publicados de Anthropic y OpenAI, se cuentan por plataforma en lugar de por IP (consulta Límites de velocidad). No reenvía ninguna clave. Una llamada limitada aparece como un error de herramienta (API 429) cuyo mensaje enlaza a la misma búsqueda en charter.boats.
Diferencias con el GPT personalizado
Ambas integraciones llaman a los mismos endpoints /api/ai/* pero los exponen de manera diferente:
| Característica | GPT personalizado (Acciones) | Servidor MCP |
|---|---|---|
| Protocolo | OpenAPI 3.1 | Model Context Protocol (Streamable HTTP) |
| Interfaz enriquecida | No | Sí — widgets de barcos + ubicaciones |
| Transporte | HTTPS | JSON-RPC sobre HTTP |
| Estado de sesión | ID de conversación de GPT | Sin estado por solicitud |
| Límite de velocidad | Hasta 30 / 10 min por usuario de OpenAI, más el límite diario por IP | Por IP llamante — consulta Límites de velocidad |
| Hosts | Solo ChatGPT | Claude, ChatGPT Apps, Cursor, Continue, cualquier cliente MCP |