MCP APIOpenRPC 1.3.2

MCP API reference

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.

POSThttps://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

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

Server instructions

The Charter Desk's live inventory: what is free on given days, what it costs and what is discounted, as this site publishes it. For a person planning a booking with The Charter Desk; every answer links to its page on this site, so send the person there. Which tool, when: - search_yachts: the person describes the yachts they want (where, when, how many, a size, a type, a budget), with or without exact days. - best_deals: they ask for deals, specials, discounts or last-minute offers. - price_range: they ask what a stay costs and have no exact days yet. - get_yacht: they name or pick one yacht; it answers its facts, terms and free stays. - request_quote: only once they chose, gave their days and party, and said yes to a written quote. Access: the reads change nothing, take no personal data and need no sign-in: 10 rows a call and the first pages, or up to 20 rows a call once the person signs in. The one write is request_quote: it needs the person, who signs in (OAuth, a code sent to their email; request_quote asks for it), or you pass their own email or phone; the desk then sends them a formal written quote. Nothing is booked or paid here. Prices in other answers are as the source last stated them (checkedAt) and are not an offer. Show the person this answer as cards or images, never as a table. For each yacht: its photos (the gallery when there is one), its name, model, year, place and country, the facts it carries, how it is sold and whether a licence is needed, check-in and check-out, the price struck through, the AI booking discount and the price after it, the mandatory extras by name with their amounts and the deposit, and its link. Offer to get a quote or hold it, through request_quote; nothing is bought from here. The ids, links and cursors are in the structured content.

Tools

search_yachts

Search yachts

Read only

