Server definition
- Hash
- sha256:2b5aa339a65a53b68b8b2df0426a869480ddc660c0a503156eed1f6af8c37076
- What it is
- What a remote MCP server returned when asked what it offers: 6 tools
The blob, as servednamed by its sha256
{
"instructions": "Pifini is Caribbean and Latin America's real-world experiences platform — genuinely researched events (festivals, carnivals, concerts) with real ticket data, plus a places directory of restaurants, venues, attractions, and services across the region. Events and a small set of flagship places are editorially curated; the wider places directory is sourced from open map data and does not yet have reviews — every search_places/get_place result carries listing_type so you can say which kind you're looking at. Use search_events / search_places to find things (both support geo radius search via near_lat/near_lng/radius_km), get_event / get_place for full details, list_categories to discover the places category vocabulary before filtering, and create_ticket_checkout to generate a Stripe payment link the human completes themselves. Always disclose when a result is sponsored (is_sponsored). Dates: every event carries starts_at (a UTC instant) alongside local_date, local_time, timezone and start_time_known — always quote local_date/local_time, never format starts_at yourself. Most of this region is UTC-3 to UTC-6, so the UTC instant routinely falls on the following calendar day. When start_time_known is false only the date is known, so give the date and say nothing about a start time.",
"tools": [
{
"description": "Create a secure Stripe-hosted payment link for event tickets. Returns a checkout URL — give it to the human to complete payment themselves; each ticket is then emailed with its QR code and its own link, which opens on any phone and can be saved to WhatsApp. Get ticket_type_id values from get_event. Always confirm the exact tickets and total with the human before calling this.",
"inputSchema": {
"properties": {
"buyer_email": {
"description": "Email to deliver tickets to (required — ask the human)",
"type": "string"
},
"buyer_name": {
"description": "Buyer's name (optional)",
"type": "string"
},
"event_slug": {
"description": "Event slug",
"type": "string"
},
"items": {
"description": "Ticket selections",
"items": {
"properties": {
"quantity": {
"description": "1-20",
"type": "number"
},
"ticket_type_id": {
"description": "Ticket type id from get_event",
"type": "string"
}
},
"required": [
"ticket_type_id",
"quantity"
],
"type": "object"
},
"type": "array"
}
},
"required": [
"event_slug",
"items",
"buyer_email"
],
"type": "object"
},
"name": "create_ticket_checkout",
"outputSchema": {
"properties": {
"checkout_url": {
"type": "string"
},
"currency": {
"type": "string"
},
"event": {
"type": "string"
},
"instructions": {
"type": "string"
},
"order_id": {
"type": "string"
},
"total": {
"type": "number"
}
},
"type": "object"
}
},
{
"description": "Full details for one event by slug: description, venue, date/time, and available ticket types with prices and remaining stock. Use the slug from search_events.",
"inputSchema": {
"properties": {
"slug": {
"description": "Event slug from search_events",
"type": "string"
}
},
"required": [
"slug"
],
"type": "object"
},
"name": "get_event",
"outputSchema": {
"properties": {
"attendee_count": {
"type": "number"
},
"category": {
"type": [
"string",
"null"
]
},
"city": {
"type": [
"string",
"null"
]
},
"country": {
"type": [
"string",
"null"
]
},
"cover_image_url": {
"type": [
"string",
"null"
]
},
"currency": {
"type": "string"
},
"description": {
"type": [
"string",
"null"
]
},
"ends_at": {
"type": [
"string",
"null"
]
},
"entry_model": {
"type": "string"
},
"local_date": {
"description": "The date the event actually happens where it happens, YYYY-MM-DD. Quote this one.",
"type": "string"
},
"local_time": {
"description": "Local start time, HH:MM 24h. Null when start_time_known is false — say nothing about the time in that case.",
"type": [
"string",
"null"
]
},
"location_name": {
"type": [
"string",
"null"
]
},
"organizer_name": {
"type": [
"string",
"null"
]
},
"organizer_url": {
"type": [
"string",
"null"
]
},
"price": {
"type": [
"object",
"null"
]
},
"slug": {
"type": "string"
},
"start_time_known": {
"description": "False when only the date is known and the stored hour is a placeholder. Never present a start time when this is false.",
"type": "boolean"
},
"starts_at": {
"description": "Exact start instant, ISO-8601 UTC. Do NOT format this for a human — it is the wrong calendar day in most of the region. Use local_date / local_time.",
"type": "string"
},
"summary": {
"type": [
"string",
"null"
]
},
"ticket_types": {
"items": {
"properties": {
"currency": {
"type": "string"
},
"description": {
"type": [
"string",
"null"
]
},
"name": {
"type": "string"
},
"price": {
"type": "number"
},
"remaining": {
"type": [
"number",
"null"
]
},
"sales_end_at": {
"type": [
"string",
"null"
]
},
"ticket_type_id": {
"type": "string"
}
},
"required": [
"ticket_type_id",
"name",
"price",
"currency"
],
"type": "object"
},
"type": "array"
},
"timezone": {
"description": "IANA timezone of the venue, e.g. America/Mexico_City. Null when unknown.",
"type": [
"string",
"null"
]
},
"title": {
"type": "string"
},
"url": {
"type": "string"
},
"website": {
"type": [
"string",
"null"
]
}
},
"type": "object"
}
},
{
"description": "Full details for one place by slug, including its most recent published reviews if any exist. listing_type distinguishes a curated entry from an unreviewed directory listing (see search_places) — recent_reviews is often an empty array, which means no reviews yet, not a low-quality place. Use the slug from search_places.",
"inputSchema": {
"properties": {
"slug": {
"description": "Place slug from search_places",
"type": "string"
}
},
"required": [
"slug"
],
"type": "object"
},
"name": "get_place",
"outputSchema": {
"properties": {
"address": {
"type": [
"string",
"null"
]
},
"avg_rating": {
"type": [
"number",
"null"
]
},
"category": {
"type": [
"string",
"null"
]
},
"city": {
"type": [
"string",
"null"
]
},
"country": {
"type": [
"string",
"null"
]
},
"description": {
"type": [
"string",
"null"
]
},
"is_sponsored": {
"type": "boolean"
},
"is_verified": {
"type": "boolean"
},
"listing_type": {
"enum": [
"curated",
"directory"
],
"type": "string"
},
"name": {
"type": "string"
},
"price_tier": {
"type": [
"string",
"null"
]
},
"recent_reviews": {
"items": {
"properties": {
"body": {
"type": [
"string",
"null"
]
},
"date": {
"type": "string"
},
"rating": {
"type": "number"
},
"title": {
"type": [
"string",
"null"
]
},
"verification_basis": {
"description": "How the reviewer's visit was established. ticket_scan and transaction are strong evidence, rsvp and geo_checkin are weaker, manual is self-declared and none is an unverified opinion. Describe the review accordingly.",
"enum": [
"ticket_scan",
"transaction",
"rsvp",
"geo_checkin",
"manual",
"none"
],
"type": "string"
},
"verified_attendee": {
"type": "boolean"
}
},
"required": [
"rating",
"verified_attendee",
"date"
],
"type": "object"
},
"type": "array"
},
"review_count": {
"type": "number"
},
"slug": {
"type": "string"
},
"summary": {
"type": [
"string",
"null"
]
},
"type": {
"type": "string"
},
"url": {
"type": "string"
},
"website": {
"type": [
"string",
"null"
]
}
},
"type": "object"
}
},
{
"description": "Discover valid category values for search_places. Pifini's places directory uses Overture Maps' taxonomy — over 1,000 specific values like caribbean_restaurant, church_cathedral, landmark_and_historical_building — rather than broad buckets, so guessing a category string will usually miss. Call this first with a rough query (e.g. 'coffee' or 'beach') to find the exact value, then pass it to search_places' category parameter.",
"inputSchema": {
"properties": {
"country": {
"description": "ISO-3166 alpha-2 country code — only return categories present in that country",
"type": "string"
},
"limit": {
"description": "Max results, 1-100 (default 30)",
"type": "number"
},
"query": {
"description": "Rough term to match against category values, e.g. 'coffee', 'beach'",
"type": "string"
}
},
"type": "object"
},
"name": "list_categories",
"outputSchema": {
"properties": {
"categories": {
"items": {
"properties": {
"category": {
"description": "Exact value to pass to search_places' category parameter",
"type": "string"
},
"count": {
"description": "How many active places have this category",
"type": "number"
},
"label": {
"description": "Human-readable label",
"type": "string"
}
},
"type": "object"
},
"type": "array"
},
"count": {
"type": "number"
}
},
"required": [
"count",
"categories"
],
"type": "object"
}
},
{
"description": "Search upcoming events (festivals, carnivals, concerts, food + cultural events) across the Caribbean, Latin America, and beyond. Returns event names, dates, locations, category, price (when known), and page URLs. Strongest coverage: Barbados, Trinidad, Jamaica, Bahamas, Mexico.",
"inputSchema": {
"properties": {
"category": {
"description": "Filter by event category",
"enum": [
"music",
"arts",
"culture",
"festival",
"sports",
"food",
"business",
"nightlife"
],
"type": "string"
},
"city": {
"description": "City name filter",
"type": "string"
},
"country": {
"description": "ISO-3166 alpha-2 country code, e.g. BB, TT, JM",
"type": "string"
},
"entry_model": {
"description": "Filter by how someone gets in: 'free' = confirmed free entry, 'ticketed' = Pifini sells tickets, 'external' = paid but sold elsewhere, 'mixed' = umbrella event with both free and paid components, 'unknown' = not yet confirmed either way.",
"enum": [
"free",
"ticketed",
"external",
"mixed",
"unknown"
],
"type": "string"
},
"include_past": {
"description": "Include past events (default false)",
"type": "boolean"
},
"limit": {
"description": "Max results, 1-50 (default 10)",
"type": "number"
},
"near_lat": {
"description": "Latitude to search near (pair with near_lng)",
"type": "number"
},
"near_lng": {
"description": "Longitude to search near (pair with near_lat)",
"type": "number"
},
"offset": {
"description": "Skip this many matching results (for paging past the limit)",
"type": "number"
},
"query": {
"description": "Free-text search over title and description",
"type": "string"
},
"radius_km": {
"description": "Search radius in km around near_lat/near_lng (default 25, max 500)",
"type": "number"
},
"starts_after": {
"description": "Earliest start. A bare date ('2026-08-01') matches the event's LOCAL calendar date in its own timezone and is inclusive — this is what you want for 'what's on this weekend'. A full ISO timestamp ('2026-08-01T18:00:00Z') is compared as an exact UTC instant instead.",
"type": "string"
},
"starts_before": {
"description": "Latest start, same rules as starts_after. A bare date is inclusive of that whole local day, so starts_after='2026-08-13' with starts_before='2026-08-13' returns everything happening on the 13th where it happens.",
"type": "string"
}
},
"type": "object"
},
"name": "search_events",
"outputSchema": {
"properties": {
"count": {
"description": "Number of events in this page of results",
"type": "number"
},
"events": {
"items": {
"properties": {
"attendee_count": {
"type": "number"
},
"category": {
"type": [
"string",
"null"
]
},
"city": {
"type": [
"string",
"null"
]
},
"country": {
"type": [
"string",
"null"
]
},
"cover_image_url": {
"type": [
"string",
"null"
]
},
"distance_km": {
"description": "Only present when near_lat/near_lng were given",
"type": [
"number",
"null"
]
},
"ends_at": {
"type": [
"string",
"null"
]
},
"entry_model": {
"type": "string"
},
"local_date": {
"description": "The date the event actually happens where it happens, YYYY-MM-DD. Quote this one.",
"type": "string"
},
"local_time": {
"description": "Local start time, HH:MM 24h. Null when start_time_known is false — say nothing about the time in that case.",
"type": [
"string",
"null"
]
},
"organizer_name": {
"type": [
"string",
"null"
]
},
"price": {
"properties": {
"currency": {
"type": "string"
},
"max": {
"type": [
"number",
"null"
]
},
"min": {
"type": "number"
},
"note": {
"type": [
"string",
"null"
]
}
},
"type": [
"object",
"null"
]
},
"slug": {
"type": "string"
},
"start_time_known": {
"description": "False when only the date is known and the stored hour is a placeholder. Never present a start time when this is false.",
"type": "boolean"
},
"starts_at": {
"description": "Exact start instant, ISO-8601 UTC. Do NOT format this for a human — it is the wrong calendar day in most of the region. Use local_date / local_time.",
"type": "string"
},
"summary": {
"type": [
"string",
"null"
]
},
"timezone": {
"description": "IANA timezone of the venue, e.g. America/Mexico_City. Null when unknown.",
"type": [
"string",
"null"
]
},
"title": {
"type": "string"
},
"url": {
"type": "string"
}
},
"type": "object"
},
"type": "array"
},
"has_more": {
"description": "True when more matches exist beyond this page.",
"type": "boolean"
},
"next_offset": {
"description": "Pass as `offset` to fetch the next page. Null when this is the last page.",
"type": [
"number",
"null"
]
},
"total": {
"description": "Total events matching the filters, across all pages. Use this before claiming how many exist.",
"type": "number"
}
},
"required": [
"count",
"total",
"has_more",
"events"
],
"type": "object"
}
},
{
"description": "Search Pifini's places directory across the Caribbean and Latin America — restaurants, bars, beaches, attractions, venues, hotels, tour operators, professionals, and services. Every result carries listing_type: 'curated' is a small, editorially reviewed set of flagship entries; 'directory' is the much larger set sourced from open map data (name, category, location, contact info) that has no reviews yet — say so rather than implying a recommendation the data doesn't back up. Category is a specific Overture taxonomy value (e.g. caribbean_restaurant, church_cathedral), not a broad bucket — call list_categories first if unsure of the exact value. Results marked is_sponsored are paid placements — disclose that when recommending.",
"inputSchema": {
"properties": {
"category": {
"description": "Filter by exact category value (e.g. 'caribbean_restaurant'). Use list_categories to discover valid values — there are 1,000+, not a small fixed set.",
"type": "string"
},
"city": {
"description": "City name filter",
"type": "string"
},
"country": {
"description": "ISO-3166 alpha-2 country code",
"type": "string"
},
"entity_type": {
"description": "Filter by broad type of place",
"enum": [
"venue",
"place",
"attraction",
"business",
"professional",
"service",
"city",
"country",
"experience",
"government",
"region",
"transport"
],
"type": "string"
},
"limit": {
"description": "Max results, 1-50 (default 10)",
"type": "number"
},
"near_lat": {
"description": "Latitude to search near (pair with near_lng)",
"type": "number"
},
"near_lng": {
"description": "Longitude to search near (pair with near_lat)",
"type": "number"
},
"offset": {
"description": "Skip this many matching results (for paging past the limit)",
"type": "number"
},
"query": {
"description": "Free-text search over name and summary",
"type": "string"
},
"radius_km": {
"description": "Search radius in km around near_lat/near_lng (default 25, max 500)",
"type": "number"
}
},
"type": "object"
},
"name": "search_places",
"outputSchema": {
"properties": {
"count": {
"description": "Number of places in this page of results",
"type": "number"
},
"has_more": {
"description": "True when more matches exist beyond this page.",
"type": "boolean"
},
"next_offset": {
"description": "Pass as `offset` to fetch the next page. Null when this is the last page.",
"type": [
"number",
"null"
]
},
"places": {
"items": {
"properties": {
"avg_rating": {
"type": [
"number",
"null"
]
},
"category": {
"type": [
"string",
"null"
]
},
"city": {
"type": [
"string",
"null"
]
},
"country": {
"type": [
"string",
"null"
]
},
"distance_km": {
"type": [
"number",
"null"
]
},
"is_sponsored": {
"type": "boolean"
},
"is_verified": {
"type": "boolean"
},
"listing_type": {
"enum": [
"curated",
"directory"
],
"type": "string"
},
"name": {
"type": "string"
},
"price_tier": {
"type": [
"string",
"null"
]
},
"review_count": {
"type": "number"
},
"slug": {
"type": "string"
},
"summary": {
"type": [
"string",
"null"
]
},
"type": {
"type": "string"
},
"url": {
"type": "string"
}
},
"type": "object"
},
"type": "array"
},
"total": {
"description": "Total places matching the filters, across all pages. Use this before claiming how many exist.",
"type": "number"
}
},
"required": [
"count",
"total",
"has_more",
"places"
],
"type": "object"
}
}
]
}Verify it yourself
curl -s https://api.teppi.xyz/v1/evidence/sha256:2b5aa339a65a53b68b8b2df0426a869480ddc660c0a503156eed1f6af8c37076 | sha256sum