The Charter Desk

Search and price 11,000+ charter yachts from live inventory, see current deals, and request a written quote you can book on. Remote server, no auth to browse.

Documentation

Every tool this site's MCP server answers, with its parameters, an example call and answer, its errors and its limits. Generated from the server itself, so it is always current.

POST https://thecharterdesk.com/mcp

Overview

Transport

POST

Streamable HTTP · JSON answers · GET 405

Protocol

2025-06-18

2025-03-26 · 2024-11-05

Auth

None

JSON-RPC 2.0

Tools

5

search_yachts · get_yacht · price_range · best_deals · request_quote

Browsing and quotes

Without an email or phone the four reads answer in browse mode: at most 10 rows per answer, no page past 2, 30 calls per 10 minutes per address. Every browse answer says to ask the person for an email or phone.

With the person's email or phone, or the session the first answer returns, an answer holds up to 20 rows and the person gets 30 calls an hour. A session lasts 30 days.

request_quote always needs an email, phone or session. The desk sends the person a written quote; nothing is booked or paid. At most 5 quotes a day per person.

Rate limits

  • 60 calls a minute per address
  • 1,000 calls a day per address
  • 30 browse calls per 10 minutes per address
  • 5,000 browse calls a day for the whole site
  • 30 calls an hour per person
  • 5 quotes a day per person
  • 30 days a session lasts

Server instructions

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

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).

ParameterType
fromstringoptionalCheck-in day, YYYY-MM-DD.
tostringoptionalCheck-out day, YYYY-MM-DD.
partynumberoptionalHow many people.
yacht_typesstring[]optionalYacht 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_typesstring[]optionalCharter 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).
placestringoptionalWhere, 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.
basestringoptionalThe exact base it leaves from, in words.
textstringoptionalWords in its name or model, e.g. a builder or a model name.
lengthMinnumberoptionalLength at least ft (on this site 13.35 to 180.45).
lengthMaxnumberoptionalLength at most ft (on this site 13.35 to 180.45).
cabinsMinnumberoptionalCabins at least (on this site 0 to 20).
cabinsMaxnumberoptionalCabins at most (on this site 0 to 20).
berthsMinnumberoptionalBerths at least (on this site 0 to 80).
berthsMaxnumberoptionalBerths at most (on this site 0 to 80).
headsMinnumberoptionalHeads at least (on this site 0 to 23).
headsMaxnumberoptionalHeads at most (on this site 0 to 23).
beamMinnumberoptionalBeam at least m (on this site 0.9 to 44).
beamMaxnumberoptionalBeam at most m (on this site 0.9 to 44).
draftMinnumberoptionalDraft at least m (on this site 0.3 to 7985).
draftMaxnumberoptionalDraft at most m (on this site 0.3 to 7985).
yearMinnumberoptionalYear at least (on this site 0 to 2028).
yearMaxnumberoptionalYear at most (on this site 0 to 2028).
fuelMinnumberoptionalFuel tank at least l (on this site 1 to 65000).
fuelMaxnumberoptionalFuel tank at most l (on this site 1 to 65000).
waterMinnumberoptionalWater tank at least l (on this site 1 to 60000).
waterMaxnumberoptionalWater tank at most l (on this site 1 to 60000).
priceMinnumberoptionalThe least to pay, in the site currency: the price plus the mandatory extras.
priceMaxnumberoptionalThe most to pay, in the site currency: the price plus the mandatory extras.
discountOnlybooleanoptionaltrue: only those with a discount the source states.
sortstringprice | discount | length | cabins | berths | heads | beam | draft | year | fuel | wateroptionalprice (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).
cursorstringoptionalThe cursor a previous answer returned, for its next page.
limitnumberoptionalRows per page: at most 10 when browsing, 20 with the person's email or phone.

The person's contact (email, phone, session, name)

