Endpoints: 28,729MCP servers: 18,413Payout addresses: 2,070Paid calls: 1,528Letters: 13Defects: 1,322counted 3 min ago
teppi

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