concierge

Search Africa safari destinations, generate day-by-day itineraries, and price expert travel work.

¿Debería usar esto?

Calidad y seguridad

A
Calidad de la descripción
96%
Integridad del esquema
84%
Calidad de los nombres
97%
Riesgo de envenenamiento
100%
Coincidencia de permisos
100%
Cumplimiento del protocolo
100%

Hallazgos (1)

  • LOWTool 'add_day' description lacks action verben add_day

Basado en el análisis automatizado de las definiciones de herramientas y el cumplimiento del protocolo.

Costo de contexto

~6,056Tokens (definiciones de herramientas)
~2.1 KBTamaño de respuesta típico
Impacto significativo en la atención (4.73% del contexto de 128k)

Este es el número aproximado de tokens que se consumen cada vez que las herramientas del servidor se cargan en el contexto de un modelo. Los recuentos más altos reducen la atención disponible para otras tareas.

Instalar

Instalación con un clic

Agrega esto a tu archivo `claude_desktop_config.json`:

{
  "mcpServers": {
    "concierge": {
      "url": "https://concierge.iconic-expeditions.com/mcp"
    }
  }
}

Puntos de conexión remotos

https://concierge.iconic-expeditions.com/mcpstreamable-http

Qué puede hacer

Inventario de herramientas

Herramientas (23)

🟢 Solo lectura🟡 Escritura🔴 Eliminación⚪ Desconocido
🟢search_content(type, search, per_page)

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).

Esquema de entrada

{
  "type": "object",
  "properties": {
    "type": {
      "type": "string",
      "enum": [
        "itinerary",
        "activity",
        "destination",
        "post"
      ],
      "description": "Content type to search"
    },
    "search": {
      "description": "Search keyword",
      "type": "string"
    },
    "per_page": {
      "default": 10,
      "type": "integer",
      "minimum": 1,
      "maximum": 20
    }
  },
  "required": [
    "type"
  ],
  "$schema": "https://json-schema.org/draft/2020-12/schema"
}
🟢search_wp_content(type, search, per_page)

Alias of search_content, kept for backwards compatibility. Prefer search_content.

Esquema de entrada

{
  "type": "object",
  "properties": {
    "type": {
      "type": "string",
      "enum": [
        "itinerary",
        "activity",
        "destination",
        "post"
      ],
      "description": "Content type to search"
    },
    "search": {
      "description": "Search keyword",
      "type": "string"
    },
    "per_page": {
      "default": 10,
      "type": "integer",
      "minimum": 1,
      "maximum": 20
    }
  },
  "required": [
    "type"
  ],
  "$schema": "https://json-schema.org/draft/2020-12/schema"
}
🟢get_content(type, id)

Fetch a single content item by type and id, walking the content chain (WordPress -> cache). Returns the item with its `source`.

Esquema de entrada

{
  "type": "object",
  "properties": {
    "type": {
      "type": "string",
      "enum": [
        "itinerary",
        "activity",
        "destination",
        "post"
      ]
    },
    "id": {
      "type": "integer",
      "minimum": -9007199254740991,
      "maximum": 9007199254740991,
      "description": "Source content id (WordPress post id)"
    }
  },
  "required": [
    "type",
    "id"
  ],
  "$schema": "https://json-schema.org/draft/2020-12/schema"
}
🟢get_wp_content(type, id)

Alias of get_content, kept for backwards compatibility. Prefer get_content.

Esquema de entrada

{
  "type": "object",
  "properties": {
    "type": {
      "type": "string",
      "enum": [
        "itinerary",
        "activity",
        "destination",
        "post"
      ]
    },
    "id": {
      "type": "integer",
      "minimum": -9007199254740991,
      "maximum": 9007199254740991,
      "description": "Source content id (WordPress post id)"
    }
  },
  "required": [
    "type",
    "id"
  ],
  "$schema": "https://json-schema.org/draft/2020-12/schema"
}
🟢list_destinations(region, category, limit)

List destinations from the database, optionally filtered by region or category.

Esquema de entrada

{
  "type": "object",
  "properties": {
    "region": {
      "description": "Filter by region name, e.g. 'Matabeleland North'",
      "type": "string"
    },
    "category": {
      "description": "Filter by category, e.g. 'National Park'",
      "type": "string"
    },
    "limit": {
      "default": 20,
      "type": "integer",
      "minimum": 1,
      "maximum": 50
    }
  },
  "$schema": "https://json-schema.org/draft/2020-12/schema"
}
🟢get_destination(identifier)