ParameterType
emailstringoptionalOptional: 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.
phonestringoptionalOptional: the person's own phone, international form (+ and country code), as they gave it, for more rows a call. Leave out to browse.
sessionstringoptionalThe session an earlier answer returned. Pass it instead of email or phone from then on.
namestringoptionalOptional: the person's name, as they gave it.

Request

{
  "jsonrpc": "2.0",
  "id": 1,
  "method": "tools/call",
  "params": {
    "name": "search_yachts",
    "arguments": {
      "from": "2026-12-01",
      "to": "2026-12-08",
      "party": 4,
      "limit": 2
    }
  }
}

Response

{
  "jsonrpc": "2.0",
  "id": 1,
  "result": {
    "content": [
      {
        "type": "text",
        "text": "{\"items\":[{\"name\":\"string\",\"href\":\"https://thecharterdesk.com/yachts/2-drunk-6358727140000106731\",\"image\":{\"src\":\"string\",\"alt\":\"string\"},\"kind\":\"string\",\"priceFrom\":0,\"currency\":\"string\",\"mandatoryExtras\":{\"amount\":0,\"currency\":\"string\",\"text\":\"string\"},\"stay\":{\"checkIn\":\"2026-12-01\",\"checkOut\":\"2026-12-08\",\"nights\":0,\"status\":\"free\",\"price\":{\"amount\":0,\"currency\":\"string\",\"text\":\"string\"},\"listPrice\":{\"amount\":0,\"currency\":\"string\",\"text\":\"string\"},\"discountPct\":0,\"mandatoryExtras\":{\"amount\":0,\"currency\":\"string\",\"text\":\"string\"},\"deposit\":{\"amount\":0,\"currency\":\"string\",\"text\":\"string\"},\"checkedAt\":\"2026-11-01T06:00:00Z\"}}],\"total\":0,\"cursor\":\"string\",\"checked\":true,\"checkedAt\":\"2026-11-01T06:00:00Z\",\"notApplied\":[\"string\"],\"unchecked\":[\"string\"],\"leftOutUnpriced\":0,\"nearest\":{\"widened\":\"dates\",\"note\":\"string\"},\"browsing\":true,\"next\":\"string\",\"session\":\"string\",\"sessionExpiresAt\":\"2026-12-01T06:00:00Z\"}"
      }
    ],
    "structuredContent": {
      "items": [
        {
          "name": "string",
          "href": "https://thecharterdesk.com/yachts/2-drunk-6358727140000106731",
          "image": {
            "src": "string",
            "alt": "string"
          },
          "kind": "string",
          "priceFrom": 0,
          "currency": "string",
          "mandatoryExtras": {
            "amount": 0,
            "currency": "string",
            "text": "string"
          },
          "stay": {
            "checkIn": "2026-12-01",
            "checkOut": "2026-12-08",
            "nights": 0,
            "status": "free",
            "price": {
              "amount": 0,
              "currency": "string",
              "text": "string"
            },
            "listPrice": {
              "amount": 0,
              "currency": "string",
              "text": "string"
            },
            "discountPct": 0,
            "mandatoryExtras": {
              "amount": 0,
              "currency": "string",
              "text": "string"
            },
            "deposit": {
              "amount": 0,
              "currency": "string",
              "text": "string"
            },
            "checkedAt": "2026-11-01T06:00:00Z"
          }
        }
      ],
      "total": 0,
      "cursor": "string",
      "checked": true,
      "checkedAt": "2026-11-01T06:00:00Z",
      "notApplied": [
        "string"
      ],
      "unchecked": [
        "string"
      ],
      "leftOutUnpriced": 0,
      "nearest": {
        "widened": "dates",
        "note": "string"
      },
      "browsing": true,
      "next": "string",
      "session": "string",
      "sessionExpiresAt": "2026-12-01T06:00:00Z"
    },
    "isError": false
  }
}

