Endpoints: 28,729MCP servers: 18,413Payout addresses: 2,071Paid calls: 1,552Letters: 14Defects: 1,331counted 4 min ago
teppi

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 yourselfcurl -s https://api.teppi.xyz/v1/evidence/sha256:c6ac70d634d46b28d07e0e4865990bff6381d0482d79e05cedb2b9f08506a406 | sha256sum