check_availability
ChatGPTCheck whether a Spekboom property is available for specific dates and guest count, and return the computed total price for the stay. Dates use YYYY-MM-DD; check_out must be strictly after check_in. Read availability_source before answering: "live_calendar" means available is a real yes or no from the listing calendar; "on_request" (SANParks and other park or partner-lodge listings) means availability is NOT known live, so available is null, total_price / indicative_total_price is an indicative figure, and confirmation explains that Spekboom confirms availability with the partner (named in confirmed_by) before the guest pays. Never tell a guest an on-request stay is available. next_step_url is the request page or booking widget with the dates pre-filled.
compare_stays
ChatGPTCompares 2 to 4 Spekboom stays side-by-side. Takes a slugs array of 2 to 4 listing slugs (as returned by search_stays and find_experiences) plus optional check_in, check_out, and guests. Returns a normalized comparison per stay (hero image/thumbnail, price per night, sleeps/max guests, location, top amenities, listing url, book_url, latitude/longitude) plus a multi-pin static map. Each row carries hero_image, image, image_url, and thumbnail set to the same Cloudinary thumbnail URL, and the connector renders these as inline images. Spekboom is request-to-book: a booking is saved as pending and is not confirmed until the host accepts it. This tool is read-only and creates no booking; prices are in the listing currency, typically ZAR.
create_booking_link
ChatGPTBuilds a sign-in-then-book deep link on spekboom.org for an anonymous guest. Returns a URL into the property's booking widget pre-filled with dates, guests, and a #book anchor, where the guest signs in or creates a free account and submits a booking request. No payment is taken by this tool. Spekboom is request-to-book, not instant: the booking is a request that is not confirmed until the host accepts it. Takes property_id (uuid) or slug to identify the listing, plus check_in and check_out (YYYY-MM-DD) and guests (1 to 40). Optionally takes a prefill trio of first_name, last_name, and email; all three are required together, and the trio is dropped if any one is missing. When present, the trio is base64url-encoded into the URL fragment (not the query string), so it never reaches server access logs, and the booking widget pre-fills those inputs. The booking widget authenticates via a 6-digit email OTP, not a magic link. Opening the link does not auto-send the OTP; the guest taps the send button in the widget themselves. The response carries hero_image, image, and thumbnail (the same Cloudinary thumbnail URL on every alias) for the property, which the connector renders as an inline image alongside a sign-in-and-request-to-book link.
find_bird_species
ChatGPTLooks up a Southern African bird species in the Spekboom Go Birding catalogue (~370 species) and returns its facts plus places to stay where hosts have recorded it. Facts come from iNaturalist open data and Wikipedia: scientific name, IUCN Red List status, a summary blurb, the South African provinces where it is most recorded, and an honest best-months verdict (single-month upload spikes are discarded; below 50 records no season is claimed). Takes species (common English name, partial name, or slug, e.g. "Blue Crane" or "blue-crane") and an optional limit for the stays list, plus an optional country slug (default south-africa, or all). stay_count counts published stays in that country whose hosts have recorded the species on site or nearby, the same number the spekboom.org hub and species page show; stay_count_all_countries is the platform-wide figure. A record is never a guaranteed sighting. Ambiguous or unknown names return a suggestions list instead of results. Each response includes the indexable species landing page URL on spekboom.org.
find_experiences
ChatGPTDiscovers Spekboom stays by the kind of trip rather than a specific place, grouped into sub-themes that show the range of options. Themes are birding, wine farms, stargazing, off-grid retreats, and wildlife/safari. Takes a theme (required) plus an optional location (town, city, or informal region), check_in, check_out, guests, and limit. When location is omitted, the response returns the national top stays for the theme (scope "national", South Africa) grouped as usual, plus optional clarifying_questions to narrow the trip. browse_url is the matching landing page on spekboom.org (for example /search/south-africa/bird-friendly for birding). Spekboom is request-to-book: a booking is saved as pending and is not confirmed until the host accepts it, and no payment is taken here. Each stay includes lat/lng, thumbnails, a listing url, and a book_url. A pinned static map is included with the results.
find_species
ChatGPTLooks up a non-bird Southern African wildlife or flora species in the Spekboom nature catalogue (~185 mammals, trees, plants, marine life, and reptiles) and returns its facts plus places to stay where hosts have recorded it. Takes species (common English name, partial name, or slug, e.g. "Lion" or "african-elephant") and an optional limit for the stays list, plus an optional country slug (default south-africa, or all). stay_count counts published stays in that country whose hosts have recorded the species on site or nearby, the same number the spekboom.org hub and species page show; stay_count_all_countries is the platform-wide figure. A record is never a guaranteed sighting. Restricted species (rhino, pangolin, etc.) return facts only and never list stays; suggest searching with wildlife_highlights (e.g. "big-five") instead. For birds use find_bird_species. Ambiguous or unknown names return a suggestions list. Each response includes the indexable wildlife landing page URL on spekboom.org.
get_availability_alternatives
ChatGPTFinds nearby Spekboom stays that are available for the same dates and guests when a specific stay is not available. Takes the original stay slug, check_in, check_out, and guests, with optional radius_km and limit. Returns the available alternatives with distance, thumbnails, latitude/longitude, a map, and request-to-book links. Spekboom is request-to-book: a stay is not booked or reserved until the host accepts a request. This tool does not create a booking.
get_causes_supported
ChatGPTReturns the African conservation, wildlife, community, and education causes funded by Spekboom bookings (mostly South African, plus causes in Namibia, Zimbabwe, Zambia and Kenya). Each cause includes its name, slug, category, description, location, logo and cover image, latitude/longitude, and the properties that fund it. Takes an optional query (case-insensitive match on the cause name or slug, e.g. "sanccob" or "leopard"), optional category and location-substring filters, and a limit (1 to 50, default 50, which returns the whole catalogue). The response carries count (returned) and total (matched); when total is larger than count, a message says so. Pass a cause slug to search_stays cause to list the stays that fund it. The location filter matches both the cause's own HQ location and the towns, suburbs, or provinces of properties funded by the cause, so a national org like NSRI surfaces under "Plettenberg Bay" because it funds properties there even though its HQ location is "South Africa". Cause cover and logo images are attached as MCP image and resource_link content blocks.
get_property_details
ChatGPTReturns full details for a single Spekboom property: photos, description, amenities, full pricing structure, host-recorded bird and nature species, biomes, wildlife highlights, and the named cause each booking funds. Accepts either the property UUID or the URL slug. The response includes bird_species (canonical English names), nature_species (wildlife/flora slugs), biome_slugs (SANBI habitats), and wildlife_highlights (aggregates like big-five). The response includes units[] (per-unit base_occupancy, unit_price, single_occupancy_price, additional_person_price for extra adults, child_rate, has_seasonal_rate_periods flag) and a top-level pricing_structure (conservation_fee_per_pax_per_night, exclusive_use_per_night, group_rate_per_person_per_night, child_policy_type, child_policy_notes). These are the host-set rates and child-rate policy returned by the tool, so per-occupancy pricing can be derived from the tool output. When price_on_request is true the listing does not advertise a rate: price_per_night, each unit's unit_price, single_occupancy_price and additional_person_price, and the exclusive-use and group figures are null. Say the price is on request and point the guest to the property page; never estimate one. Photos are returned as MCP image content blocks that the connector UI renders inline.
plan_trip
ChatGPTReturns a set of trip-planning clarifying questions (location, dates, party size, and similar) for vague or open-ended travel requests, along with a list of capabilities Spekboom supports (search, compare, itinerary, book). Each question may include suggested quick-answer options. Takes no parameters. Output is intended to gather the details needed before searching stays, comparing options, or building an itinerary.
search_along_route
ChatGPTPlans a multi-stop Southern Africa trip. Given a start and end location (and optional waypoints), returns Spekboom accommodations within a configurable radius of each stop, grouped by stop. Each accommodation includes image/thumbnail thumbnail aliases, causes_supported with cause logos, a listing url, and a book_url deep-link into the booking widget with dates and guests pre-filled. Location inputs accept concrete place names such as towns, cities, or regions, not full sentences. Spekboom is request-to-book, not instant: a booking is saved as a request the host must accept and is not confirmed until then.
search_stays
ChatGPTSearches Spekboom for regenerative accommodations across Southern Africa. The location parameter accepts a concrete place (city, town, or informal region), not a full sentence. Informal regions are supported and resolved to radius searches (Karoo, Great Karoo, Little Karoo, Garden Route, Cape Winelands, Overberg, West Coast, Cederberg, Cape Peninsula, Wild Coast, Drakensberg, Zululand, Hogsback, Panorama Route, Waterberg, Kruger, Greater Kruger, Sabi Sand, Timbavati, Kalahari, Namaqualand, Magaliesberg). Filters by dates, guests, experience type (category slug), and conservation cause (cause slug or category, e.g. "sanccob" or "conservation"; the cause restricts the whole catalogue before ranking, so a cause-only call returns the stays linked to that cause in every country). Habitat filter: biomes matches the nine SANBI biomes (fynbos, savanna, grassland, succulent-karoo, albany-thicket, nama-karoo, forest, desert, indian-ocean-coastal-belt) against every published listing, so prefer it for "where can I stay in the fynbos" over free text. Species filters: birds (canonical English names or slugs, e.g. "Blue Crane") matches host-recorded bird_species; species (nature slugs or names, e.g. "lion" / "african-elephant") matches nature_species; wildlife_highlights (e.g. "big-five") matches aggregate tags. Prefer these over free-text when the guest named a specific animal or bird. Thematic queries also map to filters: birding / bird-watching / avi-tourism use bird_friendly: true; wine farms use agri_tourism_attributes: ["wine-production"]; bee/honey use ["apiculture"]; equestrian uses ["horse-riding"]; fly fishing uses ["fly-fishing"]. Other free-text intent (stargazing, off-grid retreats, regenerative farms, etc.) passed as query runs a semantic search that ranks listings whose descriptions match the meaning. Each result includes latitude/longitude, image/thumbnail/hero_image thumbnail URLs (same value, multiple aliases for different UI consumers), causes_supported with cause logos, and a book_url deep link into the booking widget with dates/guests pre-filled. Thumbnails are also attached as inline image content blocks that the connector renders. Returns {results, count, total_matches?}: count is the number of results in this response and total_matches, when present, is how many stays match in total. When the exact query has no matches, the tool returns popular alternative stays in results alongside a message explaining that these are fallbacks, not exact matches. Spekboom is request-to-book, not instant: a booking is a request the host must accept, and is not confirmed until then. This tool only searches and does not create bookings or take payment.
suggest_itinerary
ChatGPTBuilds 2 to 3 distinct multi-night trip itineraries (value, premium, slow) from real Spekboom stays near a region or along a start-to-end route. Takes region (or start plus optional end) and nights; optional guests, vibe, cause, check_in. When no location is provided, the result contains clarifying_questions instead of itineraries. Each itinerary returns an ordered list of stops with nights, an estimated total, a route map, per-stop hero thumbnails (hero_image, image, thumbnail aliases), and per-stop request-to-book links, plus a plan_url that opens the Spekboom trip planner with the whole itinerary prefilled (offer it when the user wants to adjust or build on an itinerary). Image and map URLs are returned as native image blocks that the connector renders inline. Spekboom is request-to-book: a stay is not booked or reserved until a host accepts a separate booking request. This tool is read-only and does not create bookings.
check_availability
ClaudeCheck whether a Spekboom property is available for specific dates and guest count, and return the computed total price for the stay. Dates use YYYY-MM-DD; check_out must be strictly after check_in. availability_source says where the answer comes from. "live_calendar": available is true or false from the listing's own calendar, and total_price is the stay total. "on_request" (SANParks and other park or partner-lodge listings): availability is not known live, so available is null; total_price and indicative_total_price are indicative until the partner named in confirmed_by confirms the dates; confirmation is the guest-facing note on how that works. next_step_url is the request page (on_request) or the booking widget (live_calendar) with the dates pre-filled.
compare_stays
ClaudeCompares 2 to 4 Spekboom stays side-by-side. Takes a slugs array of 2 to 4 listing slugs (as returned by search_stays and find_experiences) plus optional check_in, check_out, and guests. Returns a normalized comparison per stay (hero image/thumbnail, price per night, sleeps/max guests, location, top amenities, listing url, book_url, latitude/longitude) plus a multi-pin static map. Each row carries hero_image, image, image_url, and thumbnail set to the same Cloudinary thumbnail URL, and the connector renders these as inline images. Spekboom is request-to-book: a booking is saved as pending and is not confirmed until the host accepts it. This tool is read-only and creates no booking; prices are in the listing currency, typically ZAR.
create_booking_link
ClaudeBuilds a sign-in-then-book deep link on spekboom.org for an anonymous guest. Returns a URL into the property's booking widget pre-filled with dates, guests, and a #book anchor, where the guest signs in or creates a free account and submits a booking request. No payment is taken by this tool. Spekboom is request-to-book, not instant: the booking is a request that is not confirmed until the host accepts it. Takes property_id (uuid) or slug to identify the listing, plus check_in and check_out (YYYY-MM-DD) and guests (1 to 40). Optionally takes a prefill trio of first_name, last_name, and email; all three are required together, and the trio is dropped if any one is missing. When present, the trio is base64url-encoded into the URL fragment (not the query string), so it never reaches server access logs, and the booking widget pre-fills those inputs. The booking widget authenticates via a 6-digit email OTP, not a magic link. Opening the link does not auto-send the OTP; the guest taps the send button in the widget themselves. The response carries hero_image, image, and thumbnail (the same Cloudinary thumbnail URL on every alias) for the property, which the connector renders as an inline image alongside a sign-in-and-request-to-book link.
create_booking_request
ClaudeCreates a booking REQUEST for the authenticated guest. Spekboom is request-to-book, not instant: the booking is saved as pending and is not confirmed until the host accepts it. No payment is taken by this tool. Requires an ID-verified guest account, an active accommodation and unit, and exactly one cause selection. Takes guests (total headcount) and optional children, children_ages, and infants for child-rate pricing on family stays. On age-banded lodges, omitting children_ages prices every child at the youngest band. Pricing is quoteStay, the same quote the Spekboom booking card shows (rate periods, per-pax seasonal pricing, single-supplement, extra-adult, child rates, conservation levy, optional breakfast, group or exclusive-use rails, VAT); audience-targeted offers (SADC, etc.) apply automatically when the connected user is eligible. Non-ZAR rooms are priced in their own currency and settled in ZAR (total_zar). On a price-on-request listing the request is staged with no total: total_zar and pricing are null and the price is unknown until the host sends one when they accept. Returns a pay_url to the existing web checkout, a next_step field describing the request-to-book flow, a pricing object with the line-item breakdown (nights, extras, discount, conservation levy, breakfast, VAT), and hero_image/image/thumbnail URLs of the property (the same URL on every alias) which the connector renders as inline images.
find_bird_species
ClaudeLooks up a Southern African bird species in the Spekboom Go Birding catalogue (~370 species) and returns its facts plus places to stay where hosts have recorded it. Facts come from iNaturalist open data and Wikipedia: scientific name, IUCN Red List status, a summary blurb, the South African provinces where it is most recorded, and an honest best-months verdict (single-month upload spikes are discarded; below 50 records no season is claimed). Takes species (common English name, partial name, or slug, e.g. "Blue Crane" or "blue-crane") and an optional limit for the stays list, plus an optional country slug (default south-africa, or all). stay_count counts published stays in that country whose hosts have recorded the species on site or nearby, the same number the spekboom.org hub and species page show; stay_count_all_countries is the platform-wide figure. A record is never a guaranteed sighting. Ambiguous or unknown names return a suggestions list instead of results. Each response includes the indexable species landing page URL on spekboom.org.
find_experiences
ClaudeDiscovers Spekboom stays by the kind of trip rather than a specific place, grouped into sub-themes that show the range of options. Themes are birding, wine farms, stargazing, off-grid retreats, and wildlife/safari. Takes a theme (required) plus an optional location (town, city, or informal region), check_in, check_out, guests, and limit. When location is omitted, the response returns the national top stays for the theme (scope "national", South Africa) grouped as usual, plus optional clarifying_questions to narrow the trip. browse_url is the matching landing page on spekboom.org (for example /search/south-africa/bird-friendly for birding). Spekboom is request-to-book: a booking is saved as pending and is not confirmed until the host accepts it, and no payment is taken here. Each stay includes lat/lng, thumbnails, a listing url, and a book_url. A pinned static map is included with the results.
find_species
ClaudeLooks up a non-bird Southern African wildlife or flora species in the Spekboom nature catalogue (~185 mammals, trees, plants, marine life, and reptiles) and returns its facts plus places to stay where hosts have recorded it. Takes species (common English name, partial name, or slug, e.g. "Lion" or "african-elephant") and an optional limit for the stays list, plus an optional country slug (default south-africa, or all). stay_count counts published stays in that country whose hosts have recorded the species on site or nearby, the same number the spekboom.org hub and species page show; stay_count_all_countries is the platform-wide figure. A record is never a guaranteed sighting. Restricted species (rhino, pangolin, etc.) return facts only, with no stays, to protect their locations; search_stays with wildlife_highlights (e.g. "big-five") covers the stays where they may occur. For birds use find_bird_species. Ambiguous or unknown names return a suggestions list. Each response includes the indexable wildlife landing page URL on spekboom.org.
get_availability_alternatives
ClaudeFinds nearby Spekboom stays that are available for the same dates and guests when a specific stay is not available. Takes the original stay slug, check_in, check_out, and guests, with optional radius_km and limit. Returns the available alternatives with distance, thumbnails, latitude/longitude, a map, and request-to-book links. Spekboom is request-to-book: a stay is not booked or reserved until the host accepts a request. This tool does not create a booking.
get_causes_supported
ClaudeReturns the African conservation, wildlife, community, and education causes funded by Spekboom bookings (mostly South African, plus causes in Namibia, Zimbabwe, Zambia and Kenya). Each cause includes its name, slug, category, description, location, logo and cover image, latitude/longitude, and the properties that fund it. Takes an optional query (case-insensitive match on the cause name or slug, e.g. "sanccob" or "leopard"), optional category and location-substring filters, and a limit (1 to 50, default 50, which returns the whole catalogue). The response carries count (returned) and total (matched); when total is larger than count, a message says so. Pass a cause slug to search_stays cause to list the stays that fund it. The location filter matches both the cause's own HQ location and the towns, suburbs, or provinces of properties funded by the cause, so a national org like NSRI surfaces under "Plettenberg Bay" because it funds properties there even though its HQ location is "South Africa". Cause cover and logo images are attached as MCP image and resource_link content blocks.
get_property_details
ClaudeReturns full details for a single Spekboom property: photos, description, amenities, full pricing structure, host-recorded bird and nature species, biomes, wildlife highlights, and the named cause each booking funds. Accepts either the property UUID or the URL slug. The response includes bird_species (canonical English names), nature_species (wildlife/flora slugs), biome_slugs (SANBI habitats), and wildlife_highlights (aggregates like big-five). The response includes units[] (per-unit base_occupancy, unit_price, single_occupancy_price, additional_person_price for extra adults, child_rate, has_seasonal_rate_periods flag) and a top-level pricing_structure (conservation_fee_per_pax_per_night, exclusive_use_per_night, group_rate_per_person_per_night, child_policy_type, child_policy_notes). These are the host-set rates and child-rate policy returned by the tool, so per-occupancy pricing can be derived from the tool output. When price_on_request is true the listing does not advertise a rate: price_per_night, each unit's unit_price, single_occupancy_price and additional_person_price, and the exclusive-use and group figures are null: the rate is not published and is quoted by the host on request through the property page. Photos are returned as MCP image content blocks that the connector UI renders inline.
list_my_bookings
ClaudeLists the authenticated guest's own bookings, newest first. Takes an optional status filter and an optional limit (1 to 50, default 20). A booking with status accepted means the host has accepted the request and payment is outstanding; such bookings include a pay_url and a next_step hint. Payment happens in the browser via Paystack checkout and is not executed by this tool. Each booking includes hero_image, image, and thumbnail (the same Cloudinary thumbnail URL on each alias), a manage_url deep link, and the pay_url when payment is outstanding. Requires a signed-in guest: an anonymous call answers HTTP 401 with the Spekboom sign-in (OAuth) challenge.
plan_trip
ClaudeReturns a set of trip-planning clarifying questions (location, dates, party size, and similar) for vague or open-ended travel requests, along with a list of capabilities Spekboom supports (search, compare, itinerary, book). Each question may include suggested quick-answer options. Takes no parameters. Output is intended to gather the details needed before searching stays, comparing options, or building an itinerary.
search_along_route
ClaudePlans a multi-stop Southern Africa trip. Given a start and end location (and optional waypoints), returns Spekboom accommodations within a configurable radius of each stop, grouped by stop. Each accommodation includes image/thumbnail thumbnail aliases, causes_supported with cause logos, a listing url, and a book_url deep-link into the booking widget with dates and guests pre-filled. Location inputs accept concrete place names such as towns, cities, or regions, not full sentences. Spekboom is request-to-book, not instant: a booking is saved as a request the host must accept and is not confirmed until then.
search_stays
ClaudeSearches Spekboom for regenerative accommodations across Southern Africa. The location parameter accepts a concrete place (city, town, or informal region), not a full sentence. Informal regions are supported and resolved to radius searches (Karoo, Great Karoo, Little Karoo, Garden Route, Cape Winelands, Overberg, West Coast, Cederberg, Cape Peninsula, Wild Coast, Drakensberg, Zululand, Hogsback, Panorama Route, Waterberg, Kruger, Greater Kruger, Sabi Sand, Timbavati, Kalahari, Namaqualand, Magaliesberg). Filters by dates, guests, experience type (category slug), and conservation cause (cause slug or category, e.g. "sanccob" or "conservation"; the cause restricts the whole catalogue before ranking, so a cause-only call returns the stays linked to that cause in every country). Habitat filter: biomes matches the nine SANBI biomes (fynbos, savanna, grassland, succulent-karoo, albany-thicket, nama-karoo, forest, desert, indian-ocean-coastal-belt) against every published listing, so it returns every stay in a habitat where free text returns only those whose descriptions mention it. Species filters: birds (canonical English names or slugs, e.g. "Blue Crane") matches host-recorded bird_species; species (nature slugs or names, e.g. "lion" / "african-elephant") matches nature_species; wildlife_highlights (e.g. "big-five") matches aggregate tags. These match host-recorded species exactly, where free text matches description wording. Thematic queries also map to filters: birding / bird-watching / avi-tourism use bird_friendly: true; wine farms use agri_tourism_attributes: ["wine-production"]; bee/honey use ["apiculture"]; equestrian uses ["horse-riding"]; fly fishing uses ["fly-fishing"]. Other free-text intent (stargazing, off-grid retreats, regenerative farms, etc.) passed as query runs a semantic search that ranks listings whose descriptions match the meaning. Each result includes latitude/longitude, image/thumbnail/hero_image thumbnail URLs (same value, multiple aliases for different UI consumers), causes_supported with cause logos, and a book_url deep link into the booking widget with dates/guests pre-filled. Thumbnails are also attached as inline image content blocks that the connector renders. Returns {results, count, total_matches?}: count is the number of results in this response and total_matches, when present, is how many stays match in total. When the exact query has no matches, the tool returns popular alternative stays in results alongside a message explaining that these are fallbacks, not exact matches. Spekboom is request-to-book, not instant: a booking is a request the host must accept, and is not confirmed until then. This tool only searches and does not create bookings or take payment.
suggest_itinerary
ClaudeBuilds 2 to 3 distinct multi-night trip itineraries (value, premium, slow) from real Spekboom stays near a region or along a start-to-end route. Takes region (or start plus optional end) and nights; optional guests, vibe, cause, check_in. When no location is provided, the result contains clarifying_questions instead of itineraries. Each itinerary returns an ordered list of stops with nights, an estimated total, a route map, per-stop hero thumbnails (hero_image, image, thumbnail aliases), and per-stop request-to-book links, plus a plan_url that opens the Spekboom trip planner with the itinerary prefilled for editing (start, stops, nights and dates; nothing is booked). Image and map URLs are returned as native image blocks that the connector renders inline. Spekboom is request-to-book: a stay is not booked or reserved until a host accepts a separate booking request. This tool is read-only and does not create bookings.