Errors

  • invalid_email That email address does not look right; ask the person for it again.Ask the person to give their email again.
  • invalid_phone Give the phone number in international form, a plus and the country code first, e.g. +31612345678.Ask the person for the number with its country code.
  • contact_revoked The owner of this contact said they did not ask for this. Use a different contact.Ask the person for a different email or phone.
  • rate_limited Too many calls for this person or address this hour.Wait retryAfterSeconds, then call again.
  • browse_limited This address has browsed as much as this site answers without a contact for now.Ask the person for their email or phone and pass it as email or phone, or call request_quote.
  • browse_busy This site has answered as many browse calls today as it answers without a contact.Ask the person for their email or phone and pass it as email or phone, or call request_quote.
  • browse_page_limit Browsing without a contact shows the first pages only.Ask the person for their email or phone and pass it as email or phone, or call request_quote.
  • read_refused The read could not answer these arguments.Read the message: it says what to change (a date format, a place name, which of several items).

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.

ParameterType
idstringrequiredThe yacht's page link (an absolute URL on this site), exactly as a search or best_deals returned it.
fromstringoptionalCheck-in day, YYYY-MM-DD.
tostringoptionalCheck-out day, YYYY-MM-DD.
partynumberoptionalHow many people.
cursorstringoptionalThe cursor a previous answer returned, for its next page.
limitnumberoptionalRows per page: at most 10 when browsing, 20 with the person's email or phone.

The person's contact (email, phone, session, name)

ParameterType
emailstringoptionalOptional: 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.
phonestringoptionalOptional: the person's own phone, international form (+ and country code), as they gave it, for more rows a call. Leave out to browse.
sessionstringoptionalThe session an earlier answer returned. Pass it instead of email or phone from then on.
namestringoptionalOptional: the person's name, as they gave it.

Request

{
  "jsonrpc": "2.0",
  "id": 2,
  "method": "tools/call",
  "params": {
    "name": "get_yacht",
    "arguments": {
      "id": "https://thecharterdesk.com/yachts/2-drunk-6358727140000106731",
      "from": "2026-12-01",
      "to": "2026-12-08"
    }
  }
}

Response

