Bronjoy
Интеграции

Интеграция MCP

Подключите любого AI-ассистента к Bronjoy через Model Context Protocol — ищите по публичному каталогу и записывайтесь или запустите собственный сервер для своей организации.

Обзор

Bronjoy поддерживает MCP (Model Context Protocol), поэтому AI-ассистент — Claude, ChatGPT или любой другой, говорящий на MCP, — может найти заведение, ответить на вопросы о нём и записать клиента.

Есть два сервера для двух разных аудиторий:

Сервер маркетплейсаСервер организации
Для когоДля всех. Пользователи, разработчики, AI-ассистентыДля ассистента одной организации
ОхватВесь публичный каталогОдна организация
АвторизацияНе нужнаBearer-токен
Адресhttps://api.bronjoy.com/api/mcphttps://api.bronjoy.com/api/mcp/organization/{id}
СтоимостьБесплатноФункция платного тарифа

Если вы хотите записаться на стрижку через своего ассистента — вам нужен сервер маркетплейса. Если вы бизнес и хотите, чтобы ваш собственный ассистент вёл ваш календарь — вам нужен сервер организации.


Сервер маркетплейса

Публичный каталог в виде MCP-сервера. Без аккаунта, без токена, без регистрации — он отдаёт ровно то, что сайт Bronjoy и так показывает любому браузеру, плюс тот же путь записи с подтверждением.

Подключение

claude mcp add --transport http bronjoy https://api.bronjoy.com/api/mcp

Это вся настройка. Попросите ассистента: «найди барбершоп в Ташкенте» — и он воспользуется инструментами ниже.

Инструменты

Шесть инструментов, в том порядке, в котором их использует разговор о записи.

search-venues

Поиск по каталогу: ключевое слово, город, категория. Все остальные инструменты принимают slug, который возвращает этот.

ПараметрТипОбяз.Описание
querystringНетСвободный текст — название, услуга (стрижка, haircut) или ориентир. Работает и с латиницей, и с кириллицей
citystringНетСлаг или название города — tashkent, samarkand, Бухара
categorystringНетСлаг категории — barber, dental, car-wash
bookable_onlybooleanНетВозвращать только заведения с онлайн-записью. Указывайте, когда пользователь хочет записаться, а не узнать о местах
limitintegerНет1–20, по умолчанию 5
{
  "venues": [
    {
      "name": "Britva Barbershop",
      "slug": "demo-barber",
      "url": "https://bronjoy.com/tashkent/barber/demo-barber",
      "city": "Tashkent",
      "district": "Юнусабадский район",
      "address": "проспект Амира Темура, 15",
      "specialty": "Men's haircuts and beard care",
      "rating": 4.9,
      "reviews": 7,
      "is_bookable": true,
      "next_available": "Tomorrow 09:00",
      "price_from": 50000,
      "has_phone": true
    }
  ],
  "returned": 1,
  "total_matches": 1
}

get-venue

Полный публичный профиль заведения: адрес, часы работы, услуги, удобства, способы оплаты, сайт, рейтинг. Телефон здесь возвращается замаскированным.

ПараметрТипОбяз.Описание
slugstringДаИз search-venues
{
  "name": "Britva Barbershop",
  "city": "Ташкент",
  "address": "проспект Амира Темура, 15",
  "is_bookable": true,
  "website": "https://britva.uz",
  "masked_phone": "+998 71 ***-**-70",
  "opening_hours": {
    "monday": { "open": "09:00", "close": "19:00" },
    "saturday": { "open": "08:00", "close": "18:00" },
    "sunday": { "open": null, "close": null }
  },
  "service_tags": ["Haircuts", "Beard shaping", "Royal shave", "Styling"],
  "price_from": 50000,
  "price_to": 110000,
  "rating": "4.90",
  "reviews": 7,
  "booking": "Online booking is available — continue with check-availability."
}

reveal-phone

Настоящий номер телефона заведения. Намеренно вынесен из get-venue в отдельный вызов и ограничен 10 запросами в минуту — запрашивайте его для заведения, которое пользователь действительно выбрал, а не пачкой по всем результатам поиска.

ПараметрТипОбяз.Описание
slugstringДаИз search-venues
{
  "name": "Britva Barbershop",
  "phone": "+998 71 200-70-70",
  "url": "https://bronjoy.com/tashkent/barber/demo-barber"
}

check-availability

