API ВЕГА

Yelp MCP Server

Размещённый сервер Model Context Protocol (MCP), который предоставляет Claude, Cursor, Windsurf и любому другому MCP-клиенту три инструмента Yelp только для чтения. Ищите компании по ключевым словам и местоположению, просматривайте полную информацию об одной компании и листайте всю её ленту отзывов. Данные возвращаются в виде структурированного JSON. Ключ Yelp Fusion и собственный хостинг не нужны.

Сервер получает данные с общедоступных страниц Yelp, доступных посетителям без входа в аккаунт, на любом из 41 регионального домена.

1 000 бесплатных кредитов каждый месяц, банковская карта не нужна — этого хватит на 100 вызовов по тарифу 10 кредитов за вызов.

https://mcp.hasdata.com/mcp?apis=yelp

Содержание

  • Требования

  • Быстрый старт

  • Примеры запросов

  • Инструменты

  • Ошибки и сценарии сбоев

  • Стоимость, бесплатный тариф и ограничения

  • Выбор инструмента

  • Сравнение с альтернативами

  • Часто задаваемые вопросы

  • Ссылки HasData

  • Разработка

  • Участие в проекте

  • Лицензия

Требования

Вам понадобятся MCP-клиент и API-ключ HasData. Его можно бесплатно создать в панели управления, банковская карта не требуется. Бесплатного тарифа хватит примерно на 100 вызовов в месяц при стоимости 10 кредитов за вызов. Это удалённый сервер: для подключения достаточно указать URL и заголовок x-api-key, запускать контейнер не нужно. Если клиент поддерживает только stdio, подключитесь к серверу через лёгкий модуль-запускатель: он опубликован в npm как @hasdata/yelp-mcp, а в PyPI — как hasdata-yelp-mcp. Примеры приведены ниже.

Быстрый старт

URL сервера одинаков для всех клиентов. Мы проверили подключение в Claude Code и Claude Desktop. Формат остальных примеров соответствует документации каждого клиента для удалённых серверов.

ПолеЗначение
URLhttps://mcp.hasdata.com/mcp?apis=yelp
ТранспортHTTP, с потоковой передачей
Заголовок авторизацииx-api-key: HASDATA_API_KEY

Клиенты с поддержкой OAuth могут добавить тот же URL как коннектор и войти в систему, не указывая ключ в файле конфигурации.

Claude Code

claude mcp add --transport http yelp "https://mcp.hasdata.com/mcp?apis=yelp" \
  --header "x-api-key: HASDATA_API_KEY"

Claude Desktop

Откройте Settings, затем Connectors, выберите Add custom connector, вставьте https://mcp.hasdata.com/mcp?apis=yelp и войдите в систему.

Если вы настраиваете подключение через файл конфигурации, учитывайте, что Claude Desktop загружает только локальные серверы stdio. Поэтому для доступа к удалённому серверу нужен модуль-запускатель stdio. Пакет @hasdata/yelp-mcp выполняет эту роль и получает ключ из переменных окружения. Добавьте эту запись в claude_desktop_config.json:

{
  "mcpServers": {
    "yelp": {
      "command": "npx",
      "args": ["-y", "@hasdata/yelp-mcp"],
      "env": { "HASDATA_API_KEY": "YOUR_KEY" }
    }
  }
}

Вместо Node можно использовать Python: модуль-запускатель из PyPI запускается через uvx без ручной установки:

{
  "mcpServers": {
    "yelp": {
      "command": "uvx",
      "args": ["hasdata-yelp-mcp"],
      "env": { "HASDATA_API_KEY": "YOUR_KEY" }
    }
  }
}

Cursor

Файл ~/.cursor/mcp.json — для всех проектов, а .cursor/mcp.json — для одного проекта:

{
  "mcpServers": {
    "yelp": {
      "url": "https://mcp.hasdata.com/mcp?apis=yelp",
      "headers": { "x-api-key": "HASDATA_API_KEY" }
    }
  }
}

Windsurf

Файл ~/.codeium/windsurf/mcp_config.json. В Windsurf поле называется serverUrl, а не url:

{
  "mcpServers": {
    "yelp": {
      "serverUrl": "https://mcp.hasdata.com/mcp?apis=yelp",
      "headers": { "x-api-key": "HASDATA_API_KEY" }
    }
  }
}

VS Code

Файл .vscode/mcp.json в рабочей области:

{
  "servers": {
    "yelp": {
      "type": "http",
      "url": "https://mcp.hasdata.com/mcp?apis=yelp",
      "headers": { "x-api-key": "HASDATA_API_KEY" }
    }
  }
}

Примеры запросов

Каждый из этих запросов вызывает один инструмент. Если для второго инструмента нужен идентификатор, полученный первым, выполняются два вызова подряд.

  • Найди кофейные обжарочные в Остине, штат Техас, и сравни их по рейтингу с учётом количества отзывов.

  • Найди часы работы, телефон и сайт компании Yelp desnudo-coffee-austin.

  • Прочитай все отзывы на одну и две звезды об этой компании и сгруппируй претензии по темам.

  • Какие блюда Yelp отмечает как популярные в этом заведении и что о них пишут в отзывах?

  • Сравни распределение оценок у этих трёх конкурентов в одном районе.

  • Покажи отзывы об этой компании, которые Yelp не рекомендует, и объясни, чем они отличаются от рекомендованных.

Если в запросе указано название компании, а не Yelp ID, потребуются два вызова: сначала поиск, чтобы определить ID, затем запрос сведений о заведении или его отзывах. Инструмент поиска возвращает placeId и placeAlias. Любое из этих значений можно передать в аргумент placeId инструмента для получения сведений о заведении.

Инструменты

ИнструментЧто возвращает
hasdata_yelp_place_getPlaceDetailsНазвание, адрес, телефон, сайт, ценовой диапазон, категории, общий рейтинг, количество отзывов, часы работы, удобства, фотографии и избранные отзывы. 10 кредитов за вызов
hasdata_yelp_reviews_getPlaceReviewsЗагружает ленту отзывов об одной компании Yelp по её Yelp ID. Поддерживает сортировку по релевантности, дате, оценке и статусу Elite, фильтрацию по оценке, языку и произвольному текстовому запросу, а также…. 10 кредитов за вызов
hasdata_yelp_search_getSearchResultsРанжированный список компаний с Yelp alias/ID, названием, категориями, рейтингом, количеством отзывов, ценовым уровнем, районом и миниатюрой. 10 кредитов за вызов

Доступны три инструмента, стоимость каждого успешного вызова — 10 кредитов. Каждый инструмент принимает параметр domain, который позволяет выбрать один из 41 домена для переключения между странами: от www.yelp.com до региональных сайтов в Европе, Азии и Латинской Америке, включая варианты для отдельных языков, например fr.yelp.ca и zh.yelp.com.hk.

Получение результатов поиска Yelp

hasdata_yelp_search_getSearchResults

Возвращает страницу с компаниями, найденными по ключевому слову в указанном месте.

ПараметрТипОбязательныйПримечания
keywordstringдаПоисковый запрос, например coffee
locationstringдаМесто поиска, например Austin, TX
lstringОграничивающий рамку карты прямоугольник вместо радиуса, в формате g:lon1,lat1,lon2,lat2
domainstringСайт Yelp; по умолчанию — www.yelp.com
startnumberСмещение в результатах; шаг — 10

Результат содержит searchInformation с исходными значениями keyword и location, а также totalResults; массив ads с платными размещениями; массив organicResults с обычными результатами; и объект pagination с полями currentPage, perPage, totalPages, nextPageUrl и otherPagesUrls.

Элементы этих двух массивов имеют разную структуру. В обычном результате есть поля position и streetAddress, а в рекламном их нет: вместо этого он содержит phone и массив highlights со значками, которые Yelp показывает рекламодателям. Если объединить массивы, не проверяя, откуда пришла компания, платное размещение можно ошибочно принять за позицию в рейтинге.