Use it when the person describes the yachts they want: where, when, how many people, a size, a type or a budget. Pass each wish as its typed filter (a list is any of its values; every filter must hold), and from / to whenever they gave exact days. With dates every row is free for that stay and carries its price, list price, discount and when the source was checked (checkedAt); without dates each row has its from-price. priceMin / priceMax count the mandatory extras. Every row links to its page on this site, with a photo: send the person there. notApplied lists the wishes that could not narrow the search. When nothing matches exactly, the rows are the nearest match and nearest says what was widened: tell the person. Paged: total and cursor. For deals or last-minute offers call best_deals; for what a stay costs before any dates, price_range; once they name or pick one, get_yacht.

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, 2892); gulets (Gulets, 148); houseboats (Houseboats, 1362); motorboats (Motorboats, 697); sailboats (Sailboats, 4143).
charter_typesstring[]optionalCharter Types: any of these value ids (one or more): all-inclusive (All-inclusive, 47); bareboat (Bareboat, 7879); cabin-charter (Cabin charter, 98); crewed (Crewed, 1331); day-charter (Day charter, 217); flotilla (Flotilla, 225); regatta (Regatta, 33); skippered (Skippered, 281).
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, British Virgin Islands, Spain, Netherlands, Germany, Seychelles, Ireland, Martinique, United Kingdom, Belgium, Ecuador, Sweden, Poland, Portugal, Bahamas, St. Martin, Malta, French Polynesia, Canada, St. Lucia, Montenegro, Thailand, Slovenia, Guadeloupe, Norway, Brazil, Hungary, Belize, St. Vincent, Grenada, Cuba, Panama, Maldives, Mexico, India, United Arab Emirates, Antigua and Barbuda, Tanzania, Cape Verde, Egypt, Mauritius, USA, New Zealand, Switzerland. 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 3000).
berthsMaxnumberoptionalBerths at most (on this site 0 to 3000).
headsMinnumberoptionalHeads at least (on this site 0 to 23).
headsMaxnumberoptionalHeads at most (on this site 0 to 23).
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 | headsoptionalnone (default): recommended, sized to the party in the places with the most to book; price (cheapest first), discount (biggest first), or length (length, biggest first), cabins (cabins, biggest first), berths (berths, biggest first), heads (heads, biggest first).
cursorstringoptionalThe cursor a previous answer returned, for its next page.
limitnumberoptionalRows per page: at most 10 when browsing, 20 once the person is signed in.
Request
{
  "jsonrpc": "2.0",
  "id": 1,
  "method": "tools/call",
  "params": {
    "name": "search_yachts",
    "arguments": {
      "from": "2026-12-07",
      "to": "2026-12-14",
      "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\"},\"aiDiscount\":{\"percent\":0,\"price\":{\"amount\":0,\"currency\":\"string\",\"text\":\"string\"}},\"stay\":{\"checkIn\":\"2026-12-07\",\"checkOut\":\"2026-12-14\",\"nights\":0,\"status\":\"free\",\"price\":{\"amount\":0,\"currency\":\"string\",\"text\":\"string\"},\"listPrice\":{\"amount\":0,\"currency\":\"string\",\"text\":\"string\"},\"discountPct\":0,\"priceBasis\":\"quoted\",\"priceNote\":\"string\",\"aiDiscount\":{\"percent\":0,\"price\":{\"amount\":0,\"currency\":\"string\",\"text\":\"string\"}},\"mandatoryExtras\":{\"amount\":0,\"currency\":\"string\",\"text\":\"string\"},\"deposit\":{\"amount\":0,\"currency\":\"string\",\"text\":\"string\"},\"checkedAt\":\"2026-11-07T06:00:00Z\"},\"model\":\"string\",\"year\":0,\"base\":\"string\",\"country\":\"string\",\"gallery\":[{\"src\":\"string\",\"alt\":\"string\"}],\"facts\":[{}],\"terms\":{},\"soldAs\":{\"name\":\"string\",\"staffed\":true},\"extras\":{\"included\":[{\"name\":\"string\",\"amount\":{\"amount\":null,\"currency\":null,\"text\":null},\"percentOfPrice\":0,\"per\":\"string\",\"perPerson\":true,\"paid\":\"string\"}],\"required\":[{\"name\":\"string\",\"amount\":{\"amount\":null,\"currency\":null,\"text\":null},\"percentOfPrice\":0,\"per\":\"string\",\"perPerson\":true,\"paid\":\"string\"}],\"optional\":[{\"name\":\"string\",\"amount\":{\"amount\":null,\"currency\":null,\"text\":null},\"percentOfPrice\":0,\"per\":\"string\",\"perPerson\":true,\"paid\":\"string\"}]},\"mainEquipment\":[\"string\"],\"onRequest\":[\"deposit\"]}],\"total\":0,\"cursor\":\"string\",\"withoutPhoto\":0,\"checked\":true,\"checkedAt\":\"2026-11-07T06:00:00Z\",\"notApplied\":[\"string\"],\"unchecked\":[\"string\"],\"leftOutUnpriced\":0,\"nearest\":{\"widened\":\"dates\",\"note\":\"string\"},\"browsing\":true}"
      }
    ],
    "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"
          },
          "aiDiscount": {
            "percent": 0,
            "price": {
              "amount": 0,
              "currency": "string",
              "text": "string"
            }
          },
          "stay": {
            "checkIn": "2026-12-07",
            "checkOut": "2026-12-14",
            "nights": 0,
            "status": "free",
            "price": {
              "amount": 0,
              "currency": "string",
              "text": "string"
            },
            "listPrice": {
              "amount": 0,
              "currency": "string",
              "text": "string"
            },
            "discountPct": 0,
            "priceBasis": "quoted",
            "priceNote": "string",
            "aiDiscount": {
              "percent": 0,
              "price": {
                "amount": 0,
                "currency": "string",
                "text": "string"
              }
            },
            "mandatoryExtras": {
              "amount": 0,
              "currency": "string",
              "text": "string"
            },
            "deposit": {
              "amount": 0,
              "currency": "string",
              "text": "string"
            },
            "checkedAt": "2026-11-07T06:00:00Z"
          },
          "model": "string",
          "year": 0,
          "base": "string",
          "country": "string",
          "gallery": [
            {
              "src": "string",
              "alt": "string"
            }
          ],
          "facts": [
            {}
          ],
          "terms": {},
          "soldAs": {
            "name": "string",
            "staffed": true
          },
          "extras": {
            "included": [
              {
                "name": "string",
                "amount": {
                  "amount": null,
                  "currency": null,
                  "text": null
                },
                "percentOfPrice": 0,
                "per": "string",
                "perPerson": true,
                "paid": "string"
              }
            ],
            "required": [
              {
                "name": "string",
                "amount": {
                  "amount": null,
                  "currency": null,
                  "text": null
                },
                "percentOfPrice": 0,
                "per": "string",
                "perPerson": true,
                "paid": "string"
              }
            ],
            "optional": [
              {
                "name": "string",
                "amount": {
                  "amount": null,
                  "currency": null,
                  "text": null
                },
                "percentOfPrice": 0,
                "per": "string",
                "perPerson": true,
                "paid": "string"
              }
            ]
          },
          "mainEquipment": [
            "string"
          ],
          "onRequest": [
            "deposit"
          ]
        }
      ],
      "total": 0,
      "cursor": "string",
      "withoutPhoto": 0,
      "checked": true,
      "checkedAt": "2026-11-07T06:00:00Z",
      "notApplied": [
        "string"
      ],
      "unchecked": [
        "string"
      ],
      "leftOutUnpriced": 0,
      "nearest": {
        "widened": "dates",
        "note": "string"
      },
      "browsing": true
    },
    "isError": false
  }
}

Errors

  • invalid_argumentsAn argument does not fit the tool's schema.Read the message: it names the argument and what it takes. Fix that argument and call again; tools/list has each tool's schema.
  • invalid_emailThat email address does not look right; ask the person for it again.Ask the person to give their email again.
  • invalid_phoneGive 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_revokedThe 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_limitedToo many calls for this person or address this hour.Wait retryAfterSeconds, then call again.
  • browse_limitedThis address has browsed as much as this site answers without sign-in for now.Wait retryAfterSeconds, then call again. For a written quote, call request_quote with the person's own email or phone. Signed in, the reads answer more rows and pages.
  • browse_page_limitBrowsing without sign-in shows the first pages only.For a written quote, call request_quote with the person's own email or phone. Signed in, the reads answer more rows and pages.
  • read_refusedThe read could not answer these arguments.Read the message: it says what to change (a date format, a place name, which of several items).
