The Charter Desk
Server Details
Live yacht charter inventory: 11,000+ sailboats, catamarans, motorboats, gulets and houseboats.
- Status
- Healthy
- Last Tested
- Transport
- Streamable HTTP · MCP 2025-06-18
- URL
TDQS
Scored across 5 tools
Each tool has a recognizable role: search_yachts (find free yachts), best_deals (discounted departures only), get_yacht (single yacht + availability), price_range (aggregate statistics), and request_quote (side-effecting desk action). The one soft boundary is best_deals vs search_yachts, which share filters, pagination, row shape, and fallback 'nearest match' behavior, so an agent could misselect for a generic 'show me yachts with prices' request, though the descriptions do clarify the distinction.
All names are snake_case and follow a readable verb_noun pattern for the action tools (get_yacht, request_quote, search_yachts). The remaining two (best_deals, price_range) are noun phrases rather than verb-led, which is a minor stylistic deviation but still clear and predictable.
Five tools map cleanly onto five distinct capabilities: search, detail, deals, pricing statistics, and quote request. Nothing appears redundant or missing at the structural level, and the deliberate omission of a booking tool is consistent with the stated design that the desk closes bookings.
The browsing lifecycle is fully covered: discover (search_yachts), inspect (get_yacht), price-check (price_range), surface discounts (best_deals), and hand off (request_quote). Gaps are minor and mostly out-of-scope by design: there is no way to look up a quote's status, no place/destination enumeration beyond price_range's fallback, and no booking confirmation tool.
Available Tools
5 toolsbest_dealsBest dealsARead-onlyInspect
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).
| Name | Required | Description | Default |
|---|---|---|---|
| to | No | Latest departure, YYYY-MM-DD. | |
| base | No | The exact base it leaves from, in words. | |
| from | No | Earliest departure, YYYY-MM-DD. | |
| name | No | Optional: the person's name, as they gave it. | |
| sort | No | saving (default, biggest first), departure (soonest first), price (cheapest first), or length (length, biggest first), cabins (cabins, biggest first), berths (berths, biggest first), heads (heads, biggest first), beam (beam, biggest first), draft (draft, biggest first), year (year, biggest first), fuel (fuel tank, biggest first), water (water tank, biggest first). | |
| text | No | Words in its name or model, e.g. a builder or a model name. | |
| No | Optional: the person's own email, as they gave it, for more rows a call. Leave out to browse; the site keeps it to answer their enquiry. | ||
| limit | No | Rows per page: at most 10 when browsing, 20 with the person's email or phone. | |
| party | No | How many people. | |
| phone | No | Optional: the person's own phone, international form (+ and country code), as they gave it, for more rows a call. Leave out to browse. | |
| place | No | Where, in words or as a place id: a region, country or area, and everything in it, e.g. Mediterranean, Worldwide, Caribbean, North America, Greece, Croatia, Italy, France, Turkey, Spain, British Virgin Islands, Netherlands, Germany, Seychelles, Poland, Ireland, Martinique, United Kingdom, Belgium, Portugal, Ecuador, French Polynesia, Sweden, St. Martin, Bahamas, Malta, Montenegro, Thailand, Canada, St. Lucia, Slovenia, Norway, Guadeloupe, Brazil, Hungary, Grenada, St. Vincent, Belize, Cuba, Maldives, Mexico, Panama, Cape Verde, United Arab Emirates, Antigua and Barbuda, India, Tanzania, Egypt, Monaco, Estonia, Mauritius, New Zealand, USA, Switzerland, Fiji. An unknown place is refused; nothing there answers the nearest place around it. | |
| cursor | No | The cursor a previous answer returned, for its next page. | |
| beamMax | No | Beam at most m (on this site 0.9 to 44). | |
| beamMin | No | Beam at least m (on this site 0.9 to 44). | |
| fuelMax | No | Fuel tank at most l (on this site 1 to 65000). | |
| fuelMin | No | Fuel tank at least l (on this site 1 to 65000). | |
| session | No | The session an earlier answer returned. Pass it instead of email or phone from then on. | |
| yearMax | No | Year at most (on this site 0 to 2028). | |
| yearMin | No | Year at least (on this site 0 to 2028). | |
| draftMax | No | Draft at most m (on this site 0.3 to 7985). | |
| draftMin | No | Draft at least m (on this site 0.3 to 7985). | |
| headsMax | No | Heads at most (on this site 0 to 23). | |
| headsMin | No | Heads at least (on this site 0 to 23). | |
| priceMax | No | The most to pay, in the site currency: the price plus the mandatory extras. | |
| priceMin | No | The least to pay, in the site currency: the price plus the mandatory extras. | |
| waterMax | No | Water tank at most l (on this site 1 to 60000). | |
| waterMin | No | Water tank at least l (on this site 1 to 60000). | |
| berthsMax | No | Berths at most (on this site 0 to 80). | |
| berthsMin | No | Berths at least (on this site 0 to 80). | |
| cabinsMax | No | Cabins at most (on this site 0 to 20). | |
| cabinsMin | No | Cabins at least (on this site 0 to 20). | |
| lengthMax | No | Length at most ft (on this site 13.35 to 180.45). | |
| lengthMin | No | Length at least ft (on this site 13.35 to 180.45). | |
| yacht_types | No | Yacht Types: any of these value ids (one or more): catamarans (Catamarans, 3192); gulets (Gulets, 201); houseboats (Houseboats, 1428); motorboats (Motorboats, 1080); sailboats (Sailboats, 4576). | |
| charter_types | No | Charter Types: any of these value ids (one or more): all-inclusive (All-inclusive, 68); bareboat (Bareboat, 8795); cabin-charter (Cabin charter, 152); crewed (Crewed, 1702); day-charter (Day charter, 374); flotilla (Flotilla, 257); regatta (Regatta, 34); skippered (Skippered, 245). |
Output Schema
| Name | Required | Description |
|---|---|---|
| from | No | The window's first day. |
| next | No | When browsing: how to get a quote or more rows. |
| rows | Yes | One page of deals, one row per item with its departures. |
| total | Yes | How many rows match in all. |
| cursor | No | Pass as cursor for the next page; null on the last. |
| nearest | No | Only when nothing matched exactly: these rows are the nearest match. |
| session | No | Only on the call that created the contact: pass it from then on. |
| through | No | Its last day. |
| browsing | No | true: answered without a contact, so fewer rows and the first pages only. |
| checkedAt | No | When the offers were read, ISO time. |
| notApplied | No | What could not narrow the deals. |
| sessionExpiresAt | No | When that session stops working, ISO time. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the readOnly/non-destructive annotations it discloses the excluded-taken-departure rule, one-row-per-yacht grouping, paging via total and cursor, the nearest-deals relaxation with a 'nearest' field reporting what was widened, and the reduced row count without a contact. That is exactly the kind of behavior an annotations block cannot express.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded and dense with no filler sentences; the discount-definition rule and default window come first, which is the right priority. It is written as long comma-chained clauses that take effort to parse, costing a point on structure despite the strong information density.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 35-parameter, zero-required search tool with paging and a relaxation fallback, the description covers the row contents, ordering semantics, cursor paging and what happens on empty results; an output schema exists, so return-shape detail is rightly left out.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% and every one of the 35 filters is documented in-schema, so the baseline of 3 applies. The description adds only modest cross-parameter meaning: sort order ('in the order asked'), the parenthetical tying the yacht page id to get_yacht and request_quote, and session reuse — all useful but not compensating for anything missing.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
It opens with a specific verb and resource — 'Discounted departures of this site's yachts, read from the live inventory' — and immediately bounds what counts as a deal ('only a discount the source itself states ... never a computed gap'). That distinguishes it cleanly from search_yachts, which returns general inventory rather than source-stated discounts.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It gives the default window ('tomorrow to 30 days ahead'), the fallback policy when nothing matches, and the contact/no-contact tradeoff ('browsing: fewer rows'). What it doesn't do is state explicitly when to call this instead of search_yachts; it only says 'Narrow with the same typed filters as search', which implies lineage rather than a selection rule.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_yachtGet one yachtARead-onlyInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | The yacht's page link (an absolute URL on this site), exactly as a search or best_deals returned it. | |
| to | No | Check-out day, YYYY-MM-DD. | |
| from | No | Check-in day, YYYY-MM-DD. | |
| name | No | Optional: the person's name, as they gave it. | |
| No | Optional: the person's own email, as they gave it, for more rows a call. Leave out to browse; the site keeps it to answer their enquiry. | ||
| limit | No | Rows per page: at most 10 when browsing, 20 with the person's email or phone. | |
| party | No | How many people. | |
| phone | No | Optional: the person's own phone, international form (+ and country code), as they gave it, for more rows a call. Leave out to browse. | |
| cursor | No | The cursor a previous answer returned, for its next page. | |
| session | No | The session an earlier answer returned. Pass it instead of email or phone from then on. |
Output Schema
| Name | Required | Description |
|---|---|---|
| href | Yes | Its page on this site, absolute URL. |
| item | Yes | Its name. |
| kind | No | Its type. |
| next | No | When browsing: how to get a quote or more rows. |
| facts | No | The facts its page shows, labelled. |
| place | No | Where it is. |
| terms | No | Deposit, licence, stay limits, check-in days and times, as stated. |
| session | No | Only on the call that created the contact: pass it from then on. |
| browsing | No | true: answered without a contact, so fewer rows and the first pages only. |
| packages | No | The ways it is sold, the default first, each with its included, required and optional extras. |
| checkedAt | No | When the source was read, ISO time. |
| equipment | No | Named equipment in groups. |
| description | No | Its description. |
| availability | No | With dates: that stay and, when not free, the nearest free stays; without: its free stays, soonest first. |
| sessionExpiresAt | No | When that session stops working, ISO time. |
| operatorDescriptions | No | The operator's own texts and documents. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly/non-destructive/closed-world, and the description adds genuinely useful context beyond them: absent fields mean the source does not state them, unavailable stays return the nearest free alternatives, and the call works without a contact. It stops short of describing response shape or pagination, but the output schema covers that.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The core content is front-loaded and every clause carries information, but the main sentence is a single long run-on stuffed with parenthetical enumerations that is slow to parse. The final two sentences ('A field that is absent...', 'Works without a contact') are tight and well-placed.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 10-parameter tool with an output schema and full schema coverage, the description supplies the pieces structured fields cannot: absence semantics, availability fallback behavior, and no-contact operation. Sibling routing is the one gap.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the baseline is 3; the description earns above that by explaining what from/to actually change (stay status and price, or nearest free stays) and that omitting dates yields free stays soonest-first. It does not add detail on cursor, limit, or session beyond the schema text.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a specific resource and enumerates exactly what is returned: facts, terms (packages, extras, deposit, check-in, stay limits, equipment), and availability. It is clearly a single-yacht detail fetch rather than a list, though it never names search_yachts or best_deals to make the split explicit.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The with-dates vs without-dates branching is spelled out, but that is parameter behavior, not tool selection. Nothing tells the agent when to call get_yacht instead of search_yachts or best_deals; the routing hint ('as a search or best_deals returned it') lives in the schema, not the description.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
price_rangePrice rangeBRead-onlyInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
| name | No | Optional: the person's name, as they gave it. | |
| type | No | Optional: one type, as the types list names it. | |
| No | Optional: the person's own email, as they gave it, for more rows a call. Leave out to browse; the site keeps it to answer their enquiry. | ||
| month | Yes | YYYY-MM. | |
| party | Yes | How many people. | |
| phone | No | Optional: the person's own phone, international form (+ and country code), as they gave it, for more rows a call. Leave out to browse. | |
| place | Yes | A country or region in words (e.g. Croatia), or a place value as the places list names it. | |
| session | No | The session an earlier answer returned. Pass it instead of email or phone from then on. |
Output Schema
| Name | Required | Description |
|---|---|---|
| next | No | When browsing: how to get a quote or more rows. |
| thin | No | true: few items, a rough figure. |
| items | Yes | How many items the figures are from. |
| place | No | The place value answered (a place given in words, resolved). |
| range | No | p25, p50 (median), p75 in MINOR units; null when too few items. |
| session | No | Only on the call that created the contact: pass it from then on. |
| browsing | No | true: answered without a contact, so fewer rows and the first pages only. |
| cheapest | No | The cheapest published item that fits. |
| currency | Yes | ISO 4217. |
| seasonHint | No | Another month against this one: pct cheaper there (negative: dearer). |
| seasonNote | No | The season hint in words, to tell the person. |
| noneFitParty | No | true: no item there takes the party. |
| sessionExpiresAt | No | When that session stops working, ISO time. |
| extrasMedianMinor | No | The usual mandatory extras, minor units. |
| lastMinuteSharePct | No | Share of soon departures discounted. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the readOnly/non-destructive annotations, the description discloses what is returned (p25/median/p75 in minor units, item count, cheapest published fitting option, build timestamp, seasonNote) and two useful behaviors: unknown places degrade to a list of places that do have figures, and no contact is required. It doesn't explain pagination or the session/email escalation flow, so not a 5.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The core purpose is front-loaded, but the opening sentence is a heavily stacked clause chain strung together with semicolons and commas that is hard to parse on first read. Every element roughly earns its place, but the structure could be broken into shorter, scannable statements.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With an output schema present the description needn't explain return values, yet it does, and it also covers the unknown-place fallback and contactless operation. However, for an 8-parameter tool it never mentions session, email, or phone escalation ('more rows'), leaving that mechanism to the schema alone.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the schema already documents all eight parameters including the optional type filter, session, and contact fields. The description restates the place/month/party/type relationship and adds the units context (minor units of the currency), but does not clarify session, email, phone, or name usage beyond what the schema says. Baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific resource and what it returns: the p25/median/p75 range of open departures for a place, month and party, plus counts and a cheapest-published figure. An agent can tell this is a price-statistics lookup rather than a booking or listing tool. It doesn't name or differentiate itself from siblings like best_deals, keeping it below 5.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no explicit when-to-use or when-not guidance, and no sibling is named as an alternative even though best_deals and search_yachts sit alongside it. The only conditional statements ('An unknown place answers with the places that have figures', 'Works without a contact') describe fallback behavior, not tool selection.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
request_quoteRequest a formal quoteAIdempotentInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
| to | No | Check-out day, YYYY-MM-DD. | |
| from | No | Check-in day, YYYY-MM-DD. | |
| name | No | Optional: the person's name, as they gave it. | |
| No | The person's own email, as they gave it: the quote is sent there. This, phone or session is needed. | ||
| items | Yes | The yacht page links to quote (absolute URLs on this site), exactly as a search, best_deals or get returned them. At most 20. | |
| notes | No | What the person wants the desk to know, in their words (at most 2000 characters). | |
| party | No | How many people. | |
| phone | No | The person's own phone, international form (+ and country code), as they gave it. This, email or session is needed. | |
| session | No | The session an earlier answer returned. Pass it instead of email or phone. |
Output Schema
| Name | Required | Description |
|---|---|---|
| status | Yes | received: the desk has the request; already_received: this session asked the same in the last day. |
| session | No | Only on the call that created the contact: pass it from then on. |
| nextStep | Yes | Where the written quote goes, in words to tell the person. |
| enquiryRef | No | The request's reference, returned once. |
| sessionExpiresAt | No | When that session stops working, ISO time. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Goes well beyond the annotations: it discloses that the desk replies out-of-band to the person's own email or phone, that this tool's own answer only confirms receipt and the destination, and that nothing is booked or paid until the person confirms with the desk. Those are exactly the side-effect facts an agent needs and none are derivable from readOnlyHint=false / destructiveHint=false alone.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the purpose, then inputs, then outcome, then the safety constraint — a sensible ordering with no filler. The sentences are long and comma-heavy, which costs a little scannability, but every clause carries information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With an output schema present and full schema coverage, the description only needs to supply the semantics the structured fields cannot: the out-of-band delivery, the non-booking nature, and the consent requirement. It supplies all three, leaving no material gap for a 9-parameter tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already explains every parameter including the email/phone/session fallback and the 20-item cap. The description restates the same groupings ('the page links... the days and the party... anything the person wants the desk to know') without adding format or constraint detail, so the baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Ask this site's desk for a formal quote on one or more yachts') and makes clear it is a downstream step from the search tools, not a search itself. An agent can distinguish it from search_yachts, best_deals, get_yacht and price_range without opening any schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly says to pass the page links that 'a search, best_deals or get returned', which establishes the correct call ordering relative to siblings, and adds the consent rule 'Ask the person before calling it.' It stops short of naming an explicit when-not or a named alternative for a different outcome, but the usage context is unambiguous.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
search_yachtsSearch yachtsARead-onlyInspect
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).
| Name | Required | Description | Default |
|---|---|---|---|
| to | No | Check-out day, YYYY-MM-DD. | |
| base | No | The exact base it leaves from, in words. | |
| from | No | Check-in day, YYYY-MM-DD. | |
| name | No | Optional: the person's name, as they gave it. | |
| sort | No | price (default, cheapest first), discount (biggest first), or length (length, biggest first), cabins (cabins, biggest first), berths (berths, biggest first), heads (heads, biggest first), beam (beam, biggest first), draft (draft, biggest first), year (year, biggest first), fuel (fuel tank, biggest first), water (water tank, biggest first). | |
| text | No | Words in its name or model, e.g. a builder or a model name. | |
| No | Optional: the person's own email, as they gave it, for more rows a call. Leave out to browse; the site keeps it to answer their enquiry. | ||
| limit | No | Rows per page: at most 10 when browsing, 20 with the person's email or phone. | |
| party | No | How many people. | |
| phone | No | Optional: the person's own phone, international form (+ and country code), as they gave it, for more rows a call. Leave out to browse. | |
| place | No | Where, in words or as a place id: a region, country or area, and everything in it, e.g. Mediterranean, Worldwide, Caribbean, North America, Greece, Croatia, Italy, France, Turkey, Spain, British Virgin Islands, Netherlands, Germany, Seychelles, Poland, Ireland, Martinique, United Kingdom, Belgium, Portugal, Ecuador, French Polynesia, Sweden, St. Martin, Bahamas, Malta, Montenegro, Thailand, Canada, St. Lucia, Slovenia, Norway, Guadeloupe, Brazil, Hungary, Grenada, St. Vincent, Belize, Cuba, Maldives, Mexico, Panama, Cape Verde, United Arab Emirates, Antigua and Barbuda, India, Tanzania, Egypt, Monaco, Estonia, Mauritius, New Zealand, USA, Switzerland, Fiji. An unknown place is refused; nothing there answers the nearest place around it. | |
| cursor | No | The cursor a previous answer returned, for its next page. | |
| beamMax | No | Beam at most m (on this site 0.9 to 44). | |
| beamMin | No | Beam at least m (on this site 0.9 to 44). | |
| fuelMax | No | Fuel tank at most l (on this site 1 to 65000). | |
| fuelMin | No | Fuel tank at least l (on this site 1 to 65000). | |
| session | No | The session an earlier answer returned. Pass it instead of email or phone from then on. | |
| yearMax | No | Year at most (on this site 0 to 2028). | |
| yearMin | No | Year at least (on this site 0 to 2028). | |
| draftMax | No | Draft at most m (on this site 0.3 to 7985). | |
| draftMin | No | Draft at least m (on this site 0.3 to 7985). | |
| headsMax | No | Heads at most (on this site 0 to 23). | |
| headsMin | No | Heads at least (on this site 0 to 23). | |
| priceMax | No | The most to pay, in the site currency: the price plus the mandatory extras. | |
| priceMin | No | The least to pay, in the site currency: the price plus the mandatory extras. | |
| waterMax | No | Water tank at most l (on this site 1 to 60000). | |
| waterMin | No | Water tank at least l (on this site 1 to 60000). | |
| berthsMax | No | Berths at most (on this site 0 to 80). | |
| berthsMin | No | Berths at least (on this site 0 to 80). | |
| cabinsMax | No | Cabins at most (on this site 0 to 20). | |
| cabinsMin | No | Cabins at least (on this site 0 to 20). | |
| lengthMax | No | Length at most ft (on this site 13.35 to 180.45). | |
| lengthMin | No | Length at least ft (on this site 13.35 to 180.45). | |
| yacht_types | No | Yacht Types: any of these value ids (one or more): catamarans (Catamarans, 3192); gulets (Gulets, 201); houseboats (Houseboats, 1428); motorboats (Motorboats, 1080); sailboats (Sailboats, 4576). | |
| discountOnly | No | true: only those with a discount the source states. | |
| charter_types | No | Charter Types: any of these value ids (one or more): all-inclusive (All-inclusive, 68); bareboat (Bareboat, 8795); cabin-charter (Cabin charter, 152); crewed (Crewed, 1702); day-charter (Day charter, 374); flotilla (Flotilla, 257); regatta (Regatta, 34); skippered (Skippered, 245). |
Output Schema
| Name | Required | Description |
|---|---|---|
| next | No | When browsing: how to get a quote or more rows. |
| items | Yes | One page of matches. |
| total | Yes | How many rows match in all. |
| cursor | No | Pass as cursor for the next page; null on the last. |
| checked | No | true: dates were given, so every row is free for them. |
| nearest | No | Only when nothing matched exactly: these rows are the nearest match. |
| session | No | Only on the call that created the contact: pass it from then on. |
| browsing | No | true: answered without a contact, so fewer rows and the first pages only. |
| checkedAt | No | When the source was read, ISO time. |
| unchecked | No | What was said but could not be checked. |
| notApplied | No | What the person asked for that could not narrow the search. |
| leftOutUnpriced | No | Matches left out under priceMin / priceMax because no price is known. |
| sessionExpiresAt | No | When that session stops working, ISO time. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Goes well past the readOnly/destructive annotations: with dates it returns ONLY yachts free for that stay with stay status, price, list price, discount and checkedAt; without dates each row has a from-price. It discloses the nearest-match widening behavior with a nearest explanation to relay, notApplied for unsatisfiable filters, cursor/total pagination, and the lower row cap when no contact is supplied.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with purpose, and every clause carries substance given 36 parameters and a non-obvious fallback model. The single dense paragraph with sentence fragments ("Paged: total and cursor") reads as a wall of text, which makes the fallback and pagination rules easy to skim past.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists, yet the description still covers result shape, fallback behavior, pagination and contact-gated row limits, plus the instruction to send the person to the absolute page link. For a 36-parameter, zero-required search tool this leaves nothing an agent needs to call it correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the baseline is 3, but the description adds real semantics the schema lacks: within a list any value matches, across filters every filter must hold, priceMin/priceMax count mandatory extras, and session should replace email/phone on later calls. It does not explain the interplay of place and base or how party affects date-based results.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Opens with a specific verb and resource plus scope: "Find this site's yachts, read from the live inventory." An agent knows exactly what the tool retrieves and that results are live rather than cached. It never names a sibling, though, so nothing explicitly separates it from best_deals or price_range for an agent comparing candidates.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives concrete calling conditions: pass typed filters for what the person wants, pass from/to only when exact days were given, and omit email/phone to browse (fewer rows). It also states the fallback contract when nothing matches exactly. It stops short of naming when to prefer a sibling such as get_yacht or best_deals.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
2 tool updates
- Changed
best_deals3 fields changed- changed
Input schema / properties / charter_types / descriptionPrevious value: -"Charter Types: any of these value ids (one or more): all-inclusive (All-inclusive, 68); bareboat (Bareboat, 8803); cabin-charter (Cabin charter, 152); crewed (Crewed, 1703); day-charter (Day charter, 374); flotilla (Flotilla, 264); regatta (Regatta, 34); skippered (Skippered, 245)."New value: +"Charter Types: any of these value ids (one or more): all-inclusive (All-inclusive, 68); bareboat (Bareboat, 8795); cabin-charter (Cabin charter, 152); crewed (Crewed, 1702); day-charter (Day charter, 374); flotilla (Flotilla, 257); regatta (Regatta, 34); skippered (Skippered, 245)." - changed
Input schema / properties / place / descriptionPrevious value: -"Where, in words or as a place id: a region, country or area, and everything in it, e.g. Mediterranean, Worldwide, Caribbean, North America, Greece, Croatia, Italy, France, Turkey, Spain, British Virgin Islands, Netherlands, Germany, Seychelles, Poland, Ireland, Martinique, United Kingdom, Belgium, Portugal, Ecuador, French Polynesia, Sweden, St. Martin, Bahamas, Malta, Montenegro, Thailand, St. Lucia, Canada, Slovenia, Norway, Guadeloupe, Brazil, Grenada, Hungary, 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."New value: +"Where, in words or as a place id: a region, country or area, and everything in it, e.g. Mediterranean, Worldwide, Caribbean, North America, Greece, Croatia, Italy, France, Turkey, Spain, British Virgin Islands, Netherlands, Germany, Seychelles, Poland, Ireland, Martinique, United Kingdom, Belgium, Portugal, Ecuador, French Polynesia, Sweden, St. Martin, Bahamas, Malta, Montenegro, Thailand, Canada, St. Lucia, Slovenia, Norway, Guadeloupe, Brazil, Hungary, Grenada, St. Vincent, Belize, Cuba, Maldives, Mexico, Panama, Cape Verde, United Arab Emirates, Antigua and Barbuda, India, Tanzania, Egypt, Monaco, Estonia, Mauritius, New Zealand, USA, Switzerland, Fiji. An unknown place is refused; nothing there answers the nearest place around it." - changed
Input schema / properties / yacht_types / descriptionPrevious value: -"Yacht Types: any of these value ids (one or more): catamarans (Catamarans, 3191); gulets (Gulets, 201); houseboats (Houseboats, 277); motorboats (Motorboats, 2231); sailboats (Sailboats, 4585)."New value: +"Yacht Types: any of these value ids (one or more): catamarans (Catamarans, 3192); gulets (Gulets, 201); houseboats (Houseboats, 1428); motorboats (Motorboats, 1080); sailboats (Sailboats, 4576)."
- Changed
search_yachts3 fields changed- changed
Input schema / properties / charter_types / descriptionPrevious value: -"Charter Types: any of these value ids (one or more): all-inclusive (All-inclusive, 68); bareboat (Bareboat, 8803); cabin-charter (Cabin charter, 152); crewed (Crewed, 1703); day-charter (Day charter, 374); flotilla (Flotilla, 264); regatta (Regatta, 34); skippered (Skippered, 245)."New value: +"Charter Types: any of these value ids (one or more): all-inclusive (All-inclusive, 68); bareboat (Bareboat, 8795); cabin-charter (Cabin charter, 152); crewed (Crewed, 1702); day-charter (Day charter, 374); flotilla (Flotilla, 257); regatta (Regatta, 34); skippered (Skippered, 245)." - changed
Input schema / properties / place / descriptionPrevious value: -"Where, in words or as a place id: a region, country or area, and everything in it, e.g. Mediterranean, Worldwide, Caribbean, North America, Greece, Croatia, Italy, France, Turkey, Spain, British Virgin Islands, Netherlands, Germany, Seychelles, Poland, Ireland, Martinique, United Kingdom, Belgium, Portugal, Ecuador, French Polynesia, Sweden, St. Martin, Bahamas, Malta, Montenegro, Thailand, St. Lucia, Canada, Slovenia, Norway, Guadeloupe, Brazil, Grenada, Hungary, 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."New value: +"Where, in words or as a place id: a region, country or area, and everything in it, e.g. Mediterranean, Worldwide, Caribbean, North America, Greece, Croatia, Italy, France, Turkey, Spain, British Virgin Islands, Netherlands, Germany, Seychelles, Poland, Ireland, Martinique, United Kingdom, Belgium, Portugal, Ecuador, French Polynesia, Sweden, St. Martin, Bahamas, Malta, Montenegro, Thailand, Canada, St. Lucia, Slovenia, Norway, Guadeloupe, Brazil, Hungary, Grenada, St. Vincent, Belize, Cuba, Maldives, Mexico, Panama, Cape Verde, United Arab Emirates, Antigua and Barbuda, India, Tanzania, Egypt, Monaco, Estonia, Mauritius, New Zealand, USA, Switzerland, Fiji. An unknown place is refused; nothing there answers the nearest place around it." - changed
Input schema / properties / yacht_types / descriptionPrevious value: -"Yacht Types: any of these value ids (one or more): catamarans (Catamarans, 3191); gulets (Gulets, 201); houseboats (Houseboats, 277); motorboats (Motorboats, 2231); sailboats (Sailboats, 4585)."New value: +"Yacht Types: any of these value ids (one or more): catamarans (Catamarans, 3192); gulets (Gulets, 201); houseboats (Houseboats, 1428); motorboats (Motorboats, 1080); sailboats (Sailboats, 4576)."
5 tool updates
- First observed
best_deals - First observed
get_yacht - First observed
price_range - First observed
request_quote - First observed
search_yachts
Related MCP Connectors
Search 14,000+ charter boats with live prices, plus marinas, anchorages, routes and itineraries.
Live discounted yacht charters in 11 destinations: search, price checks, trip cost, routes.
Search about 20,000 yachts for sale, charter and sold, with where AIS last placed each one.
Live private jet empty legs, charter estimates in 12 countries and quote requests.
Related MCP Servers
- AlicenseAqualityAmaintenanceVacation rental software. A signed stay offer on the host’s own domain. Use this when a vacation rental host wants booking software on the host’s own domain, or when a stay offer must be verified against that domain. Returns an Ed25519-signed offer (VRP) and the host’s direct booking URL. The guest books and pays the host. Do not use to compare hosts or prices.6999 npm4Apache 2.0
- AlicenseNot gradedqualityDmaintenanceLets an AI assistant search live empty-leg private jet flights, estimate whole-aircraft charter prices in the departure market's local currency, and browse routes, aircraft sizes and licensed operators. It also sends quote requests to the charter desk, with no API key or payment needed.MIT

skyaccess-mcpofficial
AlicenseNot gradedqualityAmaintenanceEnables AI clients to search discounted private-jet empty-leg flights, retrieve flight details, obtain booking links, estimate charter prices, and submit charter enquiries.23 npm2MIT- AlicenseAqualityCmaintenanceGive AI agents the ability to search private jets, compare aircraft, get quotes, and submit charter requests through natural language.75 npmMIT
Glama MCP Gateway
Add one secure layer between your agents and this server.