{
  "position": 2,
  "placeId": "oiJ7QuhhpsEpe9zFTZF0bA",
  "placeAlias": "desnudo-coffee-austin",
  "url": "https://www.yelp.com/biz/desnudo-coffee-austin",
  "title": "Desnudo Coffee",
  "streetAddress": "2505 Webberville Rd, Austin",
  "price": "$$",
  "categories": [{ "title": "Coffee Roasteries", "url": "https://www.yelp.com/search?find_desc=Coffee+Roasteries&find_loc=Austin%2C+TX" }],
  "snippet": "My favorite coffee shop to go to ever! Everyone must go. [[HIGHLIGHT]]Great coffee[[ENDHIGHLIGHT]], great vibes,great customer...",
  "rating": 4.7,
  "reviews": 347,
  "thumbnail": "https://s3-media0.fl.yelpcdn.com/bphoto/0nE_IcbRiyxrw3kk2z6owg/ls.jpg",
  "allImagesUrl": "https://www.yelp.com/biz_photos/oiJ7QuhhpsEpe9zFTZF0bA"
}

Получение сведений о заведении Yelp

hasdata_yelp_place_getPlaceDetails

Полная информация об одном заведении.

ПараметрТипОбязательныйПримечания
placeIdstringдаYelp ID, например oiJ7QuhhpsEpe9zFTZF0bA, или псевдоним, например desnudo-coffee-austin
domainstringСайт Yelp; по умолчанию — www.yelp.com

Возвращает объект placeResult с полями name, url, address, neighborhoods, country, phone, website, price, categories, rating, reviews, isClaimed и isClaimable; объект operationHours, содержащий расписание hours на неделю и данные за today; массив features; объект menu с полем popularDishes; массив faqs с вопросами, которые пользователи Yelp задали и получили ответы на них; массив reviewHighlights с фразами, которые Yelp показывает в верхней части страницы; массив images; а также businessMap — URL статического изображения карты.

features содержит список удобств. Каждый элемент включает поля title и isActive, поэтому значение false означает, что Yelp указывает на отсутствие удобства, а не на отсутствие данных о нём. Это важно учитывать при фильтрации: исключить элементы со значением false — не то же самое, что исключить элементы, для которых данных нет.

{
  "name": "Desnudo Coffee",
  "url": "https://www.yelp.com/biz/desnudo-coffee-austin",
  "address": "2505 Webberville Rd Austin, TX 78702",
  "neighborhoods": "East Austin",
  "country": "US",
  "phone": "(424) 400-1857",
  "website": "http://www.desnudocoffee.com",
  "price": "$$",
  "categories": ["Coffee Roasteries"],
  "rating": 4.7,
  "reviews": 347,
  "isClaimed": true,
  "isClaimable": false,
  "operationHours": { "hours": [{ "day": "Mon", "hours": ["7:00 AM - 2:00 PM"] }] },
  "features": [
    { "title": "Offers delivery", "isActive": true },
    { "title": "ADA-compliant restroom", "isActive": false }
  ],
  "menu": {
    "section": "Popular Drinks",
    "popularDishes": [{ "name": "Brown Sugar Miso Latte", "rating": 4.7, "reviews": 113, "photos": 71 }]
  }
}

Получение отзывов о заведении Yelp

hasdata_yelp_reviews_getPlaceReviews

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

ПараметрТипОбязательныйПримечания
placeIdstringдаYelp ID заведения
domainstringСайт Yelp; по умолчанию — www.yelp.com
sortBystringrelevanceDesc (по умолчанию), dateDesc, dateAsc, ratingDesc, ratingAsc или elitesDesc
ratingstringОставить только отзывы с указанными оценками, например 5 или 1,2
querystringПоиск по тексту отзывов
languageCodestringДвухбуквенный код языка отзывов; по умолчанию — en
notRecommendedbooleanВернуть ленту отзывов, отфильтрованных Yelp, вместо рекомендованной
startnumberСмещение с шагом, равным num
numnumberРазмер страницы: по умолчанию 49, максимум — 49
nextPageTokenstringТокен курсора, который нужно передать без изменений из предыдущего ответа