{
  "jsonrpc": "2.0",
  "id": 2,
  "result": {
    "content": [
      {
        "type": "text",
        "text": "{\"item\":\"string\",\"href\":\"https://thecharterdesk.com/yachts/2-drunk-6358727140000106731\",\"facts\":[{}],\"kind\":\"string\",\"place\":\"string\",\"description\":\"string\",\"packages\":[{\"name\":\"string\",\"default\":true,\"staffed\":true,\"included\":[{}],\"required\":[{}],\"optional\":[{}]}],\"terms\":{},\"equipment\":[{}],\"operatorDescriptions\":[{}],\"availability\":{\"card\":{},\"stay\":{\"checkIn\":\"2026-12-01\",\"checkOut\":\"2026-12-08\",\"nights\":0,\"status\":\"free\",\"price\":{\"amount\":0,\"currency\":\"string\",\"text\":\"string\"},\"listPrice\":{\"amount\":0,\"currency\":\"string\",\"text\":\"string\"},\"discountPct\":0,\"mandatoryExtras\":{\"amount\":0,\"currency\":\"string\",\"text\":\"string\"},\"deposit\":{\"amount\":0,\"currency\":\"string\",\"text\":\"string\"},\"checkedAt\":\"2026-11-01T06:00:00Z\"},\"freeStays\":[{\"checkIn\":\"2026-12-01\",\"checkOut\":\"2026-12-08\",\"nights\":0,\"status\":\"free\",\"price\":{\"amount\":0,\"currency\":\"string\",\"text\":\"string\"},\"listPrice\":{\"amount\":0,\"currency\":\"string\",\"text\":\"string\"},\"discountPct\":0,\"mandatoryExtras\":{\"amount\":0,\"currency\":\"string\",\"text\":\"string\"},\"deposit\":{\"amount\":0,\"currency\":\"string\",\"text\":\"string\"},\"checkedAt\":\"2026-11-01T06:00:00Z\"}],\"nearestFree\":[{\"checkIn\":\"2026-12-01\",\"checkOut\":\"2026-12-08\",\"nights\":0,\"status\":\"free\",\"price\":{\"amount\":0,\"currency\":\"string\",\"text\":\"string\"},\"listPrice\":{\"amount\":0,\"currency\":\"string\",\"text\":\"string\"},\"discountPct\":0,\"mandatoryExtras\":{\"amount\":0,\"currency\":\"string\",\"text\":\"string\"},\"deposit\":{\"amount\":0,\"currency\":\"string\",\"text\":\"string\"},\"checkedAt\":\"2026-11-01T06:00:00Z\"}],\"party\":\"fits\",\"total\":0,\"cursor\":\"string\"},\"checkedAt\":\"2026-11-01T06:00:00Z\",\"browsing\":true,\"next\":\"string\",\"session\":\"string\",\"sessionExpiresAt\":\"2026-12-01T06:00:00Z\"}"
      }
    ],
    "structuredContent": {
      "item": "string",
      "href": "https://thecharterdesk.com/yachts/2-drunk-6358727140000106731",
      "facts": [
        {}
      ],
      "kind": "string",
      "place": "string",
      "description": "string",
      "packages": [
        {
          "name": "string",
          "default": true,
          "staffed": true,
          "included": [
            {}
          ],
          "required": [
            {}
          ],
          "optional": [
            {}
          ]
        }
      ],
      "terms": {},
      "equipment": [
        {}
      ],
      "operatorDescriptions": [
        {}
      ],
      "availability": {
        "card": {},
        "stay": {
          "checkIn": "2026-12-01",
          "checkOut": "2026-12-08",
          "nights": 0,
          "status": "free",
          "price": {
            "amount": 0,
            "currency": "string",
            "text": "string"
          },
          "listPrice": {
            "amount": 0,
            "currency": "string",
            "text": "string"
          },
          "discountPct": 0,
          "mandatoryExtras": {
            "amount": 0,
            "currency": "string",
            "text": "string"
          },
          "deposit": {
            "amount": 0,
            "currency": "string",
            "text": "string"
          },
          "checkedAt": "2026-11-01T06:00:00Z"
        },
        "freeStays": [
          {
            "checkIn": "2026-12-01",
            "checkOut": "2026-12-08",
            "nights": 0,
            "status": "free",
            "price": {
              "amount": 0,
              "currency": "string",
              "text": "string"
            },
            "listPrice": {
              "amount": 0,
              "currency": "string",
              "text": "string"
            },
            "discountPct": 0,
            "mandatoryExtras": {
              "amount": 0,
              "currency": "string",
              "text": "string"
            },
            "deposit": {
              "amount": 0,
              "currency": "string",
              "text": "string"
            },
            "checkedAt": "2026-11-01T06:00:00Z"
          }
        ],
        "nearestFree": [
          {
            "checkIn": "2026-12-01",
            "checkOut": "2026-12-08",
            "nights": 0,
            "status": "free",
            "price": {
              "amount": 0,
              "currency": "string",
              "text": "string"
            },
            "listPrice": {
              "amount": 0,
              "currency": "string",
              "text": "string"
            },
            "discountPct": 0,
            "mandatoryExtras": {
              "amount": 0,
              "currency": "string",
              "text": "string"
            },
            "deposit": {
              "amount": 0,
              "currency": "string",
              "text": "string"
            },
            "checkedAt": "2026-11-01T06:00:00Z"
          }
        ],
        "party": "fits",
        "total": 0,
        "cursor": "string"
      },
      "checkedAt": "2026-11-01T06:00:00Z",
      "browsing": true,
      "next": "string",
      "session": "string",
      "sessionExpiresAt": "2026-12-01T06:00:00Z"
    },
    "isError": false
  }
}