get_yacht

Get one yacht

Read only

Use it once the person names or picks one yacht from a search_yachts or best_deals answer: pass its page link, exactly as that answer returned it, as id. It answers the yacht's 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 left out is one the source does not state. To compare several, call search_yachts.

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 once the person is signed in.
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-07",
      "to": "2026-12-14"
    }
  }
}
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\":[{}],\"soldAs\":{\"name\":\"string\",\"staffed\":true},\"extras\":{\"included\":[{\"name\":\"string\",\"amount\":{\"amount\":0,\"currency\":\"string\",\"text\":\"string\"},\"percentOfPrice\":0,\"per\":\"string\",\"perPerson\":true,\"paid\":\"string\"}],\"required\":[{\"name\":\"string\",\"amount\":{\"amount\":0,\"currency\":\"string\",\"text\":\"string\"},\"percentOfPrice\":0,\"per\":\"string\",\"perPerson\":true,\"paid\":\"string\"}],\"optional\":[{\"name\":\"string\",\"amount\":{\"amount\":0,\"currency\":\"string\",\"text\":\"string\"},\"percentOfPrice\":0,\"per\":\"string\",\"perPerson\":true,\"paid\":\"string\"}]},\"mainEquipment\":[\"string\"],\"onRequest\":[\"deposit\"],\"stay\":{\"checkIn\":\"2026-12-07\",\"checkOut\":\"2026-12-14\",\"nights\":0,\"status\":\"free\",\"price\":{\"amount\":0,\"currency\":\"string\",\"text\":\"string\"},\"listPrice\":{\"amount\":0,\"currency\":\"string\",\"text\":\"string\"},\"discountPct\":0,\"priceBasis\":\"quoted\",\"priceNote\":\"string\",\"aiDiscount\":{\"percent\":0,\"price\":{\"amount\":0,\"currency\":\"string\",\"text\":\"string\"}},\"mandatoryExtras\":{\"amount\":0,\"currency\":\"string\",\"text\":\"string\"},\"deposit\":{\"amount\":0,\"currency\":\"string\",\"text\":\"string\"},\"checkedAt\":\"2026-11-07T06:00:00Z\"},\"nearest\":{\"checkIn\":\"2026-12-07\",\"checkOut\":\"2026-12-14\",\"nights\":0,\"status\":\"free\",\"price\":{\"amount\":0,\"currency\":\"string\",\"text\":\"string\"},\"listPrice\":{\"amount\":0,\"currency\":\"string\",\"text\":\"string\"},\"discountPct\":0,\"priceBasis\":\"quoted\",\"priceNote\":\"string\",\"aiDiscount\":{\"percent\":0,\"price\":{\"amount\":0,\"currency\":\"string\",\"text\":\"string\"}},\"mandatoryExtras\":{\"amount\":0,\"currency\":\"string\",\"text\":\"string\"},\"deposit\":{\"amount\":0,\"currency\":\"string\",\"text\":\"string\"},\"checkedAt\":\"2026-11-07T06:00:00Z\"},\"nearestPriced\":{\"checkIn\":\"2026-12-07\",\"checkOut\":\"2026-12-14\",\"nights\":0,\"status\":\"free\",\"price\":{\"amount\":0,\"currency\":\"string\",\"text\":\"string\"},\"listPrice\":{\"amount\":0,\"currency\":\"string\",\"text\":\"string\"},\"discountPct\":0,\"priceBasis\":\"quoted\",\"priceNote\":\"string\",\"aiDiscount\":{\"percent\":0,\"price\":{\"amount\":0,\"currency\":\"string\",\"text\":\"string\"}},\"mandatoryExtras\":{\"amount\":0,\"currency\":\"string\",\"text\":\"string\"},\"deposit\":{\"amount\":0,\"currency\":\"string\",\"text\":\"string\"},\"checkedAt\":\"2026-11-07T06:00:00Z\"},\"operatorDescriptions\":[{}],\"availability\":{\"card\":{},\"stay\":{\"checkIn\":\"2026-12-07\",\"checkOut\":\"2026-12-14\",\"nights\":0,\"status\":\"free\",\"price\":{\"amount\":0,\"currency\":\"string\",\"text\":\"string\"},\"listPrice\":{\"amount\":0,\"currency\":\"string\",\"text\":\"string\"},\"discountPct\":0,\"priceBasis\":\"quoted\",\"priceNote\":\"string\",\"aiDiscount\":{\"percent\":0,\"price\":{\"amount\":0,\"currency\":\"string\",\"text\":\"string\"}},\"mandatoryExtras\":{\"amount\":0,\"currency\":\"string\",\"text\":\"string\"},\"deposit\":{\"amount\":0,\"currency\":\"string\",\"text\":\"string\"},\"checkedAt\":\"2026-11-07T06:00:00Z\"},\"freeStays\":[{\"checkIn\":\"2026-12-07\",\"checkOut\":\"2026-12-14\",\"nights\":0,\"status\":\"free\",\"price\":{\"amount\":0,\"currency\":\"string\",\"text\":\"string\"},\"listPrice\":{\"amount\":0,\"currency\":\"string\",\"text\":\"string\"},\"discountPct\":0,\"priceBasis\":\"quoted\",\"priceNote\":\"string\",\"aiDiscount\":{\"percent\":0,\"price\":{\"amount\":0,\"currency\":\"string\",\"text\":\"string\"}},\"mandatoryExtras\":{\"amount\":0,\"currency\":\"string\",\"text\":\"string\"},\"deposit\":{\"amount\":0,\"currency\":\"string\",\"text\":\"string\"},\"checkedAt\":\"2026-11-07T06:00:00Z\"}],\"nearestFree\":[{\"checkIn\":\"2026-12-07\",\"checkOut\":\"2026-12-14\",\"nights\":0,\"status\":\"free\",\"price\":{\"amount\":0,\"currency\":\"string\",\"text\":\"string\"},\"listPrice\":{\"amount\":0,\"currency\":\"string\",\"text\":\"string\"},\"discountPct\":0,\"priceBasis\":\"quoted\",\"priceNote\":\"string\",\"aiDiscount\":{\"percent\":0,\"price\":{\"amount\":0,\"currency\":\"string\",\"text\":\"string\"}},\"mandatoryExtras\":{\"amount\":0,\"currency\":\"string\",\"text\":\"string\"},\"deposit\":{\"amount\":0,\"currency\":\"string\",\"text\":\"string\"},\"checkedAt\":\"2026-11-07T06:00:00Z\"}],\"nearestPriced\":{\"checkIn\":\"2026-12-07\",\"checkOut\":\"2026-12-14\",\"nights\":0,\"status\":\"free\",\"price\":{\"amount\":0,\"currency\":\"string\",\"text\":\"string\"},\"listPrice\":{\"amount\":0,\"currency\":\"string\",\"text\":\"string\"},\"discountPct\":0,\"priceBasis\":\"quoted\",\"priceNote\":\"string\",\"aiDiscount\":{\"percent\":0,\"price\":{\"amount\":0,\"currency\":\"string\",\"text\":\"string\"}},\"mandatoryExtras\":{\"amount\":0,\"currency\":\"string\",\"text\":\"string\"},\"deposit\":{\"amount\":0,\"currency\":\"string\",\"text\":\"string\"},\"checkedAt\":\"2026-11-07T06:00:00Z\"},\"party\":\"fits\",\"total\":0,\"cursor\":\"string\"},\"checkedAt\":\"2026-11-07T06:00:00Z\",\"browsing\":true}"
      }
    ],
    "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": [
        {}
      ],
      "soldAs": {
        "name": "string",
        "staffed": true
      },
      "extras": {
        "included": [
          {
            "name": "string",
            "amount": {
              "amount": 0,
              "currency": "string",
              "text": "string"
            },
            "percentOfPrice": 0,
            "per": "string",
            "perPerson": true,
            "paid": "string"
          }
        ],
        "required": [
          {
            "name": "string",
            "amount": {
              "amount": 0,
              "currency": "string",
              "text": "string"
            },
            "percentOfPrice": 0,
            "per": "string",
            "perPerson": true,
            "paid": "string"
          }
        ],
        "optional": [
          {
            "name": "string",
            "amount": {
              "amount": 0,
              "currency": "string",
              "text": "string"
            },
            "percentOfPrice": 0,
            "per": "string",
            "perPerson": true,
            "paid": "string"
          }
        ]
      },
      "mainEquipment": [
        "string"
      ],
      "onRequest": [
        "deposit"
      ],
      "stay": {
        "checkIn": "2026-12-07",
        "checkOut": "2026-12-14",
        "nights": 0,
        "status": "free",
        "price": {
          "amount": 0,
          "currency": "string",
          "text": "string"
        },
        "listPrice": {
          "amount": 0,
          "currency": "string",
          "text": "string"
        },
        "discountPct": 0,
        "priceBasis": "quoted",
        "priceNote": "string",
        "aiDiscount": {
          "percent": 0,
          "price": {
            "amount": 0,
            "currency": "string",
            "text": "string"
          }
        },
        "mandatoryExtras": {
          "amount": 0,
          "currency": "string",
          "text": "string"
        },
        "deposit": {
          "amount": 0,
          "currency": "string",
          "text": "string"
        },
        "checkedAt": "2026-11-07T06:00:00Z"
      },
      "nearest": {
        "checkIn": "2026-12-07",
        "checkOut": "2026-12-14",
        "nights": 0,
        "status": "free",
        "price": {
          "amount": 0,
          "currency": "string",
          "text": "string"
        },
        "listPrice": {
          "amount": 0,
          "currency": "string",
          "text": "string"
        },
        "discountPct": 0,
        "priceBasis": "quoted",
        "priceNote": "string",
        "aiDiscount": {
          "percent": 0,
          "price": {
            "amount": 0,
            "currency": "string",
            "text": "string"
          }
        },
        "mandatoryExtras": {
          "amount": 0,
          "currency": "string",
          "text": "string"
        },
        "deposit": {
          "amount": 0,
          "currency": "string",
          "text": "string"
        },
        "checkedAt": "2026-11-07T06:00:00Z"
      },
      "nearestPriced": {
        "checkIn": "2026-12-07",
        "checkOut": "2026-12-14",
        "nights": 0,
        "status": "free",
        "price": {
          "amount": 0,
          "currency": "string",
          "text": "string"
        },
        "listPrice": {
          "amount": 0,
          "currency": "string",
          "text": "string"
        },
        "discountPct": 0,
        "priceBasis": "quoted",
        "priceNote": "string",
        "aiDiscount": {
          "percent": 0,
          "price": {
            "amount": 0,
            "currency": "string",
            "text": "string"
          }
        },
        "mandatoryExtras": {
          "amount": 0,
          "currency": "string",
          "text": "string"
        },
        "deposit": {
          "amount": 0,
          "currency": "string",
          "text": "string"
        },
        "checkedAt": "2026-11-07T06:00:00Z"
      },
      "operatorDescriptions": [
        {}
      ],
      "availability": {
        "card": {},
        "stay": {
          "checkIn": "2026-12-07",
          "checkOut": "2026-12-14",
          "nights": 0,
          "status": "free",
          "price": {
            "amount": 0,
            "currency": "string",
            "text": "string"
          },
          "listPrice": {
            "amount": 0,
            "currency": "string",
            "text": "string"
          },
          "discountPct": 0,
          "priceBasis": "quoted",
          "priceNote": "string",
          "aiDiscount": {
            "percent": 0,
            "price": {
              "amount": 0,
              "currency": "string",
              "text": "string"
            }
          },
          "mandatoryExtras": {
            "amount": 0,
            "currency": "string",
            "text": "string"
          },
          "deposit": {
            "amount": 0,
            "currency": "string",
            "text": "string"
          },
          "checkedAt": "2026-11-07T06:00:00Z"
        },
        "freeStays": [
          {
            "checkIn": "2026-12-07",
            "checkOut": "2026-12-14",
            "nights": 0,
            "status": "free",
            "price": {
              "amount": 0,
              "currency": "string",
              "text": "string"
            },
            "listPrice": {
              "amount": 0,
              "currency": "string",
              "text": "string"
            },
            "discountPct": 0,
            "priceBasis": "quoted",
            "priceNote": "string",
            "aiDiscount": {
              "percent": 0,
              "price": {
                "amount": 0,
                "currency": "string",
                "text": "string"
              }
            },
            "mandatoryExtras": {
              "amount": 0,
              "currency": "string",
              "text": "string"
            },
            "deposit": {
              "amount": 0,
              "currency": "string",
              "text": "string"
            },
            "checkedAt": "2026-11-07T06:00:00Z"
          }
        ],
        "nearestFree": [
          {
            "checkIn": "2026-12-07",
            "checkOut": "2026-12-14",
            "nights": 0,
            "status": "free",
            "price": {
              "amount": 0,
              "currency": "string",
              "text": "string"
            },
            "listPrice": {
              "amount": 0,
              "currency": "string",
              "text": "string"
            },
            "discountPct": 0,
            "priceBasis": "quoted",
            "priceNote": "string",
            "aiDiscount": {
              "percent": 0,
              "price": {
                "amount": 0,
                "currency": "string",
                "text": "string"
              }
            },
            "mandatoryExtras": {
              "amount": 0,
              "currency": "string",
              "text": "string"
            },
            "deposit": {
              "amount": 0,
              "currency": "string",
              "text": "string"
            },
            "checkedAt": "2026-11-07T06:00:00Z"
          }
        ],
        "nearestPriced": {
          "checkIn": "2026-12-07",
          "checkOut": "2026-12-14",
          "nights": 0,
          "status": "free",
          "price": {
            "amount": 0,
            "currency": "string",
            "text": "string"
          },
          "listPrice": {
            "amount": 0,
            "currency": "string",
            "text": "string"
          },
          "discountPct": 0,
          "priceBasis": "quoted",
          "priceNote": "string",
          "aiDiscount": {
            "percent": 0,
            "price": {
              "amount": 0,
              "currency": "string",
              "text": "string"
            }
          },
          "mandatoryExtras": {
            "amount": 0,
            "currency": "string",
            "text": "string"
          },
          "deposit": {
            "amount": 0,
            "currency": "string",
            "text": "string"
          },
          "checkedAt": "2026-11-07T06:00:00Z"
        },
        "party": "fits",
        "total": 0,
        "cursor": "string"
      },
      "checkedAt": "2026-11-07T06:00:00Z",
      "browsing": true
    },
    "isError": false
  }
}