Возвращает объект searchInformation с названием заведения, псевдонимом, URL, полем totalResults, рейтингом rating, массивом reviewCountsByRating и разбивкой reviewCountsByLanguage; объект pagination; и массив reviews.

Каждый отзыв содержит поля position, id, link, объект user, объект comment с полями text и language (определённый язык), а также поля date и rating. Если автор добавил к отзыву фотографии, видео или реакции, ответ также содержит поля photos, videos и reactions. Объект user включает поля name, userId, address, количество отзывов за всё время reviews, количество друзей friends и фотографий photos, а также eliteYear для участника Yelp Elite.

Если автор позднее отредактировал отзыв, в ответе также будет поле previousReviews с предыдущей версией отзыва, её текстом, оценкой и датой. Используйте это поле, чтобы определить, менялась ли оценка: по одной только текущей версии отзыва это выяснить нельзя.

{
  "position": 1,
  "id": "7zLIm3c2v2hRBVmgaKkR7w",
  "link": "https://www.yelp.com/biz/desnudo-coffee-austin?hrid=7zLIm3c2v2hRBVmgaKkR7w",
  "user": {
    "name": "Karson S.",
    "userId": "3LxSs_dQ37-LBRz07EDbyg",
    "address": "Austin, TX",
    "reviews": 374,
    "friends": 61,
    "photos": 875,
    "eliteYear": "26"
  },
  "comment": { "text": "Coming back to Desnudo to update my old review...", "language": "en" },
  "date": "2026-08-20T17:33:47-05:00",
  "rating": 5,
  "photos": [{ "link": "https://s3-media0.fl.yelpcdn.com/bphoto/YbjFKmRf7j0ejQQSaqtqVw/o.jpg", "caption": "Matcha latte", "width": 1126, "height": 2000 }],
  "reactions": [{ "type": "HELPFUL", "label": "Helpful", "count": 1 }],
  "previousReviews": [{ "id": "0WNI2IG7K1_Dg9zdXm03SA", "rating": 4, "comment": { "text": "..." } }]
}

Ошибки и нестандартные ситуации

Учитывайте эти случаи, а не рассчитывайте только на успешный ответ.

Если поиск ничего не находит, он возвращает успешный результат с пустым массивом organicResults, а не ошибку. Значение requestMetadata.status при этом остаётся ok. Перед обработкой проверьте длину массива.

snippet содержит размеченный, а не чистый текст. Yelp обрамляет найденные слова маркерами [[HIGHLIGHT]] и [[ENDHIGHLIGHT]]; они передаются в ответе без изменений. Удалите их перед индексацией, созданием эмбеддингов или отображением фрагмента.

URL категорий возвращаются с экранированием HTML. В поле url элемента categories символ & заменён на HTML-представление — так URL указан на странице. Преобразуйте его обратно перед переходом по ссылке.

Параметры rating и query нельзя использовать вместе в инструменте отзывов. Во время поиска по тексту Yelp игнорирует фильтр по оценке, поэтому в результатах будут отзывы с любыми оценками. Если нужны оба условия, отфильтруйте результаты самостоятельно.

start и nextPageToken — два разных способа постраничной загрузки, которые нельзя сочетать. Передавайте что-то одно. Токен содержит и смещение, и размер страницы, поэтому для продолжения ленты достаточно повторно передать только его. Чтобы значение start оставалось согласованным между запросами, необходимо передавать и num.

Лента не рекомендованных отзывов отличается от основной и имеет другие ограничения. При значении notRecommended возвращаются отзывы, отфильтрованные Yelp из основного списка. Они выдаются по 10 за раз, а фотографии, видео и реакции к ним не прилагаются.

У заведения может не быть владельца с подтверждёнными правами, и такая страница содержит мало данных. Если isClaimed имеет значение false, на странице обычно нет сайта, часов работы и списка удобств, поскольку владелец их не добавил. Проверяйте этот флаг, прежде чем считать отсутствующее поле ошибкой сбора данных.