Услуги, доступные для записи, и свободные слоты. Вызовите без service_id, чтобы получить список услуг с ценами, затем ещё раз с нужным service_id, чтобы получить его слоты.

ПараметрТипОбяз.Описание
slugstringДаИз search-venues
datestringДаYYYY-MM-DD, сегодня или до 30 дней вперёд
service_idintegerНетПропустите при первом вызове, чтобы получить список услуг
{
  "date": "2026-09-10",
  "service": {
    "service_id": 1,
    "name": "Мужская стрижка",
    "duration_minutes": 30,
    "price": "80000.00",
    "currency": "UZS"
  },
  "slots": [
    {
      "start_time": "2026-09-10T09:00:00+05:00",
      "end_time": "2026-09-10T09:30:00+05:00",
      "staff_id": 1,
      "staff_name": "Азиз Рахимов"
    }
  ]
}

start_time — ровно то значение, которое ожидает book-appointment. Не округляйте и не преобразуйте его.

request-booking-code

Отправляет 6-значный код на собственную почту или телефон пользователя.

ПараметрТипОбяз.Описание
slugstringДаЗаведение, куда идёт запись
emailstringОдно из двухПочта пользователя
phonestringОдно из двухТелефон пользователя, +998901234567
Ассистент никогда не получает код. Код приходит на почту или телефон пользователя, и пользователь диктует его обратно. В этом и смысл: так подтверждается, что контакт принадлежит тому, кто записывается, и бизнес не получает записи с номеров, по которым никто не отвечает.

Код действует 5 минут и годится на одну запись. Отправки ограничены и по отправителю, и по получателю — не зацикливайтесь.

book-appointment

Создаёт запись.

ПараметрТипОбяз.Описание
slugstringДаЗаведение
service_idintegerДаИз check-availability
start_timestringДаТочное start_time из слота
namestringДаИмя пользователя в том виде, в каком его увидит бизнес
verification_codestringДа6 цифр, которые продиктовал пользователь
email / phonestringОдно из двухТот же контакт, на который отправлялся код
notesstringНетДо 500 символов

Запись создаётся со статусом pending — бизнес ещё должен её подтвердить. Скажите пользователю, что запись отправлена, а не гарантирована. Если заведение берёт предоплату, в ответе придёт payment_url, который пользователю нужно открыть.

Процесс записи

1. search-venues        → bookable_only: true
2. check-availability   → выбрать услугу, затем слот
3. request-booking-code → код уходит пользователю, а не вам
4. попросить пользователя продиктовать код
5. book-appointment     → с этим кодом

Два типа заведений

У каждого результата есть поле is_bookable, и оно определяет, что вы можете предложить дальше:

  • is_bookable: true — заведение настроено на онлайн-запись. Процесс выше работает.
  • is_bookable: false — карточка справочника. Реальный адрес, реальные часы работы, часто список услуг и телефон, но онлайн-записи нет. Отвечайте по этим данным и предлагайте телефон.
Сейчас бо́льшая часть каталога — второго типа. Ассистент, который считает, что записаться можно куда угодно, пообещает то, чего Bronjoy не может выполнить: передавайте bookable_only: true, когда пользователь хочет записаться, и прямо говорите, когда в заведение нужно звонить.

Как читать данные

  • Названия, услуги и адреса — на русском или узбекском. Не переводите адрес, который пользователю придётся показать таксисту.
  • Цены в узбекских сумах (UZS). У многих карточек цены нет вовсе. от 300000 сум означает «от 300 000 сум».
  • Время — в часовом поясе заведения, со смещением в значении.
  • Рейтинги в результатах поиска взяты из исходного справочника, а не из отзывов Bronjoy.

Ограничения

ОбластьЛимит
Все запросы30/минуту на клиента
reveal-phone10/минуту на клиента
request-booking-code10/час на клиента плюс лимит на получателя

При превышении лимита возвращается ошибка с указанием, сколько секунд подождать.


Сервер организации

Приватный сервер отдельной организации, к которому владелец подключает собственного ассистента. Он управляет календарём этой организации: услуги, слоты, записи и отмены. Это функция платного тарифа, требуется токен.

1. Создайте токен

Из панели управления или через API:

POST /api/org/ai/tokens
Authorization: Bearer your-staff-token
Content-Type: application/json
{
  "name": "Claude Desktop",
  "expires_in_days": 90
}

Ответ:

{
  "token": "3|AbCdEf...",
  "mcp_endpoint": "https://api.bronjoy.com/api/mcp/organization/1",
  "expires_at": "2026-06-23T12:00:00Z",
  "instructions": "Use this token in the Authorization header: Bearer <token>"
}

Сохраните токен сразу — он показывается только один раз.

2. Подключите AI-клиент

claude mcp add --transport http bronjoy-org \
  https://api.bronjoy.com/api/mcp/organization/1 \
  --header "Authorization: Bearer 3|AbCdEf..."

Инструменты

list-services

Список всех услуг, доступных для записи, с ценами и длительностью. Начинайте с него, чтобы узнать ID услуг.

Параметры: нет

{
  "services": [
    {
      "id": 1,
      "name": "Haircut",
      "description": "Classic haircut with styling",
      "duration_minutes": 30,
      "price": "25.00",
      "currency": "USD",
      "category": "Hair Services"
    }
  ],
  "total": 1
}

search-availability

Поиск свободных слотов для конкретной услуги и даты.

ПараметрТипОбяз.Описание
service_idintegerДаID услуги (из list-services)
datestringДаYYYY-MM-DD, сегодня или до 30 дней вперёд
staff_idintegerНетКонкретный сотрудник
{
  "date": "2026-03-26",
  "service": "Haircut",
  "timezone": "Asia/Tashkent",
  "available_times": ["09:00", "10:00", "14:30", "15:00"],
  "total_found": 10,
  "showing": 4,
  "note": "Times are in H:i format (24-hour) in the organization timezone."
}

create-appointment

Создать запись для клиента.

ПараметрТипОбяз.Описание
client_namestringДаПолное имя клиента (2–100 символов)
client_phonestringДаТелефон в международном формате (+998901234567)
service_idintegerДаID услуги
datestringДаYYYY-MM-DD
timestringДаHH:MM, 24-часовой формат
staff_idintegerНетКонкретный сотрудник (назначается автоматически, если не указан)
branch_idintegerНетФилиал
notesstringНетДо 500 символов
{
  "success": true,
  "appointment_id": 123,
  "message": "Appointment booked for John Doe on 2026-03-26 at 14:30."
}

check-appointment

Поиск существующих записей по номеру телефона.

ПараметрТипОбяз.Описание
client_phonestringДаТелефон в международном формате
appointment_idintegerНетКонкретная запись (если не указана — все предстоящие)

Возвращает одну запись или до 5 предстоящих записей для этого номера.

cancel-appointment

Отменить существующую запись. Телефон клиента должен совпадать с записью.

ПараметрТипОбяз.Описание
appointment_idintegerДаID записи
client_phonestringДаДолжен совпадать с записью
reasonstringНетДо 500 символов

Ресурсы

organization://profile

Профиль организации — услуги, сотрудники, филиалы, часовой пояс и валюта. Позволяет AI-клиенту получить контекст, не вызывая инструменты по отдельности.

Промпты

booking-assistant

Системный промпт, который настраивает разговор о записи и содержит инструкции по рекомендуемому процессу.

Рекомендуемый процесс

1. list-services       → Показать, что есть
2. search-availability → Найти свободные слоты для выбранной услуги
3. Подтвердить с пользователем → Пусть человек выберет время
4. create-appointment  → Записать

Для отмены:

1. check-appointment   → Найти запись по телефону
2. Подтвердить с пользователем → Какую именно отменить?
3. cancel-appointment  → Отменить

Ограничения

ОбластьЛимит
На токен60 запросов/минуту
На организацию120 запросов/минуту

При превышении возвращается 429 Too Many Requests.

Безопасность

  • Каждый токен привязан к одной организации — он не даёт доступа к данным другой
  • Токены истекают через заданное количество дней (по умолчанию 90, максимум 365)
  • Сервер работает только с записями — без внутренних управляющих эндпоинтов, финансовых данных и настроек сотрудников
  • Номер телефона подтверждает клиента при проверке и отмене
  • Все операции логируются для аудита

Решение проблем

ПроблемаРешение
401 UnauthorizedТокен истёк или недействителен — создайте новый
403 ForbiddenУ токена нет доступа к этой организации
429 Too Many RequestsПревышен лимит — подождите и повторите
Feature not availableДоступ к MCP не включён для этой организации
Слоты не возвращаютсяНе заданы графики сотрудников или к услуге не привязан сотрудник
Copyright © 2026