Koskamo

The Charter Desk MCP

An official MCP server for The Charter Desk that allows AI agents to search live yacht inventory, retrieve detailed specs and availability, check typical price ranges, find operator-stated discounts, and request formal written quotes for yacht charters without requiring authentication keys.

Endpoint and access

No sign-in to connect and list tools. Individual tools may still need a vendor account, credentials, or permissions; check the documented prerequisites.

The Charter Desk MCP logo, by The Charter DeskVendor evidenceStreamable HTTPNo sign-inEndpoint checked 2026-11-01Operated by The Charter Desk
MCP endpoint (Streamable HTTP)
https://thecharterdesk.com/mcp
Vendor documentation

What you can do with it

  • Search for available yachts by location, dates, and group size
  • Retrieve detailed yacht specifications and operator terms
  • Check typical price ranges for specific destinations and months
  • Request a formal written quote for a specific yacht booking

Source and maintenance

Vendor evidenceRegistry 1.0.1

Protocol and capabilities

Server
The Charter Desk 1
MCP protocol
2025-06-18
Tools
5 advertised
Resources
1 advertised
Resource templates
0 advertised
Prompts
Not advertised
Server-advertised capabilities
{
  "tools": {
    "listChanged": false
  },
  "resources": {
    "subscribe": false,
    "listChanged": false
  }
}

Server-provided instructions

Untrusted server output shown for inspection. It is not Koskamo guidance and is excluded from knowledge search.

Live inventory, prices and discounts of The Charter Desk. Every answer links to its page on this site; send the person there. BROWSE: call the search_yachts, get_yacht, price_range and best_deals tools with no contact and you get 10 rows a call and the first pages, within a limit per address. MORE: pass the person's own email or phone (international form, +country code) and you get up to 20 rows a call; the first such answer returns a session to pass from then on. QUOTE: when the person wants a price they can book on, call request_quote with their email or phone: the desk sends them a formal written quote. Prices in other answers are as the source last stated them (checkedAt) and are not an offer.

Tools

5 advertised

search_yachts — Search yachts
Advertised by the server during the last successful anonymous check.
Advertised read-only

Find this site's yachts, read from the live inventory. Pass what the person wants as the typed filters, and from / to whenever they gave exact days. With dates it returns ONLY the yachts free for that stay, each with its stay: status, price, list price, discount and when the source was checked (checkedAt). Without dates each has its from-price. Every row carries its page link and one photo, absolute URLs on this site; send the person there. Narrow with the typed filters (each list is any of its values; every filter must hold); priceMin / priceMax count the mandatory extras a quote states. notApplied lists what could not narrow the search. When nothing matches exactly the answer is the nearest match, and nearest says what was widened (another week, the place around, a bound let go): tell the person. Paged: total and cursor. Works without a contact (browsing: fewer rows).