Ответы с данными также содержат requestMetadata.id. Его стоит указывать при обращении в службу поддержки.

Стоимость, бесплатный тариф и ограничения

Каждый вызов инструмента Yelp стоит 10 кредитов за успешный запрос. Размер ответа на цену не влияет: страница с 49 отзывами стоит столько же, сколько страница с 5 отзывами. Поэтому для загрузки ленты выгоднее запрашивать страницу максимально возможного размера.

Бесплатный тариф предоставляет 1 000 кредитов в месяц без привязки карты — этого хватит на 100 вызовов Yelp по базовой ставке. Кредиты обновляются в начале расчётного периода, поэтому агент с небольшим объёмом запросов может пользоваться бесплатным тарифом постоянно.

Платные тарифы начинаются с $59 в месяц за 200 000 кредитов, что соответствует 20 000 вызовам. При увеличении объёма цена за вызов снижается: с $2.95 за 1 000 вызовов на начальном тарифе до $1.19 на Basic и $0.83 на тарифах Growth. Актуальные цены указаны на странице тарифов.

Тариф также определяет количество одновременных запросов. Бесплатный тариф допускает 1 запрос за раз, Startup — 5, Basic — 15, а тарифы Growth — от 50 до 500. Для автоматизированных сценариев предусмотрите повторные попытки с задержкой при ответе 429: агент, который одновременно обрабатывает список заведений, может достигнуть лимита раньше, чем вы успеете это заметить.

Запрос, завершившийся ответом с кодом, отличным от 200, не тарифицируется. Успешный запрос, который ничего не нашёл, всё равно считается вызовом.

Выбор инструмента

Начните с того, какие данные есть в запросе. Если указаны ключевое слово и место, используйте инструмент поиска; если известен Yelp ID или псевдоним — сразу инструмент получения сведений о заведении; если вопрос касается мнений посетителей — инструмент отзывов. Самая частая лишняя трата — выполнять поиск, чтобы получить ID, который у вас уже есть.

Затем выберите инструмент с учётом сути вопроса. Инструмент получения сведений о заведении отвечает на вопросы о самом заведении, его графике работы, удобствах, ценовом уровне и общем рейтинге. Инструмент отзывов предназначен для вопросов о посетителях и их мнениях: только он возвращает тексты отзывов, сведения об авторах и распределение оценок. Блок reviewHighlights в ответе инструмента получения сведений о заведении содержит примеры отзывов, выбранные Yelp, и не заменяет полную ленту.

Загружайте ленту страницами максимально возможного размера. По умолчанию num уже равен максимальному значению 49, поэтому не меняйте его, если только вы намеренно не хотите получить выборку.

Сравнение

Собственный Fusion API Yelp — официальный способ получить эти данные, но он работает иначе.

Yelp Fusion APIЭтот сервер
ДоступОдобренное приложение разработчикаКлюч API
Текст отзывовДо трёх на компанию, в сокращённом видеПолная лента с полными текстами и постраничной выдачей
Авторы отзывовИмя и фотоИмя, местоположение, общее число отзывов и год получения статуса Elite
Распределение оценокНе возвращаетсяreviewCountsByRating при каждом вызове
Отфильтрованные отзывыНе возвращаютсяЛента нерекомендуемых отзывов
История измененийНе возвращаетсяpreviousReviews, если отзыв был переписан
Удобства и часы работыОграниченный набор атрибутовБлок удобств в том виде, в каком он показан на странице

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

Часто задаваемые вопросы

Есть ли у Yelp официальный MCP-сервер?

Yelp не публикует такой сервер. Этот сервер поддерживает HasData и получает данные с общедоступных страниц Yelp.

Что такое MCP-сервер Yelp?

MCP-сервер предоставляет инструменты, которые может вызывать AI-клиент. Этот сервер преобразует результаты поиска Yelp, страницы компаний и ленты отзывов в JSON, который агент может анализировать. Для этого не нужны браузер или библиотека для парсинга в вашем стеке.

Нужны ли мне аккаунт Yelp или ключ Fusion?