Get full details for a single destination by slug or id.

Esquema de entrada

{
  "type": "object",
  "properties": {
    "identifier": {
      "type": "string",
      "description": "Either a destination id or its URL slug"
    }
  },
  "required": [
    "identifier"
  ],
  "$schema": "https://json-schema.org/draft/2020-12/schema"
}
🟢get_itinerary(itinerary_id)

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.

Esquema de entrada

{
  "type": "object",
  "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"
    }
  },
  "required": [
    "itinerary_id"
  ],
  "$schema": "https://json-schema.org/draft/2020-12/schema"
}
🟢list_itineraries

List itineraries created by the Iconic Expeditions concierge, most recent first. Requires a bearer token.

Esquema de entrada

{
  "type": "object",
  "properties": {},
  "$schema": "https://json-schema.org/draft/2020-12/schema"
}
🟡create_itinerary(title, num_days, description, start_date)

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.

Esquema de entrada

{
  "type": "object",
  "properties": {
    "title": {
      "type": "string",
      "minLength": 1,
      "description": "Itinerary title, e.g. '7-Day Hwange Safari'"
    },
    "num_days": {
      "type": "integer",
      "minimum": 1,
      "maximum": 30,
      "description": "Number of days"
    },
    "description": {
      "description": "Optional short description",
      "type": "string"
    },
    "start_date": {
      "description": "Optional ISO date string for day 1, e.g. '2025-06-01'",
      "type": "string"
    }
  },
  "required": [
    "title",
    "num_days"
  ],
  "$schema": "https://json-schema.org/draft/2020-12/schema"
}
🟢generate_itinerary_from_places(title, places, num_days, preferences, language)

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.

Esquema de entrada

{
  "type": "object",
  "properties": {
    "title": {
      "type": "string",
      "minLength": 1,
      "description": "Itinerary title, e.g. 'Highlights of Zimbabwe'"
    },
    "places": {
      "minItems": 3,
      "type": "array",
      "items": {
        "type": "string",
        "minLength": 1
      },
      "description": "At least 3 place names, e.g. ['Victoria Falls', 'Hwange', 'Mana Pools']"
    },
    "num_days": {
      "type": "integer",
      "minimum": 1,
      "maximum": 30,
      "description": "Number of days for the trip"
    },
    "preferences": {
      "description": "Traveller preferences that should shape the plan: pace, interests, budget, travel style",
      "type": "string"
    },
    "language": {
      "description": "Language for day titles, notes, and activity text: 'en' (English), 'ru' (Russian), or 'zh' (Chinese). Defaults to English.",
      "type": "string",
      "enum": [
        "en",
        "ru",
        "zh"
      ]
    }
  },
  "required": [
    "title",
    "places",
    "num_days"
  ],
  "$schema": "https://json-schema.org/draft/2020-12/schema"
}
🟡update_itinerary(itinerary_id, title, description, start_date, is_public)

Update metadata (title, description, dates, public status) on a concierge itinerary. Requires a bearer token.

Esquema de entrada

{
  "type": "object",
  "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)$"
    },
    "title": {
      "type": "string"
    },
    "description": {
      "type": "string"
    },
    "start_date": {
      "type": "string"
    },
    "is_public": {
      "description": "Set false to unpublish the shareable link",
      "type": "boolean"
    }
  },
  "required": [
    "itinerary_id"
  ],
  "$schema": "https://json-schema.org/draft/2020-12/schema"
}
🔴delete_itinerary(itinerary_id)

Permanently delete a concierge itinerary and all its days and activities. Requires a bearer token.

Esquema de entrada

{
  "type": "object",
  "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)$"
    }
  },
  "required": [
    "itinerary_id"
  ],
  "$schema": "https://json-schema.org/draft/2020-12/schema"
}
🟡add_day(itinerary_id, title, notes)

Append an extra day to a concierge itinerary and increment num_days. Requires a bearer token.

Esquema de entrada