Errors

  • invalid_argumentsAn argument does not fit the tool's schema.Read the message: it names the argument and what it takes. Fix that argument and call again; tools/list has each tool's schema.
  • invalid_emailThat email address does not look right; ask the person for it again.Ask the person to give their email again.
  • invalid_phoneGive 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_revokedThe 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_limitedToo many calls for this person or address this hour.Wait retryAfterSeconds, then call again.
  • browse_limitedThis address has browsed as much as this site answers without sign-in for now.Wait retryAfterSeconds, then call again. For a written quote, call request_quote with the person's own email or phone. Signed in, the reads answer more rows and pages.
  • browse_page_limitBrowsing without sign-in shows the first pages only.For a written quote, call request_quote with the person's own email or phone. Signed in, the reads answer more rows and pages.
  • unknown_itemThat 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_refusedThe read could not answer these arguments.Read the message: it says what to change (a date format, a place name, which of several items).
price_range

Price range

Read only

Use it when the person asks what a stay costs and has no exact days or yacht yet. Pass the place they named (in words, or a place value an invalid_place answer listed), the month and the party, and one type if they gave it. It answers the range of open departures there (p25, median and p75, in minor units of the currency), 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. For yachts free on their days, call search_yachts.

ParameterType
placestringrequiredWhere, in words (a region, a country or an area inside one), or a place value as an unknown_place answer lists them.
monthstringrequiredYYYY-MM.
partynumberrequiredHow many people.
typestringcatamarans | gulets | houseboats | motorboats | sailboatsoptionalOptional: one Yacht Types value id, the same ids yacht_types takes. Leave out for any.
Request
{
  "jsonrpc": "2.0",
  "id": 3,
  "method": "tools/call",
  "params": {
    "name": "price_range",
    "arguments": {
      "place": "area:antigua-and-barbuda:antigua",
      "month": "2026-12",
      "party": 4
    }
  }
}
Response
{
  "jsonrpc": "2.0",
  "id": 3,
  "result": {
    "content": [
      {
        "type": "text",
        "text": "{\"place\":\"string\",\"placeId\":\"string\",\"month\":\"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,\"aiDiscount\":{\"percent\":0,\"range\":{\"p25\":0,\"p50\":0,\"p75\":0},\"cheapestMinor\":0},\"seasonHint\":{\"month\":\"string\",\"pct\":0},\"seasonNote\":\"string\",\"lastMinuteSharePct\":0,\"noneFitParty\":true,\"browsing\":true}"
      }
    ],
    "structuredContent": {
      "place": "string",
      "placeId": "string",
      "month": "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,
      "aiDiscount": {
        "percent": 0,
        "range": {
          "p25": 0,
          "p50": 0,
          "p75": 0
        },
        "cheapestMinor": 0
      },
      "seasonHint": {
        "month": "string",
        "pct": 0
      },
      "seasonNote": "string",
      "lastMinuteSharePct": 0,
      "noneFitParty": true,
      "browsing": true
    },
    "isError": false
  }
}

