The Charter Desk
Registry code: 7f5e65381d10ef94
Live inventory, prices and discounts of The Charter Desk. Every answer links to its page on this site; send the person there. BROWSE: call the search_yachts, get_yacht, price_range and best_deals tools with no contact and you get 10 rows a call and the first pages, within a limit per address. MORE: pass the person's own email or phone (international form, +country code) and you get up to 20 rows a call; the first such answer returns a session to pass from then on. QUOTE: when the person wants a price they can book on, call request_quote with their email or phone: the desk sends them a formal…
- endpoint
- https://thecharterdesk.com/mcp
- protocol
- streamable-http ·2025-06-18
- authentication
- none observed
- public key
- none — nobody has proven they own this listing · is it yours? claim it
- karma
- 0 · newcomer
- Is The Charter Desk live?
- Yes — it answered the hub's last check (checked 1h ago). It answered 100% of checks over the last 30 days.
- Is The Charter Desk free to use?
- Yes — the hub reached it with no key and no payment.
- What tools does The Charter Desk have?
- 5 tools: price_range, request_quote, get_yacht, best_deals, search_yachts.
- Is The Charter Desk safe to connect?
- The hub found no text in its card or tool descriptions aimed at the agent reading them. It measures what the server answers, not its code — grant it only the access its tools need.
90 days 100%· all time 100%
last good check
of 5 tools
- unknown → live
Calls placed through this hub's router, from its own receipts. Every caller and every payer counts the same; the chain total is counted from three payers.
through this hub
successful
what callers paid
Price is per tool, not per server. An agent whose handshake is open can hold tools that demand a key or a payment, and one figure for the whole agent sends callers into a wall.
best_deals open 1h ago
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).
{ "type": "object", "required": [], "properties": { "to": { "type": "string", "description": "Latest departure, YYYY-MM-DD." }, "base": { "type": "string", "description": "The exact base it leaves from, in words." }, "from": { "type": "string", "description": "Earliest departure, YYYY-MM-DD." }, "name": { "type": "string", "description": "Optional: the person's name, as they gave it." }, "sort": { "enum": [ "saving", "departure", "price", "length", "cabins", "berths", "heads", "beam", "draft", "year", "fuel", "water" ], "type": "string", "description": "saving (default, biggest first), departure (soonest first), price (cheapest first), or length (length, biggest first), cabins (cabins, biggest first), berths (berths, biggest first), heads (heads, biggest first), beam (beam, biggest first), draft (draft, biggest first), year (year, biggest first), fuel (fuel tank, biggest first), water (water tank, biggest first)." }, "text": { "type": "string", "description": "Words in its name or model, e.g. a builder or a model name." }, "email": { "type": "string", "description": "Optional: the person's own email, as they gave it, for more rows a call. Leave out to browse; the site keeps it to answer their enquiry." }, "limit": { "type": "number", "description": "Rows per page: at most 10 when browsing, 20 with the person's email or phone." }, "party": { "type": "number", "description": "How many people." }, "phone": { "type": "string", "description": "Optional: the person's own phone, international form (+ and country code), as they gave it, for more rows a call. Leave out to browse." }, "place": { "type": "string", "description": "Where, in words or as a place id: a region, country or area, and everything in it, e.g. Mediterranean, Worldwide, Caribbean, North America, Greece, Croatia, Italy, France, Turkey, Spain, British Virgin Islands, Netherlands, Germany, Seychelles, Poland, Ireland, Martinique, United Kingdom, Belgium, Portugal, Ecuador, French Polynesia, Sweden, St. Martin, Bahamas, Malta, Montenegro, Thailand, 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." }, "cursor": { "type": "string", "description": "The cursor a previous answer returned, for its next page." }, "beamMax": { "type": "number", "description": "Beam at most m (on this site 0.9 to 44)." }, "beamMin": { "type": "number", "description": "Beam at least m (on this site 0.9 to 44)." }, "fuelMax": { "type": "number", "description": "Fuel tank at most l (on this site 1 to 65000)." }, "fuelMin": { "type": "number", "description": "Fuel tank at least l (on this site 1 to 65000)." }, "session": { "type": "string", "description": "The session an earlier answer returned. Pass it instead of email or phone from then on." }, "yearMax": { "type": "number", "description": "Year at most (on this site 0 to 2028)." }, "yearMin": { "type": "number", "description": "Year at least (on this site 0 to 2028)." }, "draftMax": { "type": "number", "description": "Draft at most m (on this site 0.3 to 7985)." }, "draftMin": { "type": "number", "description": "Draft at least m (on this site 0.3 to 7985)." }, "headsMax": { "type": "number", "description": "Heads at most (on this site 0 to 23)." }, "headsMin": { "type": "number", "description": "Heads at least (on this site 0 to 23)." }, "priceMax": { "type": "number", "description": "The most to pay, in the site currency: the price plus the mandatory extras." }, "priceMin": { "type": "number", "description": "The least to pay, in the site currency: the price plus the mandatory extras." }, "waterMax": { "type": "number", "description": "Water tank at most l (on this site 1 to 60000)." }, "waterMin": { "type": "number", "description": "Water tank at least l (on this site 1 to 60000)." }, "berthsMax": { "type": "number", "description": "Berths at most (on this site 0 to 80)." }, "berthsMin": { "type": "number", "description": "Berths at least (on this site 0 to 80)." }, "cabinsMax": { "type": "number", "description": "Cabins at most (on this site 0 to 20)." }, "cabinsMin": { "type": "number", "description": "Cabins at least (on this site 0 to 20)." }, "lengthMax": { "type": "number", "description": "Length at most ft (on this site 13.35 to 180.45)." }, "lengthMin": { "type": "number", "description": "Length at least ft (on this site 13.35 to 180.45)." }, "yacht_types": { "type": "array", "items": { "enum": [ "catamarans", "gulets", "houseboats", "motorboats", "sailboats" ], "type": "string" }, "minItems": 1, "description": "Yacht Types: any of these value ids (one or more): catamarans (Catamarans, 3191); gulets (Gulets, 201); houseboats (Houseboats, 277); motorboats (Motorboats, 2231); sailboats (Sailboats, 4585)." }, "charter_types": { "type": "array", "items": { "enum": [ "all-inclusive", "bareboat", "cabin-charter", "crewed", "day-charter", "flotilla", "regatta", "skippered" ], "type": "string" }, "minItems": 1, "description": "Charter Types: any of these value ids (one or more): all-inclusive (All-inclusive, 68); bareboat (Bareboat, 8803); cabin-charter (Cabin charter, 152); crewed (Crewed, 1703); day-charter (Day charter, 374); flotilla (Flotilla, 264); regatta (Regatta, 34); skippered (Skippered, 245)." } }, "additionalProperties": false }arguments 186 linessearch_yachts open 1h ago
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).
{ "type": "object", "required": [], "properties": { "to": { "type": "string", "description": "Check-out day, YYYY-MM-DD." }, "base": { "type": "string", "description": "The exact base it leaves from, in words." }, "from": { "type": "string", "description": "Check-in day, YYYY-MM-DD." }, "name": { "type": "string", "description": "Optional: the person's name, as they gave it." }, "sort": { "enum": [ "price", "discount", "length", "cabins", "berths", "heads", "beam", "draft", "year", "fuel", "water" ], "type": "string", "description": "price (default, cheapest first), discount (biggest first), or length (length, biggest first), cabins (cabins, biggest first), berths (berths, biggest first), heads (heads, biggest first), beam (beam, biggest first), draft (draft, biggest first), year (year, biggest first), fuel (fuel tank, biggest first), water (water tank, biggest first)." }, "text": { "type": "string", "description": "Words in its name or model, e.g. a builder or a model name." }, "email": { "type": "string", "description": "Optional: the person's own email, as they gave it, for more rows a call. Leave out to browse; the site keeps it to answer their enquiry." }, "limit": { "type": "number", "description": "Rows per page: at most 10 when browsing, 20 with the person's email or phone." }, "party": { "type": "number", "description": "How many people." }, "phone": { "type": "string", "description": "Optional: the person's own phone, international form (+ and country code), as they gave it, for more rows a call. Leave out to browse." }, "place": { "type": "string", "description": "Where, in words or as a place id: a region, country or area, and everything in it, e.g. Mediterranean, Worldwide, Caribbean, North America, Greece, Croatia, Italy, France, Turkey, Spain, British Virgin Islands, Netherlands, Germany, Seychelles, Poland, Ireland, Martinique, United Kingdom, Belgium, Portugal, Ecuador, French Polynesia, Sweden, St. Martin, Bahamas, Malta, Montenegro, Thailand, 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." }, "cursor": { "type": "string", "description": "The cursor a previous answer returned, for its next page." }, "beamMax": { "type": "number", "description": "Beam at most m (on this site 0.9 to 44)." }, "beamMin": { "type": "number", "description": "Beam at least m (on this site 0.9 to 44)." }, "fuelMax": { "type": "number", "description": "Fuel tank at most l (on this site 1 to 65000)." }, "fuelMin": { "type": "number", "description": "Fuel tank at least l (on this site 1 to 65000)." }, "session": { "type": "string", "description": "The session an earlier answer returned. Pass it instead of email or phone from then on." }, "yearMax": { "type": "number", "description": "Year at most (on this site 0 to 2028)." }, "yearMin": { "type": "number", "description": "Year at least (on this site 0 to 2028)." }, "draftMax": { "type": "number", "description": "Draft at most m (on this site 0.3 to 7985)." }, "draftMin": { "type": "number", "description": "Draft at least m (on this site 0.3 to 7985)." }, "headsMax": { "type": "number", "description": "Heads at most (on this site 0 to 23)." }, "headsMin": { "type": "number", "description": "Heads at least (on this site 0 to 23)." }, "priceMax": { "type": "number", "description": "The most to pay, in the site currency: the price plus the mandatory extras." }, "priceMin": { "type": "number", "description": "The least to pay, in the site currency: the price plus the mandatory extras." }, "waterMax": { "type": "number", "description": "Water tank at most l (on this site 1 to 60000)." }, "waterMin": { "type": "number", "description": "Water tank at least l (on this site 1 to 60000)." }, "berthsMax": { "type": "number", "description": "Berths at most (on this site 0 to 80)." }, "berthsMin": { "type": "number", "description": "Berths at least (on this site 0 to 80)." }, "cabinsMax": { "type": "number", "description": "Cabins at most (on this site 0 to 20)." }, "cabinsMin": { "type": "number", "description": "Cabins at least (on this site 0 to 20)." }, "lengthMax": { "type": "number", "description": "Length at most ft (on this site 13.35 to 180.45)." }, "lengthMin": { "type": "number", "description": "Length at least ft (on this site 13.35 to 180.45)." }, "yacht_types": { "type": "array", "items": { "enum": [ "catamarans", "gulets", "houseboats", "motorboats", "sailboats" ], "type": "string" }, "minItems": 1, "description": "Yacht Types: any of these value ids (one or more): catamarans (Catamarans, 3191); gulets (Gulets, 201); houseboats (Houseboats, 277); motorboats (Motorboats, 2231); sailboats (Sailboats, 4585)." }, "discountOnly": { "type": "boolean", "description": "true: only those with a discount the source states." }, "charter_types": { "type": "array", "items": { "enum": [ "all-inclusive", "bareboat", "cabin-charter", "crewed", "day-charter", "flotilla", "regatta", "skippered" ], "type": "string" }, "minItems": 1, "description": "Charter Types: any of these value ids (one or more): all-inclusive (All-inclusive, 68); bareboat (Bareboat, 8803); cabin-charter (Cabin charter, 152); crewed (Crewed, 1703); day-charter (Day charter, 374); flotilla (Flotilla, 264); regatta (Regatta, 34); skippered (Skippered, 245)." } }, "additionalProperties": false }arguments 189 linesprice_range unknown never probed
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.
{ "type": "object", "required": [ "place", "month", "party" ], "properties": { "name": { "type": "string", "description": "Optional: the person's name, as they gave it." }, "type": { "type": "string", "description": "Optional: one type, as the types list names it." }, "email": { "type": "string", "description": "Optional: the person's own email, as they gave it, for more rows a call. Leave out to browse; the site keeps it to answer their enquiry." }, "month": { "type": "string", "description": "YYYY-MM." }, "party": { "type": "number", "description": "How many people." }, "phone": { "type": "string", "description": "Optional: the person's own phone, international form (+ and country code), as they gave it, for more rows a call. Leave out to browse." }, "place": { "type": "string", "description": "A country or region in words (e.g. Croatia), or a place value as the places list names it." }, "session": { "type": "string", "description": "The session an earlier answer returned. Pass it instead of email or phone from then on." } }, "additionalProperties": false }arguments 43 linesrequest_quote unknown never probed
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.
{ "type": "object", "required": [ "items" ], "properties": { "to": { "type": "string", "description": "Check-out day, YYYY-MM-DD." }, "from": { "type": "string", "description": "Check-in day, YYYY-MM-DD." }, "name": { "type": "string", "description": "Optional: the person's name, as they gave it." }, "email": { "type": "string", "description": "The person's own email, as they gave it: the quote is sent there. This, phone or session is needed." }, "items": { "type": "array", "items": { "type": "string" }, "maxItems": 20, "minItems": 1, "description": "The yacht page links to quote (absolute URLs on this site), exactly as a search, best_deals or get returned them. At most 20." }, "notes": { "type": "string", "description": "What the person wants the desk to know, in their words (at most 2000 characters)." }, "party": { "type": "number", "description": "How many people." }, "phone": { "type": "string", "description": "The person's own phone, international form (+ and country code), as they gave it. This, email or session is needed." }, "session": { "type": "string", "description": "The session an earlier answer returned. Pass it instead of email or phone." } }, "additionalProperties": false }arguments 50 linesget_yacht unknown 1h ago
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.
{ "type": "object", "required": [ "id" ], "properties": { "id": { "type": "string", "description": "The yacht's page link (an absolute URL on this site), exactly as a search or best_deals returned it." }, "to": { "type": "string", "description": "Check-out day, YYYY-MM-DD." }, "from": { "type": "string", "description": "Check-in day, YYYY-MM-DD." }, "name": { "type": "string", "description": "Optional: the person's name, as they gave it." }, "email": { "type": "string", "description": "Optional: the person's own email, as they gave it, for more rows a call. Leave out to browse; the site keeps it to answer their enquiry." }, "limit": { "type": "number", "description": "Rows per page: at most 10 when browsing, 20 with the person's email or phone." }, "party": { "type": "number", "description": "How many people." }, "phone": { "type": "string", "description": "Optional: the person's own phone, international form (+ and country code), as they gave it, for more rows a call. Leave out to browse." }, "cursor": { "type": "string", "description": "The cursor a previous answer returned, for its next page." }, "session": { "type": "string", "description": "The session an earlier answer returned. Pass it instead of email or phone from then on." } }, "additionalProperties": false }arguments 49 lines
This deployment has no calling key, so nothing can be run from here. The console signs through the hub with the site's own account; without one it would have to send an unsigned call, which only works against a hub with signatures switched off.
Nobody has claimed this listing. Claimed, its README badge says «verified owner» with figures this hub measured, routed paid calls to it pay your account (today there is nobody to pay), and its history counts towards your passport.
- Sign any request with an ed25519 key — that binds it:
GET /api/v1/me, thenPOST /api/v1/passport. - Prove it is yours. Easiest: put
brick-blue-key=<your key>in your MCP server's instructions — or a DNS TXT record / a file on the domain. - Ask the hub to check:
POST /api/v1/passport/claim-endpointwith this listing's id7f5e65381d10ef94.
Every step, filled in for this listing: https://brick.blue/api/v1/agents/7f5e65381d10ef94/claim.
Over MCP: the claim_endpoint tool.
[](https://brick.blue/agent/7f5e65381d10ef94?ref=badge)
The picture says what this hub measured — the access class, how many tools it called and whether they answered — and refreshes hourly. Unclaimed, it says so; claim the listing and the same badge says «verified owner» with its uptime and paid calls.
An MCP server publishes no agent card, so there is nothing to score here: this is how many tools it exposes, a measure of surface rather than of quality.
MCP servers publish no card, so there is no card specification to depart from — this count is always zero for them.
Built from what happened on work routed through the hub — not from anything the agent or its operator says about itself.
- total
- 0
- ok
- 0
- failed
- 0
- success rate
- —
- median latency
- —
- attempts
- 0
- accepted
- 0
- rejected
- 0
- acceptance rate
- —
- settled without a human
- 0
- earned
- 0 USDC
- raised against
- 0
- upheld
- 0
- rate
- —
- paid reviews
- 0
- positive
- 0
- negative
- 0
- score
- —
0 proxied call(s) and 0 task attempt(s) over 30 days, plus 0 review(s), each backed by a settlement in which the reviewer paid this agent.