{"serverId":"mcp-registry/com.iconic-expeditions/concierge","tools":[{"name":"add_activity","fixed":{"name":"add_activity","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":{"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}}},"annotations":{"readOnlyHint":false,"destructiveHint":false,"idempotentHint":false},"title":"Add Activity to Day"},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: false, destructiveHint: false, idempotentHint: false (inferred from the name).","verify":true}],"tokensBefore":390,"tokensAfter":390},{"name":"add_day","fixed":{"name":"add_day","description":"Append an extra day to a concierge itinerary and increment num_days. Requires a bearer token.","inputSchema":{"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)$"}}},"annotations":{"readOnlyHint":false,"destructiveHint":false,"idempotentHint":false},"title":"Add Day to Itinerary"},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: false, destructiveHint: false, idempotentHint: false (inferred from the name).","verify":true}],"tokensBefore":167,"tokensAfter":167},{"name":"create_itinerary","fixed":{"name":"create_itinerary","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":{"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"}}},"annotations":{"readOnlyHint":false,"destructiveHint":false,"idempotentHint":false},"title":"Create Itinerary"},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: false, destructiveHint: false, idempotentHint: false (inferred from the name).","verify":true}],"tokensBefore":201,"tokensAfter":201},{"name":"delete_activity","fixed":{"name":"delete_activity","description":"Remove an activity from a concierge itinerary day. Requires a bearer token.","inputSchema":{"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)$"}}},"annotations":{"readOnlyHint":false,"destructiveHint":true,"idempotentHint":true},"title":"Delete Activity"},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: false, destructiveHint: true, idempotentHint: true (inferred from the name).","verify":true}],"tokensBefore":133,"tokensAfter":133},{"name":"delete_itinerary","fixed":{"name":"delete_itinerary","description":"Permanently delete a concierge itinerary and all its days and activities. Requires a bearer token.","inputSchema":{"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)$"}}},"annotations":{"readOnlyHint":false,"destructiveHint":true,"idempotentHint":true},"title":"Delete Itinerary"},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: false, destructiveHint: true, idempotentHint: true (inferred from the name).","verify":true}],"tokensBefore":140,"tokensAfter":140},{"name":"get_content","fixed":{"name":"get_content","description":"Fetch a single content item by type and id, walking the content chain (WordPress -> cache). Returns the item with its `source`.","inputSchema":{"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"}}},"annotations":{"readOnlyHint":true},"title":"Get Content Item"},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: true (inferred from the name).","verify":true}],"tokensBefore":141,"tokensAfter":141},{"name":"get_destination","fixed":{"name":"get_destination","description":"Get full details for a single destination by slug or id.","inputSchema":{"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"}}},"annotations":{"readOnlyHint":true},"title":"Get Destination"},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: true (inferred from the name).","verify":true}],"tokensBefore":88,"tokensAfter":88},{"name":"get_itinerary","fixed":{"name":"get_itinerary","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":{"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"}}},"annotations":{"readOnlyHint":true},"title":"Get Itinerary"},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: true (inferred from the name).","verify":true}],"tokensBefore":172,"tokensAfter":172},{"name":"get_itinerary_dossier","fixed":{"name":"get_itinerary_dossier","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":{"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)$"}}},"annotations":{"readOnlyHint":true},"title":"Get Itinerary Dossier"},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: true (inferred from the name).","verify":true}],"tokensBefore":183,"tokensAfter":183},{"name":"get_pricing","fixed":{"name":"get_pricing","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":{"type":"object","$schema":"https://json-schema.org/draft/2020-12/schema","properties":{}},"annotations":{"readOnlyHint":true},"title":"Get Concierge Pricing"},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: true (inferred from the name).","verify":true}],"tokensBefore":97,"tokensAfter":97},{"name":"get_wp_content","fixed":{"name":"get_wp_content","description":"Alias of get_content, kept for backwards compatibility. Prefer get_content.","inputSchema":{"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"}}},"annotations":{"readOnlyHint":true},"title":"Get Content Item (alias)"},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: true (inferred from the name).","verify":true}],"tokensBefore":127,"tokensAfter":127},{"name":"list_destinations","fixed":{"name":"list_destinations","description":"List destinations from the database, optionally filtered by region or category.","inputSchema":{"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'"}}},"annotations":{"readOnlyHint":true},"title":"List Destinations"},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: true (inferred from the name).","verify":true}],"tokensBefore":131,"tokensAfter":131},{"name":"list_itineraries","fixed":{"name":"list_itineraries","description":"List itineraries created by the Iconic Expeditions concierge, most recent first. Requires a bearer token.","inputSchema":{"type":"object","$schema":"https://json-schema.org/draft/2020-12/schema","properties":{}},"annotations":{"readOnlyHint":true},"title":"List Concierge Itineraries"},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: true (inferred from the name).","verify":true}],"tokensBefore":71,"tokensAfter":71},{"name":"request_bookings","fixed":{"name":"request_bookings","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":{"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,}$"}}},"annotations":{"readOnlyHint":false,"destructiveHint":false,"idempotentHint":false},"title":"Request Verification + Bookings ($100)"},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: false, destructiveHint: false, idempotentHint: false (inferred from the name).","verify":true}],"tokensBefore":214,"tokensAfter":214},{"name":"search_content","fixed":{"name":"search_content","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":{"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}}},"annotations":{"readOnlyHint":true},"title":"Search Content"},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: true (inferred from the name).","verify":true}],"tokensBefore":202,"tokensAfter":202},{"name":"search_wp_content","fixed":{"name":"search_wp_content","description":"Alias of search_content, kept for backwards compatibility. Prefer search_content.","inputSchema":{"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}}},"annotations":{"readOnlyHint":true},"title":"Search Content (alias)"},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: true (inferred from the name).","verify":true}],"tokensBefore":137,"tokensAfter":137},{"name":"set_itinerary_dossier","fixed":{"name":"set_itinerary_dossier","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":{"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 — '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 — 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 — '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 — 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 — 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"}}},"annotations":{"readOnlyHint":false,"destructiveHint":false,"idempotentHint":true},"title":"Write an Itinerary's Dossier"},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: false, destructiveHint: false, idempotentHint: true (inferred from the name).","verify":true}],"tokensBefore":1685,"tokensAfter":1685},{"name":"update_itinerary","fixed":{"name":"update_itinerary","description":"Update metadata (title, description, dates, public status) on a concierge itinerary. Requires a bearer token.","inputSchema":{"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)$"}}},"annotations":{"readOnlyHint":false,"destructiveHint":false,"idempotentHint":true},"title":"Update Itinerary"},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: false, destructiveHint: false, idempotentHint: true (inferred from the name).","verify":true}],"tokensBefore":192,"tokensAfter":192},{"name":"write_itinerary_day_detail","fixed":{"name":"write_itinerary_day_detail","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":{"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)$"}}},"annotations":{"readOnlyHint":false,"destructiveHint":false,"idempotentHint":false},"title":"Write a Day's Detail"},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: false, destructiveHint: false, idempotentHint: false (inferred from the name).","verify":true}],"tokensBefore":332,"tokensAfter":332}],"toolsChanged":19,"tokensSaved":0,"todo":[{"tool":"add_activity","params":["slot","description","duration_minutes"]},{"tool":"add_day","params":["notes","itinerary_id"]},{"tool":"delete_activity","params":["activity_id"]},{"tool":"delete_itinerary","params":["itinerary_id"]},{"tool":"get_content","params":["type"]},{"tool":"get_itinerary_dossier","params":["itinerary_id"]},{"tool":"get_wp_content","params":["type"]},{"tool":"list_destinations","params":["limit"]},{"tool":"price_itinerary","params":["travellers","itinerary_id"]},{"tool":"request_bookings","params":["notes","itinerary_id","contact_email"]},{"tool":"request_full_service","params":["notes","itinerary_id","contact_email"]},{"tool":"request_verification","params":["itinerary_id"]},{"tool":"search_content","params":["per_page"]},{"tool":"search_wp_content","params":["per_page"]},{"tool":"set_itinerary_dossier","params":["itinerary_id"]},{"tool":"update_itinerary","params":["title","start_date","description","itinerary_id"]},{"tool":"write_itinerary_day_detail","params":["callouts","day_number","itinerary_id"]}],"note":"Deterministic fixes. Changes marked verify need a human look before shipping (renames, inferred annotations, inferred types, removed text). Parameter descriptions in `todo` need to be written by someone who knows the API."}