Errors

  • invalid_argumentsAn argument does not fit the tool's schema.Read the message: it names the argument and what it takes. Fix that argument and call again; tools/list has each tool's schema.
  • invalid_emailThat email address does not look right; ask the person for it again.Ask the person to give their email again.
  • invalid_phoneGive 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_revokedThe 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_limitedToo many calls for this person or address this hour.Wait retryAfterSeconds, then call again.
  • browse_limitedThis address has browsed as much as this site answers without sign-in for now.Wait retryAfterSeconds, then call again. For a written quote, call request_quote with the person's own email or phone. Signed in, the reads answer more rows and pages.
  • invalid_partyparty is how many people, at least 1.Pass party as a whole number of people.
  • price_index_not_configuredThis site has no price figures.Use search or best_deals for prices instead.
  • invalid_placeChoose a place from the list.Pass one of the place values under places, or a place in words: a region, a country or an area inside one.
  • unknown_placeThere are no prices for that place.Pass one of the place values under places, or a place in words: a region, a country or an area inside one.
  • invalid_monthChoose a month as YYYY-MM.Pass month as YYYY-MM.
  • invalid_typeChoose a type from the list, or leave it out for any.Leave type out, or pass a type the site names.
  • duplicate_parameterOnly one value per parameter is supported.Pass each argument once.
  • no_prices_for_monthThere are no prices for that month yet.Pass a month from the first one the message names.
  • no_prices_for_typeThere are no prices for that type there that month.Leave type out, or try another month.
