MCP App Store
by KeenEthics
Ratiba icon

Ratiba

By BRIGHTON BENEDICT MBOYA

Get New App Alerts

Overview

Ratiba helps safari operators and travel teams manage proposal workflows in ChatGPT. The app can find and create clients, search accommodations and destination imagery, create and update itinerary proposals, inspect proposal details and pricing, and translate proposal content for client delivery.

Tools

create_client

ChatGPT
Create a new client record. Search first with search_clients to avoid duplicates. Returns the new client id — pass it as clientId when creating a proposal for them.

create_destination

ChatGPT
Add a place to the shared destination catalog and get back the id to use as a day's destination. Only for a genuine gap: search_destinations first, since a near-match there is almost always the right answer and a duplicate entry splits a destination's photo library and park fees across two records. Coordinates are required — look them up with search_places — because a destination without them cannot be drawn on the map. A place whose name already exists returns the existing id instead of creating a second one.

create_proposal

ChatGPT
Create a complete client-facing proposal in Ratiba. Search clients, accommodations, destinations, images, and pricing options before calling it. Accommodation and destination fields require real catalog ids, and room types must match the selected accommodation. For useAutoPricing: true, call get_pricing_options and select the applicable vehicleId, vehicleCount, guideId, pickup/drop-off transfer-rate ids, and markupPct; omit markupPct only when the organization's displayed default/tier should apply. Pass a YYYY-MM-DD startDate for real seasonal rates. The result includes pricingReady and pricingIssues; never call an auto-priced quote send-ready while pricingReady is false. Returns canonical shareUrl/editUrl; never construct them. Call get_proposal afterward to verify persisted client, itinerary, pricing, imagery, and theme. Translate only after the content is final.

get_accommodation

ChatGPT
Get full details (description, room types, amenities, images) for one accommodation by id.

get_pricing_options

ChatGPT
Return this organization's selectable vehicle, guide, and pickup/drop-off transfer rates, plus its default markup and group-size markup tiers. Call this before creating or updating an auto-priced proposal. Use only ids returned here; omitted markupPct uses the displayed organization default or tier.

get_proposal

ChatGPT
Get the full details of one proposal by id, including its day-by-day itinerary and pricing. For an auto-priced proposal (useAutoPricing: true), also includes a freshly-computed pricingSummary (cost by category, markup, sell total), plus pricingReady and actionable pricingIssues.

list_proposals

ChatGPT
List client proposals (quotes/sales documents) in the connected Ratiba account, optionally filtered by status or search text.

reset_proposal_language

ChatGPT
Set a proposal's active language back to English, undoing translate_proposal.

search_accommodations

ChatGPT
Search existing accommodations (lodges/camps/hotels) to find valid ids for use as accommodation on a proposal day. Search by name, or filter by country (accommodations have no destination/park field, only a country and coordinates — use judgment, or cross-check latitude/longitude against the day's destination, when narrowing beyond country). Always search before guessing an id.

search_clients

ChatGPT
Search existing clients by name. Use this before create_client to avoid creating a duplicate — if the client already exists, reuse their id as clientId on create_proposal/update_proposal.

search_destinations

ChatGPT
Search the destination catalog (national parks, reserves, cities, islands and landmarks) for the id to pass as a day's destination. That id is what puts the day on the client-facing map, and for a fee-bearing park it is also what applies park fees under useAutoPricing, so look the destination up here rather than relying on the written destinationName — beware near-namesakes such as "Arusha City" and "Arusha National Park", which are different places with different fees. Results without coordinates cannot be drawn on the map. An empty query returns a sample of the catalog.

search_images

ChatGPT
Find real, existing images to use as a proposal hero image or a day preview image. Matches the query against national park/destination names (returning that destination's photo library in destinationImages), accommodation names (returning that lodge's photos in accommodationImages), and this organization's own uploaded image library (matched by name/caption, returned in organizationImages). Every national park already has a curated library — call this once per distinct destinationName in the itinerary (e.g. once for "Serengeti", once for "Tarangire", once for "Arusha"), then set each day's previewImage from that day's own destination's destinationImages, and pick the proposal's heroImage from the primary/opening destination's destinationImages. Always use this instead of inventing an image URL — check the organization's own library first, since those are often Makisala-branded or trip-specific photos not tied to any single destination/lodge.

search_places

ChatGPT
Geocode a place name into coordinates, for the two things that need them and are not in the destination catalog: a proposal's startCity/endCity pins (pass the chosen result's name as startCity and its latitude/longitude as startCityLat/startCityLng), and the coordinates create_destination needs for a place the catalog is missing. Check search_destinations first — a place already in the catalog should be referenced by its id, not re-geocoded. Results are ranked by proximity to countries but not restricted to them, so read displayName before choosing.

translate_proposal

ChatGPT
Translate a proposal's client-facing content into another language and set it as the proposal's active language. Re-running with the same language regenerates and overwrites that translation (e.g. after the itinerary changes).

update_proposal

ChatGPT
Update an existing proposal. Omitted fields keep their value; nullable fields can be explicitly cleared with null. If days is supplied it replaces the itinerary. Auto-pricing selectors can be changed or cleared using ids from get_pricing_options. The result includes pricingReady and pricingIssues. Editing translatable content on a translated proposal switches it back to English so stale translated copy is never served; run translate_proposal again afterward.

Capabilities

Writes

Similar Apps