{
  "type": "object",
  "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)$"
    },
    "title": {
      "description": "Optional day label, e.g. 'Drive to Hwange'",
      "type": "string"
    },
    "notes": {
      "type": "string"
    }
  },
  "required": [
    "itinerary_id"
  ],
  "$schema": "https://json-schema.org/draft/2020-12/schema"
}
🟢get_itinerary_dossier(itinerary_id)

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.

Esquema de entrada

{
  "type": "object",
  "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)$"
    }
  },
  "required": [
    "itinerary_id"
  ],
  "$schema": "https://json-schema.org/draft/2020-12/schema"
}
🟢price_itinerary(itinerary_id, tier_id, option_ids, nights, travellers)

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.

Esquema de entrada

{
  "type": "object",
  "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)$"
    },
    "tier_id": {
      "description": "Defaults to the cheapest tier",
      "type": "string"
    },
    "option_ids": {
      "description": "One entry per cost option group you want to choose in",
      "type": "array",
      "items": {
        "type": "object",
        "properties": {
          "group_id": {
            "type": "string"
          },
          "option_id": {
            "type": "string"
          }
        },
        "required": [
          "group_id",
          "option_id"
        ]
      }
    },
    "nights": {
      "description": "Defaults to the cost model's reference length",
      "type": "integer",
      "minimum": 1,
      "maximum": 9007199254740991
    },
    "travellers": {
      "default": 1,
      "type": "integer",
      "minimum": 1,
      "maximum": 9007199254740991
    }
  },
  "required": [
    "itinerary_id"
  ],
  "$schema": "https://json-schema.org/draft/2020-12/schema"
}
🟡set_itinerary_dossier(itinerary_id, countries, legs, seasonality, cost_model, ...)

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.

Esquema de entrada