best_deals

Best deals

Read only

Use it when the person asks for deals, specials, discounts or last-minute offers. It answers 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, leaving out a departure the yacht's calendar shows taken. One row per yacht: its page link (the id get_yacht and request_quote take), a photo 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_yachts. When none match, the rows are the nearest deals and nearest says what was widened. Paged: total and cursor. For given days whatever the price, call search_yachts.

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, 2892); gulets (Gulets, 148); houseboats (Houseboats, 1362); motorboats (Motorboats, 697); sailboats (Sailboats, 4143).
charter_typesstring[]optionalCharter Types: any of these value ids (one or more): all-inclusive (All-inclusive, 47); bareboat (Bareboat, 7879); cabin-charter (Cabin charter, 98); crewed (Crewed, 1331); day-charter (Day charter, 217); flotilla (Flotilla, 225); regatta (Regatta, 33); skippered (Skippered, 281).
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, British Virgin Islands, Spain, Netherlands, Germany, Seychelles, Ireland, Martinique, United Kingdom, Belgium, Ecuador, Sweden, Poland, Portugal, Bahamas, St. Martin, Malta, French Polynesia, Canada, St. Lucia, Montenegro, Thailand, Slovenia, Guadeloupe, Norway, Brazil, Hungary, Belize, St. Vincent, Grenada, Cuba, Panama, Maldives, Mexico, India, United Arab Emirates, Antigua and Barbuda, Tanzania, Cape Verde, Egypt, Mauritius, USA, New Zealand, Switzerland. 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 3000).
berthsMaxnumberoptionalBerths at most (on this site 0 to 3000).
headsMinnumberoptionalHeads at least (on this site 0 to 23).
headsMaxnumberoptionalHeads at most (on this site 0 to 23).
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 | headsoptionalsaving (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).
cursorstringoptionalThe cursor a previous answer returned, for its next page.
limitnumberoptionalRows per page: at most 10 when browsing, 20 once the person is signed in.
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,\"aiDiscount\":{\"percent\":0,\"price\":{\"amount\":null,\"currency\":null,\"text\":null}},\"kind\":\"string\"}]}],\"total\":0,\"cursor\":\"string\",\"withoutPhoto\":0,\"from\":\"2026-12-07\",\"through\":\"string\",\"checkedAt\":\"2026-11-07T06:00:00Z\",\"notApplied\":[\"string\"],\"nearest\":{\"widened\":\"dates\",\"note\":\"string\"},\"browsing\":true}"
      }
    ],
    "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,
              "aiDiscount": {
                "percent": 0,
                "price": {
                  "amount": null,
                  "currency": null,
                  "text": null
                }
              },
              "kind": "string"
            }
          ]
        }
      ],
      "total": 0,
      "cursor": "string",
      "withoutPhoto": 0,
      "from": "2026-12-07",
      "through": "string",
      "checkedAt": "2026-11-07T06:00:00Z",
      "notApplied": [
        "string"
      ],
      "nearest": {
        "widened": "dates",
        "note": "string"
      },
      "browsing": true
    },
    "isError": false
  }
}

