Skip to content

Cross-Vertical

The platform's verticals don't exist in isolation. A real trip involves a DMC, hotels, restaurants, experiences, and transportation. Cross-vertical capabilities make the platform actually useful.

A "find me everything in Tokyo" query should return DMCs, hotels, restaurants, experiences, and transportation options — ranked and filtered together.

@mcp.tool()
def search_destination(
    destination: str,
    verticals: list[str] | None = None,  # default: all
) -> DestinationSummary:
    """Search all verticals for a destination."""
    ...

This is a Platform Core feature (post-spike, ~40–60 hrs).

Entity Resolution

A DMC might also appear as a hotel partner or experience operator. The platform resolves entities across verticals so we don't have three records for the same company.

class EntityResolver:
    def resolve(self, vertical: str, entity_id: str) -> ResolvedEntity:
        # Match by name + website + phone + email combinations
        ...

Entity resolution is hard. It's also a post-spike TODO — for now, verticals are separate.

Cross-Vertical Itinerary Construction

Given a destination and a trip profile, construct a candidate itinerary pulling from multiple verticals:

@mcp.tool()
def suggest_itinerary(
    destination: str,
    duration_days: int,
    traveler_profile: TravelerProfile,
) -> Itinerary:
    """Suggest a multi-vertical itinerary for a destination."""
    ...

This is the highest-leverage cross-vertical capability and the natural endpoint of the platform. It's well downstream — the verticals need to be solid first.

Cross-Vertical Schemas

Some concepts span verticals (location, contact info, hours of operation). The platform defines shared base types:

# models.py
class Location(BaseModel):
    address: str | None
    city: str
    country: str
    latitude: float | None
    longitude: float | None
    neighborhood: str | None

class Contact(BaseModel):
    emails: list[str]
    phones: list[str]
    website: str | None
    social: dict[str, str]

Every vertical's models inherit from or compose these. Consistency here is what makes cross-vertical search work later.

What the Spike Does Today

The spike implements one vertical (DMCs) in isolation. Cross-vertical is by design deferred. The DMC spike's MCP tools are vertical-specific; cross-vertical tools come after more verticals ship.

Marchay Platform Documentation