Charter Boats
Registry code: 1202684d3b4d4709
Search 14,000+ charter boats with live prices, plus marinas, anchorages, routes and itineraries.
from a public catalogue that lists it, not from the operator
- endpoint
- https://charter.boats/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 Charter Boats live?
- Yes — it answered the hub's last check (checked 2h ago). It answered 99% of checks over the last 30 days.
- Is Charter Boats free to use?
- Partly — some of its tools are open, others need a key or payment.
- What tools does Charter Boats have?
- 46 tools: get_location_details, update_boat, set_equipment_visibility, update_boat_images, update_company, get_cancellation_limits, set_cancellation_policy, set_cross_lock, ….
- Is Charter Boats 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 99.4%· all time 99.4%
last good check
of 46 tools
- degraded → live
- live → degraded· timeout after 20000ms
- down → live
- live → degraded· timeout after 20000ms
- unknown → live
- used for
- search charter boats
- find marinas and anchorages
- find sailing routes
- get sailing itinerary details
- takes → gives
- text → data
- tools
- 11 reads
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.
search_routes reads open 14h ago
Find sailing passages between destinations with distance and difficulty.
{ "type": "object", "properties": { "q": { "type": "string", "description": "Search route by title" }, "from": { "type": "string", "description": "Place the passage starts or ends at, as the guest says it (\"Sivota\", \"Nydri, Greece\", \"Dalmatia\"). Resolved to a real place; if it resolves to nothing you get `from_unresolved` and no passages, never passages somewhere else." }, "limit": { "type": "integer", "default": 5 }, "difficulty": { "enum": [ "easy", "moderate", "challenging" ], "type": "string" }, "location_id": { "type": "string" } }, "additionalProperties": false }arguments 29 linessearch_boats reads open 3d ago
Search charter boats by location, name, type, dates, capacity, budget. The response `total_matching` is the FULL count of matching boats — results are the top `limit` of those, so phrase counts from it ("8 of 48 available") and re-call with a higher limit when the guest wants more. Pass the guest's dates as they gave them. Each boat sets its own changeover day (`checkinout_days`) and its own minimum stay (`min_charter_days`), so the week a boat can actually be sold may not start on the day asked for — `price_summary` always names the real week, and it is the one sentence to quote, as it stands: the boat page's own Total for the stay it names, for the `guests` given (else the boat's max guests), all in (charter, every required fee charged now or at pickup, the 45 EUR platform fee; refundable deposits never), and the discount applied (the percent the site's card shows); a stay other than a week names its dates and length ("for Jun 19–22 (3 nights), 4 guests"); with no dates it is the boat's lowest week ("From", at max guests, precomputed). `list_price` holds the same figures — `total` (the stay's), `per_day` (that total per day for the boat; `from` when no dates were given), `party` (the guests it is priced for), `original_per_day` and `discount_pct` when a discount applies. For Due now, Paid at pickup and each deposit by name call get_boat_details with the dates. No total here includes an optional extra — `price_summary`, `list_price` and the `total_max` screen all leave out a skipper where `skippered` is 'optional', a hostess, a cook — so for a total with one, call get_boat_details with the dates before you answer and add the fee it lists under `fees.optional`, or say the boat lists none — never a typical or estimated rate, and call no budget met or exceeded on one. When `boats` is short, `alternatives` holds the closest boats, and each one's `relaxed` names what it loosened: `dates` (the week either side), `place` (a nearby base), `model` (another model of the same make), `name` (a boat carrying one word of the name). Say which — they are not what was asked for, and they count toward no total. List them AFTER the matches, in their own list, under a one-line heading naming what was loosened ("Close alternatives — the week either side"): never mixed into the same list. That heading is what splits the two on every card surface, so without it an alternative is rendered exactly like a match. `alternative_inventory` tells you which kind of "no" you are giving: `total_boats` 0 means this coast does not have that boat, while `total_boats` high with `available_nearby_or_within_7_days` 0 means it is the week, not the place. If a plain marina search has neither matches nor alternatives, `listed_unavailable` may carry published boats visibly listed at that exact marina. They are not bookable results: quote no price, explain the supplied reason, and offer an availability alert. A search with NO dates and NO price cap lists every published boat that matches, so `boats` can end with entries we hold no prices for: from `unpriced_start_index` onward every one carries `bookable_as_searched: false` and a `not_offered_because` saying so — they count as matches, but cannot be booked or quoted, so name them, link them and offer an alert without ever stating a price. When you searched a boat by NAME, `named_matches` lists published boats carrying that name that this search could not offer — wrong dates, wrong place, or no prices loaded. Everything bookable AS SEARCHED is in `boats`; nothing in `named_matches` is — though one whose only reason is the place or the dates may still be sellable, which is what its `not_offered_because` tells you. Never say a named boat does not exist while it is in that list: name it, give its reason, and use `get_boat_details` for the dates it IS free. `name_not_found` means the opposite and is certain — that name is in no published boat anywhere. `alert_query` + `alert_horizon` feed availability_alert. Both are absent when this search cannot be expressed on the website (`search_url_unavailable` says so) — then there is no link to give and no alert to set: say so rather than linking charter.boats/search, which would show boats this answer excluded.
{ "type": "object", "properties": { "sort": { "enum": [ "best_value", "deals", "price_low", "price_high", "newest" ], "type": "string", "description": "Sort order. Default: best_value (best value, available boats first). Use deals for biggest discounts first." }, "limit": { "type": "integer", "default": 5, "maximum": 25 }, "cabins": { "type": "integer", "description": "Minimum number of guest cabins (crew cabins are not counted)" }, "guests": { "type": "integer", "description": "Number of guests" }, "search": { "type": "string", "description": "Boat NAME only (\"Papillon\", \"Ziphius\") — the name an operator gave one hull, matched as a WHOLE WORD, so send the name the guest said and not a shortening of it. NEVER a make or a model: both go in `makemodel`, a model on its own included (\"Oceanis 46\")." }, "date_to": { "type": "string", "description": "End date YYYY-MM-DD" }, "currency": { "enum": [ "EUR", "USD" ], "type": "string", "description": "Optional: the currency every amount in the answer is written in, and any price you send is read in. When the conversation has its own currency, that one is used whatever is sent; otherwise the one sent, EUR when omitted. The currency a guest named for a bound is sent with `price_currency`." }, "features": { "type": "array", "items": { "enum": [ "air_conditioning", "heating", "hot_water", "generator", "inverter", "solar_panels", "watermaker", "wifi", "deck_shower", "fridge", "cooler", "freezer", "ice_maker", "oven", "microwave", "dishwasher", "washing_machine", "coffee_machine", "electric_toilet", "toilet", "tv", "sound_system", "autopilot", "chartplotter", "radar", "ais", "bow_thruster", "stern_thruster", "electric_windlass", "dinghy", "davits", "outboard", "bimini", "foredeck_shade", "sprayhood", "teak_deck", "gangway", "flybridge", "bathing_platform", "jacuzzi", "underwater_lights", "stabilizers", "railing_net", "lazy_bag", "spinnaker", "gennaker", "electric_winch", "snorkeling_gear", "diving_equipment", "sup", "kayak", "fishing_gear", "water_toys", "seabob", "e_foil", "windsurf", "bikes", "jet_ski", "bbq", "bean_bags", "dinghy:hard_bottom", "dinghy:hypalon", "dinghy:console", "dinghy:large", "outboard:electric", "outboard:hp_15_plus", "tv:smart", "tv:satellite", "sound_system:bluetooth", "fridge:flybridge" ], "type": "string" }, "description": "Equipment/amenity filters — boats must have ALL listed. Namespaced slugs (\"dinghy:hypalon\") are subtypes that already imply the parent — do not also list the parent. Map user phrasing to slugs: \"ac\"/\"a/c\"/\"air con\"/\"aircon\"/\"klima\" → air_conditioning, \"heater\"/\"cabin heating\"/\"webasto\" → heating, \"warm water\"/\"boiler\"/\"water heater\" → hot_water, \"genset\"/\"power generator\" → generator, \"power inverter\"/\"12v to 220v\" → inverter, \"solar power\"/\"solar\" → solar_panels, \"water maker\"/\"desalinator\" → watermaker, \"wi-fi\"/\"internet\"/\"wireless internet\"/\"4g\" → wifi, \"cockpit shower\"/\"outdoor shower\"/\"transom shower\" → deck_shower, \"refrigerator\"/\"icebox\" → fridge, \"ice chest\"/\"cool box\" → cooler, \"deep freeze\" → freezer, \"icemaker\" → ice_maker, \"stove\"/\"cooker\"/\"hob\"/\"kitchen\" → oven, \"micro wave\" → microwave, \"dish washer\" → dishwasher, \"washer\"/\"dryer\"/\"laundry\" → washing_machine, \"coffee maker\"/\"espresso machine\"/\"nespresso\" → coffee_machine, \"electric wc\"/\"electric heads\" → electric_toilet, \"wc\"/\"restroom\"/\"bathroom\" → toilet, \"television\"/\"screen\" → tv, \"speakers\"/\"stereo\"/\"music\" → sound_system, \"auto pilot\" → autopilot, \"gps\"/\"chart plotter\"/\"plotter\"/\"navigation\" → chartplotter, \"ais transponder\" → ais, \"bowthruster\" → bow_thruster, \"electric anchor winch\" → electric_windlass, \"tender\"/\"zodiac\" → dinghy, \"dinghy davits\" → davits, \"outboard motor\" → outboard, \"shade\"/\"canopy\"/\"sun awning\" → bimini, \"spray hood\" → sprayhood, \"teak cockpit\" → teak_deck, \"passerelle\" → gangway, \"fly bridge\" → flybridge, \"swim platform\"/\"diving platform\" → bathing_platform, \"hot tub\"/\"whirlpool\"/\"swimming pool\" → jacuzzi, \"gyro stabilizer\"/\"seakeeper\" → stabilizers, \"child safety net\"/\"lifeline net\" → railing_net, \"lazyjack\"/\"lazybag\"/\"stack pack\" → lazy_bag, \"code zero\" → gennaker, \"e-winch\" → electric_winch, \"snorkel\"/\"masks and fins\" → snorkeling_gear, \"scuba gear\"/\"dive gear\" → diving_equipment, \"paddleboard\"/\"paddle board\" → sup, \"canoe\" → kayak, \"fishing equipment\"/\"rods\" → fishing_gear, \"towables\"/\"wakeboard\"/\"water skis\"/\"tubes\" → water_toys, \"underwater scooter\" → seabob, \"efoil\"/\"electric foil\"/\"fliteboard\"/\"wing foil\" → e_foil, \"windsurfing\"/\"windsurf board\" → windsurf, \"bicycle\"/\"e-bike\"/\"electric bike\" → bikes, \"waverunner\"/\"pwc\" → jet_ski, \"barbecue\"/\"grill\" → bbq, \"hard bottom dinghy\"/\"rigid dinghy\"/\"rib tender\"/\"hard bottom\" → dinghy:hard_bottom, \"hypalon dinghy\"/\"hypalon tender\" → dinghy:hypalon, \"console dinghy\"/\"console tender\" → dinghy:console, \"large dinghy\"/\"big tender\" → dinghy:large, \"electric outboard\"/\"torqeedo\" → outboard:electric, \"15hp outboard\"/\"powerful outboard\"/\"planing outboard\" → outboard:hp_15_plus, \"smart tv\" → tv:smart, \"satellite tv\"/\"sat tv\" → tv:satellite, \"bluetooth\"/\"bluetooth speakers\"/\"bluetooth sound system\" → sound_system:bluetooth, \"fridge on flybridge\"/\"flybridge fridge\" → fridge:flybridge." }, "location": { "type": "string", "description": "Destination name (fuzzy matched)" }, "year_min": { "type": "integer", "description": "Minimum build year" }, "boat_type": { "enum": [ "sailboat", "catamaran", "motorboat", "gulet", "yacht", "rib", "other" ], "type": "string" }, "date_from": { "type": "string", "description": "Start date YYYY-MM-DD" }, "makemodel": { "type": "string", "description": "Make and/or model, plain text, exactly as the guest said it: \"Bali 4.2\", \"Fountaine Pajot\", \"FP 41\", \"Lagoon\", \"Oceanis 46\". Make alone is fine and so is a MODEL alone. Do not split it, do not add punctuation, do not expand acronyms." }, "price_max": { "type": "number", "description": "Max price per day for the boat in `currency`, all fees in — a boat's WEEKLY list figure: a week's grand total (charter, every required fee now or at pickup, the 45 EUR platform fee, our discounts; deposits never) at max guests ÷ its days; a dated row's `list_price.per_day` is its own stay's and may differ. Use ONLY for an explicit per-day cap; for a whole-trip/weekly budget use total_max instead." }, "price_min": { "type": "number", "description": "Min price per day for the boat in `currency`, all fees in — a boat's WEEKLY list figure: a week's grand total (charter, every required fee now or at pickup, the 45 EUR platform fee, our discounts; deposits never) at max guests ÷ its days. A dated row's `list_price.per_day` is its own stay's and may differ" }, "total_max": { "type": "number", "description": "Max grand total for the stay in `currency` (the charter, every required fee now or at pickup and the flat 45 EUR platform fee; deposits never included): screened on the total `price_summary` states (`list_price.total`: the boat page's Total for the stay it names, for the `guests` given, else max guests); a month-wide range on `per_day` × days at max guests. Use this whenever the guest gives a total or per-week budget. Needs dates to apply." }, "length_min": { "type": "integer", "description": "Minimum boat length in feet" }, "price_currency": { "enum": [ "EUR", "USD" ], "type": "string", "description": "Optional: the currency the guest stated `price_min`, `price_max` and `total_max` in, sent with any bound whose currency the guest named. Those bounds are read in it and screened at that amount, while the answer stays in `currency`. Omitted, they are read in `currency`." } }, "additionalProperties": false }arguments 177 linessearch_trips reads open 8h ago
Find existing curated sailing itineraries by location, name, duration, activities.
{ "type": "object", "properties": { "q": { "type": "string", "description": "Search itinerary by title" }, "limit": { "type": "integer", "default": 5 }, "location": { "type": "string", "description": "Place the itinerary passes through, as the guest says it (\"Split\", \"Nydri, Greece\", \"Dalmatia\", \"Croatia\"). Resolved to a real place; if it resolves to nothing you get `location_unresolved` and no itineraries, never itineraries somewhere else." }, "max_days": { "type": "integer" }, "min_days": { "type": "integer" }, "boat_type": { "type": "string" }, "activities": { "type": "string", "description": "Comma-separated activities" }, "location_id": { "type": "string" } }, "additionalProperties": false }arguments 34 lineslist_discounts auth-required 3d ago
The company's active discounts: codes guests type at checkout, automatic ones, and the pay-in-full discount, each with its value, booking window (`start_date`..`end_date`), stay window (`stay_from`..`stay_to`) and the boats it covers (`all_boats`, else `boat_ids`). An empty list means the company runs no discount.
{ "type": "object", "required": [ "company_id" ], "properties": { "company_id": { "type": "string", "description": "Company id, from list_boats (`company_id`) or get_company." } }, "additionalProperties": false }arguments 13 lineslist_boat_fees auth-required 4d ago
Every extra and fee row of a boat, as its edit page lists them: amount, period, whether it is required, how it is collected, and its `source`. Rows with `source` direct are the operator's to edit.
{ "type": "object", "required": [ "id" ], "properties": { "id": { "type": "string", "description": "Boat id, from list_boats." } }, "additionalProperties": false }arguments 13 lineslist_calendars auth-required 4d ago
The external calendars (iCal feeds, a Google Calendar by its secret iCal address) connected to one boat, with their sync state. MMK and Nausys are linked automatically and are not listed here. An empty list means none is connected to that boat.
{ "type": "object", "required": [ "boat_id" ], "properties": { "boat_id": { "type": "string", "description": "Boat id, from list_boats." } }, "additionalProperties": false }arguments 13 linesget_earnings auth-required 4d ago
The company's earnings: total and monthly payouts, payouts still pending on accepted bookings, and the latest bookings, in the currency the operator is paid in.
{ "type": "object", "required": [ "company_id" ], "properties": { "company_id": { "type": "string", "description": "Company id, from list_boats (`company_id`) or get_company." } }, "additionalProperties": false }arguments 13 linesget_boat auth-required 5d ago
One of the operator's boats in full, as its edit page shows it: every editable field, photos with their ids, videos, equipment (hidden items included) and `locked_fields`, the fields MMK or Nausys rewrite on every sync.
{ "type": "object", "required": [ "id" ], "properties": { "id": { "type": "string", "description": "Boat id, from list_boats." } }, "additionalProperties": false }arguments 13 linesget_company auth-required 4d ago
The company profile as its settings page holds it: public profile, contact, bank, tax and invoicing details, the cancellation policy (`cancel_refund_percent` refunded when the guest cancels at least `cancel_refund_days` before the charter), the X-Lock switch (in `settings`) and the member and boat counts.
{ "type": "object", "required": [ "company_id" ], "properties": { "company_id": { "type": "string", "description": "Company id, from list_boats (`company_id`) or get_company." } }, "additionalProperties": false }arguments 13 linesget_availability auth-required 2h ago
The company's fleet calendar: every boat with its partner links, and every event that takes dates — bookings, options, blocks and synced partner or iCal events — each with its source. Read it before add_block to see what a range already holds.
{ "type": "object", "required": [ "company_id" ], "properties": { "company_id": { "type": "string", "description": "Company id, from list_boats (`company_id`) or get_company." } }, "additionalProperties": false }arguments 13 lineslist_boats auth-required 4d ago
The operator's own fleet: every boat of each company the key holder belongs to, published or not, with its company's name, specs, pricing source, changeover settings and photos. Start here: it gives the boat ids and company ids every other operator tool takes. An empty list means the account belongs to no company.
{ "type": "object", "properties": { "company_id": { "type": "string", "description": "Optional: one company only. Without it, every company the account belongs to." } }, "additionalProperties": false }arguments 10 linesget_opportunities auth-required 11h ago
The company's Opportunities, as the dashboard's Analysis page shows them, read-only. `boats`: every published boat in the dashboard's order (the charted ones first, then by open weeks), with `open_weeks`, `vs_similar_pct` and `compare_url`, its public compare page. `vs_similar_pct` is how far the boat's weekly price sits over (positive) or under (negative) similar boats, as a median over the weeks it can be sold, each week against the median of the other operators' boats among up to 10 boats most like it of the same type in the same country, where at least 3 of them are priced (null: no week to compare). `price_suggestions`, up to five: `no_prices` (boats with no priced week in the next 12 months), `under` (a boat 15% or more under similar boats, with its widest week: `week`, `own`, `similar`), `over` (a run of two or more weeks 15% or more over them: `from`, `to` and the `own` and `similar` weekly ranges). `source_checks`, up to five: `feature` (kit sold as an extra but missing from the boats' equipment, so guests filtering for it do not see them), `photos` (boats with under half the photos similar boats have; `similar` is their median), `standout` (what Mermaid and the compare page tell guests a boat trails similar boats on). Figures are weekly totals in EUR, all in at max guests. Empty lists mean nothing to suggest.
{ "type": "object", "required": [ "company_id" ], "properties": { "company_id": { "type": "string", "description": "Company id, from list_boats (`company_id`) or get_company." } }, "additionalProperties": false }arguments 13 linesget_pricing auth-required 4d ago
The season prices of the fleet: per boat, every week-price row with its id, date span (month/day, repeating every year), `price_per_day` and `source`. Rows with `source` mmk or nausys come from the partner and change there; rows with `source` direct are the operator's to edit with add_price, update_price and delete_price.
{ "type": "object", "properties": { "company_id": { "type": "string", "description": "Optional: one company only." } }, "additionalProperties": false }arguments 10 linesget_location_details reads unknown 3d ago
Get full details of a marina, anchorage or bay by ID: description, amenities, contact, boat count and cheapest day rate, PLUS what only we know from tracked AIS traffic — how busy it is in each month of the year, how boats use it (share of overnight visits, typical day-stop length, what time it fills up), whether it is a hidden gem, the places boats actually sail to from there, most-travelled first with the share of the tracked trips each one takes and an estimated passage time, and the nearest bookable base for a spot with no fleet of its own. Use when the user is viewing or asks about a specific place, asks when it is quiet, or asks where to go next from one. Busyness compares a place to its own peak month, never to another place.
{ "type": "object", "required": [ "id" ], "properties": { "id": { "type": "string", "description": "Location id from search_locations results — copy it verbatim." }, "currency": { "enum": [ "EUR", "USD" ], "type": "string", "description": "Optional: the currency every amount in the answer is written in, and any price you send is read in. When the conversation has its own currency, that one is used whatever is sent; otherwise the one sent, EUR when omitted." } }, "additionalProperties": false }arguments 21 linesupdate_boat unknown never probed
Change details of one of the operator's boats; only the fields sent change, and a field listed in `locked_fields` is ignored because the partner sync owns it. The answer carries `is_published` and `missing`, what the boat still lacks to be listed. Read the current value with its read tool first; this call returns the value as it now stands.
{ "type": "object", "required": [ "id" ], "properties": { "id": { "type": "string", "description": "Boat id, from list_boats." }, "year": { "type": "integer" }, "model": { "type": "string" }, "title": { "type": "string" }, "berths": { "type": "integer" }, "cabins": { "type": "integer" }, "skipper": { "type": "integer", "description": "1 when a skipper is required." }, "toilets": { "type": "integer" }, "capacity": { "type": "integer", "description": "Maximum guests." }, "features": { "type": "array", "items": { "type": "string" }, "description": "The owner-entered equipment slugs, the whole list: it replaces the previous one." }, "boat_type": { "type": "string" }, "length_ft": { "type": "number", "description": "On a partner-synced boat this pins the length against the sync." }, "charter_day": { "type": "integer", "description": "Changeover weekday, 0 Sunday to 6 Saturday." }, "description": { "type": "string" }, "location_id": { "type": "integer", "description": "Home marina id." }, "rental_type": { "type": "string" }, "checkin_time": { "type": "string", "description": "HH:MM" }, "instant_book": { "type": "boolean" }, "length_unpin": { "type": "boolean", "description": "true restores the governed length of a pinned boat." }, "checkout_time": { "type": "string", "description": "HH:MM" }, "manufacturer_id": { "type": "string" }, "check_in_periods": { "type": "array", "items": { "type": "object" }, "description": "Check-in rules by date range, in the shape get_boat returns them." }, "min_charter_days": { "type": "integer" }, "security_deposit": { "type": "number", "description": "EUR." }, "deposit_with_waiver": { "type": "number", "description": "EUR: the deposit when the guest takes the damage waiver." } }, "additionalProperties": false }arguments 103 linesset_equipment_visibility unknown never probed
Hide an equipment item from the boat's public listing and search, or show it again; the same item under another wording follows it. Use the item's name as get_boat lists it in `equipment_items`. Returns the new state.
{ "type": "object", "required": [ "id", "name", "hidden" ], "properties": { "id": { "type": "string", "description": "Boat id, from list_boats." }, "name": { "type": "string", "description": "The item as get_boat lists it." }, "hidden": { "type": "boolean" } }, "additionalProperties": false }arguments 22 linesupdate_boat_images unknown never probed
Hide one photo, show a hidden one again, or set the photo order (the first is the cover); send one of the three. Photo ids come from get_boat. Returns the boat with its photos as they now stand. New photos are uploaded on the boat's edit page.
{ "type": "object", "required": [ "id" ], "properties": { "id": { "type": "string", "description": "Boat id, from list_boats." }, "enable_id": { "type": "string", "description": "Photo id to show again." }, "image_ids": { "type": "array", "items": { "type": "string" }, "description": "Every photo id in the new order." }, "disable_id": { "type": "string", "description": "Photo id to hide." } }, "additionalProperties": false }arguments 28 linesupdate_company unknown never probed
Change company details; only the fields sent change. Any member may change the public profile; contact email, bank, tax and invoicing details are the owner's, and a request naming one from anyone else is refused whole. Read the current value with its read tool first; this call returns the value as it now stands.
{ "type": "object", "required": [ "company_id" ], "properties": { "city": { "type": "string" }, "iban": { "type": "string", "description": "Owner only: the EUR payout account." }, "name": { "type": "string" }, "slug": { "type": "string", "description": "The address of the company page." }, "about": { "type": "string" }, "email": { "type": "string", "description": "Owner only: where bookings and guest messages are sent." }, "phone": { "type": "string" }, "state": { "type": "string" }, "tax_id": { "type": "string", "description": "Owner only." }, "logo_url": { "type": "string" }, "bank_name": { "type": "string", "description": "Owner only." }, "bic_swift": { "type": "string", "description": "Owner only." }, "company_id": { "type": "string", "description": "Company id, from list_boats (`company_id`) or get_company." }, "legal_name": { "type": "string", "description": "Owner only." }, "vat_number": { "type": "string", "description": "Owner only." }, "description": { "type": "string" }, "postal_code": { "type": "string" }, "website_url": { "type": "string" }, "country_code": { "type": "string" }, "address_line1": { "type": "string" }, "address_line2": { "type": "string" }, "invoice_email": { "type": "string", "description": "Owner only." }, "usd_bank_name": { "type": "string", "description": "Owner only." }, "usd_bic_swift": { "type": "string", "description": "Owner only." }, "vat_registered": { "type": "boolean", "description": "Owner only." }, "cover_image_url": { "type": "string" }, "usd_account_number": { "type": "string", "description": "Owner only: the USD payout account." }, "registration_number": { "type": "string", "description": "Owner only." } }, "additionalProperties": false }arguments 108 linesget_cancellation_limits unknown never probed
What the company's payment schedule means for its cancellation policy: per boat source, the share paid in advance and how many days before the charter the rest is due, with the largest refund each notice period covers from money already collected. Read beside get_company's `cancel_refund_percent` and `cancel_refund_days`. `policy_applies` false: the company has no MMK or Nausys boat, so its policy governs nothing and cannot be changed.
{ "type": "object", "required": [ "id" ], "properties": { "id": { "type": "string", "description": "Company id." } }, "additionalProperties": false }arguments 13 linesset_cancellation_policy unknown never probed
Set the company's cancellation policy, company owners only: a guest who cancels at least `cancel_refund_days` before the charter gets `cancel_refund_percent` of the charter price back. The policy applies to the company's MMK and Nausys bookings only; its direct boats follow charter.boats terms, so a company whose boats are all direct is refused. Read get_cancellation_limits first. Returns the company as it now stands.
{ "type": "object", "required": [ "company_id", "cancel_refund_percent", "cancel_refund_days" ], "properties": { "company_id": { "type": "string", "description": "Company id, from list_boats (`company_id`) or get_company." }, "cancel_refund_days": { "type": "integer", "description": "Days before the charter the guest must cancel by, 1 to 90." }, "cancel_refund_percent": { "type": "integer", "description": "Share of the charter price refunded, 0 to 100." } }, "additionalProperties": false }arguments 23 linesset_cross_lock unknown never probed
Switch X-Lock for a company, company admins and owners only. With X-Lock on, every block, option or booking placed on one partner calendar (MMK or Nausys) also places a hold on the boat's other partner calendar. `sync_existing` true also places or releases those holds for the bookings and blocks already there. Returns the company as it now stands. Read the current value with its read tool first; this call returns the value as it now stands.
{ "type": "object", "required": [ "company_id", "enabled" ], "properties": { "enabled": { "type": "boolean" }, "company_id": { "type": "string", "description": "Company id, from list_boats (`company_id`) or get_company." }, "sync_existing": { "type": "boolean" } }, "additionalProperties": false }arguments 20 linescreate_discount unknown never probed
Create a discount; it comes out of the operator's payout, never out of the platform commission. Returns the stored discount.
{ "type": "object", "required": [ "company_id", "discount_type", "discount_value" ], "properties": { "code": { "type": "string", "description": "The code guests type; required unless trigger is pay_in_full." }, "stay_to": { "type": "string", "description": "Latest check-in it covers, YYYY-MM-DD." }, "trigger": { "type": "string", "description": "`code` (default) or `pay_in_full`, a percentage taken when the guest pays everything at once." }, "boat_ids": { "type": "array", "items": { "type": "string" } }, "currency": { "type": "string", "description": "EUR or USD: the currency a fixed amount is in." }, "end_date": { "type": "string", "description": "Last day it can be booked, YYYY-MM-DD." }, "max_uses": { "type": "integer" }, "all_boats": { "type": "boolean", "description": "false limits it to `boat_ids`." }, "stay_from": { "type": "string", "description": "Earliest check-in it covers, YYYY-MM-DD." }, "auto_apply": { "type": "boolean", "description": "true applies it without a code." }, "company_id": { "type": "string", "description": "Company id, from list_boats (`company_id`) or get_company." }, "start_date": { "type": "string", "description": "First day it can be booked, YYYY-MM-DD." }, "description": { "type": "string", "description": "Shown to the guest." }, "discount_type": { "type": "string", "description": "`percentage` or `fixed`." }, "discount_value": { "type": "number", "description": "The percent, or for fixed the amount in `currency` (EUR when omitted)." } }, "additionalProperties": false }arguments 72 linesupdate_discount unknown never probed
Change a discount; only the fields sent change. Read the current value with its read tool first; this call returns the value as it now stands.
{ "type": "object", "required": [ "id" ], "properties": { "id": { "type": "string", "description": "Discount id, from list_discounts." }, "code": { "type": "string" }, "stay_to": { "type": "string", "description": "Latest check-in it covers, YYYY-MM-DD." }, "boat_ids": { "type": "array", "items": { "type": "string" } }, "currency": { "type": "string", "description": "EUR or USD: the currency a fixed amount is in." }, "end_date": { "type": "string", "description": "Last day it can be booked, YYYY-MM-DD." }, "max_uses": { "type": "integer" }, "all_boats": { "type": "boolean", "description": "false limits it to `boat_ids`." }, "is_active": { "type": "boolean" }, "stay_from": { "type": "string", "description": "Earliest check-in it covers, YYYY-MM-DD." }, "auto_apply": { "type": "boolean", "description": "true applies it without a code." }, "start_date": { "type": "string", "description": "First day it can be booked, YYYY-MM-DD." }, "description": { "type": "string", "description": "Shown to the guest." }, "discount_type": { "type": "string", "description": "`percentage` or `fixed`." }, "discount_value": { "type": "number", "description": "The percent, or for fixed the amount in `currency` (EUR when omitted)." } }, "additionalProperties": false }arguments 68 linesupdate_price unknown never probed
Change a direct season price; only the fields sent change. Read the current value with its read tool first; this call returns the value as it now stands.
{ "type": "object", "required": [ "id", "price_id" ], "properties": { "id": { "type": "string", "description": "Boat id, from list_boats." }, "name": { "type": "string", "description": "Season name." }, "end_day": { "type": "integer" }, "price_id": { "type": "string", "description": "Row id, from get_pricing." }, "priority": { "type": "integer", "description": "The higher one wins where two seasons overlap." }, "end_month": { "type": "integer" }, "start_day": { "type": "integer" }, "start_month": { "type": "integer" }, "price_per_day": { "type": "number", "description": "EUR per day for the boat." } }, "additionalProperties": false }arguments 42 linesupdate_fee unknown never probed
Change a direct fee row; only the fields sent change. Read the current value with its read tool first; this call returns the value as it now stands.
{ "type": "object", "required": [ "id", "fee_id" ], "properties": { "id": { "type": "string", "description": "Boat id, from list_boats." }, "amount": { "type": "number", "description": "EUR, or a percent when amount_is_percentage." }, "fee_id": { "type": "string", "description": "Row id, from list_boat_fees." }, "period": { "type": "string", "description": "How it is counted, per booking, day, night, person or week; the answer to a wrong value lists the allowed ones." }, "category": { "type": "string" }, "required": { "type": "boolean", "description": "true when every guest pays it." }, "valid_to": { "type": "string", "description": "YYYY-MM-DD" }, "on_request": { "type": "boolean" }, "valid_from": { "type": "string", "description": "YYYY-MM-DD" }, "description": { "type": "string", "description": "The fee as guests read it." }, "percentage_base": { "type": "string", "description": "What the percentage is taken on; empty is the charter price." }, "calculation_type": { "type": "string", "description": "How it is collected: `separate_payment` paid at the base (default), `advance_payment` charged at booking, `included_in_price`." }, "amount_is_percentage": { "type": "boolean" } }, "additionalProperties": false }arguments 59 linesdelete_fee unknown never probed
Delete a direct fee row.
{ "type": "object", "required": [ "id", "fee_id" ], "properties": { "id": { "type": "string", "description": "Boat id, from list_boats." }, "fee_id": { "type": "string", "description": "Row id, from list_boat_fees." } }, "additionalProperties": false }arguments 18 linesadd_calendar unknown never probed
Connect an external calendar to a boat: its events block those dates on charter.boats. Returns the stored source; sync_calendar pulls it at once.
{ "type": "object", "required": [ "boat_id", "source_name", "source_url" ], "properties": { "boat_id": { "type": "string", "description": "Boat id, from list_boats." }, "source_url": { "type": "string", "description": "The https iCal address." }, "source_name": { "type": "string", "description": "A name for it." }, "source_type": { "type": "string", "description": "Default `ical`." } }, "additionalProperties": false }arguments 27 linesremove_block unknown never probed
Remove a block the operator placed, freeing its dates and releasing the partner holds it placed.
{ "type": "object", "required": [ "id" ], "properties": { "id": { "type": "string", "description": "Block id: `block_id` on the event in get_availability, or `id` from add_block." } }, "additionalProperties": false }arguments 13 linessearch_pois reads unknown 20h ago
Find restaurants, fuel, groceries, attractions near a location, or search by POI name. POIs carry no ratings — rank and describe them by what they are and how close they are.
{ "type": "object", "properties": { "q": { "type": "string", "description": "Search POI by name" }, "limit": { "type": "integer", "default": 10 }, "category": { "enum": [ "restaurant", "grocery", "fuel", "chandlery", "pharmacy", "bank", "laundry", "entertainment", "water", "ice", "fishing", "provisioning", "parking", "medical", "worship", "other" ], "type": "string" }, "location": { "type": "string", "description": "Location name (fuzzy). Required unless q is provided." }, "location_id": { "type": "string" } }, "additionalProperties": false }arguments 42 linesdelete_price unknown never probed
Delete a direct season price; the dates it covered have no price until another row covers them.
{ "type": "object", "required": [ "id", "price_id" ], "properties": { "id": { "type": "string", "description": "Boat id, from list_boats." }, "price_id": { "type": "string", "description": "Row id, from get_pricing." } }, "additionalProperties": false }arguments 18 linesget_boat_details reads unknown 16h ago
Get full details of a specific boat: security deposit, cancellation policy, amenities, fees, seasonal prices, check-in/out times, location details — and the dates it is actually free (priced date ranges plus bookable slots for the year ahead). Use when the user asks about a specific boat, and whenever a boat came back in `named_matches` and they want to know when it IS available. With dates, `stay_price` states Due now, Paid at pickup and Total first, then the charter, its discounts and the deposits.
{ "type": "object", "required": [ "id" ], "properties": { "id": { "type": "string", "description": "Boat id from search_boats results (including named_matches) — copy it verbatim." }, "guests": { "type": "number", "description": "Optional: the party the stay is priced for; without it, the boat's capacity." }, "date_to": { "type": "string", "description": "Optional check-out date YYYY-MM-DD — see date_from." }, "currency": { "enum": [ "EUR", "USD" ], "type": "string", "description": "Optional: the currency every amount in the answer is written in, and any price you send is read in. When the conversation has its own currency, that one is used whatever is sent; otherwise the one sent, EUR when omitted." }, "date_from": { "type": "string", "description": "Optional check-in date YYYY-MM-DD of the stay you are quoting. With date_to, `fees` are the ones that apply to that stay, and `url` opens the boat on those dates when the stay is one we sell — `stay_price` prices it and, on a boat with no check-in periods, it starts and ends on the boat changeover day. Pass both whenever you quote a price for specific dates." } }, "additionalProperties": false }arguments 33 linesget_boat_standouts reads unknown 3d ago
What stands out about ONE boat for one week, measured against similar boats: its pros and its cons, each with how it compares ("47.9 ft (better than 99%)", "€2000 security deposit (typical €1700)", "Rare kit: [0.8%] Cool Box" — n% of those boats have it). Use when the guest asks what is special about a boat, what the catch is, why it is cheap or dear, or how it compares with others. It measures build year, length, cabins, bathrooms, guests, the security deposit and kit — and, with date_from, check-in and check-out times, the changeover day and the open weeks left; any of those it does not list is ordinary among the boats in `compared_with`, so do not sell it as an edge or a catch. Other fees are not compared. Kit is measured two ways and both hold: get_boat_details gives each item its [n%] across the whole fleet, this tool what is rare among boats like it. `rare_kit` lists that rare kit as data, most useful first, each with `useful_score` (1-5: how much it changes a charter week for the people aboard). `note` says whether an absence means "ordinary" or that nothing could be compared.
{ "type": "object", "required": [ "id" ], "properties": { "id": { "type": "string", "description": "Boat id from search_boats or get_boat_details — copy it verbatim." }, "currency": { "enum": [ "EUR", "USD" ], "type": "string", "description": "Optional: the currency every amount in the answer is written in, and any price you send is read in. When the conversation has its own currency, that one is used whatever is sent; otherwise the one sent, EUR when omitted." }, "fallback": { "type": "boolean", "description": "Optional, default true: with nothing past the cut-off on a side, name the one thing that beats (or trails) most of them. false returns only what clears the cut-off." }, "date_from": { "type": "string", "description": "Optional check-in date YYYY-MM-DD of the week the guest is looking at: the boats are then compared on that week's prices, and its schedule and open weeks are judged. Pass it whenever the guest has dates." }, "compare_by": { "enum": [ "price", "guests", "length" ], "type": "string", "description": "Which boats count as similar. price (default): the same type priced within ±5% — what else the same money buys. guests: the same type taking the same number of guests — use when the question is value for a party size (\"is it cheap for 10 people?\"). length: the same type within ±2.5% of its length — use when comparing boats of one size. On guests and length the all-in day rate (the figure the search card prints) is compared too." }, "cutoff_pct": { "type": "number", "description": "Optional, default 10, at most 50: a pro beats all but this share of the similar boats, a con trails all but it, rare kit is on fewer than it. Raise it for more, weaker lines." } }, "additionalProperties": false }arguments 42 linesget_poi_details reads unknown 3d ago
Get full details of a point of interest by ID: description, opening hours, address, contact, nearby marinas, special offers. Use when user is viewing or asks about a specific POI. POIs carry NO rating or review count — do not claim one or ask the guest to check it.
{ "type": "object", "required": [ "id" ], "properties": { "id": { "type": "string", "description": "POI id from search_pois results — copy it verbatim." } }, "additionalProperties": false }arguments 13 linesdelete_boat_image unknown never probed
Delete one photo of the boat for good. To take a photo off the listing and keep it, use update_boat_images with disable_id.
{ "type": "object", "required": [ "id", "image_id" ], "properties": { "id": { "type": "string", "description": "Boat id, from list_boats." }, "image_id": { "type": "string" } }, "additionalProperties": false }arguments 17 linesadd_fee unknown never probed
Add an extra or fee to a boat the operator prices directly. Returns the stored row and `warnings`, other rows it overlaps.
{ "type": "object", "required": [ "id", "description", "amount", "period" ], "properties": { "id": { "type": "string", "description": "Boat id, from list_boats." }, "amount": { "type": "number", "description": "EUR, or a percent when amount_is_percentage." }, "period": { "type": "string", "description": "How it is counted, per booking, day, night, person or week; the answer to a wrong value lists the allowed ones." }, "category": { "type": "string" }, "required": { "type": "boolean", "description": "true when every guest pays it." }, "valid_to": { "type": "string", "description": "YYYY-MM-DD" }, "on_request": { "type": "boolean" }, "valid_from": { "type": "string", "description": "YYYY-MM-DD" }, "description": { "type": "string", "description": "The fee as guests read it." }, "percentage_base": { "type": "string", "description": "What the percentage is taken on; empty is the charter price." }, "calculation_type": { "type": "string", "description": "How it is collected: `separate_payment` paid at the base (default), `advance_payment` charged at booking, `included_in_price`." }, "amount_is_percentage": { "type": "boolean" } }, "additionalProperties": false }arguments 57 linesadd_block unknown never probed
Block dates on one of the operator's boats so they cannot be booked. On a partner-synced boat the hold is placed on that partner too, and with X-Lock on also on the other partner. Returns the stored block and how each hold went.
{ "type": "object", "required": [ "boat_id", "start_at", "end_at" ], "properties": { "notes": { "type": "string" }, "end_at": { "type": "string", "description": "Last day, YYYY-MM-DD." }, "reason": { "type": "string" }, "boat_id": { "type": "string", "description": "Boat id, from list_boats." }, "start_at": { "type": "string", "description": "First day, YYYY-MM-DD." } }, "additionalProperties": false }arguments 29 lineslist_bookings unknown never probed
Every booking on the operator's boats, newest charter first. `status` and `payment_status` give the stage: `waitlist` is On waitlist (queued behind another hold), unpaid `pending` or `accepted` is an Option that lapses at `hold_expires_at`, and a booking with money in is booked. Each row states the price the guest pays, the discounts and the operator's own payout, in the currency of `payout_money`. Read-only: bookings are handled on the dashboard. An empty list means no bookings yet.
{ "type": "object", "properties": { "boat_id": { "type": "string", "description": "Optional: one boat only." } }, "additionalProperties": false }arguments 10 linesget_trip_details reads unknown 3d ago
Get full details of a sailing itinerary/trip by ID: day-by-day stops, distances, activities, highlights, notes. Use when user is viewing or asks about a specific trip.
{ "type": "object", "required": [ "id" ], "properties": { "id": { "type": "string", "description": "Trip id from search_trips results — copy it verbatim." } }, "additionalProperties": false }arguments 13 linesremove_calendar unknown never probed
Disconnect an external calendar: its blocked dates are freed, and the holds X-Lock placed for them on the partner calendars are released.
{ "type": "object", "required": [ "id" ], "properties": { "id": { "type": "string", "description": "Source id, from list_calendars." } }, "additionalProperties": false }arguments 13 linesadd_price unknown never probed
Add a season price to a boat the operator prices directly (pricing source direct). Returns the stored row.
{ "type": "object", "required": [ "id", "name", "start_month", "start_day", "end_month", "end_day", "price_per_day" ], "properties": { "id": { "type": "string", "description": "Boat id, from list_boats." }, "name": { "type": "string", "description": "Season name." }, "end_day": { "type": "integer" }, "priority": { "type": "integer", "description": "The higher one wins where two seasons overlap." }, "end_month": { "type": "integer" }, "start_day": { "type": "integer" }, "start_month": { "type": "integer" }, "price_per_day": { "type": "number", "description": "EUR per day for the boat." } }, "additionalProperties": false }arguments 43 linescompare_boat unknown 5h ago
One boat against up to 10 closest published boats of the same type in the same country: specs and the all-in weekly price (in `currency`, at max guests, the figure search compares) for each of the next 52 weeks. Pass `id` (a boat), or `boat_type` and `country` (optionally `region`, `city`) to describe one. The specs take search_boats' names: without `id` they describe the boat to compare; with `id` they filter its peers as search_boats would. Only boats open at least one week are compared. `similar_pct` is how alike a peer is: the share of the specs it shares. With `id`, `overlap_pct` is the share of the boat's open weeks the peer is open too. With `id`, `anchor.price` is the boat's weekly figures, a peer's `price` is its figure minus the boat's (its own in the weeks listed in `absolute_weeks`), and a peer carries its `region`, `city`, `same` (the fields it shares with the boat) and only the specs that differ, as signed deltas; without `id` every peer carries its own specs and figures. null = not sellable that week; `weeks` gives each check-in date. Use when someone asks how a boat compares with others nearby on price, size or age — an operator benchmarking their own boat included. For what is better or worse about one boat, use get_boat_standouts.
{ "type": "object", "required": [], "properties": { "id": { "type": "string", "description": "Boat id from search_boats or get_boat_details — copy it verbatim. Omit to describe a boat by its specs." }, "city": { "type": "string", "description": "Without id, optional: city or town, e.g. Split." }, "lock": { "type": "array", "items": { "enum": [ "region", "city", "make", "model", "year", "length", "guests", "berths", "cabins", "toilets" ], "type": "string" }, "description": "With id: keep only peers the same as the boat in these fields — the fields a peer's `same` lists." }, "berths": { "type": "number", "description": "Berths: without id the number to match, with id the minimum." }, "cabins": { "type": "number", "description": "Cabins: without id the number to match; with id the minimum guest cabins, crew cabins not counted (as search_boats)." }, "guests": { "type": "number", "description": "Guests: without id the number to match, with id the minimum." }, "region": { "type": "string", "description": "Without id, optional: sailing region, e.g. Dalmatia." }, "country": { "type": "string", "description": "Without id: ISO country code, e.g. HR (required with boat_type)." }, "toilets": { "type": "number", "description": "Toilets: without id the number to match, with id the minimum." }, "currency": { "enum": [ "EUR", "USD" ], "type": "string", "description": "Optional: the currency every amount in the answer is written in, and any price you send is read in. When the conversation has its own currency, that one is used whatever is sent; otherwise the one sent, EUR when omitted." }, "year_max": { "type": "integer", "description": "Maximum build year." }, "year_min": { "type": "integer", "description": "Minimum build year." }, "boat_type": { "enum": [ "sailboat", "catamaran", "motorboat", "gulet", "yacht", "rib", "other" ], "type": "string", "description": "Without id: the boat type (required with country)." }, "makemodel": { "type": "string", "description": "Make and/or model as the guest said it, e.g. \"Lagoon 42\", \"Bali\"." }, "length_max": { "type": "integer", "description": "Maximum length in feet." }, "length_min": { "type": "integer", "description": "Minimum length in feet." } }, "additionalProperties": false }arguments 99 linessearch_content reads unknown 3d ago
Search the charter.boats help articles and Q&A. Use it for any question from a guest, operator, agent or affiliate about how charter.boats works or how to do something on it. For developer questions about our API, use type=api to search the API docs at docs.charter.boats.
{ "type": "object", "required": [ "q" ], "properties": { "q": { "type": "string", "description": "Short keyword query (2-4 words)" }, "type": { "enum": [ "article", "question", "both", "api" ], "type": "string", "default": "both" }, "limit": { "type": "integer", "default": 5 } }, "additionalProperties": false }arguments 27 linessync_calendar unknown never probed
Pull one external calendar now. Returns how many events it brought in, or the error the feed gave.
{ "type": "object", "required": [ "id" ], "properties": { "id": { "type": "string", "description": "Source id, from list_calendars." } }, "additionalProperties": false }arguments 13 linessearch_locations reads unknown 36h ago
Find marinas, harbours and anchorages three ways: by NAME (q), by POPULARITY within an area (region/country/city — ranked on observed AIS vessel traffic for a month), or by REACH from a place you already have (`from` + `within_nm`) — where boats are actually recorded sailing to from there, with measured passage times. Use `from` for "where can I sail from X", "what is a day sail from X", "somewhere quieter nearby". Provide q, or an area, or from.
{ "type": "object", "properties": { "q": { "type": "string", "description": "Name search (min 2 chars). Optional when an area filter is given." }, "city": { "type": "string" }, "from": { "type": "string", "description": "Origin location id (or slug) to sail FROM — take it from an earlier search_locations or get_location_details result. Returns places boats were tracked sailing to from there." }, "sort": { "enum": [ "popularity", "boats", "rating" ], "type": "string", "description": "Default popularity = real vessel traffic for the month; boats = charter fleet size; rating = Google rating" }, "type": { "enum": [ "marina", "harbour", "anchorage", "bay", "mooring", "spot" ], "type": "string", "description": "Kind of place — e.g. anchorage for \"quiet bays\"; spot = an unclassified stop (beach, spit, headland)" }, "limit": { "type": "integer", "default": 5, "maximum": 20 }, "month": { "type": "integer", "maximum": 12, "minimum": 1, "description": "Month to rank popularity for (default: current month)" }, "region": { "type": "string", "description": "Sailing region as the guest says it: Dalmatia, Istria, Kvarner, the Ionian, the Saronic, the Cyclades, the Dodecanese, the Sporades" }, "country": { "type": "string", "description": "Country name or 2-letter code" }, "currency": { "enum": [ "EUR", "USD" ], "type": "string", "description": "Optional: the currency every amount in the answer is written in, and any price you send is read in. When the conversation has its own currency, that one is used whatever is sent; otherwise the one sent, EUR when omitted." }, "within_nm": { "enum": [ 10, 20, 35, 55, 100 ], "type": "integer", "description": "How far, in nautical miles, for a \"from\" search. Default 35. Pick the ring by time — a charter boat makes about 6 knots, plus 30 minutes to leave and arrive, so: 10nm ≈ 2.2h, 20nm ≈ 3.8h, 35nm ≈ 6.3h, 55nm ≈ 9.7h, 100nm ≈ 17.2h. A full charter day of sailing is roughly 6-8h, which makes 35nm a comfortable day sail and 55nm a long one." } }, "additionalProperties": false }arguments 76 linesget_booking unknown never probed
One booking in full: stage (as in list_bookings), dates, guest, price lines, the operator's payout and `payout_schedule`, the payments coming to the operator with their due dates (empty until the booking is paid). Read-only.
{ "type": "object", "required": [ "id" ], "properties": { "id": { "type": "string", "description": "Booking id, from list_bookings." } }, "additionalProperties": false }arguments 13 linesdelete_discount unknown never probed
End a discount: guests can no longer use it; bookings already made keep it.
{ "type": "object", "required": [ "id" ], "properties": { "id": { "type": "string", "description": "Discount id, from list_discounts." } }, "additionalProperties": false }arguments 13 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 id1202684d3b4d4709.
Every step, filled in for this listing: https://brick.blue/api/v1/agents/1202684d3b4d4709/claim.
Over MCP: the claim_endpoint tool.
[](https://brick.blue/agent/1202684d3b4d4709?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.