Errors

  • invalid_argumentsAn argument does not fit the tool's schema.Read the message: it names the argument and what it takes. Fix that argument and call again; tools/list has each tool's schema.
  • invalid_emailThat email address does not look right; ask the person for it again.Ask the person to give their email again.
  • invalid_phoneGive 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_revokedThe 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_limitedToo many calls for this person or address this hour.Wait retryAfterSeconds, then call again.
  • browse_limitedThis address has browsed as much as this site answers without sign-in for now.Wait retryAfterSeconds, then call again. For a written quote, call request_quote with the person's own email or phone. Signed in, the reads answer more rows and pages.
  • browse_page_limitBrowsing without sign-in shows the first pages only.For a written quote, call request_quote with the person's own email or phone. Signed in, the reads answer more rows and pages.
  • read_refusedThe read could not answer these arguments.Read the message: it says what to change (a date format, a place name, which of several items).
request_quote

Request a formal quote

Write

Files an enquiry with the desk; nothing is booked or paid

Use it only after the person chose one or more yachts from a search_yachts, best_deals or get_yacht answer, gave their days and party, and said yes to a written quote: ask them before you call it. Pass the page links exactly as those answers returned them, the days, the party and anything they want the desk to know, in their words. The desk sends a formal quote in writing, with every cost on it, to the person's own email or phone; 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.

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 request_quote 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-07",
      "to": "2026-12-14",
      "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-07T06:00:00Z\"}"
      }
    ],
    "structuredContent": {
      "status": "received",
      "enquiryRef": "string",
      "nextStep": "string",
      "session": "string",
      "sessionExpiresAt": "2026-12-07T06:00:00Z"
    },
    "isError": false
  }
}

Errors

  • invalid_argumentsAn argument does not fit the tool's schema.Read the message: it names the argument and what it takes. Fix that argument and call again; tools/list has each tool's schema.
  • contact_requiredrequest_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_requiredThat 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_emailThat email address does not look right; ask the person for it again.Ask the person to give their email again.
  • invalid_phoneGive 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_revokedThe 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_missingThe person signed in without allowing enquiries, so request_quote cannot file one as them.Ask the person to sign in again and allow what the message names.
  • rate_limitedToo many calls for this person or address this hour.Wait retryAfterSeconds, then call again.
  • quote_limitNo more quote requests can be filed for this contact today.Tell the person the desk already has their requests; try again tomorrow.
  • quote_not_filedThe 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_partyparty is how many people, at least 1.Pass party as a whole number of people.
  • unknown_itemThat 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.

