MCP App Store
by KeenEthics

Overview

Spekboom is a regenerative travel platform for Southern Africa: every stay funds a named local cause, from wildlife protection and fynbos restoration to rural education and community upliftment. This connector brings the Spekboom catalogue into Claude so you can plan trips and see their conservation impact in one conversation. Search stays by location, dates, guests and experience, or along a road-trip route. Compare properties side by side, check live availability and find alternatives when dates are full, and build day-by-day itineraries. Look up birds, wildlife and plants and find stays where hosts have recorded them, and see which causes each booking supports. Discovery and planning work without an account. When you're ready to book, Claude can create a prefilled booking link to finish on spekboom.org, or, if you sign in with your Spekboom account, send a booking request and list your own bookings. Spekboom is request-to-book: nothing is confirmed until the host accepts, and payment is always completed by you on spekboom.org, never inside Claude.

Tools

check_availability

ChatGPT
Check 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

ChatGPT
Compares 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.

find_bird_species

ChatGPT
Looks 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

ChatGPT
Discovers 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

ChatGPT
Looks 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

ChatGPT
Finds 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

ChatGPT
Returns 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

ChatGPT
Returns 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

ChatGPT
Returns 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

ChatGPT
Plans 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

ChatGPT
Searches 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

ChatGPT
Builds 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

Claude
Check 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

Claude
Compares 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_request

Claude
Creates 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

Claude
Looks 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

Claude
Discovers 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

Claude
Looks 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

Claude
Finds 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

Claude
Returns 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

Claude
Returns 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

Claude
Lists 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

Claude
Returns 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

Claude
Plans 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

Claude
Searches 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

Claude
Builds 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.

Capabilities

Search Nature Stays By Place, Dates And Party SizeFind Stays By Habitat, Bird Or Wildlife SpeciesCompare Stays And Check AvailabilityPlan Multi-Stop ItinerariesCreate A Request-To-Book Link On Spekboom.Org

Example Prompts

Click any prompt to copy it.

Similar Apps