Errors

  • invalid_email That email address does not look right; ask the person for it again.Ask the person to give their email again.
  • invalid_phone Give the phone number in international form, a plus and the country code first, e.g. +31612345678.Ask the person for the number with its country code.
  • contact_revoked The owner of this contact said they did not ask for this. Use a different contact.Ask the person for a different email or phone.
  • rate_limited Too many calls for this person or address this hour.Wait retryAfterSeconds, then call again.
  • browse_limited This address has browsed as much as this site answers without a contact for now.Ask the person for their email or phone and pass it as email or phone, or call request_quote.
  • browse_busy This site has answered as many browse calls today as it answers without a contact.Ask the person for their email or phone and pass it as email or phone, or call request_quote.
  • browse_page_limit Browsing without a contact shows the first pages only.Ask the person for their email or phone and pass it as email or phone, or call request_quote.
  • unknown_item That is not an item on this site.Pass the item's page link (an absolute URL on this site) exactly as a search, best_deals or get returned it.
  • read_refused The read could not answer these arguments.Read the message: it says what to change (a date format, a place name, which of several items).

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.

ParameterType
placestringrequiredA country or region in words (e.g. Croatia), or a place value as the places list names it.
monthstringrequiredYYYY-MM.
partynumberrequiredHow many people.
typestringoptionalOptional: one type, as the types list names it.

The person's contact (email, phone, session, name)

ParameterType
emailstringoptionalOptional: 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.
phonestringoptionalOptional: the person's own phone, international form (+ and country code), as they gave it, for more rows a call. Leave out to browse.
sessionstringoptionalThe session an earlier answer returned. Pass it instead of email or phone from then on.
namestringoptionalOptional: the person's name, as they gave it.

Request

{
  "jsonrpc": "2.0",
  "id": 3,
  "method": "tools/call",
  "params": {
    "name": "price_range",
    "arguments": {
      "place": "country:antigua-and-barbuda",
      "month": "2026-12",
      "party": 4
    }
  }
}

Response

{
  "jsonrpc": "2.0",
  "id": 3,
  "result": {
    "content": [
      {
        "type": "text",
        "text": "{\"place\":\"string\",\"currency\":\"string\",\"items\":0,\"range\":{\"p25\":0,\"p50\":0,\"p75\":0},\"thin\":true,\"cheapest\":{\"href\":\"https://thecharterdesk.com/yachts/2-drunk-6358727140000106731\",\"name\":\"string\",\"place\":\"string\",\"priceMinor\":0},\"extrasMedianMinor\":0,\"seasonHint\":{\"month\":\"string\",\"pct\":0},\"seasonNote\":\"string\",\"lastMinuteSharePct\":0,\"noneFitParty\":true,\"browsing\":true,\"next\":\"string\",\"session\":\"string\",\"sessionExpiresAt\":\"2026-12-01T06:00:00Z\"}"
      }
    ],
    "structuredContent": {
      "place": "string",
      "currency": "string",
      "items": 0,
      "range": {
        "p25": 0,
        "p50": 0,
        "p75": 0
      },
      "thin": true,
      "cheapest": {
        "href": "https://thecharterdesk.com/yachts/2-drunk-6358727140000106731",
        "name": "string",
        "place": "string",
        "priceMinor": 0
      },
      "extrasMedianMinor": 0,
      "seasonHint": {
        "month": "string",
        "pct": 0
      },
      "seasonNote": "string",
      "lastMinuteSharePct": 0,
      "noneFitParty": true,
      "browsing": true,
      "next": "string",
      "session": "string",
      "sessionExpiresAt": "2026-12-01T06:00:00Z"
    },
    "isError": false
  }
}

