Server definition
- Hash
- sha256:c6ac70d634d46b28d07e0e4865990bff6381d0482d79e05cedb2b9f08506a406
- What it is
- What a remote MCP server returned when asked what it offers: 23 tools
The blob, as servednamed by its sha256
{
"instructions": null,
"tools": [
{
"description": "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.",
"inputSchema": {
"$schema": "https://json-schema.org/draft/2020-12/schema",
"properties": {
"day_id": {
"description": "The day UUID to add the activity to",
"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)$",
"type": "string"
},
"description": {
"type": "string"
},
"duration_minutes": {
"maximum": 9007199254740991,
"minimum": 5,
"type": "integer"
},
"itinerary_id": {
"description": "Parent itinerary UUID",
"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)$",
"type": "string"
},
"slot": {
"enum": [
"morning",
"afternoon",
"evening"
],
"type": "string"
},
"title": {
"description": "Short title for the activity",
"minLength": 1,
"type": "string"
},
"wp_content_id": {
"description": "Source content id",
"maximum": 9007199254740991,
"minimum": -9007199254740991,
"type": "integer"
},
"wp_content_type": {
"description": "Content type to link",
"enum": [
"itinerary",
"activity",
"destination",
"post"
],
"type": "string"
}
},
"required": [
"itinerary_id",
"day_id",
"slot",
"title"
],
"type": "object"
},
"name": "add_activity",
"outputSchema": null
},
{
"description": "Append an extra day to a concierge itinerary and increment num_days. Requires a bearer token.",
"inputSchema": {
"$schema": "https://json-schema.org/draft/2020-12/schema",
"properties": {
"itinerary_id": {
"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)$",
"type": "string"
},
"notes": {
"type": "string"
},
"title": {
"description": "Optional day label, e.g. 'Drive to Hwange'",
"type": "string"
}
},
"required": [
"itinerary_id"
],
"type": "object"
},
"name": "add_day",
"outputSchema": null
},
{
"description": "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.",
"inputSchema": {
"$schema": "https://json-schema.org/draft/2020-12/schema",
"properties": {
"description": {
"description": "Optional short description",
"type": "string"
},
"num_days": {
"description": "Number of days",
"maximum": 30,
"minimum": 1,
"type": "integer"
},
"start_date": {
"description": "Optional ISO date string for day 1, e.g. '2025-06-01'",
"type": "string"
},
"title": {
"description": "Itinerary title, e.g. '7-Day Hwange Safari'",
"minLength": 1,
"type": "string"
}
},
"required": [
"title",
"num_days"
],
"type": "object"
},
"name": "create_itinerary",
"outputSchema": null
},
{
"description": "Remove an activity from a concierge itinerary day. Requires a bearer token.",
"inputSchema": {
"$schema": "https://json-schema.org/draft/2020-12/schema",
"properties": {
"activity_id": {
"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)$",
"type": "string"
}
},
"required": [
"activity_id"
],
"type": "object"
},
"name": "delete_activity",
"outputSchema": null
},
{
"description": "Permanently delete a concierge itinerary and all its days and activities. Requires a bearer token.",
"inputSchema": {
"$schema": "https://json-schema.org/draft/2020-12/schema",
"properties": {
"itinerary_id": {
"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)$",
"type": "string"
}
},
"required": [
"itinerary_id"
],
"type": "object"
},
"name": "delete_itinerary",
"outputSchema": null
},
{
"description": "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.",
"inputSchema": {
"$schema": "https://json-schema.org/draft/2020-12/schema",
"properties": {
"language": {
"description": "Language for day titles, notes, and activity text: 'en' (English), 'ru' (Russian), or 'zh' (Chinese). Defaults to English.",
"enum": [
"en",
"ru",
"zh"
],
"type": "string"
},
"num_days": {
"description": "Number of days for the trip",
"maximum": 30,
"minimum": 1,
"type": "integer"
},
"places": {
"description": "At least 3 place names, e.g. ['Victoria Falls', 'Hwange', 'Mana Pools']",
"items": {
"minLength": 1,
"type": "string"
},
"minItems": 3,
"type": "array"
},
"preferences": {
"description": "Traveller preferences that should shape the plan: pace, interests, budget, travel style",
"type": "string"
},
"title": {
"description": "Itinerary title, e.g. 'Highlights of Zimbabwe'",
"minLength": 1,
"type": "string"
}
},
"required": [
"title",
"places",
"num_days"
],
"type": "object"
},
"name": "generate_itinerary_from_places",
"outputSchema": null
},
{
"description": "Fetch a single content item by type and id, walking the content chain (WordPress -> cache). Returns the item with its `source`.",
"inputSchema": {
"$schema": "https://json-schema.org/draft/2020-12/schema",
"properties": {
"id": {
"description": "Source content id (WordPress post id)",
"maximum": 9007199254740991,
"minimum": -9007199254740991,
"type": "integer"
},
"type": {
"enum": [
"itinerary",
"activity",
"destination",
"post"
],
"type": "string"
}
},
"required": [
"type",
"id"
],
"type": "object"
},
"name": "get_content",
"outputSchema": null
},
{
"description": "Get full details for a single destination by slug or id.",
"inputSchema": {
"$schema": "https://json-schema.org/draft/2020-12/schema",
"properties": {
"identifier": {
"description": "Either a destination id or its URL slug",
"type": "string"
}
},
"required": [
"identifier"
],
"type": "object"
},
"name": "get_destination",
"outputSchema": null
},
{
"description": "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.",
"inputSchema": {
"$schema": "https://json-schema.org/draft/2020-12/schema",
"properties": {
"itinerary_id": {
"description": "The UUID of the itinerary",
"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)$",
"type": "string"
}
},
"required": [
"itinerary_id"
],
"type": "object"
},
"name": "get_itinerary",
"outputSchema": null
},
{
"description": "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.",
"inputSchema": {
"$schema": "https://json-schema.org/draft/2020-12/schema",
"properties": {
"itinerary_id": {
"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)$",
"type": "string"
}
},
"required": [
"itinerary_id"
],
"type": "object"
},
"name": "get_itinerary_dossier",
"outputSchema": null
},
{
"description": "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.",
"inputSchema": {
"$schema": "https://json-schema.org/draft/2020-12/schema",
"properties": {},
"type": "object"
},
"name": "get_pricing",
"outputSchema": null
},
{
"description": "Alias of get_content, kept for backwards compatibility. Prefer get_content.",
"inputSchema": {
"$schema": "https://json-schema.org/draft/2020-12/schema",
"properties": {
"id": {
"description": "Source content id (WordPress post id)",
"maximum": 9007199254740991,
"minimum": -9007199254740991,
"type": "integer"
},
"type": {
"enum": [
"itinerary",
"activity",
"destination",
"post"
],
"type": "string"
}
},
"required": [
"type",
"id"
],
"type": "object"
},
"name": "get_wp_content",
"outputSchema": null
},
{
"description": "List destinations from the database, optionally filtered by region or category.",
"inputSchema": {
"$schema": "https://json-schema.org/draft/2020-12/schema",
"properties": {
"category": {
"description": "Filter by category, e.g. 'National Park'",
"type": "string"
},
"limit": {
"default": 20,
"maximum": 50,
"minimum": 1,
"type": "integer"
},
"region": {
"description": "Filter by region name, e.g. 'Matabeleland North'",
"type": "string"
}
},
"type": "object"
},
"name": "list_destinations",
"outputSchema": null
},
{
"description": "List itineraries created by the Iconic Expeditions concierge, most recent first. Requires a bearer token.",
"inputSchema": {
"$schema": "https://json-schema.org/draft/2020-12/schema",
"properties": {},
"type": "object"
},
"name": "list_itineraries",
"outputSchema": null
},
{
"description": "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.",
"inputSchema": {
"$schema": "https://json-schema.org/draft/2020-12/schema",
"properties": {
"itinerary_id": {
"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)$",
"type": "string"
},
"nights": {
"description": "Defaults to the cost model's reference length",
"maximum": 9007199254740991,
"minimum": 1,
"type": "integer"
},
"option_ids": {
"description": "One entry per cost option group you want to choose in",
"items": {
"properties": {
"group_id": {
"type": "string"
},
"option_id": {
"type": "string"
}
},
"required": [
"group_id",
"option_id"
],
"type": "object"
},
"type": "array"
},
"tier_id": {
"description": "Defaults to the cheapest tier",
"type": "string"
},
"travellers": {
"default": 1,
"maximum": 9007199254740991,
"minimum": 1,
"type": "integer"
}
},
"required": [
"itinerary_id"
],
"type": "object"
},
"name": "price_itinerary",
"outputSchema": null
},
{
"description": "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.",
"inputSchema": {
"$schema": "https://json-schema.org/draft/2020-12/schema",
"properties": {
"contact_email": {
"format": "email",
"pattern": "^(?!\\.)(?!.*\\.\\.)([A-Za-z0-9_'+\\-\\.]*)[A-Za-z0-9_+-]@([A-Za-z0-9][A-Za-z0-9\\-]*\\.)+[A-Za-z]{2,}$",
"type": "string"
},
"itinerary_id": {
"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)$",
"type": "string"
},
"notes": {
"type": "string"
}
},
"required": [
"itinerary_id"
],
"type": "object"
},
"name": "request_bookings",
"outputSchema": null
},
{
"description": "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.",
"inputSchema": {
"$schema": "https://json-schema.org/draft/2020-12/schema",
"properties": {
"contact_email": {
"format": "email",
"pattern": "^(?!\\.)(?!.*\\.\\.)([A-Za-z0-9_'+\\-\\.]*)[A-Za-z0-9_+-]@([A-Za-z0-9][A-Za-z0-9\\-]*\\.)+[A-Za-z]{2,}$",
"type": "string"
},
"itinerary_id": {
"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)$",
"type": "string"
},
"notes": {
"type": "string"
}
},
"required": [
"itinerary_id"
],
"type": "object"
},
"name": "request_full_service",
"outputSchema": null
},
{
"description": "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.",
"inputSchema": {
"$schema": "https://json-schema.org/draft/2020-12/schema",
"properties": {
"contact_email": {
"description": "Where to send the report + receipt",
"format": "email",
"pattern": "^(?!\\.)(?!.*\\.\\.)([A-Za-z0-9_'+\\-\\.]*)[A-Za-z0-9_+-]@([A-Za-z0-9][A-Za-z0-9\\-]*\\.)+[A-Za-z]{2,}$",
"type": "string"
},
"itinerary_id": {
"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)$",
"type": "string"
},
"notes": {
"description": "Anything the experts should know (dates, group size, budget)",
"type": "string"
}
},
"required": [
"itinerary_id"
],
"type": "object"
},
"name": "request_verification",
"outputSchema": null
},
{
"description": "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).",
"inputSchema": {
"$schema": "https://json-schema.org/draft/2020-12/schema",
"properties": {
"per_page": {
"default": 10,
"maximum": 20,
"minimum": 1,
"type": "integer"
},
"search": {
"description": "Search keyword",
"type": "string"
},
"type": {
"description": "Content type to search",
"enum": [
"itinerary",
"activity",
"destination",
"post"
],
"type": "string"
}
},
"required": [
"type"
],
"type": "object"
},
"name": "search_content",
"outputSchema": null
},
{
"description": "Alias of search_content, kept for backwards compatibility. Prefer search_content.",
"inputSchema": {
"$schema": "https://json-schema.org/draft/2020-12/schema",
"properties": {
"per_page": {
"default": 10,
"maximum": 20,
"minimum": 1,
"type": "integer"
},
"search": {
"description": "Search keyword",
"type": "string"
},
"type": {
"description": "Content type to search",
"enum": [
"itinerary",
"activity",
"destination",
"post"
],
"type": "string"
}
},
"required": [
"type"
],
"type": "object"
},
"name": "search_wp_content",
"outputSchema": null
},
{
"description": "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.",
"inputSchema": {
"$schema": "https://json-schema.org/draft/2020-12/schema",
"properties": {
"booking_order": {
"description": "What to book, in the order it has to happen",
"items": {
"properties": {
"detail": {
"description": "Why it sits at this point in the order",
"minLength": 1,
"type": "string"
},
"title": {
"minLength": 1,
"type": "string"
}
},
"required": [
"title",
"detail"
],
"type": "object"
},
"minItems": 1,
"type": "array"
},
"choices": {
"description": "Either/ors deliberately left open for the traveller",
"items": {
"properties": {
"options": {
"items": {
"properties": {
"body": {
"description": "What this option is actually like, and who should choose it",
"minLength": 1,
"type": "string"
},
"label": {
"minLength": 1,
"type": "string"
},
"subtitle": {
"type": "string"
}
},
"required": [
"label",
"body"
],
"type": "object"
},
"minItems": 2,
"type": "array"
},
"title": {
"description": "'Pick your coast'",
"minLength": 1,
"type": "string"
}
},
"required": [
"title",
"options"
],
"type": "object"
},
"minItems": 1,
"type": "array"
},
"cost_model": {
"description": "Per-person breakdown lines, amounts per comfort tier, and any per-line choices",
"properties": {
"currency": {
"description": "ISO 4217, lowercase — 'usd'",
"maxLength": 3,
"minLength": 3,
"type": "string"
},
"length_options": {
"description": "Shorter or longer variants offered to the reader, in nights",
"items": {
"maximum": 9007199254740991,
"minimum": 1,
"type": "integer"
},
"type": "array"
},
"lines": {
"items": {
"properties": {
"key": {
"description": "Short stable key used by tiers and option groups — 'land', 'permits', 'park_fees', 'flights'",
"minLength": 1,
"type": "string"
},
"label": {
"minLength": 1,
"type": "string"
},
"scales_with_length": {
"description": "True for nightly costs (camps, park fees), false for per-trip costs (permits, internal flights)",
"type": "boolean"
}
},
"required": [
"key",
"label",
"scales_with_length"
],
"type": "object"
},
"minItems": 1,
"type": "array"
},
"notes": {
"description": "What the figures exclude and how firm they are",
"type": "string"
},
"option_groups": {
"items": {
"properties": {
"label": {
"minLength": 1,
"type": "string"
},
"line_key": {
"description": "Which cost line this choice overrides",
"minLength": 1,
"type": "string"
},
"options": {
"items": {
"properties": {
"amount": {
"description": "Per person, in minor units — 620000 for $6,200",
"maximum": 9007199254740991,
"minimum": 0,
"type": "integer"
},
"is_default": {
"type": "boolean"
},
"label": {
"minLength": 1,
"type": "string"
}
},
"required": [
"label",
"amount"
],
"type": "object"
},
"minItems": 2,
"type": "array"
}
},
"required": [
"label",
"line_key",
"options"
],
"type": "object"
},
"type": "array"
},
"reference_nights": {
"description": "The trip length the amounts are quoted at",
"maximum": 9007199254740991,
"minimum": 1,
"type": "integer"
},
"tiers": {
"items": {
"properties": {
"amounts": {
"description": "One entry per cost line",
"items": {
"properties": {
"amount": {
"description": "Per person, in minor units — 620000 for $6,200",
"maximum": 9007199254740991,
"minimum": 0,
"type": "integer"
},
"line_key": {
"type": "string"
}
},
"required": [
"line_key",
"amount"
],
"type": "object"
},
"minItems": 1,
"type": "array"
},
"label": {
"description": "'Lean', 'Mid-range', 'Luxury'",
"minLength": 1,
"type": "string"
}
},
"required": [
"label",
"amounts"
],
"type": "object"
},
"minItems": 1,
"type": "array"
}
},
"required": [
"currency",
"reference_nights",
"lines",
"tiers"
],
"type": "object"
},
"countries": {
"description": "How many countries the route crosses",
"maximum": 9007199254740991,
"minimum": 1,
"type": "integer"
},
"field_notes": {
"description": "Visas, certificates, luggage limits, kit",
"items": {
"properties": {
"body": {
"minLength": 1,
"type": "string"
},
"heading": {
"description": "'Visas', 'Yellow fever', 'Luggage'",
"minLength": 1,
"type": "string"
}
},
"required": [
"heading",
"body"
],
"type": "object"
},
"minItems": 1,
"type": "array"
},
"itinerary_id": {
"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)$",
"type": "string"
},
"legs": {
"description": "The route's chapters. Every day must belong to exactly one leg, and legs must not overlap.",
"items": {
"properties": {
"end_day": {
"maximum": 9007199254740991,
"minimum": 1,
"type": "integer"
},
"start_day": {
"maximum": 9007199254740991,
"minimum": 1,
"type": "integer"
},
"summary": {
"description": "A sentence or two on what these nights are for",
"type": "string"
},
"title": {
"description": "Where this stretch is, in a word or two",
"minLength": 1,
"type": "string"
}
},
"required": [
"title",
"start_day",
"end_day"
],
"type": "object"
},
"minItems": 1,
"type": "array"
},
"seasonality": {
"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",
"properties": {
"months": {
"items": {
"properties": {
"month": {
"maximum": 12,
"minimum": 1,
"type": "integer"
},
"rank": {
"enum": [
"primary",
"alternative",
"workable",
"avoid"
],
"type": "string"
},
"tags": {
"description": "Short labels: 'Peak crossings', 'Books out first', 'Avoid'",
"items": {
"type": "string"
},
"maxItems": 4,
"type": "array"
},
"verdict": {
"description": "Why this month is or isn't the one, in two or three sentences",
"minLength": 1,
"type": "string"
}
},
"required": [
"month",
"rank",
"verdict",
"tags"
],
"type": "object"
},
"minItems": 1,
"type": "array"
},
"recommended_month": {
"description": "The month this plan is actually built around",
"maximum": 12,
"minimum": 1,
"type": "integer"
},
"rows": {
"items": {
"properties": {
"label": {
"description": "What is being scored — a wildlife event, a trail condition, a sea state",
"minLength": 1,
"type": "string"
},
"scores": {
"description": "January first. 0 = avoid, 1 = poor, 2 = workable, 3 = peak",
"items": {
"maximum": 3,
"minimum": 0,
"type": "integer"
},
"maxItems": 12,
"minItems": 12,
"type": "array"
}
},
"required": [
"label",
"scores"
],
"type": "object"
},
"minItems": 1,
"type": "array"
}
},
"required": [
"rows",
"months",
"recommended_month"
],
"type": "object"
}
},
"required": [
"itinerary_id"
],
"type": "object"
},
"name": "set_itinerary_dossier",
"outputSchema": null
},
{
"description": "Update metadata (title, description, dates, public status) on a concierge itinerary. Requires a bearer token.",
"inputSchema": {
"$schema": "https://json-schema.org/draft/2020-12/schema",
"properties": {
"description": {
"type": "string"
},
"is_public": {
"description": "Set false to unpublish the shareable link",
"type": "boolean"
},
"itinerary_id": {
"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)$",
"type": "string"
},
"start_date": {
"type": "string"
},
"title": {
"type": "string"
}
},
"required": [
"itinerary_id"
],
"type": "object"
},
"name": "update_itinerary",
"outputSchema": null
},
{
"description": "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.",
"inputSchema": {
"$schema": "https://json-schema.org/draft/2020-12/schema",
"properties": {
"callouts": {
"items": {
"properties": {
"body": {
"minLength": 1,
"type": "string"
},
"kind": {
"enum": [
"alternative",
"swap",
"warning",
"note"
],
"type": "string"
},
"title": {
"description": "'Alternative', 'Swap worth considering'",
"minLength": 1,
"type": "string"
}
},
"required": [
"kind",
"title",
"body"
],
"type": "object"
},
"maxItems": 3,
"type": "array"
},
"day_number": {
"maximum": 9007199254740991,
"minimum": 1,
"type": "integer"
},
"itinerary_id": {
"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)$",
"type": "string"
},
"narrative": {
"description": "Two or three short paragraphs, separated by blank lines. Plain text, no markup.",
"minLength": 1,
"type": "string"
}
},
"required": [
"itinerary_id",
"day_number",
"narrative"
],
"type": "object"
},
"name": "write_itinerary_day_detail",
"outputSchema": null
}
]
}Verify it yourself
curl -s https://api.teppi.xyz/v1/evidence/sha256:c6ac70d634d46b28d07e0e4865990bff6381d0482d79e05cedb2b9f08506a406 | sha256sum