{"tools":[{"name":"search_exhibitors","title":"Search exhibitors","description":"Find exhibitors at FLIBS 2026 by company name, product, service, category, brand, or booth number. Returns booths with venue and official map links.","inputSchema":{"type":"object","properties":{"query":{"type":"string","description":"Company name, product, service, category, brand or booth number."},"venue":{"type":["string","null"],"description":"Optional venue id or name to limit the search, for example \"Superyacht Village\"."},"limit":{"anyOf":[{"type":"integer","minimum":1,"maximum":20,"description":"Maximum number of exhibitors to return. Default 8."},{"type":"null"}],"description":"Maximum number of exhibitors to return. Default 8."},"from_lat":{"type":["number","null"],"description":"The visitor's own latitude from the app's shared location, or null. When set it wins over a named place: distances and walking times are measured from there."},"from_lng":{"type":["number","null"],"description":"The visitor's own longitude from the app's shared location, or null."},"detail":{"anyOf":[{"type":"string","enum":["compact","full"],"description":"compact (default) or full for the old larger row."},{"type":"null"}],"description":"compact (default) or full for the old larger row."}},"required":["query"],"additionalProperties":false,"$schema":"http://json-schema.org/draft-07/schema#"},"getUrl":"https://boatwork.co/flibs/api/tools/search_exhibitors/"},{"name":"get_exhibitor","title":"Exhibitor details","description":"Everything the guide has on one exhibitor, by slug or name (slug first): logoUrl, iconKey, contact details, description and socials, every booth and map pin with walking directions, the Boatwork profile when there is a high match, the website snapshot, products and boats on display, and the nearest water taxi stop and parking. A name that matches nothing above trigram similarity 0.35 returns found false with suggestions; only a genuine tie returns ambiguous with candidates. Phone numbers need the requester_name and requester_email on this call, or a user_token from remember_user.","inputSchema":{"type":"object","properties":{"exhibitor":{"type":"string","description":"Exhibitor slug or name."},"from_lat":{"type":["number","null"],"description":"The visitor's own latitude from the app's shared location, or null. When set it wins over a named place: distances and walking times are measured from there."},"from_lng":{"type":["number","null"],"description":"The visitor's own longitude from the app's shared location, or null."},"requester_name":{"type":["string","null"],"description":"The user's name, when telling the server who they are on this call instead of remember_user."},"requester_email":{"type":["string","null"],"description":"The user's email, when telling the server who they are on this call instead of remember_user."},"user_token":{"type":["string","null"],"description":"The user_token remember_user returned, in place of the requester fields."}},"required":["exhibitor"],"additionalProperties":false,"$schema":"http://json-schema.org/draft-07/schema#"},"getUrl":"https://boatwork.co/flibs/api/tools/get_exhibitor/"},{"name":"get_meeting_slots","title":"Open meeting times","description":"Open meeting times with one exhibitor, as buttons the app renders. Returns the exhibitor's name, slug, logo, booth and whether it takes meeting requests, plus up to eight open 30-minute start times on the next show days that still have time left (10:00, 11:00, 13:00, 14:00, 15:00, 16:00 Eastern, clipped to that day's show hours), without the times this caller already has a meeting request at. Pass day to ask for one show day and from to start the search at a day or time. When the exhibitor has no address on file or has opted out, it returns canRequestMeeting false with no slots, and their phone and website instead. Never list the times in your own text: the app shows them.","inputSchema":{"type":"object","properties":{"exhibitor":{"type":"string","description":"Exhibitor slug or name."},"day":{"type":["string","null"],"description":"One show day to offer: 2026-10-30, Friday, Fri or Oct 30, or null for the next days."},"from":{"type":["string","null"],"description":"Only offer times at or after this day or time, such as \"2026-10-30\", or null for now."}},"required":["exhibitor"],"additionalProperties":false,"$schema":"http://json-schema.org/draft-07/schema#"},"getUrl":"https://boatwork.co/flibs/api/tools/get_meeting_slots/"},{"name":"search_boats","title":"Search boats","description":"Find boats on display at FLIBS 2026 by model, builder, type, length, price, year, or new/brokerage. Boats are shown by an exhibitor; slip locations are the exhibitor’s booths.","inputSchema":{"type":"object","properties":{"query":{"type":["string","null"],"description":"Model or boat name to match."},"builder":{"type":["string","null"],"description":"Builder or manufacturer name."},"boat_type":{"type":["string","null"],"description":"Boat type such as \"center console\" or \"sportfishing\"."},"min_length_ft":{"type":["number","null"],"description":"Minimum length in feet."},"max_length_ft":{"type":["number","null"],"description":"Maximum length in feet, exclusive."},"max_price_usd":{"type":["number","null"],"description":"Maximum price in US dollars."},"min_year":{"anyOf":[{"type":"integer","description":"Earliest model year."},{"type":"null"}],"description":"Earliest model year."},"condition":{"type":["string","null"],"description":"new or brokerage."},"limit":{"anyOf":[{"type":"integer","minimum":1,"maximum":20,"description":"Maximum number of boats to return. Default 8."},{"type":"null"}],"description":"Maximum number of boats to return. Default 8."},"detail":{"anyOf":[{"type":"string","enum":["compact","full"],"description":"compact (default) or full for the old larger row."},{"type":"null"}],"description":"compact (default) or full for the old larger row."}},"additionalProperties":false,"$schema":"http://json-schema.org/draft-07/schema#"},"getUrl":"https://boatwork.co/flibs/api/tools/search_boats/"},{"name":"get_boat","title":"Boat details","description":"One boat on display: builder, year, length, condition, type, price when listed, description and images, the exhibitor showing it, and every booth pin with walking directions.","inputSchema":{"type":"object","properties":{"boat":{"type":"string","description":"Boat model name, slug or part of the name."}},"required":["boat"],"additionalProperties":false,"$schema":"http://json-schema.org/draft-07/schema#"},"getUrl":"https://boatwork.co/flibs/api/tools/get_boat/"},{"name":"compare_boats","title":"Compare boats","description":"Compare two to four boats side by side: specs, price when listed, who shows each one, their booth pins and the walking time between them.","inputSchema":{"type":"object","properties":{"boats":{"type":"array","items":{"type":"string"},"description":"Two to four boat names, models or slugs."}},"required":["boats"],"additionalProperties":false,"$schema":"http://json-schema.org/draft-07/schema#"},"getUrl":"https://boatwork.co/flibs/api/tools/compare_boats/"},{"name":"recommend_for_my_boat","title":"Recommend for my boat","description":"What to see at the show for the caller's own boat: exhibitors whose products or categories fit that boat class (stabilizers, electronics, canvas, bottom paint, engines and more), boats like theirs, and a suggested walking order. Boatwork pros come first.","inputSchema":{"type":"object","properties":{"boat":{"type":"string","description":"The boat to shop for, for example \"2019 Viking 48 Convertible\"."},"interests":{"anyOf":[{"type":"array","items":{"type":"string"},"description":"Interests such as \"stabilizers\" or \"electronics\", or null."},{"type":"null"}],"description":"Interests such as \"stabilizers\" or \"electronics\", or null."},"day":{"type":["string","null"],"description":"Show day such as \"Thursday\" or \"2026-10-29\", or null."}},"required":["boat"],"additionalProperties":false,"$schema":"http://json-schema.org/draft-07/schema#"},"getUrl":"https://boatwork.co/flibs/api/tools/recommend_for_my_boat/"},{"name":"remember_my_boat","title":"Remember the caller’s boat","description":"Remember the caller's boat and what they are shopping for, so later answers rank exhibitors and plan the day around it. Every field is optional; call it as soon as the visitor mentions their boat, without asking for details they did not give.","inputSchema":{"type":"object","properties":{"make":{"type":["string","null"],"description":"Builder, for example \"Viking\", or null."},"model":{"type":["string","null"],"description":"Model, for example \"48 Convertible\", or null."},"lengthFeet":{"type":["number","null"],"description":"Length in feet, or null."},"year":{"type":["number","null"],"description":"Model year, or null."},"type":{"type":["string","null"],"description":"Boat type such as \"convertible\", or null."},"propulsion":{"type":["string","null"],"description":"Propulsion such as \"outboard\", or null."},"interests":{"anyOf":[{"type":"array","items":{"type":"string"},"description":"What they are shopping for, such as \"electronics\", or null."},{"type":"null"}],"description":"What they are shopping for, such as \"electronics\", or null."},"requester_email":{"type":["string","null"],"description":"The user's email when an agent names them on this call, so a known contact keeps the label."}},"additionalProperties":false,"$schema":"http://json-schema.org/draft-07/schema#"},"getUrl":null},{"name":"get_venue","title":"Venue details","description":"Details for one FLIBS 2026 venue: what is there, how to get there from the other venues, map links, exhibitor count, the water taxi and shuttle stops and parking near it, and the Boatwork pros based there.","inputSchema":{"type":"object","properties":{"venue":{"type":"string","description":"Venue id or name, for example \"Bahia Mar\"."}},"required":["venue"],"additionalProperties":false,"$schema":"http://json-schema.org/draft-07/schema#"},"getUrl":"https://boatwork.co/flibs/api/tools/get_venue/"},{"name":"get_route","title":"Route between places","description":"How to get from one place at the show to another: walking, shuttle and water taxi legs with minutes, each leg's Google Maps walking link, the live water taxi wait, and a static satellite map of the route.","inputSchema":{"type":"object","properties":{"from":{"type":"string","description":"Start: exhibitor, booth number, boat, venue, stop or parking name, or \"my location\" when the visitor shared where they are with from_lat and from_lng."},"to":{"type":"string","description":"Finish: exhibitor, booth number, boat, venue, stop or parking name."},"day":{"type":["string","null"],"description":"Show day for water taxi hours, such as \"Thursday\", or null."},"from_lat":{"type":["number","null"],"description":"The visitor's own latitude from the app's shared location, or null. When set it wins over a named place: distances and walking times are measured from there."},"from_lng":{"type":["number","null"],"description":"The visitor's own longitude from the app's shared location, or null."}},"required":["from","to"],"additionalProperties":false,"$schema":"http://json-schema.org/draft-07/schema#"},"getUrl":"https://boatwork.co/flibs/api/tools/get_route/"},{"name":"plan_day","title":"Plan a show day","description":"Before calling, interview the user briefly: boats to see, vendors to visit, sessions or events to attend, and what they are thinking about; the day can come from the sessions. Build an ordered walking plan for one show day: stops by venue and booth, with walk, shuttle or water taxi between venues and a Google Maps route. Pass the boats they want to see by name or slug, the vendors they want to visit, their sessions and their interests. Pass day when they said it, or null to take the day from the earliest session they named. Sessions on another day come back in otherDays instead of the plan. The plan recommends one parking lot. Pass start, end and pace to get a timed day with lunch. Set save to true to also get a shareable plan page, share image and calendar file.","inputSchema":{"type":"object","properties":{"day":{"type":["string","null"],"description":"Show day: 2026-10-29, Thursday, Thu, or Oct 29, or null to take the day from the sessions."},"boats":{"anyOf":[{"type":"array","items":{"type":"string"},"description":"Boats the visitor wants to see, by name or slug, or null."},{"type":"null"}],"description":"Boats the visitor wants to see, by name or slug, or null."},"venues":{"anyOf":[{"type":"array","items":{"type":"string"},"description":"Venue ids or names to visit."},{"type":"null"}],"description":"Venue ids or names to visit."},"exhibitors":{"anyOf":[{"type":"array","items":{"type":"string"},"description":"Exhibitor names to stop at."},{"type":"null"}],"description":"Exhibitor names to stop at."},"interests":{"anyOf":[{"type":"array","items":{"type":"string"},"description":"Interests such as \"stabilizers\" or \"center consoles\"."},{"type":"null"}],"description":"Interests such as \"stabilizers\" or \"center consoles\"."},"sessions":{"anyOf":[{"type":"array","items":{"type":"string"},"description":"Session slugs or titles on the show schedule to stop at."},{"type":"null"}],"description":"Session slugs or titles on the show schedule to stop at."},"start_venue":{"type":["string","null"],"description":"Venue id or name to start the day at."},"save":{"type":["boolean","null"],"description":"True to save the plan and return planUrl, ogImageUrl and calendarUrl."},"start":{"type":["string","null"],"description":"Time the day starts, HH:MM, or null for 10:00."},"end":{"type":["string","null"],"description":"Time the day ends, HH:MM, or null for 17:00."},"pace":{"anyOf":[{"type":"string","enum":["relaxed","packed"],"description":"relaxed (25 minute stops) or packed (15 minute stops)."},{"type":"null"}],"description":"relaxed (25 minute stops) or packed (15 minute stops)."},"must_see":{"anyOf":[{"type":"array","items":{"type":"string"},"description":"Exhibitor or session slugs or names that must be on the plan."},{"type":"null"}],"description":"Exhibitor or session slugs or names that must be on the plan."},"from_lat":{"type":["number","null"],"description":"The visitor's own latitude from the app's shared location, or null. When set it wins over a named place: distances and walking times are measured from there."},"from_lng":{"type":["number","null"],"description":"The visitor's own longitude from the app's shared location, or null."},"requester_email":{"type":["string","null"],"description":"The user's email, so their requested meetings for that day join the plan."}},"additionalProperties":false,"$schema":"http://json-schema.org/draft-07/schema#"},"getUrl":"https://boatwork.co/flibs/api/tools/plan_day/"},{"name":"save_plan","title":"Save a plan","description":"Turn a list of stops into a walkable plan: orders the stops the same way plan_day does and returns a shareable plan page, a share image and a calendar file.","inputSchema":{"type":"object","properties":{"plan_id":{"type":["string","null"],"description":"The planId plan_day returned. Pass only this to save exactly the plan plan_day built."},"title":{"type":["string","null"],"description":"Plan title, for example \"Thursday at the show\", or null with plan_id."},"timed":{"anyOf":[{"type":"object","properties":{"day":{"type":"string","description":"The show day, YYYY-MM-DD."},"start":{"type":"string","description":"Day start, HH:MM."},"end":{"type":"string","description":"Day end, HH:MM."},"pace":{"type":"string","enum":["relaxed","packed"],"description":"The pace that was used."},"stops":{"type":"array","items":{"type":"object","properties":{"kind":{"type":"string","enum":["session","meeting","exhibitor","lunch"],"description":"What the stop is."},"title":{"type":"string","description":"Stop title."},"slug":{"type":["string","null"],"description":"Exhibitor or session slug, or null."},"venueId":{"type":["string","null"],"description":"Venue id, or null."},"venueName":{"type":["string","null"],"description":"Venue name, or null."},"booth":{"type":["string","null"],"description":"Booth number, or null."},"start":{"type":"string","description":"Stop start, HH:MM."},"end":{"type":"string","description":"Stop end, HH:MM."},"legBefore":{"anyOf":[{"type":"object","properties":{"minutes":{"type":"number","description":"Minutes of travel."},"mode":{"type":"string","enum":["same_venue","walk","shuttle","water_taxi"],"description":"How to get there."},"label":{"type":"string","description":"A short label such as \"Water taxi from Bahia Mar\"."}},"required":["minutes","mode","label"],"additionalProperties":false,"description":"Travel on from the stop before this one, or null."},{"type":"null"}],"description":"Travel on from the stop before this one, or null."}},"required":["kind","title","start","end"],"additionalProperties":false},"description":"The stops plan_day returned, in order."},"skipped":{"anyOf":[{"type":"array","items":{"type":"object","properties":{"title":{"type":"string","description":"Stop title."},"reason":{"type":"string","description":"Why the stop was skipped."}},"required":["title","reason"],"additionalProperties":false},"description":"Stops that did not fit."},{"type":"null"}],"description":"Stops that did not fit."},"transfers":{"type":["number","null"],"description":"Count of non same-venue legs."},"totalWalkMinutes":{"type":["number","null"],"description":"Walking minutes for the day."}},"required":["day","start","end","pace","stops"],"additionalProperties":false,"description":"The timed plan plan_day returned, passed back exactly as given, or null for an untimed plan."},{"type":"null"}],"description":"The timed plan plan_day returned, passed back exactly as given, or null for an untimed plan."},"stops":{"anyOf":[{"type":"array","items":{"type":"object","properties":{"exhibitor":{"type":["string","null"],"description":"Exhibitor name or slug, or null."},"boat":{"type":["string","null"],"description":"Boat name or slug, or null."},"venue":{"type":["string","null"],"description":"Venue id or name, or null."},"session":{"type":["string","null"],"description":"Session slug or title on the show schedule, or null."},"note":{"type":["string","null"],"description":"A short note for this stop, or null."},"time":{"type":["string","null"],"description":"A time for this stop such as \"2pm\", or null."}},"additionalProperties":false},"description":"Up to 20 stops, or null with plan_id."},{"type":"null"}],"description":"Up to 20 stops, or null with plan_id."}},"additionalProperties":false,"$schema":"http://json-schema.org/draft-07/schema#"},"getUrl":null},{"name":"get_show_info","title":"Show info","description":"Official show facts: hours, tickets and prices, parking, shuttles and golf carts, water taxi, Brightline, rules, kids activities. Includes source links.","inputSchema":{"type":"object","properties":{"topic":{"type":"string","enum":["hours","tickets","parking","shuttles","water_taxi","brightline","rules","kids","all"],"description":"Which show facts to return."}},"required":["topic"],"additionalProperties":false,"$schema":"http://json-schema.org/draft-07/schema#"},"getUrl":"https://boatwork.co/flibs/api/tools/get_show_info/"},{"name":"find_transport_stop","title":"Water taxi and shuttle stops","description":"Nearest water taxi stops, shuttle stops or parking to a venue or exhibitor, with walking directions, service hours and the live water taxi tracker.","inputSchema":{"type":"object","properties":{"mode":{"type":"string","enum":["water_taxi","shuttle","parking","any"],"description":"Which stops to look for. \"any\" returns water taxi and shuttle stops."},"near":{"type":["string","null"],"description":"Venue or exhibitor name to find stops near."},"day":{"type":["string","null"],"description":"Show day such as \"2026-10-30\", \"Friday\" or \"Oct 30\"."},"from_lat":{"type":["number","null"],"description":"The visitor's own latitude from the app's shared location, or null. When set it wins over a named place: distances and walking times are measured from there."},"from_lng":{"type":["number","null"],"description":"The visitor's own longitude from the app's shared location, or null."}},"required":["mode"],"additionalProperties":false,"$schema":"http://json-schema.org/draft-07/schema#"},"getUrl":"https://boatwork.co/flibs/api/tools/find_transport_stop/"},{"name":"get_water_taxi_live","title":"Live water taxi positions","description":"Live positions of Water Taxi boats and minutes to the next arrival at each stop, refreshed every 15 seconds. Use for 'when is the next water taxi' questions.","inputSchema":{"type":"object","properties":{"stop":{"type":["string","null"],"description":"Optional stop name or part of a stop name to filter to, or null for every stop."}},"additionalProperties":false,"$schema":"http://json-schema.org/draft-07/schema#"},"getUrl":"https://boatwork.co/flibs/api/tools/get_water_taxi_live/"},{"name":"list_map_locations","title":"Map locations","description":"Map layers as GeoJSON points so you can draw your own map: venues, water taxi stops, shuttle stops, parking, Boatwork pros (one point per exhibitor at its first booth), seminar and clinic locations, or all of them.","inputSchema":{"type":"object","properties":{"layer":{"type":"string","enum":["venues","water_taxi_stops","shuttle_stops","parking","boatwork_pros","sessions","all"],"description":"Which map layer to return."}},"required":["layer"],"additionalProperties":false,"$schema":"http://json-schema.org/draft-07/schema#"},"getUrl":"https://boatwork.co/flibs/api/tools/list_map_locations/"},{"name":"find_sessions","title":"Find sessions","description":"Seminars, clinics, panels, the MRH Summit and show experiences on the FLIBS 2026 schedule, with local time, venue, speakers, page link, calendar file and walking directions. Filter by day, venue, topic, kids or a start time. RefitX launches as its own event on October 27-28, 2027; this year there is a RefitX seminar series at the show. Default 5 rows; pass limit (up to 100) for a whole day.","inputSchema":{"type":"object","properties":{"day":{"type":["string","null"],"description":"Show day: 2026-10-29, Thursday, Thu, or Oct 29, or null for every day."},"venue":{"type":["string","null"],"description":"Venue id or name such as \"Convention Center\" or \"Superyacht Village\", or null."},"topic":{"type":["string","null"],"description":"Topic or keyword to match in the title, description or series, or null."},"for_kids":{"type":["boolean","null"],"description":"True for sessions and clinics for kids, or null."},"after":{"type":["string","null"],"description":"Only sessions starting at or after this local time, such as \"2pm\", or null."},"limit":{"anyOf":[{"type":"integer","minimum":1,"maximum":100,"description":"Number of rows to return, 1 to 100. Default 5."},{"type":"null"}],"description":"Number of rows to return, 1 to 100. Default 5."}},"additionalProperties":false,"$schema":"http://json-schema.org/draft-07/schema#"},"getUrl":"https://boatwork.co/flibs/api/tools/find_sessions/"},{"name":"find_boatwork_pro","title":"Find Boatwork pros","description":"Find marine service pros on Boatwork (detailing, bottom paint, refinishing, canvas, electronics install, yard work and more) in the Fort Lauderdale area, and the exhibitors at the show who are pros for that service, with their booth pins.","inputSchema":{"type":"object","properties":{"service":{"type":"string","description":"Service such as \"bottom paint\" or \"canvas\"."},"near_venue":{"type":["string","null"],"description":"Optional venue id or name to search near."}},"required":["service"],"additionalProperties":false,"$schema":"http://json-schema.org/draft-07/schema#"},"getUrl":"https://boatwork.co/flibs/api/tools/find_boatwork_pro/"},{"name":"request_meeting","title":"Setting up the meeting","description":"Send the meeting request email from Boatwork on the user's behalf, in one call: the exhibitor is emailed from Boatwork, the user is copied and the reply comes back to the user. Only call it when the user has asked you to set the meeting up, as soon as you have their name, their email and, for a meeting at the show, an exhibitor, a day and a time: it sends straight away, with no preview and no confirmation. It refuses a request already sent for the same person, exhibitor, day and time in the last ten minutes and returns alreadySent true without sending again. Show days are Wednesday October 28 to Sunday November 1, 2026; when the user gives only part of a day use morning 10:00, afternoon 14:00, evening 17:00. Phone is optional. kind 'contact' reaches a Boatwork pro who is not at the show, with no day or time; kind 'boatwork' sends one email to the Boatwork team about websites, marine marketing or an AI agent. Returns the mode (in sample mode nothing goes to the exhibitor: the Boatwork team gets it for review), each vendor with its booth and when label, the calendar link, a walking directions link and a sent card. It never returns a token, a draft id or a vendor address. An agent that would rather send from the user's own mailbox uses draft_meeting_request instead.","inputSchema":{"type":"object","properties":{"name":{"type":"string","description":"The user's name."},"email":{"type":"string","description":"The user's email address."},"phone":{"type":["string","null"],"description":"The user's phone number, when they gave one."},"topic":{"type":["string","null"],"description":"What the user wants to discuss."},"boat":{"type":["string","null"],"description":"The user's boat, when they named one."},"business":{"type":["string","null"],"description":"The user's own business name, when they gave one."},"kind":{"anyOf":[{"type":"string","enum":["meeting","contact","boatwork"],"description":"'meeting' (default) for an exhibitor at the show; 'contact' for a Boatwork pro who is not at the show; 'boatwork' to ask the Boatwork team about websites, marine marketing or an AI agent."},{"type":"null"}],"description":"'meeting' (default) for an exhibitor at the show; 'contact' for a Boatwork pro who is not at the show; 'boatwork' to ask the Boatwork team about websites, marine marketing or an AI agent."},"meetings":{"anyOf":[{"type":"array","items":{"type":"object","properties":{"exhibitor":{"type":"string","description":"The exhibitor (or Boatwork pro) name exactly as a tool returned it."},"day":{"type":["string","null"],"description":"Show day, or null for a Boatwork pro contact."},"time":{"type":["string","null"],"description":"Start time, or null for a Boatwork pro contact."},"topic":{"type":["string","null"],"description":"What the user wants to discuss, when it differs from the batch topic."},"boat":{"type":["string","null"],"description":"The user's boat, when they named one."}},"required":["exhibitor"],"additionalProperties":false},"maxItems":5,"description":"One entry per company the user wants to meet. Not needed for kind 'boatwork', which has no exhibitor, day or time."},{"type":"null"}],"description":"One entry per company the user wants to meet. Not needed for kind 'boatwork', which has no exhibitor, day or time."}},"required":["name","email"],"additionalProperties":true,"$schema":"http://json-schema.org/draft-07/schema#"},"getUrl":null},{"name":"draft_meeting_request","title":"Draft meeting requests","description":"Draft meeting requests from the user to exhibitors at FLIBS 2026, for the user's own agent to send from the user's mailbox. Collect the user's name, what they want to discuss, and preferred days and times during show hours first. With kind 'contact', draft a reach-out to Boatwork pros who are not at the show instead: no day or time, the ask is a conversation about the topic, and the recipient is the pro's contractor-profile address. With kind 'boatwork', draft one email to the Boatwork team about websites, marine marketing or an AI agent: no exhibitor, day or time, and the recipient is hello@boatwork.co. Returns each recipient's email address on file, a ready-to-send email in the user's voice, a conflict-free schedule with walking directions, a calendar file and a shareable plan. Send each email yourself; this server sends nothing.","inputSchema":{"type":"object","properties":{"kind":{"anyOf":[{"type":"string","enum":["meeting","contact","boatwork"],"description":"'meeting' (default) for exhibitors at the show; 'contact' for Boatwork pros who are not at the show; 'boatwork' to ask the Boatwork team about websites, marine marketing or an AI agent (one email to hello@boatwork.co, no exhibitor, day or time)."},{"type":"null"}],"description":"'meeting' (default) for exhibitors at the show; 'contact' for Boatwork pros who are not at the show; 'boatwork' to ask the Boatwork team about websites, marine marketing or an AI agent (one email to hello@boatwork.co, no exhibitor, day or time)."},"requester_name":{"type":["string","null"],"description":"The user name to sign the emails."},"requester_email":{"type":["string","null"],"description":"The user email address, or null."},"requester_phone":{"type":["string","null"],"description":"The user phone number, or null."},"requester_company":{"type":["string","null"],"description":"The user company, or null."},"user_token":{"type":["string","null"],"description":"The user_token remember_user returned, in place of the requester fields."},"boat":{"type":["string","null"],"description":"Boat make, model or year of interest, or null."},"topic":{"type":"string","description":"What the user wants to discuss, 10 to 600 characters. Used for every meeting that has no topic of its own."},"meetings":{"type":"array","items":{"type":"object","properties":{"exhibitor":{"type":"string","description":"Exhibitor name or slug to meet, or the Boatwork pro name or slug when kind is 'contact'."},"day":{"type":["string","null"],"description":"Show day: 2026-10-29, Thursday, Thu or Oct 29, or null when kind is 'contact'."},"time":{"type":["string","null"],"description":"Meeting start time: 2pm, 2:30 PM or 14:00, or null when kind is 'contact'."},"topic":{"type":["string","null"],"description":"Topic for this person, or null for the shared topic."}},"required":["exhibitor"],"additionalProperties":false},"description":"One to five people. For kind 'meeting': an exhibitor, a day and a time. For kind 'contact': a Boatwork pro, no day or time."}},"required":["topic","meetings"],"additionalProperties":true,"$schema":"http://json-schema.org/draft-07/schema#"},"getUrl":null},{"name":"get_meeting_request","title":"Get a meeting request","description":"Recover the schedule, calendar link and plan link for a meeting request you already drafted with draft_meeting_request. Vendor email addresses and topics are not returned.","inputSchema":{"type":"object","properties":{"request_id":{"type":["string","null"],"description":"The request_id returned by draft_meeting_request."}},"additionalProperties":true,"$schema":"http://json-schema.org/draft-07/schema#"},"getUrl":null},{"name":"mark_meeting_request_sent","title":"Mark a meeting request sent","description":"Record that your agent sent the meeting request email from the user's own mailbox, so the guide can count it. Optional.","inputSchema":{"type":"object","properties":{"request_id":{"type":["string","null"],"description":"The request_id returned by draft_meeting_request."},"exhibitor":{"type":"string","description":"Exhibitor name exactly as draft_meeting_request returned it."},"sent":{"type":"boolean","description":"True when the email was sent, false to undo the mark."}},"required":["exhibitor","sent"],"additionalProperties":true,"$schema":"http://json-schema.org/draft-07/schema#"},"getUrl":null},{"name":"remember_user","title":"Remember the user","description":"Remember the user you are helping: puts their name and email on the guide's central contact list, the same one the chat uses, and returns a user_token that any tool accepts in place of the requester details. The token is signed with the server secret; calls fail closed without one. It links later calls to the user without an Mcp-Session-Id, so agents do not have to repeat the details.","inputSchema":{"type":"object","properties":{"name":{"type":"string","description":"The user's name."},"email":{"type":"string","description":"The user's email address."},"phone":{"type":["string","null"],"description":"The user's phone number, when they gave one."},"boat":{"type":["string","null"],"description":"The user's boat, when they named one."}},"required":["name","email"],"additionalProperties":false,"$schema":"http://json-schema.org/draft-07/schema#"},"getUrl":null},{"name":"get_offline_index","title":"Offline index","description":"Everything the guide can answer with no signal, in one document: every exhibitor with its booth, venue and pin, every session with its time and place, and the water taxi and shuttle stops. About 300 KB, so prefer search_exhibitors, find_sessions and get_exhibitor for single questions; this is for caching or bulk work. The same document is the resource flibs://offline-index.json. The guide's own service worker caches exactly this index, so an agent can answer booth and session questions from the same data the phone has offline.","inputSchema":{"type":"object","properties":{},"$schema":"http://json-schema.org/draft-07/schema#"},"getUrl":null},{"name":"get_session","title":"Session details","description":"One session on the FLIBS 2026 schedule by slug or title (slug first): time, place and venue slug, the map pin and what kind of location it is, speakers, the calendar file and walking directions, plus the page link.","inputSchema":{"type":"object","properties":{"session":{"type":"string","description":"Session slug or title."},"from_lat":{"type":["number","null"],"description":"The visitor's own latitude from the app's shared location, or null. When set it wins over a named place: distances and walking times are measured from there."},"from_lng":{"type":["number","null"],"description":"The visitor's own longitude from the app's shared location, or null."}},"required":["session"],"additionalProperties":false,"$schema":"http://json-schema.org/draft-07/schema#"},"getUrl":"https://boatwork.co/flibs/api/tools/get_session/"},{"name":"browse_exhibitors","title":"Browse exhibitors","description":"Browse the show the way the guide's Exhibitors pages do, one page at a time: by type (business type), tent, topic, venue, pros (Boatwork pros at the show), new (first-time exhibitors) or letter (by name). Call it with no value to list the groups and their counts. Rows are compact with slug, logoUrl and iconKey.","inputSchema":{"type":"object","properties":{"by":{"type":"string","enum":["type","tent","topic","venue","pros","new","letter"],"description":"Which browse page to use."},"value":{"type":["string","null"],"description":"The group slug or letter, or null to list the groups and counts."},"page":{"anyOf":[{"type":"integer","minimum":1,"description":"Page number, 1-based; 40 rows a page."},{"type":"null"}],"description":"Page number, 1-based; 40 rows a page."},"from_lat":{"type":["number","null"],"description":"The visitor's own latitude from the app's shared location, or null. When set it wins over a named place: distances and walking times are measured from there."},"from_lng":{"type":["number","null"],"description":"The visitor's own longitude from the app's shared location, or null."}},"required":["by"],"additionalProperties":false,"$schema":"http://json-schema.org/draft-07/schema#"},"getUrl":"https://boatwork.co/flibs/api/tools/browse_exhibitors/"},{"name":"browse_boats","title":"Browse boats","description":"Browse boats on display the way the guide's Boats pages do: by type (boat type group), length (band), builder or condition, one page at a time. Call it with no value to list the groups and their counts. Rows are compact with slug and imageUrl.","inputSchema":{"type":"object","properties":{"by":{"type":"string","enum":["type","length","builder","condition"],"description":"Which browse page to use."},"value":{"type":["string","null"],"description":"The group or builder slug, or null to list the groups and counts."},"page":{"anyOf":[{"type":"integer","minimum":1,"description":"Page number, 1-based; 24 boats a page."},{"type":"null"}],"description":"Page number, 1-based; 24 boats a page."}},"required":["by"],"additionalProperties":false,"$schema":"http://json-schema.org/draft-07/schema#"},"getUrl":"https://boatwork.co/flibs/api/tools/browse_boats/"},{"name":"get_getting_there","title":"Getting there","description":"How to reach a place at the show, in one call: the nearest water taxi stops with the live minutes to the next boat, the nearest shuttle stops, and parking with walk minutes, for a named place or the visitor coordinates. Use it for \"how do I get there\" questions; use get_route for a specific A-to-B trip.","inputSchema":{"type":"object","properties":{"place":{"type":["string","null"],"description":"Venue or exhibitor name to get to, or null with from_lat and from_lng."},"from_lat":{"type":["number","null"],"description":"The visitor's own latitude from the app's shared location, or null. When set it wins over a named place: distances and walking times are measured from there."},"from_lng":{"type":["number","null"],"description":"The visitor's own longitude from the app's shared location, or null."}},"additionalProperties":false,"$schema":"http://json-schema.org/draft-07/schema#"},"getUrl":"https://boatwork.co/flibs/api/tools/get_getting_there/"},{"name":"get_plan","title":"Reopen a saved plan","description":"Reopen a saved plan by plan_id: the ordered stops, the legs between them, the plan page, the share image and the calendar file. save_plan and plan_day return the plan_id.","inputSchema":{"type":"object","properties":{"plan_id":{"type":"string","description":"The plan_id returned by save_plan or plan_day."}},"required":["plan_id"],"additionalProperties":false,"$schema":"http://json-schema.org/draft-07/schema#"},"getUrl":"https://boatwork.co/flibs/api/tools/get_plan/"},{"name":"email_plan","title":"Email a day plan","description":"Email a saved day plan to the user. Save the plan first (save_plan or plan_day with save true) and pass its plan_id; ask for the user's email if you do not have it.","inputSchema":{"type":"object","properties":{"plan_id":{"type":"string","description":"The plan_id returned by save_plan or plan_day."},"requester_name":{"type":["string","null"],"description":"The user's name, when you have it."},"requester_email":{"type":["string","null"],"description":"The user's email; ask for it when you do not have it."},"user_token":{"type":["string","null"],"description":"The user_token remember_user returned, in place of the requester fields."}},"required":["plan_id"],"additionalProperties":false,"$schema":"http://json-schema.org/draft-07/schema#"},"getUrl":null},{"name":"ask_marina","title":"Ask Marina","description":"Marina is the guide's AI concierge, powered by Boatwork Assist. Marina's own answer to a question about the show, in one call, when you would rather not chain tools: her text and the same cards the guide's chat shows. She answers only and never sends: for meetings she tells you to use get_meeting_slots and draft_meeting_request. Counts against the caller's chat limits.","inputSchema":{"type":"object","properties":{"question":{"type":"string","description":"The visitor question, in their own words."},"requester_name":{"type":["string","null"],"description":"The user's name, when they have introduced themselves."},"requester_email":{"type":["string","null"],"description":"The user's email, when they have introduced themselves."},"user_token":{"type":["string","null"],"description":"The user_token remember_user returned, in place of the requester fields."}},"required":["question"],"additionalProperties":false,"$schema":"http://json-schema.org/draft-07/schema#"},"getUrl":"https://boatwork.co/flibs/api/tools/ask_marina/"},{"name":"ask_business","title":"Ask a business's assistant","description":"One Boatwork pro's own assistant answers a question about that business, in one call, from its Boatwork profile, FLIBS listing and website. Read-only: it never sends email, and for a meeting it answers with get_meeting_slots and draft_meeting_request, which you call yourself. Pass the exhibitor slug; an exhibitor with no high-confidence Boatwork profile match has no assistant. Phase 28d: a venue id also works for a FLIBS marina - its assistant knows the marina, what is at the show there and how to get there, and cannot meet. Counts against the caller's chat limits.","inputSchema":{"type":"object","properties":{"slug":{"type":"string","description":"The exhibitor slug, from search_exhibitors or get_exhibitor, or a venue id with its own assistant."},"question":{"type":"string","description":"The question to ask that business, in the user's own words."}},"required":["slug","question"],"additionalProperties":false,"$schema":"http://json-schema.org/draft-07/schema#"},"getUrl":null}]}