Errors

  • invalid_email That email address does not look right; ask the person for it again.Ask the person to give their email again.
  • invalid_phone Give the phone number in international form, a plus and the country code first, e.g. +31612345678.Ask the person for the number with its country code.
  • contact_revoked The owner of this contact said they did not ask for this. Use a different contact.Ask the person for a different email or phone.
  • rate_limited Too many calls for this person or address this hour.Wait retryAfterSeconds, then call again.
  • browse_limited This address has browsed as much as this site answers without a contact for now.Ask the person for their email or phone and pass it as email or phone, or call request_quote.
  • browse_busy This site has answered as many browse calls today as it answers without a contact.Ask the person for their email or phone and pass it as email or phone, or call request_quote.
  • invalid_party party is how many people, at least 1.Pass party as a whole number of people.
  • price_index_not_configured This site has no price figures.Use search or best_deals for prices instead.
  • invalid_place Choose a place from the list.Pass one of the names under places, or a country or region in words.
  • unknown_place There are no prices for that place.Pass one of the names under places.
  • invalid_month Choose a month as YYYY-MM.Pass month as YYYY-MM.
  • invalid_type Choose a type from the list, or leave it out for any.Leave type out, or pass a type the site names.
  • duplicate_parameter Only one value per parameter is supported.Pass each argument once.
  • no_prices_for_month There are no prices for that month yet.Pass a month from the first one the message names.
  • no_prices_for_type There are no prices for that type there that month.Leave type out, or try another month.

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).

ParameterType
fromstringoptionalEarliest departure, YYYY-MM-DD.
tostringoptionalLatest departure, YYYY-MM-DD.
partynumberoptionalHow many people.
yacht_typesstring[]optionalYacht 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_typesstring[]optionalCharter 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).
placestringoptionalWhere, 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.
basestringoptionalThe exact base it leaves from, in words.
textstringoptionalWords in its name or model, e.g. a builder or a model name.
lengthMinnumberoptionalLength at least ft (on this site 13.35 to 180.45).
lengthMaxnumberoptionalLength at most ft (on this site 13.35 to 180.45).
cabinsMinnumberoptionalCabins at least (on this site 0 to 20).
cabinsMaxnumberoptionalCabins at most (on this site 0 to 20).
berthsMinnumberoptionalBerths at least (on this site 0 to 80).
berthsMaxnumberoptionalBerths at most (on this site 0 to 80).
headsMinnumberoptionalHeads at least (on this site 0 to 23).
headsMaxnumberoptionalHeads at most (on this site 0 to 23).
beamMinnumberoptionalBeam at least m (on this site 0.9 to 44).
beamMaxnumberoptionalBeam at most m (on this site 0.9 to 44).
draftMinnumberoptionalDraft at least m (on this site 0.3 to 7985).
draftMaxnumberoptionalDraft at most m (on this site 0.3 to 7985).
yearMinnumberoptionalYear at least (on this site 0 to 2028).
yearMaxnumberoptionalYear at most (on this site 0 to 2028).
fuelMinnumberoptionalFuel tank at least l (on this site 1 to 65000).
fuelMaxnumberoptionalFuel tank at most l (on this site 1 to 65000).
waterMinnumberoptionalWater tank at least l (on this site 1 to 60000).
waterMaxnumberoptionalWater tank at most l (on this site 1 to 60000).
priceMinnumberoptionalThe least to pay, in the site currency: the price plus the mandatory extras.
priceMaxnumberoptionalThe most to pay, in the site currency: the price plus the mandatory extras.
sortstringsaving | departure | price | length | cabins | berths | heads | beam | draft | year | fuel | wateroptionalsaving (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).
cursorstringoptionalThe cursor a previous answer returned, for its next page.
limitnumberoptionalRows per page: at most 10 when browsing, 20 with the person's email or phone.

The person's contact (email, phone, session, name)

ParameterType
emailstringoptionalOptional: 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.
phonestringoptionalOptional: the person's own phone, international form (+ and country code), as they gave it, for more rows a call. Leave out to browse.
sessionstringoptionalThe session an earlier answer returned. Pass it instead of email or phone from then on.
namestringoptionalOptional: the person's name, as they gave it.

Request

{
  "jsonrpc": "2.0",
  "id": 4,
  "method": "tools/call",
  "params": {
    "name": "best_deals",
    "arguments": {
      "party": 4,
      "limit": 2
    }
  }
}

Response