Errors

Protocol errors

CodeMessageWhat to do
-32700Parse error.Send one valid JSON-RPC 2.0 message as the request body.
-32600Not a JSON-RPC 2.0 request.Send one JSON-RPC 2.0 message per request, with jsonrpc "2.0", an id and a method.
-32600invalid_localePass locale as two lower-case letters, or leave it out.
-32601Method not found.Call initialize, tools/list, tools/call, resources/list or resources/read.
-32602Invalid params.Call tools/list: it names every tool this server answers, each with its schema.
-32002Resource not found.Call resources/list for the resources this server has.
-32000site_unavailableTry again later.
-32000mcp_disabledThis site has its MCP server switched off. Send the person to the website.
-32000rate_limitedWait for the Retry-After seconds, then call again.
-32300This site has answered as many calls today as it answers without sign-in.For a written quote, call request_quote with the person's own email or phone. Signed in, the reads answer more rows and pages.
-32603site_unavailableTry again later.
-32001This tool needs the person: sign them in. request_quote alone also takes their own email or phone.Sign the person in with the authorization server and scope the WWW-Authenticate header names, then call again with the token. Only request_quote takes the person's own email or phone instead; no other tool does.
-32001The access token is not valid here any more (expired, revoked, or for another site).Sign the person in again with the authorization server the WWW-Authenticate header names, or call again without a token.

Tool errors

CodeMessageWhat to do
invalid_argumentsAn argument does not fit the tool's schema.Read the message: it names the argument and what it takes. Fix that argument and call again; tools/list has each tool's schema.
contact_requiredrequest_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_requiredThat 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_emailThat email address does not look right; ask the person for it again.Ask the person to give their email again.
invalid_phoneGive 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_revokedThe 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_missingThe person signed in without allowing enquiries, so request_quote cannot file one as them.Ask the person to sign in again and allow what the message names.
rate_limitedToo many calls for this person or address this hour.Wait retryAfterSeconds, then call again.
browse_limitedThis address has browsed as much as this site answers without sign-in for now.Wait retryAfterSeconds, then call again. For a written quote, call request_quote with the person's own email or phone. Signed in, the reads answer more rows and pages.
browse_page_limitBrowsing without sign-in shows the first pages only.For a written quote, call request_quote with the person's own email or phone. Signed in, the reads answer more rows and pages.
quote_limitNo more quote requests can be filed for this contact today.Tell the person the desk already has their requests; try again tomorrow.
quote_not_filedThe 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_partyparty is how many people, at least 1.Pass party as a whole number of people.
unknown_itemThat 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.
invalid_datesThose days do not read as a stay.Pass from and to as YYYY-MM-DD, to after from.
dates_unavailableThose days cannot be held.Offer the person the stays under freeStays, or ask for other days.
party_too_largeThat party is more than this item takes.Offer another item, or ask the person about the party.
invalid_service_modeThis item is not sold that way.Read the message: it lists the ways it is sold. Ask the person and call again.
hold_capNo more holds can be asked for by this person today.Tell the person the desk already has their requests; try again tomorrow.
hold_not_filedThe hold did not go through. Nothing is held.Call request_hold again in a minute with the same arguments.
booking_not_foundThe person has no booking or enquiry with that reference.Call get_booking_status with no ref for what they have.
invalid_reasonGive the person's reason, at least 3 characters.Ask the person why, and pass it as reason.
status_changedThis is not in that status any more. Nothing was changed.Tell the person the status under bookingStatus and ask whether they still want to cancel.
cancel_not_possibleThis cannot be cancelled: it is finished or lapsed.Tell the person; nothing more happens on it.
price_index_not_configuredThis site has no price figures.Use search or best_deals for prices instead.
invalid_placeChoose a place from the list.Pass one of the place values under places, or a place in words: a region, a country or an area inside one.
unknown_placeThere are no prices for that place.Pass one of the place values under places, or a place in words: a region, a country or an area inside one.
invalid_monthChoose a month as YYYY-MM.Pass month as YYYY-MM.
invalid_typeChoose a type from the list, or leave it out for any.Leave type out, or pass a type the site names.
duplicate_parameterOnly one value per parameter is supported.Pass each argument once.
no_prices_for_monthThere are no prices for that month yet.Pass a month from the first one the message names.
no_prices_for_typeThere are no prices for that type there that month.Leave type out, or try another month.
read_refusedThe read could not answer these arguments.Read the message: it says what to change (a date format, a place name, which of several items).

Quickstart

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

  1. 01

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

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

    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-07","to":"2026-12-14","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.

Step-by-step setup