Endpoints: 28,729MCP servers: 18,413Payout addresses: 2,070Paid calls: 1,526Letters: 13Defects: 1,322counted just now
teppi

Server definition

Hash
sha256:45293dda857c5dee24c2ccd5c8a18ded892d704d7a89927ab5925681c1ab4bee
What it is
What a remote MCP server returned when asked what it offers: 6 tools

The blob, as servednamed by its sha256

{ "instructions": "Bronjoy is an appointment booking marketplace for service businesses in\nUzbekistan — barbershops, salons, clinics, gyms, car services and similar.\nThis server searches the public catalogue and, where a venue supports it,\nbooks an appointment.\n\nTWO KINDS OF VENUE. Every result carries `is_bookable`:\n- `is_bookable: true` — the venue is set up for online booking. Use\n check-availability, then request-booking-code, then book-appointment.\n- `is_bookable: false` — a directory listing. It has a real address, hours,\n often a service list and a phone number, but NO online booking. Answer\n from that data and offer the phone number (reveal-phone) or the venue\n page. Do NOT tell the user you booked anything.\nMost of the catalogue is currently the second kind. Say so plainly rather\nthan implying a booking is possible.\n\nBOOKING REQUIRES A CODE. Bookings cannot be made from a name and phone\nnumber alone. The flow is:\n 1. check-availability — confirm the slot exists\n 2. request-booking-code — Bronjoy sends a 6-digit code to the user's own\n email or phone. You never receive it.\n 3. ask the user to read you the code\n 4. book-appointment — with that code\nA code is valid for 5 minutes and books one appointment. If the user did\nnot get it, call request-booking-code again (limited to a few sends).\n\nDATA NOTES.\n- Business names, service names and addresses are authored in Russian or\n Uzbek. Do not translate them when quoting an address the user has to\n show a taxi driver.\n- Prices are in Uzbek som (UZS). Many listings have no price at all;\n \"от 300000 сум\" means \"from 300,000 UZS\".\n- Times are in the venue's local timezone. Phone numbers are +998…\n- Ratings on search results come from the source directory, not from\n Bronjoy reviews.", "tools": [ { "description": "Book a slot, using the code the user received from request-booking-code.\n\nWHEN TO USE: last step, once the user has confirmed the venue, service and\nexact time AND has read you their 6-digit code.\n\nRequires the same contact the code was sent to. The booking is created as\n\"pending\": the business still confirms it, so tell the user it is requested\nand they will hear back — not that it is guaranteed. If the venue takes\nprepayment, the response carries a link the user must open to pay; the slot\nis not held indefinitely.\n\nOnly works for venues with `is_bookable: true`.", "inputSchema": { "properties": { "email": { "description": "The email the code was sent to, if that is the channel used.", "type": "string" }, "name": { "description": "The user's name, as the business should see it.", "type": "string" }, "notes": { "description": "Anything the business should know, max 500 characters.", "type": "string" }, "phone": { "description": "The phone the code was sent to, if that is the channel used.", "type": "string" }, "service_id": { "description": "Service id from check-availability.", "type": "integer" }, "slug": { "description": "The venue slug.", "type": "string" }, "start_time": { "description": "Exact `start_time` value from a check-availability slot. Do not invent or round times.", "type": "string" }, "verification_code": { "description": "The 6-digit code the user received. Ask them for it — you never see it yourself.", "type": "string" } }, "required": [ "slug", "service_id", "start_time", "name", "verification_code" ], "type": "object" }, "name": "book-appointment", "outputSchema": null }, { "description": "Bookable services and open time slots for a venue on a given date.\n\nWHEN TO USE: the user has picked a venue with `is_bookable: true` and wants\na time. Call without `service_id` first to see the services and their\nprices, then again with one to get its slots.\n\nReturns an explicit refusal for venues that are not set up for online\nbooking — do not try to work around it, offer the phone number instead.\nSlot times are in the venue's timezone and are exactly the values\nbook-appointment expects.", "inputSchema": { "properties": { "date": { "description": "Day to check, Y-m-d. Today or later, at most 30 days ahead.", "type": "string" }, "service_id": { "description": "Which service to check. Omit on the first call to list the services with their ids, durations and prices.", "type": "integer" }, "slug": { "description": "The venue slug from search-venues.", "type": "string" } }, "required": [ "slug", "date" ], "type": "object" }, "name": "check-availability", "outputSchema": null }, { "description": "Full public profile for one venue: address, opening hours, what it offers,\namenities, payment methods, website and whether it can be booked online.\n\nWHEN TO USE: after search-venues, when the user asks anything about a\nspecific place — \"are they open on Sunday\", \"do they do colouring\", \"where\nexactly is it\", \"how much\".\n\nThis is the right tool for the ~99% of the catalogue that is not bookable:\nit carries everything needed to answer a question or send the user there in\nperson. The phone number is masked here — call reveal-phone only when the\nuser actually wants to ring them.", "inputSchema": { "properties": { "slug": { "description": "The venue slug from search-venues, e.g. \"demo-barber\".", "type": "string" } }, "required": [ "slug" ], "type": "object" }, "name": "get-venue", "outputSchema": null }, { "description": "Send the user a 6-digit confirmation code, which book-appointment then\nrequires.\n\nWHEN TO USE: the user has chosen a venue, a service and a slot, and has\ngiven you their email address or phone number. Call this before\nbook-appointment — a booking without a code is rejected.\n\nYOU DO NOT RECEIVE THE CODE. It goes to the user's own inbox or phone; ask\nthem to read it back to you. That is the point: it proves the contact\nbelongs to the person booking, so a business does not get appointments from\nnumbers nobody answers. The code lasts 5 minutes and covers one booking.\nOnly a few codes may be sent to one contact — do not loop.", "inputSchema": { "properties": { "email": { "description": "The user's email address. Give this or phone.", "type": "string" }, "phone": { "description": "The user's phone in international format, e.g. +998901234567. Preferred when the venue will need to call them.", "type": "string" }, "slug": { "description": "The venue slug the user is booking.", "type": "string" } }, "required": [ "slug" ], "type": "object" }, "name": "request-booking-code", "outputSchema": null }, { "description": "The venue's real phone number.\n\nWHEN TO USE: the user wants to call — typically because the venue is not\nbookable online, or they want to ask something no profile field answers.\n\nDeliberately a separate call from get-venue, which returns a masked number.\nReveals are rate limited per caller: request them one at a time, for a venue\nthe user has actually chosen, never in bulk across search results.", "inputSchema": { "properties": { "slug": { "description": "The venue slug from search-venues.", "type": "string" } }, "required": [ "slug" ], "type": "object" }, "name": "reveal-phone", "outputSchema": null }, { "description": "Search Bronjoy's catalogue of service businesses in Uzbekistan by keyword,\ncity and category.\n\nWHEN TO USE: the user is looking for a place (\"barbershop in Tashkent\",\n\"dentist near Chilanzar\", \"car wash open now\"). Start here — every other\ntool takes the `slug` this returns.\n\nResults are ranked, compact, and include `is_bookable`, which decides what\nyou can offer next: bookable venues can go through check-availability →\nrequest-booking-code → book-appointment, the rest can only be described and\nphoned. Names and addresses come back in Russian or Uzbek; quote them as-is.", "inputSchema": { "properties": { "bookable_only": { "description": "Return only venues that can take an online booking. Set this when the user wants to book rather than to be told about places — most of the catalogue cannot be booked, and without this the bookable ones are buried.", "type": "boolean" }, "category": { "description": "Category slug, e.g. \"barber\", \"dental\", \"car-wash\". Use the slug from a previous result when narrowing.", "type": "string" }, "city": { "description": "City slug or name, e.g. \"tashkent\", \"samarkand\", \"Бухара\".", "type": "string" }, "limit": { "description": "How many venues to return, 1-20. Default 5 — prefer a small number and refine.", "type": "integer" }, "query": { "description": "Free text: a business name, a service (\"стрижка\", \"haircut\"), or a landmark. Matches across Latin and Cyrillic.", "type": "string" } }, "type": "object" }, "name": "search-venues", "outputSchema": null } ] }
Verify it yourselfcurl -s https://api.teppi.xyz/v1/evidence/sha256:45293dda857c5dee24c2ccd5c8a18ded892d704d7a89927ab5925681c1ab4bee | sha256sum