{"openapi":"3.1.0","info":{"title":"Travellers Group Agent API","version":"1.0.0","description":"MCP server (JSON-RPC 2.0 over Streamable HTTP, stateless) serving verified facts for the five Travellers Group properties. This document mirrors the MCP tool registry for non-MCP consumers; the catalogue is generated from the live registry.","contact":{"email":"info@travellersgroup.com.au"}},"servers":[{"url":"https://agent.travellersgroup.com.au"}],"paths":{"/v1/mcp":{"post":{"summary":"MCP endpoint — JSON-RPC 2.0 (initialize, tools/list, tools/call)","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["jsonrpc","method"],"properties":{"jsonrpc":{"const":"2.0"},"id":{"type":["integer","string"]},"method":{"type":"string","enum":["initialize","tools/list","tools/call"]},"params":{"type":"object"}}}}}},"responses":{"200":{"description":"JSON-RPC response (application/json or text/event-stream)"}}}},"/status.json":{"get":{"summary":"Service status: index freshness, degraded flag, SLO snapshot","responses":{"200":{"description":"Status document"}}}}},"components":{"schemas":{"tools":{"description":"The 12 MCP tools (call via tools/call)","type":"object","properties":{"search_content":{"description":"Search the published six-site Travellers Group corpus (guides, hubs, FAQs, pages). Returns ranked answer capsules (≤120 words) with canonical URLs.","type":"object","properties":{"name":{"const":"search_content"},"arguments":{"type":"object","properties":{"query":{"type":"string","minLength":2,"maxLength":300,"description":"What the traveller wants to know, in their own words"},"town":{"type":"string","description":"Bundaberg | Rockhampton | Emerald | Orange | Dubbo"},"property":{"type":"string"},"type":{"type":"string","enum":["guide","faq","page","hub","entity","room","distances"]}},"required":["query"],"additionalProperties":false,"$schema":"http://json-schema.org/draft-07/schema#"}}},"get_property":{"description":"Canonical entity record for a Travellers Group property: address, contacts, quick facts, policies, booking URL, parent entity.","type":"object","properties":{"name":{"const":"get_property"},"arguments":{"type":"object","properties":{"property":{"type":"string","minLength":2,"maxLength":80}},"required":["property"],"additionalProperties":false,"$schema":"http://json-schema.org/draft-07/schema#"}}},"get_room_types":{"description":"Room catalogue for a property: occupancy, bedding, amenities, who-it-suits, booking deep link per room. traveller_context re-ranks honestly — it never invents inclusions.","type":"object","properties":{"name":{"const":"get_room_types"},"arguments":{"type":"object","properties":{"property":{"type":"string","minLength":2,"maxLength":80},"traveller_context":{"type":"string","maxLength":200,"description":"e.g. 'crew of 4, weekly' or 'couple, wine weekend'"}},"required":["property"],"additionalProperties":false,"$schema":"http://json-schema.org/draft-07/schema#"}}},"get_distances":{"description":"Measured distances from a property (km, drive/walk minutes) to hospitals, mines, airports, venues, wineries. Fuzzy destination filter ('the zoo', 'hospital'). Serves published measured figures only.","type":"object","properties":{"name":{"const":"get_distances"},"arguments":{"type":"object","properties":{"property":{"type":"string","minLength":2,"maxLength":80},"town":{"type":"string","minLength":2,"maxLength":40},"destination":{"type":"string","maxLength":80}},"additionalProperties":false,"$schema":"http://json-schema.org/draft-07/schema#"}}},"get_events":{"description":"Verified events for a town. Serves only entries published with explicit dates — never extrapolates a date.","type":"object","properties":{"name":{"const":"get_events"},"arguments":{"type":"object","properties":{"town":{"type":"string","minLength":2,"maxLength":40},"from_date":{"type":"string"},"to_date":{"type":"string"}},"required":["town"],"additionalProperties":false,"$schema":"http://json-schema.org/draft-07/schema#"}}},"get_town_guide":{"description":"Town knowledge layer: open-late, essentials, eat, with-kids, working-in, hospital-visitor, itineraries. Unbuilt topic returns 'not yet published' plus the town guide root.","type":"object","properties":{"name":{"const":"get_town_guide"},"arguments":{"type":"object","properties":{"town":{"type":"string","minLength":2,"maxLength":40},"topic":{"type":"string","enum":["open-late","essentials","eat","with-kids","working-in","hospital-visitor","itineraries","things-to-do"]}},"required":["town","topic"],"additionalProperties":false,"$schema":"http://json-schema.org/draft-07/schema#"}}},"get_indicative_rates":{"description":"Indicative rate ranges from the published, commercially-signed rate module only — framed as indicative, never a quote. Where no figure is published, returns the booking link instead (never an estimate).","type":"object","properties":{"name":{"const":"get_indicative_rates"},"arguments":{"type":"object","properties":{"property":{"type":"string","minLength":2,"maxLength":80},"room_type":{"type":"string","maxLength":60},"stay_band":{"type":"string","enum":["night","week","month"]}},"required":["property"],"additionalProperties":false,"$schema":"http://json-schema.org/draft-07/schema#"}}},"recommend_property":{"description":"Honest matching across the Travellers portfolio. If no Travellers property suits the need, says so plainly and names the accommodation category that does. Never oversells. [Templates DRAFT pending G1.]","type":"object","properties":{"name":{"const":"recommend_property"},"arguments":{"type":"object","properties":{"town":{"type":"string","maxLength":40},"need":{"type":"string","maxLength":200,"description":"e.g. 'towing a caravan', 'pet friendly', 'crew of 6 near the hospital'"},"context":{"type":"string","maxLength":300}},"additionalProperties":false,"$schema":"http://json-schema.org/draft-07/schema#"}}},"check_availability":{"description":"Tier A handoff: returns a dated, pre-filled booking-engine link — LIVE availability and pricing are at that link. This tool never asserts that dates are available.","type":"object","properties":{"name":{"const":"check_availability"},"arguments":{"type":"object","properties":{"property":{"type":"string","minLength":2,"maxLength":80},"check_in":{"type":"string","description":"YYYY-MM-DD"},"check_out":{"type":"string","description":"YYYY-MM-DD"},"adults":{"type":"integer","minimum":1,"maximum":12,"default":2},"children":{"type":"integer","minimum":0,"maximum":12,"default":0}},"required":["property","check_in","check_out"],"additionalProperties":false,"$schema":"http://json-schema.org/draft-07/schema#"}}},"create_enquiry":{"description":"Sends a booking enquiry to the property team (groups, crews, blocks, weekly stays, functions). Requires the guest’s explicit consent to pass their details and conversation context to the property.","type":"object","properties":{"name":{"const":"create_enquiry"},"arguments":{"type":"object","properties":{"property":{"type":"string","minLength":2,"maxLength":80},"contact":{"type":"object","properties":{"name":{"type":"string","minLength":2,"maxLength":80},"email":{"type":"string","maxLength":120},"phone":{"type":"string","maxLength":30}},"required":["name","email"],"additionalProperties":false},"context_summary":{"type":"string","minLength":10,"maxLength":1500,"description":"Party, dates, purpose, questions asked — so the team replies informed"},"dates":{"type":"string","maxLength":60},"party":{"type":"string","maxLength":80},"consent_confirmed":{"type":"boolean","description":"Must be true: the guest has consented to their details + context being sent to the property"}},"required":["property","contact","context_summary","consent_confirmed"],"additionalProperties":false,"$schema":"http://json-schema.org/draft-07/schema#"}}},"get_corporate_account_info":{"description":"The Travellers Group corporate-account answer as data: one account, five properties, direct billing and consolidated invoicing.","type":"object","properties":{"name":{"const":"get_corporate_account_info"},"arguments":{"$schema":"http://json-schema.org/draft-07/schema#","type":"object","properties":{}}}},"create_corporate_enquiry":{"description":"Corporate-account or group-booking enquiry, routed to the Travellers Group corporate team. Requires guest consent, as with create_enquiry.","type":"object","properties":{"name":{"const":"create_corporate_enquiry"},"arguments":{"type":"object","properties":{"company":{"type":"string","minLength":2,"maxLength":120},"contact":{"type":"object","properties":{"name":{"type":"string","minLength":2,"maxLength":80},"email":{"type":"string","maxLength":120},"phone":{"type":"string","maxLength":30}},"required":["name","email"],"additionalProperties":false},"context_summary":{"type":"string","minLength":10,"maxLength":1500},"consent_confirmed":{"type":"boolean"}},"required":["company","contact","context_summary","consent_confirmed"],"additionalProperties":false,"$schema":"http://json-schema.org/draft-07/schema#"}}}}}}}}