{
  "jsonrpc": "2.0",
  "id": 4,
  "result": {
    "content": [
      {
        "type": "text",
        "text": "{\"rows\":[{\"item\":\"string\",\"type\":\"string\",\"base\":\"string\",\"guests\":0,\"link\":\"string\",\"photo\":\"string\",\"departures\":[{\"routes\":[{\"from\":null,\"to\":null}],\"departFrom\":\"string\",\"departTo\":\"string\",\"nights\":0,\"price\":{\"amount\":0,\"currency\":\"string\",\"text\":\"string\"},\"listPrice\":{\"amount\":0,\"currency\":\"string\",\"text\":\"string\"},\"mandatoryExtras\":{\"amount\":0,\"currency\":\"string\",\"text\":\"string\"},\"savingPct\":0,\"kind\":\"string\"}]}],\"total\":0,\"cursor\":\"string\",\"from\":\"2026-12-01\",\"through\":\"string\",\"checkedAt\":\"2026-11-01T06:00:00Z\",\"notApplied\":[\"string\"],\"nearest\":{\"widened\":\"dates\",\"note\":\"string\"},\"browsing\":true,\"next\":\"string\",\"session\":\"string\",\"sessionExpiresAt\":\"2026-12-01T06:00:00Z\"}"
      }
    ],
    "structuredContent": {
      "rows": [
        {
          "item": "string",
          "type": "string",
          "base": "string",
          "guests": 0,
          "link": "string",
          "photo": "string",
          "departures": [
            {
              "routes": [
                {
                  "from": null,
                  "to": null
                }
              ],
              "departFrom": "string",
              "departTo": "string",
              "nights": 0,
              "price": {
                "amount": 0,
                "currency": "string",
                "text": "string"
              },
              "listPrice": {
                "amount": 0,
                "currency": "string",
                "text": "string"
              },
              "mandatoryExtras": {
                "amount": 0,
                "currency": "string",
                "text": "string"
              },
              "savingPct": 0,
              "kind": "string"
            }
          ]
        }
      ],
      "total": 0,
      "cursor": "string",
      "from": "2026-12-01",
      "through": "string",
      "checkedAt": "2026-11-01T06:00:00Z",
      "notApplied": [
        "string"
      ],
      "nearest": {
        "widened": "dates",
        "note": "string"
      },
      "browsing": true,
      "next": "string",
      "session": "string",
      "sessionExpiresAt": "2026-12-01T06:00:00Z"
    },
    "isError": false
  }
}

Errors

  • invalid_email That email address does not look right; ask the person for it again.Ask the person to give their email again.
  • invalid_phone Give the phone number in international form, a plus and the country code first, e.g. +31612345678.Ask the person for the number with its country code.
  • contact_revoked The owner of this contact said they did not ask for this. Use a different contact.Ask the person for a different email or phone.
  • rate_limited Too many calls for this person or address this hour.Wait retryAfterSeconds, then call again.
  • browse_limited This address has browsed as much as this site answers without a contact for now.Ask the person for their email or phone and pass it as email or phone, or call request_quote.
  • browse_busy This site has answered as many browse calls today as it answers without a contact.Ask the person for their email or phone and pass it as email or phone, or call request_quote.
  • browse_page_limit Browsing without a contact shows the first pages only.Ask the person for their email or phone and pass it as email or phone, or call request_quote.
  • read_refused The read could not answer these arguments.Read the message: it says what to change (a date format, a place name, which of several items).

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.

ParameterType
itemsstring[]requiredThe yacht page links to quote (absolute URLs on this site), exactly as a search, best_deals or get returned them. At most 20.
fromstringoptionalCheck-in day, YYYY-MM-DD.
tostringoptionalCheck-out day, YYYY-MM-DD.
partynumberoptionalHow many people.
notesstringoptionalWhat the person wants the desk to know, in their words (at most 2000 characters).

The person's contact (email, phone, session, name)

ParameterType
emailstringoptionalThe person's own email, as they gave it: the quote is sent there. This, phone or session is needed.
phonestringoptionalThe person's own phone, international form (+ and country code), as they gave it. This, email or session is needed.
sessionstringoptionalThe session an earlier answer returned. Pass it instead of email or phone.
namestringoptionalOptional: the person's name, as they gave it.

