MCP 服务器

concierge

com.iconic-expeditions/concierge
地图与位置 旅行与酒店 公开且可连接 MCP 2025-11-25

此 MCP 可以做什么

Searches safari destinations and travel content, builds and prices day-by-day itineraries, and supports paid itinerary verification and booking services.

add_activity
Add Activity to Day
Add an activity to a specific day and time slot (morning/afternoon/evening). Optionally link to a content item using its type and id. Requires a bearer token.
输入模式
{'type': 'object', '$schema': 'https://json-schema.org/draft/2020-12/schema', 'required': ['itinerary_id', 'day_id', 'slot', 'title'], 'properties': {'slot': {'enum': ['morning', 'afternoon', 'evening'], 'type': 'string'}, 'title': {'type': 'string', 'minLength': 1, 'description': 'Short title for the activity'}, 'day_id': {'type': 'string', 'format': 'uuid', 'pattern': '^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$', 'description': 'The day UUID to add the activity to'}, 'description': {'type': 'string'}, 'itinerary_id': {'type': 'string', 'format': 'uuid', 'pattern': '^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$', 'description': 'Parent itinerary UUID'}, 'wp_content_id': {'type': 'integer', 'maximum': 9007199254740991, 'minimum': -9007199254740991, 'description': 'Source content id'}, 'wp_content_type': {'enum': ['itinerary', 'activity', 'destination', 'post'], 'type': 'string', 'description': 'Content type to link'}, 'duration_minutes': {'type': 'integer', 'maximum': 9007199254740991, 'minimum': 5}}}
add_day
Add Day to Itinerary
Append an extra day to a concierge itinerary and increment num_days. Requires a bearer token.
输入模式
{'type': 'object', '$schema': 'https://json-schema.org/draft/2020-12/schema', 'required': ['itinerary_id'], 'properties': {'notes': {'type': 'string'}, 'title': {'type': 'string', 'description': "Optional day label, e.g. 'Drive to Hwange'"}, 'itinerary_id': {'type': 'string', 'format': 'uuid', 'pattern': '^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$'}}}
create_itinerary
Create Itinerary
Create a new (empty) itinerary attributed to the Iconic Expeditions concierge, made public and returned with its share link. Days are created automatically. Requires a bearer token.
输入模式
{'type': 'object', '$schema': 'https://json-schema.org/draft/2020-12/schema', 'required': ['title', 'num_days'], 'properties': {'title': {'type': 'string', 'minLength': 1, 'description': "Itinerary title, e.g. '7-Day Hwange Safari'"}, 'num_days': {'type': 'integer', 'maximum': 30, 'minimum': 1, 'description': 'Number of days'}, 'start_date': {'type': 'string', 'description': "Optional ISO date string for day 1, e.g. '2025-06-01'"}, 'description': {'type': 'string', 'description': 'Optional short description'}}}
delete_activity
Delete Activity
Remove an activity from a concierge itinerary day. Requires a bearer token.
输入模式
{'type': 'object', '$schema': 'https://json-schema.org/draft/2020-12/schema', 'required': ['activity_id'], 'properties': {'activity_id': {'type': 'string', 'format': 'uuid', 'pattern': '^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$'}}}
delete_itinerary
Delete Itinerary
Permanently delete a concierge itinerary and all its days and activities. Requires a bearer token.
输入模式
{'type': 'object', '$schema': 'https://json-schema.org/draft/2020-12/schema', 'required': ['itinerary_id'], 'properties': {'itinerary_id': {'type': 'string', 'format': 'uuid', 'pattern': '^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$'}}}
generate_itinerary_from_places
Generate Itinerary from Places
Give at least 3 places plus optional traveller preferences and let the AI concierge build a full, bespoke day-by-day itinerary. It mines Iconic Expeditions content for real detail and synthesizes an ORIGINAL plan tailored to the guest (never a copy of a published itinerary). Attributed to the Iconic Expeditions account and made public. Returns immediately with the itinerary id + share link; poll get_itinerary for progress (generation_status: pending -> building -> complete). Requires a bearer token.
输入模式
{'type': 'object', '$schema': 'https://json-schema.org/draft/2020-12/schema', 'required': ['title', 'places', 'num_days'], 'properties': {'title': {'type': 'string', 'minLength': 1, 'description': "Itinerary title, e.g. 'Highlights of Zimbabwe'"}, 'places': {'type': 'array', 'items': {'type': 'string', 'minLength': 1}, 'minItems': 3, 'description': "At least 3 place names, e.g. ['Victoria Falls', 'Hwange', 'Mana Pools']"}, 'language': {'enum': ['en', 'ru', 'zh'], 'type': 'string', 'description': "Language for day titles, notes, and activity text: 'en' (English), 'ru' (Russian), or 'zh' (Chinese). Defaults to English."}, 'num_days': {'type': 'integer', 'maximum': 30, 'minimum': 1, 'description': 'Number of days for the trip'}, 'preferences': {'type': 'string', 'description': 'Traveller preferences that should shape the plan: pace, interests, budget, travel style'}}}
get_content
Get Content Item
Fetch a single content item by type and id, walking the content chain (WordPress -> cache). Returns the item with its `source`.
输入模式
{'type': 'object', '$schema': 'https://json-schema.org/draft/2020-12/schema', 'required': ['type', 'id'], 'properties': {'id': {'type': 'integer', 'maximum': 9007199254740991, 'minimum': -9007199254740991, 'description': 'Source content id (WordPress post id)'}, 'type': {'enum': ['itinerary', 'activity', 'destination', 'post'], 'type': 'string'}}}
get_destination
Get Destination
Get full details for a single destination by slug or id.
输入模式
{'type': 'object', '$schema': 'https://json-schema.org/draft/2020-12/schema', 'required': ['identifier'], 'properties': {'identifier': {'type': 'string', 'description': 'Either a destination id or its URL slug'}}}
get_itinerary
Get Itinerary
Get a full itinerary with all days and activities, sorted by day number and time slot. Public itineraries are readable without a token; private ones require the owning token.
输入模式
{'type': 'object', '$schema': 'https://json-schema.org/draft/2020-12/schema', 'required': ['itinerary_id'], 'properties': {'itinerary_id': {'type': 'string', 'format': 'uuid', 'pattern': '^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$', 'description': 'The UUID of the itinerary'}}}
get_itinerary_dossier
Get Itinerary Dossier
Read an itinerary's planning dossier: its legs, month-by-month seasonality, cost model, booking order, field notes and open choices. Public — no token needed. Returns nulls for blocks the itinerary doesn't have; older itineraries have none of them.
输入模式
{'type': 'object', '$schema': 'https://json-schema.org/draft/2020-12/schema', 'required': ['itinerary_id'], 'properties': {'itinerary_id': {'type': 'string', 'format': 'uuid', 'pattern': '^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$'}}}
get_pricing
Get Concierge Pricing
List the paid concierge service tiers and their prices: itinerary verification, verification + full booking, and full guided service. Read-only and public — use this to quote a traveller before they buy.
输入模式
{'type': 'object', '$schema': 'https://json-schema.org/draft/2020-12/schema', 'properties': {}}
get_wp_content
Get Content Item (alias)
Alias of get_content, kept for backwards compatibility. Prefer get_content.
输入模式
{'type': 'object', '$schema': 'https://json-schema.org/draft/2020-12/schema', 'required': ['type', 'id'], 'properties': {'id': {'type': 'integer', 'maximum': 9007199254740991, 'minimum': -9007199254740991, 'description': 'Source content id (WordPress post id)'}, 'type': {'enum': ['itinerary', 'activity', 'destination', 'post'], 'type': 'string'}}}
list_destinations
List Destinations
List destinations from the database, optionally filtered by region or category.
输入模式
{'type': 'object', '$schema': 'https://json-schema.org/draft/2020-12/schema', 'properties': {'limit': {'type': 'integer', 'default': 20, 'maximum': 50, 'minimum': 1}, 'region': {'type': 'string', 'description': "Filter by region name, e.g. 'Matabeleland North'"}, 'category': {'type': 'string', 'description': "Filter by category, e.g. 'National Park'"}}}
list_itineraries
List Concierge Itineraries
List itineraries created by the Iconic Expeditions concierge, most recent first. Requires a bearer token.
输入模式
{'type': 'object', '$schema': 'https://json-schema.org/draft/2020-12/schema', 'properties': {}}
price_itinerary
Price an Itinerary
Price an itinerary's cost model against a selection: a comfort tier, any per-line choices, a trip length and a traveller count. Returns the per-person line breakdown and the group total. Public — no token needed. Amounts are in minor units. Call get_itinerary_dossier first for the tier and option ids.
输入模式
{'type': 'object', '$schema': 'https://json-schema.org/draft/2020-12/schema', 'required': ['itinerary_id'], 'properties': {'nights': {'type': 'integer', 'maximum': 9007199254740991, 'minimum': 1, 'description': "Defaults to the cost model's reference length"}, 'tier_id': {'type': 'string', 'description': 'Defaults to the cheapest tier'}, 'option_ids': {'type': 'array', 'items': {'type': 'object', 'required': ['group_id', 'option_id'], 'properties': {'group_id': {'type': 'string'}, 'option_id': {'type': 'string'}}}, 'description': 'One entry per cost option group you want to choose in'}, 'travellers': {'type': 'integer', 'default': 1, 'maximum': 9007199254740991, 'minimum': 1}, 'itinerary_id': {'type': 'string', 'format': 'uuid', 'pattern': '^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$'}}}
request_bookings
Request Verification + Bookings ($100)
Start a PAID booking service: verification PLUS we make all the bookings (lodges, transfers, activities, permits). Returns a Stripe checkout URL. Requires a bearer token.
输入模式
{'type': 'object', '$schema': 'https://json-schema.org/draft/2020-12/schema', 'required': ['itinerary_id'], 'properties': {'notes': {'type': 'string'}, 'itinerary_id': {'type': 'string', 'format': 'uuid', 'pattern': '^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$'}, 'contact_email': {'type': 'string', 'format': 'email', 'pattern': "^(?!\\.)(?!.*\\.\\.)([A-Za-z0-9_'+\\-\\.]*)[A-Za-z0-9_+-]@([A-Za-z0-9][A-Za-z0-9\\-]*\\.)+[A-Za-z]{2,}$"}}}
request_full_service
Request Full Guided Service ($500 deposit)
Start a PAID full-service, fully-guided expedition with Iconic Expeditions guides. This $500 is a deposit; the final custom price is quoted by an expert afterward based on the itinerary. Returns a Stripe checkout URL. Requires a bearer token.
输入模式
{'type': 'object', '$schema': 'https://json-schema.org/draft/2020-12/schema', 'required': ['itinerary_id'], 'properties': {'notes': {'type': 'string'}, 'itinerary_id': {'type': 'string', 'format': 'uuid', 'pattern': '^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$'}, 'contact_email': {'type': 'string', 'format': 'email', 'pattern': "^(?!\\.)(?!.*\\.\\.)([A-Za-z0-9_'+\\-\\.]*)[A-Za-z0-9_+-]@([A-Za-z0-9][A-Za-z0-9\\-]*\\.)+[A-Za-z]{2,}$"}}}
request_verification
Request Itinerary Verification ($50)
Start a PAID itinerary verification. Our travel experts manually confirm availability, seasonality, routing and current lodge rates, then return a feasibility report and final price. Returns a Stripe checkout URL. Requires a bearer token.
输入模式
{'type': 'object', '$schema': 'https://json-schema.org/draft/2020-12/schema', 'required': ['itinerary_id'], 'properties': {'notes': {'type': 'string', 'description': 'Anything the experts should know (dates, group size, budget)'}, 'itinerary_id': {'type': 'string', 'format': 'uuid', 'pattern': '^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$'}, 'contact_email': {'type': 'string', 'format': 'email', 'pattern': "^(?!\\.)(?!.*\\.\\.)([A-Za-z0-9_'+\\-\\.]*)[A-Za-z0-9_+-]@([A-Za-z0-9][A-Za-z0-9\\-]*\\.)+[A-Za-z]{2,}$", 'description': 'Where to send the report + receipt'}}}
search_content
Search Content
Search Iconic Expeditions content across itineraries, activities, destinations, and posts. Flows through the content chain (WordPress -> local cache -> AI fallback), so gaps WordPress doesn't cover are filled with clearly-labeled AI-synthesized results. Each item includes a `source` field (wordpress | cache | ai).
输入模式
{'type': 'object', '$schema': 'https://json-schema.org/draft/2020-12/schema', 'required': ['type'], 'properties': {'type': {'enum': ['itinerary', 'activity', 'destination', 'post'], 'type': 'string', 'description': 'Content type to search'}, 'search': {'type': 'string', 'description': 'Search keyword'}, 'per_page': {'type': 'integer', 'default': 10, 'maximum': 20, 'minimum': 1}}}
search_wp_content
Search Content (alias)
Alias of search_content, kept for backwards compatibility. Prefer search_content.
输入模式
{'type': 'object', '$schema': 'https://json-schema.org/draft/2020-12/schema', 'required': ['type'], 'properties': {'type': {'enum': ['itinerary', 'activity', 'destination', 'post'], 'type': 'string', 'description': 'Content type to search'}, 'search': {'type': 'string', 'description': 'Search keyword'}, 'per_page': {'type': 'integer', 'default': 10, 'maximum': 20, 'minimum': 1}}}
set_itinerary_dossier
Write an Itinerary's Dossier
Write the planning layer above an itinerary's day-by-day. Every block is optional — send only the ones you mean to write. Each block you DO send REPLACES that block entirely, so restate it in full: a partial legs list silently deletes the rest of the legs. Requires a bearer token.
输入模式
{'type': 'object', '$schema': 'https://json-schema.org/draft/2020-12/schema', 'required': ['itinerary_id'], 'properties': {'legs': {'type': 'array', 'items': {'type': 'object', 'required': ['title', 'start_day', 'end_day'], 'properties': {'title': {'type': 'string', 'minLength': 1, 'description': 'Where this stretch is, in a word or two'}, 'end_day': {'type': 'integer', 'maximum': 9007199254740991, 'minimum': 1}, 'summary': {'type': 'string', 'description': 'A sentence or two on what these nights are for'}, 'start_day': {'type': 'integer', 'maximum': 9007199254740991, 'minimum': 1}}}, 'minItems': 1, 'description': "The route's chapters. Every day must belong to exactly one leg, and legs must not overlap."}, 'choices': {'type': 'array', 'items': {'type': 'object', 'required': ['title', 'options'], 'properties': {'title': {'type': 'string', 'minLength': 1, 'description': "'Pick your coast'"}, 'options': {'type': 'array', 'items': {'type': 'object', 'required': ['label', 'body'], 'properties': {'body': {'type': 'string', 'minLength': 1, 'description': 'What this option is actually like, and who should choose it'}, 'label': {'type': 'string', 'minLength': 1}, 'subtitle': {'type': 'string'}}}, 'minItems': 2}}}, 'minItems': 1, 'description': 'Either/ors deliberately left open for the traveller'}, 'countries': {'type': 'integer', 'maximum': 9007199254740991, 'minimum': 1, 'description': 'How many countries the route crosses'}, 'cost_model': {'type': 'object', 'required': ['currency', 'reference_nights', 'lines', 'tiers'], 'properties': {'lines': {'type': 'array', 'items': {'type': 'object', 'required': ['key', 'label', 'scales_with_length'], 'properties': {'key': {'type': 'string', 'minLength': 1, 'description': "Short stable key used by tiers and option groups â\x80\x94 'land', 'permits', 'park_fees', 'flights'"}, 'label': {'type': 'string', 'minLength': 1}, 'scales_with_length': {'type': 'boolean', 'description': 'True for nightly costs (camps, park fees), false for per-trip costs (permits, internal flights)'}}}, 'minItems': 1}, 'notes': {'type': 'string', 'description': 'What the figures exclude and how firm they are'}, 'tiers': {'type': 'array', 'items': {'type': 'object', 'required': ['label', 'amounts'], 'properties': {'label': {'type': 'string', 'minLength': 1, 'description': "'Lean', 'Mid-range', 'Luxury'"}, 'amounts': {'type': 'array', 'items': {'type': 'object', 'required': ['line_key', 'amount'], 'properties': {'amount': {'type': 'integer', 'maximum': 9007199254740991, 'minimum': 0, 'description': 'Per person, in minor units â\x80\x94 620000 for $6,200'}, 'line_key': {'type': 'string'}}}, 'minItems': 1, 'description': 'One entry per cost line'}}}, 'minItems': 1}, 'currency': {'type': 'string', 'maxLength': 3, 'minLength': 3, 'description': "ISO 4217, lowercase â\x80\x94 'usd'"}, 'option_groups': {'type': 'array', 'items': {'type': 'object', 'required': ['label', 'line_key', 'options'], 'properties': {'label': {'type': 'string', 'minLength': 1}, 'options': {'type': 'array', 'items': {'type': 'object', 'required': ['label', 'amount'], 'properties': {'label': {'type': 'string', 'minLength': 1}, 'amount': {'type': 'integer', 'maximum': 9007199254740991, 'minimum': 0, 'description': 'Per person, in minor units â\x80\x94 620000 for $6,200'}, 'is_default': {'type': 'boolean'}}}, 'minItems': 2}, 'line_key': {'type': 'string', 'minLength': 1, 'description': 'Which cost line this choice overrides'}}}}, 'length_options': {'type': 'array', 'items': {'type': 'integer', 'maximum': 9007199254740991, 'minimum': 1}, 'description': 'Shorter or longer variants offered to the reader, in nights'}, 'reference_nights': {'type': 'integer', 'maximum': 9007199254740991, 'minimum': 1, 'description': 'The trip length the amounts are quoted at'}}, 'description': 'Per-person breakdown lines, amounts per comfort tier, and any per-line choices'}, 'field_notes': {'type': 'array', 'items': {'type': 'object', 'required': ['heading', 'body'], 'properties': {'body': {'type': 'string', 'minLength': 1}, 'heading': {'type': 'string', 'minLength': 1, 'description': "'Visas', 'Yellow fever', 'Luggage'"}}}, 'minItems': 1, 'description': 'Visas, certificates, luggage limits, kit'}, 'seasonality': {'type': 'object', 'required': ['rows', 'months', 'recommended_month'], 'properties': {'rows': {'type': 'array', 'items': {'type': 'object', 'required': ['label', 'scores'], 'properties': {'label': {'type': 'string', 'minLength': 1, 'description': 'What is being scored â\x80\x94 a wildlife event, a trail condition, a sea state'}, 'scores': {'type': 'array', 'items': {'type': 'integer', 'maximum': 3, 'minimum': 0}, 'maxItems': 12, 'minItems': 12, 'description': 'January first. 0 = avoid, 1 = poor, 2 = workable, 3 = peak'}}}, 'minItems': 1}, 'months': {'type': 'array', 'items': {'type': 'object', 'required': ['month', 'rank', 'verdict', 'tags'], 'properties': {'rank': {'enum': ['primary', 'alternative', 'workable', 'avoid'], 'type': 'string'}, 'tags': {'type': 'array', 'items': {'type': 'string'}, 'maxItems': 4, 'description': "Short labels: 'Peak crossings', 'Books out first', 'Avoid'"}, 'month': {'type': 'integer', 'maximum': 12, 'minimum': 1}, 'verdict': {'type': 'string', 'minLength': 1, 'description': "Why this month is or isn't the one, in two or three sentences"}}}, 'minItems': 1}, 'recommended_month': {'type': 'integer', 'maximum': 12, 'minimum': 1, 'description': 'The month this plan is actually built around'}}, 'description': 'One row per thing the trip is timed around, scored 0-3 across all twelve months, plus a verdict per month worth arguing about'}, 'itinerary_id': {'type': 'string', 'format': 'uuid', 'pattern': '^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$'}, 'booking_order': {'type': 'array', 'items': {'type': 'object', 'required': ['title', 'detail'], 'properties': {'title': {'type': 'string', 'minLength': 1}, 'detail': {'type': 'string', 'minLength': 1, 'description': 'Why it sits at this point in the order'}}}, 'minItems': 1, 'description': 'What to book, in the order it has to happen'}}}
update_itinerary
Update Itinerary
Update metadata (title, description, dates, public status) on a concierge itinerary. Requires a bearer token.
输入模式
{'type': 'object', '$schema': 'https://json-schema.org/draft/2020-12/schema', 'required': ['itinerary_id'], 'properties': {'title': {'type': 'string'}, 'is_public': {'type': 'boolean', 'description': 'Set false to unpublish the shareable link'}, 'start_date': {'type': 'string'}, 'description': {'type': 'string'}, 'itinerary_id': {'type': 'string', 'format': 'uuid', 'pattern': '^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$'}}}
write_itinerary_day_detail
Write a Day's Detail
Write one day out at length — why it is shaped this way, what its timing depends on, what the alternatives cost — plus up to three callouts. Replaces that day's existing narrative and callouts. Requires a bearer token.
输入模式
{'type': 'object', '$schema': 'https://json-schema.org/draft/2020-12/schema', 'required': ['itinerary_id', 'day_number', 'narrative'], 'properties': {'callouts': {'type': 'array', 'items': {'type': 'object', 'required': ['kind', 'title', 'body'], 'properties': {'body': {'type': 'string', 'minLength': 1}, 'kind': {'enum': ['alternative', 'swap', 'warning', 'note'], 'type': 'string'}, 'title': {'type': 'string', 'minLength': 1, 'description': "'Alternative', 'Swap worth considering'"}}}, 'maxItems': 3}, 'narrative': {'type': 'string', 'minLength': 1, 'description': 'Two or three short paragraphs, separated by blank lines. Plain text, no markup.'}, 'day_number': {'type': 'integer', 'maximum': 9007199254740991, 'minimum': 1}, 'itinerary_id': {'type': 'string', 'format': 'uuid', 'pattern': '^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$'}}}
已添加
request_full_service
2026年9月17日 12:35
已添加
request_bookings
2026年9月17日 12:35
已添加
request_verification
2026年9月17日 12:35
已添加
get_pricing
2026年9月17日 12:35
已添加
delete_activity
2026年9月17日 12:35
已添加
add_activity
2026年9月17日 12:35
已添加
write_itinerary_day_detail
2026年9月17日 12:35
已添加
set_itinerary_dossier
2026年9月17日 12:35
已添加
price_itinerary
2026年9月17日 12:35
已添加
get_itinerary_dossier
2026年9月17日 12:35
已添加
add_day
2026年9月17日 12:35
已添加
delete_itinerary
2026年9月17日 12:35
已添加
update_itinerary
2026年9月17日 12:35
已添加
generate_itinerary_from_places
2026年9月17日 12:35
已添加
create_itinerary
2026年9月17日 12:35
已添加
list_itineraries
2026年9月17日 12:35
已添加
get_itinerary
2026年9月17日 12:35
已添加
get_destination
2026年9月17日 12:35
已添加
list_destinations
2026年9月17日 12:35
已添加
get_wp_content
2026年9月17日 12:35
已添加
get_content
2026年9月17日 12:35
已添加
search_wp_content
2026年9月17日 12:35
已添加
search_content
2026年9月17日 12:35