search_yachts input schema
{
  "type": "object",
  "required": [],
  "properties": {
    "to": {
      "type": "string",
      "description": "Check-out day, YYYY-MM-DD."
    },
    "base": {
      "type": "string",
      "description": "The exact base it leaves from, in words."
    },
    "from": {
      "type": "string",
      "description": "Check-in day, YYYY-MM-DD."
    },
    "name": {
      "type": "string",
      "description": "Optional: the person's name, as they gave it."
    },
    "sort": {
      "enum": [
        "price",
        "discount",
        "length",
        "cabins",
        "berths",
        "heads",
        "beam",
        "draft",
        "year",
        "fuel",
        "water"
      ],
      "type": "string",
      "description": "price (default, cheapest first), discount (biggest first), or length (length, biggest first), cabins (cabins, biggest first), berths (berths, biggest first), heads (heads, biggest first), beam (beam, biggest first), draft (draft, biggest first), year (year, biggest first), fuel (fuel tank, biggest first), water (water tank, biggest first)."
    },
    "text": {
      "type": "string",
      "description": "Words in its name or model, e.g. a builder or a model name."
    },
    "email": {
      "type": "string",
      "description": "Optional: the person's own email, as they gave it, for more rows a call. Leave out to browse; the site keeps it to answer their enquiry."
    },
    "limit": {
      "type": "number",
      "description": "Rows per page: at most 10 when browsing, 20 with the person's email or phone."
    },
    "party": {
      "type": "number",
      "description": "How many people."
    },
    "phone": {
      "type": "string",
      "description": "Optional: the person's own phone, international form (+ and country code), as they gave it, for more rows a call. Leave out to browse."
    },
    "place": {
      "type": "string",
      "description": "Where, in words or as a place id: a region, country or area, and everything in it, e.g. Mediterranean, Worldwide, Caribbean, North America, Greece, Croatia, Italy, France, Turkey, Spain, British Virgin Islands, Netherlands, Germany, Seychelles, Poland, Ireland, Martinique, United Kingdom, Belgium, Portugal, Ecuador, French Polynesia, Sweden, St. Martin, Bahamas, Malta, Montenegro, Thailand, Canada, St. Lucia, Slovenia, Norway, Guadeloupe, Brazil, Hungary, Grenada, St. Vincent, Belize, Cuba, Maldives, Mexico, Panama, Cape Verde, United Arab Emirates, Antigua and Barbuda, India, Tanzania, Egypt, Monaco, Estonia, Mauritius, New Zealand, USA, Switzerland, Fiji. An unknown place is refused; nothing there answers the nearest place around it."
    },
    "cursor": {
      "type": "string",
      "description": "The cursor a previous answer returned, for its next page."
    },
    "beamMax": {
      "type": "number",
      "description": "Beam at most m (on this site 0.9 to 44)."
    },
    "beamMin": {
      "type": "number",
      "description": "Beam at least m (on this site 0.9 to 44)."
    },
    "fuelMax": {
      "type": "number",
      "description": "Fuel tank at most l (on this site 1 to 65000)."
    },
    "fuelMin": {
      "type": "number",
      "description": "Fuel tank at least l (on this site 1 to 65000)."
    },
    "session": {
      "type": "string",
      "description": "The session an earlier answer returned. Pass it instead of email or phone from then on."
    },
    "yearMax": {
      "type": "number",
      "description": "Year at most (on this site 0 to 2028)."
    },
    "yearMin": {
      "type": "number",
      "description": "Year at least (on this site 0 to 2028)."
    },
    "draftMax": {
      "type": "number",
      "description": "Draft at most m (on this site 0.3 to 7985)."
    },
    "draftMin": {
      "type": "number",
      "description": "Draft at least m (on this site 0.3 to 7985)."
    },
    "headsMax": {
      "type": "number",
      "description": "Heads at most (on this site 0 to 23)."
    },
    "headsMin": {
      "type": "number",
      "description": "Heads at least (on this site 0 to 23)."
    },
    "priceMax": {
      "type": "number",
      "description": "The most to pay, in the site currency: the price plus the mandatory extras."
    },
    "priceMin": {
      "type": "number",
      "description": "The least to pay, in the site currency: the price plus the mandatory extras."
    },
    "waterMax": {
      "type": "number",
      "description": "Water tank at most l (on this site 1 to 60000)."
    },
    "waterMin": {
      "type": "number",
      "description": "Water tank at least l (on this site 1 to 60000)."
    },
    "berthsMax": {
      "type": "number",
      "description": "Berths at most (on this site 0 to 80)."
    },
    "berthsMin": {
      "type": "number",
      "description": "Berths at least (on this site 0 to 80)."
    },
    "cabinsMax": {
      "type": "number",
      "description": "Cabins at most (on this site 0 to 20)."
    },
    "cabinsMin": {
      "type": "number",
      "description": "Cabins at least (on this site 0 to 20)."
    },
    "lengthMax": {
      "type": "number",
      "description": "Length at most ft (on this site 13.35 to 180.45)."
    },
    "lengthMin": {
      "type": "number",
      "description": "Length at least ft (on this site 13.35 to 180.45)."
    },
    "yacht_types": {
      "type": "array",
      "items": {
        "enum": [
          "catamarans",
          "gulets",
          "houseboats",
          "motorboats",
          "sailboats"
        ],
        "type": "string"
      },
      "minItems": 1,
      "description": "Yacht Types: any of these value ids (one or more): catamarans (Catamarans, 3192); gulets (Gulets, 201); houseboats (Houseboats, 1428); motorboats (Motorboats, 1080); sailboats (Sailboats, 4577)."
    },
    "discountOnly": {
      "type": "boolean",
      "description": "true: only those with a discount the source states."
    },
    "charter_types": {
      "type": "array",
      "items": {
        "enum": [
          "all-inclusive",
          "bareboat",
          "cabin-charter",
          "crewed",
          "day-charter",
          "flotilla",
          "regatta",
          "skippered"
        ],
        "type": "string"
      },
      "minItems": 1,
      "description": "Charter Types: any of these value ids (one or more): all-inclusive (All-inclusive, 68); bareboat (Bareboat, 8796); cabin-charter (Cabin charter, 152); crewed (Crewed, 1702); day-charter (Day charter, 374); flotilla (Flotilla, 257); regatta (Regatta, 34); skippered (Skippered, 245)."
    }
  },
  "additionalProperties": false
}
search_yachts output schema
{
  "type": "object",
  "required": [
    "items",
    "total"
  ],
  "properties": {
    "next": {
      "type": "string",
      "description": "When browsing: how to get a quote or more rows."
    },
    "items": {
      "type": "array",
      "items": {
        "type": "object",
        "properties": {
          "href": {
            "type": "string",
            "description": "Its page on this site, absolute URL."
          },
          "kind": {
            "type": "string",
            "description": "Its type, in the site's words."
          },
          "name": {
            "type": "string",
            "description": "Its name."
          },
          "stay": {
            "type": "object",
            "properties": {
              "price": {
                "type": "object",
                "properties": {
                  "text": {
                    "type": "string",
                    "description": "The amount written out, to quote to the person."
                  },
                  "amount": {
                    "type": "number",
                    "description": "In major units (euros, not cents)."
                  },
                  "currency": {
                    "type": "string",
                    "description": "ISO 4217."
                  }
                },
                "description": "The stay's price."
              },
              "nights": {
                "type": "number",
                "description": "Nights."
              },
              "status": {
                "enum": [
                  "free",
                  "booked",
                  "not-a-check-in-day",
                  "not-whole-blocks",
                  "outside-calendar",
                  "not-known"
                ],
                "type": "string",
                "description": "Whether it can be booked."
              },
              "checkIn": {
                "type": "string",
                "description": "YYYY-MM-DD."
              },
              "deposit": {
                "type": "object",
                "properties": {
                  "text": {
                    "type": "string",
                    "description": "The amount written out, to quote to the person."
                  },
                  "amount": {
                    "type": "number",
                    "description": "In major units (euros, not cents)."
                  },
                  "currency": {
                    "type": "string",
                    "description": "ISO 4217."
                  }
                },
                "description": "The deposit held."
              },
              "checkOut": {
                "type": "string",
                "description": "YYYY-MM-DD."
              },
              "checkedAt": {
                "type": [
                  "string",
                  "null"
                ],
                "description": "When the source was read, ISO time."
              },
              "listPrice": {
                "type": "object",
                "properties": {
                  "text": {
                    "type": "string",
                    "description": "The amount written out, to quote to the person."
                  },
                  "amount": {
                    "type": "number",
                    "description": "In major units (euros, not cents)."
                  },
                  "currency": {
                    "type": "string",
                    "description": "ISO 4217."
                  }
                },
                "description": "The source's list price above price, when discounted."
              },
              "discountPct": {
                "type": "number",
                "description": "The discount the source states."
              },
              "mandatoryExtras": {
                "type": "object",
                "properties": {
                  "text": {
                    "type": "string",
                    "description": "The amount written out, to quote to the person."
                  },
                  "amount": {
                    "type": "number",
                    "description": "In major units (euros, not cents)."
                  },
                  "currency": {
                    "type": "string",
                    "description": "ISO 4217."
                  }
                },
                "description": "What the source says is payable on top, whatever the person picks."
              }
            },
            "description": "With dates: that stay, read live."
          },
          "image": {
            "type": "object",
            "properties": {
              "alt": {
                "type": "string",
                "description": "What it shows."
              },
              "src": {
                "type": "string",
                "description": "https URL."
              }
            },
            "description": "One photo, an absolute URL."
          },
          "currency": {
            "type": "string",
            "description": "ISO 4217."
          },
          "priceFrom": {
            "type": "number",
            "description": "The stay's price with dates, else its cheapest quoted stay, in major units."
          },
          "mandatoryExtras": {
            "type": "object",
            "properties": {
              "text": {
                "type": "string",
                "description": "The amount written out, to quote to the person."
              },
              "amount": {
                "type": "number",
                "description": "In major units (euros, not cents)."
              },
              "currency": {
                "type": "string",
                "description": "ISO 4217."
              }
            },
            "description": "Without dates: what its cheapest quote says is payable on top."
          }
        },
        "description": "One item."
      },
      "description": "One page of matches."
    },
    "total": {
      "type": "number",
      "description": "How many rows match in all."
    },
    "cursor": {
      "type": [
        "string",
        "null"
      ],
      "description": "Pass as cursor for the next page; null on the last."
    },
    "checked": {
      "type": "boolean",
      "description": "true: dates were given, so every row is free for them."
    },
    "nearest": {
      "type": "object",
      "properties": {
        "note": {
          "type": "string",
          "description": "What moved, in words to tell the person."
        },
        "widened": {
          "enum": [
            "dates",
            "base",
            "place",
            "ranges",
            "price",
            "discount"
          ],
          "type": "string",
          "description": "The one thing let go."
        }
      },
      "description": "Only when nothing matched exactly: these rows are the nearest match."
    },
    "session": {
      "type": "string",
      "description": "Only on the call that created the contact: pass it from then on."
    },
    "browsing": {
      "type": "boolean",
      "description": "true: answered without a contact, so fewer rows and the first pages only."
    },
    "checkedAt": {
      "type": [
        "string",
        "null"
      ],
      "description": "When the source was read, ISO time."
    },
    "unchecked": {
      "type": "array",
      "items": {
        "type": "string",
        "description": "dates or party."
      },
      "description": "What was said but could not be checked."
    },
    "notApplied": {
      "type": "array",
      "items": {
        "type": "string",
        "description": "A wish."
      },
      "description": "What the person asked for that could not narrow the search."
    },
    "leftOutUnpriced": {
      "type": "number",
      "description": "Matches left out under priceMin / priceMax because no price is known."
    },
    "sessionExpiresAt": {
      "type": "string",
      "description": "When that session stops working, ISO time."
    }
  }
}
search_yachts annotations
{
  "readOnlyHint": true,
  "openWorldHint": false,
  "destructiveHint": false
}
get_yacht — Get one yacht
Advertised by the server during the last successful anonymous check.
Advertised read-only