Нет. Единственный необходимый ключ — ваш ключ HasData.

Какие сайты Yelp поддерживаются?

Поддерживаются все 41 домен, принимаемые API: от www.yelp.com до сайтов в Европе, Азии и Латинской Америке. В некоторых странах есть несколько доменов для разных языков — например, fr.yelp.ca и www.yelp.ca. Чтобы переключить домен, укажите domain.

Можно ли получить все отзывы о компании?

Да, для этого используйте постраничную загрузку. Лента возвращает по 49 отзывов за раз, а pagination.hasNextPage показывает, когда нужно остановиться. Чтобы прочитать все 347 отзывов компании, потребуется восемь вызовов.

Чем рекомендуемые отзывы отличаются от нерекомендуемых?

Yelp использует программное обеспечение, которое скрывает часть отзывов из основной ленты. По умолчанию возвращается рекомендуемая лента — именно её видят посетители. Если задать notRecommended, вместо неё будет возвращена скрытая лента. Она меньше, выдаётся по десять отзывов за раз и не содержит фотографий и реакций.

Почему фильтр по оценке вернул отзывы со всеми оценками?

Потому что одновременно был задан параметр query. При поиске по тексту Yelp отключает фильтр по звёздам, поэтому применить оба фильтра на стороне сервера нельзя.

Можно ли использовать этот сервер вместе с другими API HasData?

Да. Один ключ подходит для всех сервисов, а для доступа к ним используется одна конечная точка с параметром apis. Укажите клиенту ?apis=yelp,google_maps, чтобы получить наборы инструментов обоих сервисов в одном подключении, или перейдите на mcp.hasdata.com/api/mcp, чтобы посмотреть полный каталог.

Связана ли HasData с Yelp?

Нет. HasData — независимый сервис, не связанный с Yelp, не одобренный и не спонсируемый этой компанией. Yelp — товарный знак, принадлежащий соответствующему владельцу. Инструменты работают только с общедоступными данными. Вы несёте ответственность за использование результатов в соответствии с условиями Yelp и применимым законодательством.

Соблюдение требований и персональные данные

Инструменты для работы с отзывами возвращают персональные данные. В каждом отзыве содержатся отображаемое имя автора, фотография профиля, указанное местоположение, идентификатор пользователя и ссылка на его профиль. При этом авторы отзывов — частные лица, а не компании. Поэтому на такие данные распространяются требования GDPR и CCPA, в отличие от данных о компании в справочнике. Прежде чем сохранять эти сведения, определите, какие именно данные вам нужны, храните их не дольше, чем того требует цель обработки, и проверьте свои обязательства. Для агрегированного анализа поля с данными об авторах обычно не нужны.

Ссылки HasData

Другие MCP-серверы HasData: Google Search, Google Maps, Google Trends, Google Flights, DuckDuckGo, YouTube, TikTok, Instagram, Amazon, Zillow, Airbnb, Booking.com, Indeed.

Разработка

Запускной скрипт — это простой мост stdio к удалённому серверу, поэтому собирать проект не нужно.

npm install
HASDATA_API_KEY=your_key_here npm test

Тесты в test/ проверяют контракт инструментов — именно эту часть можно изменить, не внося коммит в этот репозиторий. Они проверяют, что ?apis=yelp возвращает ожидаемое число инструментов, их названия не меняются, для каждого инструмента указаны обязательные параметры и описание, а используемый ключ действительно принимается. Последняя проверка вызывает инструмент по-настоящему и расходует 10 кредитов — такова цена контрольного теста, который может завершиться ошибкой по обоснованной причине.

Проверки контракта также запускаются по расписанию раз в неделю: список инструментов в upstream-сервисе может измениться, даже если в этом репозитории никто ничего не менял.

Участие в разработке

Если таблица инструментов, пример ответа или описание поведения не соответствуют действительности, сообщите об этом в issue. Для таких случаев предусмотрен отдельный шаблон. Также приветствуются pull request с исправлениями этих материалов и любых компонентов запускного скрипта.

Лицензия

MIT, см. LICENSE.