Request

{
  "jsonrpc": "2.0",
  "id": 5,
  "method": "tools/call",
  "params": {
    "name": "request_quote",
    "arguments": {
      "items": [
        "https://thecharterdesk.com/yachts/2-drunk-6358727140000106731"
      ],
      "from": "2026-12-01",
      "to": "2026-12-08",
      "party": 4,
      "email": "person@example.com"
    }
  }
}

Response

{
  "jsonrpc": "2.0",
  "id": 5,
  "result": {
    "content": [
      {
        "type": "text",
        "text": "{\"status\":\"received\",\"enquiryRef\":\"string\",\"nextStep\":\"string\",\"session\":\"string\",\"sessionExpiresAt\":\"2026-12-01T06:00:00Z\"}"
      }
    ],
    "structuredContent": {
      "status": "received",
      "enquiryRef": "string",
      "nextStep": "string",
      "session": "string",
      "sessionExpiresAt": "2026-12-01T06:00:00Z"
    },
    "isError": false
  }
}

Errors

  • contact_required request_quote needs the person's email or phone, or the session an earlier answer returned.Ask the person for their email or phone and pass it as email or phone.
  • contact_required That session is not valid any more; pass the person's email or phone instead.Ask the person for their email or phone again and pass it.
  • invalid_email That email address does not look right; ask the person for it again.Ask the person to give their email again.
  • invalid_phone Give the phone number in international form, a plus and the country code first, e.g. +31612345678.Ask the person for the number with its country code.
  • contact_revoked The owner of this contact said they did not ask for this. Use a different contact.Ask the person for a different email or phone.
  • scope_missing The person signed in without allowing enquiries, so request_quote cannot file one as them.Ask the person to sign in again and allow the enquire scope.
  • rate_limited Too many calls for this person or address this hour.Wait retryAfterSeconds, then call again.
  • quote_limit No more quote requests can be filed for this contact today.Tell the person the desk already has their requests; try again tomorrow.
  • quote_not_filed The request did not reach the desk. Nothing was filed and it does not count toward any limit; try again in a minute.Call request_quote again in a minute with the same arguments.
  • invalid_party party is how many people, at least 1.Pass party as a whole number of people.
  • unknown_item That is not an item on this site.Pass the item's page link (an absolute URL on this site) exactly as a search, best_deals or get returned it.

Quickstart

Three calls, from nothing to a live answer. The server keeps no connection: each call is one POST.

  1. Initialize

    Agree a protocol version and read the server's instructions. curl
    curl -s https://thecharterdesk.com/mcp \
      -H 'content-type: application/json' \
      -H 'accept: application/json' \
      -d '{"jsonrpc":"2.0","id":1,"method":"initialize","params":{"protocolVersion":"2025-06-18","capabilities":{},"clientInfo":{"name":"my-agent","version":"1.0"}}}'
    
  2. List the tools

    Each tool comes with its input schema and its output schema. curl
    curl -s https://thecharterdesk.com/mcp \
      -H 'content-type: application/json' \
      -H 'accept: application/json' \
      -d '{"jsonrpc":"2.0","id":1,"method":"tools/list"}'
    
  3. Call a tool

    Pass the tool's name and its arguments. The answer is in structuredContent. curl
    curl -s https://thecharterdesk.com/mcp \
      -H 'content-type: application/json' \
      -H 'accept: application/json' \
      -d '{"jsonrpc":"2.0","id":1,"method":"tools/call","params":{"name":"search_yachts","arguments":{"from":"2026-12-01","to":"2026-12-08","party":4,"limit":2}}}'
    

Claude

Settings, Connectors, Add custom connector. Paste https://thecharterdesk.com/mcp and save.

ChatGPT

Settings, Apps and Connectors, Create. Paste https://thecharterdesk.com/mcp as the MCP server URL, no authentication.