{
  "type": "object",
  "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)$"
    },
    "countries": {
      "description": "How many countries the route crosses",
      "type": "integer",
      "minimum": 1,
      "maximum": 9007199254740991
    },
    "legs": {
      "description": "The route's chapters. Every day must belong to exactly one leg, and legs must not overlap.",
      "minItems": 1,
      "type": "array",
      "items": {
        "type": "object",
        "properties": {
          "title": {
            "type": "string",
            "minLength": 1,
            "description": "Where this stretch is, in a word or two"
          },
          "summary": {
            "description": "A sentence or two on what these nights are for",
            "type": "string"
          },
          "start_day": {
            "type": "integer",
            "minimum": 1,
            "maximum": 9007199254740991
          },
          "end_day": {
            "type": "integer",
            "minimum": 1,
            "maximum": 9007199254740991
          }
        },
        "required": [
          "title",
          "start_day",
          "end_day"
        ]
      }
    },
    "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",
      "type": "object",
      "properties": {
        "rows": {
          "minItems": 1,
          "type": "array",
          "items": {
            "type": "object",
            "properties": {
              "label": {
                "type": "string",
                "minLength": 1,
                "description": "What is being scored — a wildlife event, a trail condition, a sea state"
              },
              "scores": {
                "minItems": 12,
                "maxItems": 12,
                "type": "array",
                "items": {
                  "type": "integer",
                  "minimum": 0,
                  "maximum": 3
                },
                "description": "January first. 0 = avoid, 1 = poor, 2 = workable, 3 = peak"
              }
            },
            "required": [
              "label",
              "scores"
            ]
          }
        },
        "months": {
          "minItems": 1,
          "type": "array",
          "items": {
            "type": "object",
            "properties": {
              "month": {
                "type": "integer",
                "minimum": 1,
                "maximum": 12
              },
              "rank": {
                "type": "string",
                "enum": [
                  "primary",
                  "alternative",
                  "workable",
                  "avoid"
                ]
              },
              "verdict": {
                "type": "string",
                "minLength": 1,
                "description": "Why this month is or isn't the one, in two or three sentences"
              },
              "tags": {
                "maxItems": 4,
                "type": "array",
                "items": {
                  "type": "string"
                },
                "description": "Short labels: 'Peak crossings', 'Books out first', 'Avoid'"
              }
            },
            "required": [
              "month",
              "rank",
              "verdict",
              "tags"
            ]
          }
        },
        "recommended_month": {
          "type": "integer",
          "minimum": 1,
          "maximum": 12,
          "description": "The month this plan is actually built around"
        }
      },
      "required": [
        "rows",
        "months",
        "recommended_month"
      ]
    },
    "cost_model": {
      "description": "Per-person breakdown lines, amounts per comfort tier, and any per-line choices",
      "type": "object",
      "properties": {
        "currency": {
          "type": "string",
          "minLength": 3,
          "maxLength": 3,
          "description": "ISO 4217, lowercase — 'usd'"
        },
        "reference_nights": {
          "type": "integer",
          "minimum": 1,
          "maximum": 9007199254740991,
          "description": "The trip length the amounts are quoted at"
        },
        "length_options": {
          "description": "Shorter or longer variants offered to the reader, in nights",
          "type": "array",
          "items": {
            "type": "integer",
            "minimum": 1,
            "maximum": 9007199254740991
          }
        },
        "lines": {
          "minItems": 1,
          "type": "array",
          "items": {
            "type": "object",
            "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)"
              }
            },
            "required": [
              "key",
              "label",
              "scales_with_length"
            ]
          }
        },
        "tiers": {
          "minItems": 1,
          "type": "array",
          "items": {
            "type": "object",
            "properties": {
              "label": {
                "type": "string",
                "minLength": 1,
                "description": "'Lean', 'Mid-range', 'Luxury'"
              },
              "amounts": {
                "minItems": 1,
                "type": "array",
                "items": {
                  "type": "object",
                  "properties": {
                    "line_key": {
                      "type": "string"
                    },
                    "amount": {
                      "type": "integer",
                      "minimum": 0,
                      "maximum": 9007199254740991,
                      "description": "Per person, in minor units — 620000 for $6,200"
                    }
                  },
                  "required": [
                    "line_key",
                    "amount"
                  ]
                },
                "description": "One entry per cost line"
              }
            },
            "required": [
              "label",
              "amounts"
            ]
          }
        },
        "option_groups": {
          "type": "array",
          "items": {
            "type": "object",
            "properties": {
              "label": {
                "type": "string",
                "minLength": 1
              },
              "line_key": {
                "type": "string",
                "minLength": 1,
                "description": "Which cost line this choice overrides"
              },
              "options": {
                "minItems": 2,
                "type": "array",
                "items": {
                  "type": "object",
                  "properties": {
                    "label": {
                      "type": "string",
                      "minLength": 1
                    },
                    "amount": {
                      "type": "integer",
                      "minimum": 0,
                      "maximum": 9007199254740991,
                      "description": "Per person, in minor units — 620000 for $6,200"
                    },
                    "is_default": {
                      "type": "boolean"
                    }
                  },
                  "required": [
                    "label",
                    "amount"
                  ]
                }
              }
            },
            "required": [
              "label",
              "line_key",
              "options"
            ]
          }
        },
        "notes": {
          "description": "What the figures exclude and how firm they are",
          "type": "string"
        }
      },
      "required": [
        "currency",
        "reference_nights",
        "lines",
        "tiers"
      ]
    },
    "booking_order": {
      "description": "What to book, in the order it has to happen",
      "minItems": 1,
      "type": "array",
      "items": {
        "type": "object",
        "properties": {
          "title": {
            "type": "string",
            "minLength": 1
          },
          "detail": {
            "type": "string",
            "minLength": 1,
            "description": "Why it sits at this point in the order"
          }
        },
        "required": [
          "title",
          "detail"
        ]
      }
    },
    "field_notes": {
      "description": "Visas, certificates, luggage limits, kit",
      "minItems": 1,
      "type": "array",
      "items": {
        "type": "object",
        "properties": {
          "heading": {
            "type": "string",
            "minLength": 1,
            "description": "'Visas', 'Yellow fever', 'Luggage'"
          },
          "body": {
            "type": "string",
            "minLength": 1
          }
        },
        "required": [
          "heading",
          "body"
        ]
      }
    },
    "choices": {
      "description": "Either/ors deliberately left open for the traveller",
      "minItems": 1,
      "type": "array",
      "items": {
        "type": "object",
        "properties": {
          "title": {
            "type": "string",
            "minLength": 1,
            "description": "'Pick your coast'"
          },
          "options": {
            "minItems": 2,
            "type": "array",
            "items": {
              "type": "object",
              "properties": {
                "label": {
                  "type": "string",
                  "minLength": 1
                },
                "subtitle": {
                  "type": "string"
                },
                "body": {
                  "type": "string",
                  "minLength": 1,
                  "description": "What this option is actually like, and who should choose it"
                }
              },
              "required": [
                "label",
                "body"
              ]
            }
          }
        },
        "required": [
          "title",
          "options"
        ]
      }
    }
  },
  "required": [
    "itinerary_id"
  ],
  "$schema": "https://json-schema.org/draft/2020-12/schema"
}
🟡write_itinerary_day_detail(itinerary_id, day_number, narrative, callouts)

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.