One yacht: its facts and terms as the source states them (packages, included, required and optional extras, deposit, check-in days and times, stay limits, equipment, the operator's descriptions), and its availability: with from / to, that stay's status and price and, when it is not free, the nearest free stays; without dates, its free stays, soonest first. A field that is absent is one the source does not state. Works without a contact.

get_yacht input schema
{
  "type": "object",
  "required": [
    "id"
  ],
  "properties": {
    "id": {
      "type": "string",
      "description": "The yacht's page link (an absolute URL on this site), exactly as a search or best_deals returned it."
    },
    "to": {
      "type": "string",
      "description": "Check-out day, YYYY-MM-DD."
    },
    "from": {
      "type": "string",
      "description": "Check-in day, YYYY-MM-DD."
    },
    "name": {
      "type": "string",
      "description": "Optional: the person's name, as they gave it."
    },
    "email": {
      "type": "string",
      "description": "Optional: the person's own email, as they gave it, for more rows a call. Leave out to browse; the site keeps it to answer their enquiry."
    },
    "limit": {
      "type": "number",
      "description": "Rows per page: at most 10 when browsing, 20 with the person's email or phone."
    },
    "party": {
      "type": "number",
      "description": "How many people."
    },
    "phone": {
      "type": "string",
      "description": "Optional: the person's own phone, international form (+ and country code), as they gave it, for more rows a call. Leave out to browse."
    },
    "cursor": {
      "type": "string",
      "description": "The cursor a previous answer returned, for its next page."
    },
    "session": {
      "type": "string",
      "description": "The session an earlier answer returned. Pass it instead of email or phone from then on."
    }
  },
  "additionalProperties": false
}
get_yacht output schema
{
  "type": "object",
  "required": [
    "item",
    "href"
  ],
  "properties": {
    "href": {
      "type": "string",
      "description": "Its page on this site, absolute URL."
    },
    "item": {
      "type": "string",
      "description": "Its name."
    },
    "kind": {
      "type": "string",
      "description": "Its type."
    },
    "next": {
      "type": "string",
      "description": "When browsing: how to get a quote or more rows."
    },
    "facts": {
      "type": "array",
      "items": {
        "type": "object",
        "properties": {},
        "description": "One fact."
      },
      "description": "The facts its page shows, labelled."
    },
    "place": {
      "type": "string",
      "description": "Where it is."
    },
    "terms": {
      "type": "object",
      "properties": {},
      "description": "Deposit, licence, stay limits, check-in days and times, as stated."
    },
    "session": {
      "type": "string",
      "description": "Only on the call that created the contact: pass it from then on."
    },
    "browsing": {
      "type": "boolean",
      "description": "true: answered without a contact, so fewer rows and the first pages only."
    },
    "packages": {
      "type": "array",
      "items": {
        "type": "object",
        "properties": {
          "name": {
            "type": [
              "string",
              "null"
            ],
            "description": "Its name."
          },
          "default": {
            "type": "boolean",
            "description": "Sold this way unless asked."
          },
          "staffed": {
            "type": "boolean",
            "description": "Sold with staff as standard."
          },
          "included": {
            "type": "array",
            "items": {
              "type": "object",
              "properties": {},
              "description": "An extra."
            },
            "description": "Included, nothing to pay."
          },
          "optional": {
            "type": "array",
            "items": {
              "type": "object",
              "properties": {},
              "description": "An extra."
            },
            "description": "The person's choice."
          },
          "required": {
            "type": "array",
            "items": {
              "type": "object",
              "properties": {},
              "description": "An extra."
            },
            "description": "Must be paid."
          }
        },
        "description": "One package."
      },
      "description": "The ways it is sold, the default first, each with its included, required and optional extras."
    },
    "checkedAt": {
      "type": [
        "string",
        "null"
      ],
      "description": "When the source was read, ISO time."
    },
    "equipment": {
      "type": "array",
      "items": {
        "type": "object",
        "properties": {},
        "description": "A group."
      },
      "description": "Named equipment in groups."
    },
    "description": {
      "type": "string",
      "description": "Its description."
    },
    "availability": {
      "type": "object",
      "properties": {
        "card": {
          "type": "object",
          "properties": {},
          "description": "Its card: name, link, photos (get keeps the gallery)."
        },
        "stay": {
          "type": "object",
          "properties": {
            "price": {
              "type": "object",
              "properties": {
                "text": {
                  "type": "string",
                  "description": "The amount written out, to quote to the person."
                },
                "amount": {
                  "type": "number",
                  "description": "In major units (euros, not cents)."
                },
                "currency": {
                  "type": "string",
                  "description": "ISO 4217."
                }
              },
              "description": "The stay's price."
            },
            "nights": {
              "type": "number",
              "description": "Nights."
            },
            "status": {
              "enum": [
                "free",
                "booked",
                "not-a-check-in-day",
                "not-whole-blocks",
                "outside-calendar",
                "not-known"
              ],
              "type": "string",
              "description": "Whether it can be booked."
            },
            "checkIn": {
              "type": "string",
              "description": "YYYY-MM-DD."
            },
            "deposit": {
              "type": "object",
              "properties": {
                "text": {
                  "type": "string",
                  "description": "The amount written out, to quote to the person."
                },
                "amount": {
                  "type": "number",
                  "description": "In major units (euros, not cents)."
                },
                "currency": {
                  "type": "string",
                  "description": "ISO 4217."
                }
              },
              "description": "The deposit held."
            },
            "checkOut": {
              "type": "string",
              "description": "YYYY-MM-DD."
            },
            "checkedAt": {
              "type": [
                "string",
                "null"
              ],
              "description": "When the source was read, ISO time."
            },
            "listPrice": {
              "type": "object",
              "properties": {
                "text": {
                  "type": "string",
                  "description": "The amount written out, to quote to the person."
                },
                "amount": {
                  "type": "number",
                  "description": "In major units (euros, not cents)."
                },
                "currency": {
                  "type": "string",
                  "description": "ISO 4217."
                }
              },
              "description": "The source's list price above price, when discounted."
            },
            "discountPct": {
              "type": "number",
              "description": "The discount the source states."
            },
            "mandatoryExtras": {
              "type": "object",
              "properties": {
                "text": {
                  "type": "string",
                  "description": "The amount written out, to quote to the person."
                },
                "amount": {
                  "type": "number",
                  "description": "In major units (euros, not cents)."
                },
                "currency": {
                  "type": "string",
                  "description": "ISO 4217."
                }
              },
              "description": "What the source says is payable on top, whatever the person picks."
            }
          },
          "description": "One stay of this item, read live."
        },
        "party": {
          "enum": [
            "fits",
            "too-many",
            "not-checked"
          ],
          "type": "string",
          "description": "Whether the party fits."
        },
        "total": {
          "type": "number",
          "description": "How many rows match in all."
        },
        "cursor": {
          "type": [
            "string",
            "null"
          ],
          "description": "Pass as cursor for the next page; null on the last."
        },
        "freeStays": {
          "type": "array",
          "items": {
            "type": "object",
            "properties": {
              "price": {
                "type": "object",
                "properties": {
                  "text": {
                    "type": "string",
                    "description": "The amount written out, to quote to the person."
                  },
                  "amount": {
                    "type": "number",
                    "description": "In major units (euros, not cents)."
                  },
                  "currency": {
                    "type": "string",
                    "description": "ISO 4217."
                  }
                },
                "description": "The stay's price."
              },
              "nights": {
                "type": "number",
                "description": "Nights."
              },
              "status": {
                "enum": [
                  "free",
                  "booked",
                  "not-a-check-in-day",
                  "not-whole-blocks",
                  "outside-calendar",
                  "not-known"
                ],
                "type": "string",
                "description": "Whether it can be booked."
              },
              "checkIn": {
                "type": "string",
                "description": "YYYY-MM-DD."
              },
              "deposit": {
                "type": "object",
                "properties": {
                  "text": {
                    "type": "string",
                    "description": "The amount written out, to quote to the person."
                  },
                  "amount": {
                    "type": "number",
                    "description": "In major units (euros, not cents)."
                  },
                  "currency": {
                    "type": "string",
                    "description": "ISO 4217."
                  }
                },
                "description": "The deposit held."
              },
              "checkOut": {
                "type": "string",
                "description": "YYYY-MM-DD."
              },
              "checkedAt": {
                "type": [
                  "string",
                  "null"
                ],
                "description": "When the source was read, ISO time."
              },
              "listPrice": {
                "type": "object",
                "properties": {
                  "text": {
                    "type": "string",
                    "description": "The amount written out, to quote to the person."
                  },
                  "amount": {
                    "type": "number",
                    "description": "In major units (euros, not cents)."
                  },
                  "currency": {
                    "type": "string",
                    "description": "ISO 4217."
                  }
                },
                "description": "The source's list price above price, when discounted."
              },
              "discountPct": {
                "type": "number",
                "description": "The discount the source states."
              },
              "mandatoryExtras": {
                "type": "object",
                "properties": {
                  "text": {
                    "type": "string",
                    "description": "The amount written out, to quote to the person."
                  },
                  "amount": {
                    "type": "number",
                    "description": "In major units (euros, not cents)."
                  },
                  "currency": {
                    "type": "string",
                    "description": "ISO 4217."
                  }
                },
                "description": "What the source says is payable on top, whatever the person picks."
              }
            },
            "description": "One stay of this item, read live."
          },
          "description": "Free stays, a page."
        },
        "nearestFree": {
          "type": "array",
          "items": {
            "type": "object",
            "properties": {
              "price": {
                "type": "object",
                "properties": {
                  "text": {
                    "type": "string",
                    "description": "The amount written out, to quote to the person."
                  },
                  "amount": {
                    "type": "number",
                    "description": "In major units (euros, not cents)."
                  },
                  "currency": {
                    "type": "string",
                    "description": "ISO 4217."
                  }
                },
                "description": "The stay's price."
              },
              "nights": {
                "type": "number",
                "description": "Nights."
              },
              "status": {
                "enum": [
                  "free",
                  "booked",
                  "not-a-check-in-day",
                  "not-whole-blocks",
                  "outside-calendar",
                  "not-known"
                ],
                "type": "string",
                "description": "Whether it can be booked."
              },
              "checkIn": {
                "type": "string",
                "description": "YYYY-MM-DD."
              },
              "deposit": {
                "type": "object",
                "properties": {
                  "text": {
                    "type": "string",
                    "description": "The amount written out, to quote to the person."
                  },
                  "amount": {
                    "type": "number",
                    "description": "In major units (euros, not cents)."
                  },
                  "currency": {
                    "type": "string",
                    "description": "ISO 4217."
                  }
                },
                "description": "The deposit held."
              },
              "checkOut": {
                "type": "string",
                "description": "YYYY-MM-DD."
              },
              "checkedAt": {
                "type": [
                  "string",
                  "null"
                ],
                "description": "When the source was read, ISO time."
              },
              "listPrice": {
                "type": "object",
                "properties": {
                  "text": {
                    "type": "string",
                    "description": "The amount written out, to quote to the person."
                  },
                  "amount": {
                    "type": "number",
                    "description": "In major units (euros, not cents)."
                  },
                  "currency": {
                    "type": "string",
                    "description": "ISO 4217."
                  }
                },
                "description": "The source's list price above price, when discounted."
              },
              "discountPct": {
                "type": "number",
                "description": "The discount the source states."
              },
              "mandatoryExtras": {
                "type": "object",
                "properties": {
                  "text": {
                    "type": "string",
                    "description": "The amount written out, to quote to the person."
                  },
                  "amount": {
                    "type": "number",
                    "description": "In major units (euros, not cents)."
                  },
                  "currency": {
                    "type": "string",
                    "description": "ISO 4217."
                  }
                },
                "description": "What the source says is payable on top, whatever the person picks."
              }
            },
            "description": "One stay of this item, read live."
          },
          "description": "The nearest free stays, a page."
        }
      },
      "description": "With dates: that stay and, when not free, the nearest free stays; without: its free stays, soonest first."
    },
    "sessionExpiresAt": {
      "type": "string",
      "description": "When that session stops working, ISO time."
    },
    "operatorDescriptions": {
      "type": "array",
      "items": {
        "type": "object",
        "properties": {},
        "description": "One."
      },
      "description": "The operator's own texts and documents."
    }
  }
}
get_yacht annotations
{
  "readOnlyHint": true,
  "openWorldHint": false,
  "destructiveHint": false
}
price_range — Price range
Advertised by the server during the last successful anonymous check.
Advertised read-only

What a stay typically costs: the range (p25, median, p75 in minor units of the currency) of open departures for a place, month and party, optionally one type, with how many items it is from, the cheapest published one that fits and when the figures were built; seasonNote says in words how another month compares. An unknown place answers with the places that have figures. Works without a contact.

price_range input schema
{
  "type": "object",
  "required": [
    "place",
    "month",
    "party"
  ],
  "properties": {
    "name": {
      "type": "string",
      "description": "Optional: the person's name, as they gave it."
    },
    "type": {
      "type": "string",
      "description": "Optional: one type, as the types list names it."
    },
    "email": {
      "type": "string",
      "description": "Optional: the person's own email, as they gave it, for more rows a call. Leave out to browse; the site keeps it to answer their enquiry."
    },
    "month": {
      "type": "string",
      "description": "YYYY-MM."
    },
    "party": {
      "type": "number",
      "description": "How many people."
    },
    "phone": {
      "type": "string",
      "description": "Optional: the person's own phone, international form (+ and country code), as they gave it, for more rows a call. Leave out to browse."
    },
    "place": {
      "type": "string",
      "description": "A country or region in words (e.g. Croatia), or a place value as the places list names it."
    },
    "session": {
      "type": "string",
      "description": "The session an earlier answer returned. Pass it instead of email or phone from then on."
    }
  },
  "additionalProperties": false
}
price_range output schema
{
  "type": "object",
  "required": [
    "currency",
    "items"
  ],
  "properties": {
    "next": {
      "type": "string",
      "description": "When browsing: how to get a quote or more rows."
    },
    "thin": {
      "type": "boolean",
      "description": "true: few items, a rough figure."
    },
    "items": {
      "type": "number",
      "description": "How many items the figures are from."
    },
    "place": {
      "type": "string",
      "description": "The place value answered (a place given in words, resolved)."
    },
    "range": {
      "type": [
        "object",
        "null"
      ],
      "properties": {
        "p25": {
          "type": "number",
          "description": "Minor units."
        },
        "p50": {
          "type": "number",
          "description": "Minor units."
        },
        "p75": {
          "type": "number",
          "description": "Minor units."
        }
      },
      "description": "p25, p50 (median), p75 in MINOR units; null when too few items."
    },
    "session": {
      "type": "string",
      "description": "Only on the call that created the contact: pass it from then on."
    },
    "browsing": {
      "type": "boolean",
      "description": "true: answered without a contact, so fewer rows and the first pages only."
    },
    "cheapest": {
      "type": [
        "object",
        "null"
      ],
      "properties": {
        "href": {
          "type": "string",
          "description": "Its page, absolute URL."
        },
        "name": {
          "type": "string",
          "description": "Its name."
        },
        "place": {
          "type": "string",
          "description": "Where it leaves from."
        },
        "priceMinor": {
          "type": "number",
          "description": "Minor units."
        }
      },
      "description": "The cheapest published item that fits."
    },
    "currency": {
      "type": "string",
      "description": "ISO 4217."
    },
    "seasonHint": {
      "type": [
        "object",
        "null"
      ],
      "properties": {
        "pct": {
          "type": "number",
          "description": "Percent."
        },
        "month": {
          "type": "string",
          "description": "YYYY-MM."
        }
      },
      "description": "Another month against this one: pct cheaper there (negative: dearer)."
    },
    "seasonNote": {
      "type": "string",
      "description": "The season hint in words, to tell the person."
    },
    "noneFitParty": {
      "type": "boolean",
      "description": "true: no item there takes the party."
    },
    "sessionExpiresAt": {
      "type": "string",
      "description": "When that session stops working, ISO time."
    },
    "extrasMedianMinor": {
      "type": [
        "number",
        "null"
      ],
      "description": "The usual mandatory extras, minor units."
    },
    "lastMinuteSharePct": {
      "type": [
        "number",
        "null"
      ],
      "description": "Share of soon departures discounted."
    }
  }
}
price_range annotations
{
  "readOnlyHint": true,
  "openWorldHint": false,
  "destructiveHint": false
}
best_deals — Best deals
Advertised by the server during the last successful anonymous check.
Advertised read-only

Discounted departures of this site's yachts, read from the live inventory: only a discount the source itself states (a special, or a price under its list price), never a computed gap. By default from tomorrow to 30 days ahead; a departure the yacht's calendar shows taken is left out. One row per yacht: its page link (the id get and request_quote take) and photo (absolute URLs) and its departures, each with its dates, every route it leaves on, nights, price, list price, mandatory extras and saving, in the order asked. Narrow with the same typed filters as search. When none match, the answer is the nearest deals (the window after, the place around, a bound let go) and nearest says what was widened. Paged: total and cursor. Works without a contact (browsing: fewer rows).

best_deals input schema
{
  "type": "object",
  "required": [],
  "properties": {
    "to": {
      "type": "string",
      "description": "Latest departure, YYYY-MM-DD."
    },
    "base": {
      "type": "string",
      "description": "The exact base it leaves from, in words."
    },
    "from": {
      "type": "string",
      "description": "Earliest departure, YYYY-MM-DD."
    },
    "name": {
      "type": "string",
      "description": "Optional: the person's name, as they gave it."
    },
    "sort": {
      "enum": [
        "saving",
        "departure",
        "price",
        "length",
        "cabins",
        "berths",
        "heads",
        "beam",
        "draft",
        "year",
        "fuel",
        "water"
      ],
      "type": "string",
      "description": "saving (default, biggest first), departure (soonest first), price (cheapest first), or length (length, biggest first), cabins (cabins, biggest first), berths (berths, biggest first), heads (heads, biggest first), beam (beam, biggest first), draft (draft, biggest first), year (year, biggest first), fuel (fuel tank, biggest first), water (water tank, biggest first)."
    },
    "text": {
      "type": "string",
      "description": "Words in its name or model, e.g. a builder or a model name."
    },
    "email": {
      "type": "string",
      "description": "Optional: the person's own email, as they gave it, for more rows a call. Leave out to browse; the site keeps it to answer their enquiry."
    },
    "limit": {
      "type": "number",
      "description": "Rows per page: at most 10 when browsing, 20 with the person's email or phone."
    },
    "party": {
      "type": "number",
      "description": "How many people."
    },
    "phone": {
      "type": "string",
      "description": "Optional: the person's own phone, international form (+ and country code), as they gave it, for more rows a call. Leave out to browse."
    },
    "place": {
      "type": "string",
      "description": "Where, in words or as a place id: a region, country or area, and everything in it, e.g. Mediterranean, Worldwide, Caribbean, North America, Greece, Croatia, Italy, France, Turkey, Spain, British Virgin Islands, Netherlands, Germany, Seychelles, Poland, Ireland, Martinique, United Kingdom, Belgium, Portugal, Ecuador, French Polynesia, Sweden, St. Martin, Bahamas, Malta, Montenegro, Thailand, Canada, St. Lucia, Slovenia, Norway, Guadeloupe, Brazil, Hungary, Grenada, St. Vincent, Belize, Cuba, Maldives, Mexico, Panama, Cape Verde, United Arab Emirates, Antigua and Barbuda, India, Tanzania, Egypt, Monaco, Estonia, Mauritius, New Zealand, USA, Switzerland, Fiji. An unknown place is refused; nothing there answers the nearest place around it."
    },
    "cursor": {
      "type": "string",
      "description": "The cursor a previous answer returned, for its next page."
    },
    "beamMax": {
      "type": "number",
      "description": "Beam at most m (on this site 0.9 to 44)."
    },
    "beamMin": {
      "type": "number",
      "description": "Beam at least m (on this site 0.9 to 44)."
    },
    "fuelMax": {
      "type": "number",
      "description": "Fuel tank at most l (on this site 1 to 65000)."
    },
    "fuelMin": {
      "type": "number",
      "description": "Fuel tank at least l (on this site 1 to 65000)."
    },
    "session": {
      "type": "string",
      "description": "The session an earlier answer returned. Pass it instead of email or phone from then on."
    },
    "yearMax": {
      "type": "number",
      "description": "Year at most (on this site 0 to 2028)."
    },
    "yearMin": {
      "type": "number",
      "description": "Year at least (on this site 0 to 2028)."
    },
    "draftMax": {
      "type": "number",
      "description": "Draft at most m (on this site 0.3 to 7985)."
    },
    "draftMin": {
      "type": "number",
      "description": "Draft at least m (on this site 0.3 to 7985)."
    },
    "headsMax": {
      "type": "number",
      "description": "Heads at most (on this site 0 to 23)."
    },
    "headsMin": {
      "type": "number",
      "description": "Heads at least (on this site 0 to 23)."
    },
    "priceMax": {
      "type": "number",
      "description": "The most to pay, in the site currency: the price plus the mandatory extras."
    },
    "priceMin": {
      "type": "number",
      "description": "The least to pay, in the site currency: the price plus the mandatory extras."
    },
    "waterMax": {
      "type": "number",
      "description": "Water tank at most l (on this site 1 to 60000)."
    },
    "waterMin": {
      "type": "number",
      "description": "Water tank at least l (on this site 1 to 60000)."
    },
    "berthsMax": {
      "type": "number",
      "description": "Berths at most (on this site 0 to 80)."
    },
    "berthsMin": {
      "type": "number",
      "description": "Berths at least (on this site 0 to 80)."
    },
    "cabinsMax": {
      "type": "number",
      "description": "Cabins at most (on this site 0 to 20)."
    },
    "cabinsMin": {
      "type": "number",
      "description": "Cabins at least (on this site 0 to 20)."
    },
    "lengthMax": {
      "type": "number",
      "description": "Length at most ft (on this site 13.35 to 180.45)."
    },
    "lengthMin": {
      "type": "number",
      "description": "Length at least ft (on this site 13.35 to 180.45)."
    },
    "yacht_types": {
      "type": "array",
      "items": {
        "enum": [
          "catamarans",
          "gulets",
          "houseboats",
          "motorboats",
          "sailboats"
        ],
        "type": "string"
      },
      "minItems": 1,
      "description": "Yacht Types: any of these value ids (one or more): catamarans (Catamarans, 3192); gulets (Gulets, 201); houseboats (Houseboats, 1428); motorboats (Motorboats, 1080); sailboats (Sailboats, 4577)."
    },
    "charter_types": {
      "type": "array",
      "items": {
        "enum": [
          "all-inclusive",
          "bareboat",
          "cabin-charter",
          "crewed",
          "day-charter",
          "flotilla",
          "regatta",
          "skippered"
        ],
        "type": "string"
      },
      "minItems": 1,
      "description": "Charter Types: any of these value ids (one or more): all-inclusive (All-inclusive, 68); bareboat (Bareboat, 8796); cabin-charter (Cabin charter, 152); crewed (Crewed, 1702); day-charter (Day charter, 374); flotilla (Flotilla, 257); regatta (Regatta, 34); skippered (Skippered, 245)."
    }
  },
  "additionalProperties": false
}
best_deals output schema
{
  "type": "object",
  "required": [
    "rows",
    "total"
  ],
  "properties": {
    "from": {
      "type": "string",
      "description": "The window's first day."
    },
    "next": {
      "type": "string",
      "description": "When browsing: how to get a quote or more rows."
    },
    "rows": {
      "type": "array",
      "items": {
        "type": "object",
        "properties": {
          "base": {
            "type": [
              "string",
              "null"
            ],
            "description": "Its home base."
          },
          "item": {
            "type": "string",
            "description": "Its name."
          },
          "link": {
            "type": "string",
            "description": "Its page, absolute URL: the id get and request_quote take."
          },
          "type": {
            "type": [
              "string",
              "null"
            ],
            "description": "Its type."
          },
          "photo": {
            "type": [
              "string",
              "null"
            ],
            "description": "One photo, absolute URL."
          },
          "guests": {
            "type": [
              "number",
              "null"
            ],
            "description": "How many it takes."
          },
          "departures": {
            "type": "array",
            "items": {
              "type": "object",
              "properties": {
                "kind": {
                  "type": "string",
                  "description": "special or offer."
                },
                "price": {
                  "type": "object",
                  "properties": {
                    "text": {
                      "type": "string",
                      "description": "The amount written out, to quote to the person."
                    },
                    "amount": {
                      "type": "number",
                      "description": "In major units (euros, not cents)."
                    },
                    "currency": {
                      "type": "string",
                      "description": "ISO 4217."
                    }
                  },
                  "description": "An amount in the site currency."
                },
                "nights": {
                  "type": "number",
                  "description": "Nights."
                },
                "routes": {
                  "type": "array",
                  "items": {
                    "type": "object",
                    "properties": {
                      "to": {
                        "type": "string",
                        "description": "Ends at."
                      },
                      "from": {
                        "type": "string",
                        "description": "Leaves from."
                      }
                    },
                    "description": "A route."
                  },
                  "description": "Every route it leaves on at this price."
                },
                "departTo": {
                  "type": "string",
                  "description": "YYYY-MM-DD."
                },
                "listPrice": {
                  "type": "object",
                  "properties": {
                    "text": {
                      "type": "string",
                      "description": "The amount written out, to quote to the person."
                    },
                    "amount": {
                      "type": "number",
                      "description": "In major units (euros, not cents)."
                    },
                    "currency": {
                      "type": "string",
                      "description": "ISO 4217."
                    }
                  },
                  "description": "An amount in the site currency."
                },
                "savingPct": {
                  "type": "number",
                  "description": "The discount the source states."
                },
                "departFrom": {
                  "type": "string",
                  "description": "YYYY-MM-DD."
                },
                "mandatoryExtras": {
                  "type": "object",
                  "properties": {
                    "text": {
                      "type": "string",
                      "description": "The amount written out, to quote to the person."
                    },
                    "amount": {
                      "type": "number",
                      "description": "In major units (euros, not cents)."
                    },
                    "currency": {
                      "type": "string",
                      "description": "ISO 4217."
                    }
                  },
                  "description": "What the departure states is payable on top."
                }
              },
              "description": "One departure at one price."
            },
            "description": "Its discounted departures in the window, in the order asked."
          }
        },
        "description": "One item."
      },
      "description": "One page of deals, one row per item with its departures."
    },
    "total": {
      "type": "number",
      "description": "How many rows match in all."
    },
    "cursor": {
      "type": [
        "string",
        "null"
      ],
      "description": "Pass as cursor for the next page; null on the last."
    },
    "nearest": {
      "type": "object",
      "properties": {
        "note": {
          "type": "string",
          "description": "What moved, in words to tell the person."
        },
        "widened": {
          "enum": [
            "dates",
            "base",
            "place",
            "ranges",
            "price",
            "discount"
          ],
          "type": "string",
          "description": "The one thing let go."
        }
      },
      "description": "Only when nothing matched exactly: these rows are the nearest match."
    },
    "session": {
      "type": "string",
      "description": "Only on the call that created the contact: pass it from then on."
    },
    "through": {
      "type": "string",
      "description": "Its last day."
    },
    "browsing": {
      "type": "boolean",
      "description": "true: answered without a contact, so fewer rows and the first pages only."
    },
    "checkedAt": {
      "type": [
        "string",
        "null"
      ],
      "description": "When the offers were read, ISO time."
    },
    "notApplied": {
      "type": "array",
      "items": {
        "type": "string",
        "description": "A wish."
      },
      "description": "What could not narrow the deals."
    },
    "sessionExpiresAt": {
      "type": "string",
      "description": "When that session stops working, ISO time."
    }
  }
}
best_deals annotations
{
  "readOnlyHint": true,
  "openWorldHint": false,
  "destructiveHint": false
}
request_quote — Request a formal quote
Advertised by the server during the last successful anonymous check.
Open-world

Ask this site's desk for a formal quote on one or more yachts, for the person. Pass the page links a search, best_deals or get returned, the days and the party, and anything the person wants the desk to know. The desk answers with a written quote to the person's own email or phone, with every cost on it; this answer only says it was received and where the quote goes. Nothing is booked or paid: the person confirms the booking with the desk. Ask the person before calling it.

request_quote input schema
{
  "type": "object",
  "required": [
    "items"
  ],
  "properties": {
    "to": {
      "type": "string",
      "description": "Check-out day, YYYY-MM-DD."
    },
    "from": {
      "type": "string",
      "description": "Check-in day, YYYY-MM-DD."
    },
    "name": {
      "type": "string",
      "description": "Optional: the person's name, as they gave it."
    },
    "email": {
      "type": "string",
      "description": "The person's own email, as they gave it: the quote is sent there. This, phone or session is needed."
    },
    "items": {
      "type": "array",
      "items": {
        "type": "string"
      },
      "maxItems": 20,
      "minItems": 1,
      "description": "The yacht page links to quote (absolute URLs on this site), exactly as a search, best_deals or get returned them. At most 20."
    },
    "notes": {
      "type": "string",
      "description": "What the person wants the desk to know, in their words (at most 2000 characters)."
    },
    "party": {
      "type": "number",
      "description": "How many people."
    },
    "phone": {
      "type": "string",
      "description": "The person's own phone, international form (+ and country code), as they gave it. This, email or session is needed."
    },
    "session": {
      "type": "string",
      "description": "The session an earlier answer returned. Pass it instead of email or phone."
    }
  },
  "additionalProperties": false
}
request_quote output schema
{
  "type": "object",
  "required": [
    "status",
    "nextStep"
  ],
  "properties": {
    "status": {
      "enum": [
        "received",
        "already_received"
      ],
      "type": "string",
      "description": "received: the desk has the request; already_received: this session asked the same in the last day."
    },
    "session": {
      "type": "string",
      "description": "Only on the call that created the contact: pass it from then on."
    },
    "nextStep": {
      "type": "string",
      "description": "Where the written quote goes, in words to tell the person."
    },
    "enquiryRef": {
      "type": "string",
      "description": "The request's reference, returned once."
    },
    "sessionExpiresAt": {
      "type": "string",
      "description": "When that session stops working, ISO time."
    }
  }
}
request_quote annotations
{
  "readOnlyHint": false,
  "openWorldHint": true,
  "idempotentHint": true,
  "destructiveHint": false
}

Prompts

Not advertised

No prompt definitions available.

Resources

1 advertised

about — About The Charter Desk

Advertised by the server during the last successful anonymous check.

The company's published facts and its house and legal pages: who it is and how booking works here.

about URI
site://about

MIME type: application/json

30-day availability

Aggregated from read-only remote checks; this is not a tool-execution or security guarantee.

Successful checks
1 of 1 (100%)
Average latency
2340 ms
95th percentile latency
2340 ms

Maintenance history

Public check and source-refresh events. Editorial and ownership records remain private.

  • · probe · passed · 2340 ms · metadata changed · 5 tool(s), 1 resource(s), 0 resource template(s)

Connect from your client

Each snippet registers the same endpoint; pick the client you use.

This server is operated by the named third party. Listing and endpoint checks are not an endorsement or a security audit. Review the operator's permissions, terms, and data handling before connecting. How listings are checked and corrected.

Claude Code

Run this once in a terminal. It registers the remote server. Use --scope project to write .mcp.json for the repo.
Claude Code configuration
claude mcp add --transport http the-charter-desk-mcp https://thecharterdesk.com/mcp

Codex

Run this once. Codex stores MCP servers in ~/.codex/config.toml (or .codex/config.toml in a trusted project).
Codex configuration
codex mcp add the-charter-desk-mcp --url https://thecharterdesk.com/mcp

Cursor

Merge this server into .cursor/mcp.json in your project, then enable the-charter-desk-mcp in your MCP settings.
Cursor configuration
{
  "mcpServers": {
    "the-charter-desk-mcp": {
      "url": "https://thecharterdesk.com/mcp"
    }
  }
}

Cline

Merge this into cline_mcp_settings.json (Cline → MCP Servers → Configure).
Cline configuration
{
  "mcpServers": {
    "the-charter-desk-mcp": {
      "type": "streamableHttp",
      "url": "https://thecharterdesk.com/mcp",
      "disabled": false
    }
  }
}

VS Code

Merge this server into .vscode/mcp.json. Use MCP: List Servers to start the-charter-desk-mcp and inspect its tools.
VS Code configuration
{
  "servers": {
    "the-charter-desk-mcp": {
      "type": "http",
      "url": "https://thecharterdesk.com/mcp"
    }
  }
}

Gemini CLI

Run this once. It writes .gemini/settings.json in the current project; pass --scope user for ~/.gemini/settings.json.
Gemini CLI configuration
gemini mcp add --transport http the-charter-desk-mcp https://thecharterdesk.com/mcp

Claude Desktop

Merge this into claude_desktop_config.json (macOS: ~/Library/Application Support/Claude/, Windows: %APPDATA%\Claude\), then restart Claude Desktop.
Claude Desktop configuration
{
  "mcpServers": {
    "the-charter-desk-mcp": {
      "url": "https://thecharterdesk.com/mcp"
    }
  }
}

Windsurf

Merge this into ~/.codeium/windsurf/mcp_config.json, then refresh MCP in Cascade. Windsurf remote servers use serverUrl, not url.
Windsurf configuration
{
  "mcpServers": {
    "the-charter-desk-mcp": {
      "serverUrl": "https://thecharterdesk.com/mcp"
    }
  }
}

Let your agent find its tools

Find servers like The Charter Desk MCP from your agent. Add Koskamo once to search the index for endpoints, access requirements, and client setup. Public discovery needs no key.

Do you run The Charter Desk MCP?

Prove ownership with a DNS record, a well-known file, or your Official MCP Registry entry, and your edits publish immediately. Proofs are re-checked weekly; admins can still hide or remove a listing.

Claim this listing