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 yourself
curl -s https://api.teppi.xyz/v1/evidence/sha256:45293dda857c5dee24c2ccd5c8a18ded892d704d7a89927ab5925681c1ab4bee | sha256sum