Esquema de entrada

{
  "type": "object",
  "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)$"
    },
    "day_number": {
      "type": "integer",
      "minimum": 1,
      "maximum": 9007199254740991
    },
    "narrative": {
      "type": "string",
      "minLength": 1,
      "description": "Two or three short paragraphs, separated by blank lines. Plain text, no markup."
    },
    "callouts": {
      "maxItems": 3,
      "type": "array",
      "items": {
        "type": "object",
        "properties": {
          "kind": {
            "type": "string",
            "enum": [
              "alternative",
              "swap",
              "warning",
              "note"
            ]
          },
          "title": {
            "type": "string",
            "minLength": 1,
            "description": "'Alternative', 'Swap worth considering'"
          },
          "body": {
            "type": "string",
            "minLength": 1
          }
        },
        "required": [
          "kind",
          "title",
          "body"
        ]
      }
    }
  },
  "required": [
    "itinerary_id",
    "day_number",
    "narrative"
  ],
  "$schema": "https://json-schema.org/draft/2020-12/schema"
}
🟡add_activity(itinerary_id, day_id, slot, title, 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.

Esquema de entrada

{
  "type": "object",
  "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": "Parent itinerary UUID"
    },
    "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"
    },
    "slot": {
      "type": "string",
      "enum": [
        "morning",
        "afternoon",
        "evening"
      ]
    },
    "title": {
      "type": "string",
      "minLength": 1,
      "description": "Short title for the activity"
    },
    "description": {
      "type": "string"
    },
    "duration_minutes": {
      "type": "integer",
      "minimum": 5,
      "maximum": 9007199254740991
    },
    "wp_content_type": {
      "description": "Content type to link",
      "type": "string",
      "enum": [
        "itinerary",
        "activity",
        "destination",
        "post"
      ]
    },
    "wp_content_id": {
      "description": "Source content id",
      "type": "integer",
      "minimum": -9007199254740991,
      "maximum": 9007199254740991
    }
  },
  "required": [
    "itinerary_id",
    "day_id",
    "slot",
    "title"
  ],
  "$schema": "https://json-schema.org/draft/2020-12/schema"
}
🔴delete_activity(activity_id)

Remove an activity from a concierge itinerary day. Requires a bearer token.

Esquema de entrada

{
  "type": "object",
  "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)$"
    }
  },
  "required": [
    "activity_id"
  ],
  "$schema": "https://json-schema.org/draft/2020-12/schema"
}
🟢get_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.

Esquema de entrada

{
  "type": "object",
  "properties": {},
  "$schema": "https://json-schema.org/draft/2020-12/schema"
}
⚪request_verification(itinerary_id, contact_email, notes)

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.

Esquema de entrada

{
  "type": "object",
  "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)$"
    },
    "contact_email": {
      "description": "Where to send the report + receipt",
      "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,}$"
    },
    "notes": {
      "description": "Anything the experts should know (dates, group size, budget)",
      "type": "string"
    }
  },
  "required": [
    "itinerary_id"
  ],
  "$schema": "https://json-schema.org/draft/2020-12/schema"
}
⚪request_bookings(itinerary_id, contact_email, notes)

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.

Esquema de entrada

{
  "type": "object",
  "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)$"
    },
    "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,}$"
    },
    "notes": {
      "type": "string"
    }
  },
  "required": [
    "itinerary_id"
  ],
  "$schema": "https://json-schema.org/draft/2020-12/schema"
}
⚪request_full_service(itinerary_id, contact_email, notes)

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.

Esquema de entrada

{
  "type": "object",
  "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)$"
    },
    "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,}$"
    },
    "notes": {
      "type": "string"
    }
  },
  "required": [
    "itinerary_id"
  ],
  "$schema": "https://json-schema.org/draft/2020-12/schema"
}

Comunidad

Califica este servidor

Evidencia

Observaciones recientes

verificadoversión no registrada23 herramientas
verificadoversión no registrada23 herramientas