Yelp MCP Server

Búsqueda de negocios en Yelp, detalles de lugares y el feed completo de reseñas, como JSON estructurado.

Documentación

Servidor MCP de Yelp

Un servidor de Protocolo de Contexto de Modelo (MCP) alojado que brinda a Claude, Cursor, Windsurf y cualquier otro cliente MCP tres herramientas de solo lectura de Yelp. Busca negocios por palabra clave y ubicación, lee un negocio completo y recorre su feed de reseñas completo, todo como JSON estructurado, sin clave de Yelp Fusion y sin nada que alojar.

Lee páginas públicas de Yelp que un visitante sin sesión puede ver, en cualquiera de los 41 dominios regionales.

1,000 créditos gratis cada mes, sin tarjeta requerida, lo que equivale a 100 llamadas a Yelp a la tarifa de 10 créditos.

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

Glama score tool contract MCP Tools npm PyPI License

Contenido

Lo que necesitas

Un cliente MCP y una clave de API de HasData desde el panel de control, gratis de crear sin tarjeta, y el nivel gratuito cubre alrededor de 100 llamadas al mes a la tarifa de 10 créditos. Este es un servidor remoto, por lo que la ruta más simple es una URL y un encabezado x-api-key, sin contenedor que ejecutar. Un cliente que solo habla stdio lo alcanza a través de un lanzador ligero, publicado como @hasdata/yelp-mcp en npm y hasdata-yelp-mcp en PyPI, que se muestra a continuación.

Inicio rápido

La URL del servidor es la misma para cada cliente. Lo ejecutamos de forma práctica en Claude Code y Claude Desktop. Los otros bloques siguen el formato documentado de cada cliente para un servidor remoto.

CampoValor
URLhttps://mcp.hasdata.com/api/mcp?apis=yelp
TransporteHTTP, transmisible
Encabezado de autenticaciónx-api-key: HASDATA_API_KEY

Los clientes con soporte OAuth pueden agregar la misma URL como conector e iniciar sesión sin poner una clave en un archivo de configuración.

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

Configuración, luego Conectores, luego Agregar conector personalizado, luego pega https://mcp.hasdata.com/api/mcp?apis=yelp e inicia sesión.

Para la ruta de archivo de configuración, Claude Desktop carga solo servidores locales (stdio), por lo que alcanza un servidor remoto a través de un lanzador stdio. El paquete @hasdata/yelp-mcp es ese lanzador, y lee la clave del entorno. Agrega esto a claude_desktop_config.json:

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

Para Python en lugar de Node, cambia el lanzador por el paquete de PyPI, que uvx ejecuta sin instalación manual:

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

~/.cursor/mcp.json para cada proyecto, o .cursor/mcp.json para uno:

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

~/.codeium/windsurf/mcp_config.json. Windsurf llama al campo serverUrl, no url:

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

.vscode/mcp.json en el espacio de trabajo:

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

Ejemplos de indicaciones

Cada una de estas aterriza en una herramienta, o en dos en secuencia cuando la segunda necesita un identificador que la primera devuelve.

  • Encuentra tostadores de café en Austin, TX y clasifícalos por calificación frente al número de reseñas.
  • Obtén el horario, el teléfono y el sitio web del negocio de Yelp desnudo-coffee-austin.
  • Lee cada reseña de una y dos estrellas de este negocio y agrupa las quejas por tema.
  • ¿Qué platos lista Yelp como populares para este lugar, y qué dicen los reseñadores sobre ellos?
  • Compara la distribución de calificaciones de estos tres competidores en el mismo vecindario.
  • Muéstrame las reseñas que Yelp no recomienda para este negocio y cómo difieren de las recomendadas.

Una indicación que nombra un negocio en lugar de un ID de Yelp requiere dos llamadas: una búsqueda para resolver el ID y una consulta de lugar o reseñas para leerlo. La herramienta de búsqueda devuelve tanto placeId como placeAlias, y cualquiera de los dos funciona como el argumento placeId para la herramienta de lugar.

Herramientas

Tres herramientas, 10 créditos por llamada exitosa. Cada herramienta acepta domain para cambiar de país, uno de 41 valores, desde www.yelp.com hasta los sitios europeos, asiáticos y latinoamericanos, incluidas las variantes específicas de idioma como fr.yelp.ca y zh.yelp.com.hk.

Obtener resultados de búsqueda de Yelp

hasdata_yelp_search_getSearchResults

Una página de negocios para una palabra clave en un lugar.

ParámetroTipoRequeridoNotas
keywordstringQué buscar, como coffee
locationstringDónde buscar, como Austin, TX
lstringCuadro delimitador del mapa en lugar de un radio, como g:lon1,lat1,lon2,lat2
domainstringSitio de Yelp, por defecto www.yelp.com
startnumberDesplazamiento de resultados, avanzando de 10 en 10

Devuelve searchInformation con el keyword repetido, location y totalResults, un array ads de ubicaciones pagadas, un array organicResults, y pagination con currentPage, perPage, totalPages, nextPageUrl y otherPagesUrls.

Los dos arrays de resultados no tienen la misma forma. Un resultado orgánico lleva position y streetAddress, mientras que un anuncio no lleva ninguno y agrega phone y un array highlights de las insignias que Yelp muestra a los anunciantes. Fusionar los arrays sin verificar de cuál proviene un negocio convierte la ubicación pagada en rango.

{
  "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"
}

Obtener detalles del lugar de Yelp

hasdata_yelp_place_getPlaceDetails

Un negocio completo.

ParámetroTipoRequeridoNotas
placeIdstringUn ID de Yelp como oiJ7QuhhpsEpe9zFTZF0bA, o un alias como desnudo-coffee-austin
domainstringSitio de Yelp, por defecto www.yelp.com

Devuelve un objeto placeResult con name, url, address, neighborhoods, country, phone, website, price, categories, rating, reviews, isClaimed y isClaimable, un objeto operationHours que contiene una semana de hours más today, un array features, un objeto menu con popularDishes, un array faqs de preguntas que los lectores de Yelp hicieron y respondieron, un array reviewHighlights de las frases que Yelp fija en la parte superior de la página, un array images, y businessMap, una URL de imagen de mapa estático.

features es el bloque de comodidades, y cada entrada lleva un title y un indicador isActive, por lo que una entrada falsa significa que Yelp declara que la comodidad está ausente en lugar de desconocida. Esa diferencia importa al filtrar, porque eliminar las entradas falsas y eliminar las faltantes no son la misma consulta.

{
  "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 }]
  }
}

Obtener reseñas del lugar de Yelp

hasdata_yelp_reviews_getPlaceReviews

El feed de reseñas de un negocio, en texto completo, con ordenamiento, filtrado y paginación.

ParámetroTipoRequeridoNotas
placeIdstringEl ID de Yelp del negocio
domainstringSitio de Yelp, por defecto www.yelp.com
sortBystringrelevanceDesc (por defecto), dateDesc, dateAsc, ratingDesc, ratingAsc o elitesDesc
ratingstringConserva solo estas calificaciones de estrellas, como 5 o 1,2
querystringBúsqueda de texto libre dentro de las reseñas
languageCodestringIdioma de dos letras de las reseñas, por defecto en
notRecommendedbooleanDevuelve el feed que Yelp filtra en lugar del recomendado
startnumberDesplazamiento, avanzando de num
numnumberTamaño de página, 49 como máximo, y 49 por defecto
nextPageTokenstringCursor tomado textualmente de la respuesta anterior

Devuelve searchInformation con el nombre del negocio, alias, URL, totalResults, rating, un array reviewCountsByRating y un desglose reviewCountsByLanguage, un objeto pagination, y un array reviews.

Cada reseña lleva position, id, link, un objeto user, un objeto comment que contiene text y su language detectado, date, rating, y, cuando el reseñador los adjuntó, photos, videos y reactions. El objeto user informa name, userId, address, reviews de por vida, recuentos de friends y photos, y eliteYear para un miembro de Yelp Elite.

Una reseña que el autor reescribió más tarde también lleva previousReviews, que contiene la versión anterior con su propio texto, calificación y fecha. Ese es el campo a leer cuando la pregunta es si una calificación cambió, porque la reseña actual por sí sola no puede responderla.

{
  "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": "..." } }]
}

Errores y rutas de fallo

Planifica estos en lugar de asumir un camino feliz.

Una búsqueda sin coincidencias devuelve un resultado exitoso con un array organicResults vacío, no un error. requestMetadata.status sigue siendo ok. Prueba la longitud del array antes de iterar.

snippet es texto marcado, no texto limpio. Yelp envuelve las palabras coincidentes en [[HIGHLIGHT]] y [[ENDHIGHLIGHT]], y esos marcadores llegan textualmente. Elimínalos antes de indexar, incrustar o mostrar el fragmento.

Las URL de categorías llegan con escape HTML. El url dentro de una entrada categories contiene & en lugar de un ampersand simple, porque así está en la página. Deshaz el escape antes de seguir el enlace.

rating y query no se combinan en la herramienta de reseñas. Yelp ignora el filtro de estrellas mientras se ejecuta una consulta de texto libre, por lo que una búsqueda filtrada regresa con reseñas de cada calificación. Filtra el resultado tú mismo cuando necesites ambos.

start y nextPageToken son dos formas diferentes de paginar, y no se mezclan. Pasa uno u otro. El token lleva tanto el desplazamiento como el tamaño de página, por lo que reenviarlo solo continúa el feed, mientras que start necesita que num permanezca constante entre llamadas.

El feed no recomendado es un feed diferente con límites diferentes. Establecer notRecommended devuelve reseñas que Yelp filtró de la lista principal, y esas vienen de diez en diez en lugar de 49, sin fotos, videos o reacciones adjuntas.

Un negocio puede no estar reclamado, y una página no reclamada es escasa. isClaimed falso generalmente significa sin sitio web, sin horario y sin comodidades, porque nadie los completó. Lee el indicador antes de tratar un campo faltante como un fallo de scraping.

Los resultados que llevan datos también llevan un requestMetadata.id que vale la pena citar en soporte.

Precios, nivel gratuito y límites

Cada herramienta de Yelp cuesta 10 créditos por llamada exitosa. El tamaño de la respuesta no cambia el precio, por lo que una página de 49 reseñas y una de 5 reseñas cuestan lo mismo, lo que hace que la página más grande sea la forma más barata de leer un feed.

El nivel gratuito es 1,000 créditos cada mes sin tarjeta, lo que equivale a 100 llamadas a Yelp a la tarifa base. Se renueva con el ciclo de facturación, por lo que un agente de bajo volumen se ejecuta en el nivel gratuito indefinidamente. Los planes de pago comienzan en $49 al mes por 200,000 créditos, lo que equivale a 20,000 llamadas. El precio unitario baja con el volumen, desde $2.45 por cada 1,000 llamadas en el plan inicial hasta $1.00 en Business, $0.84 en Growth y $0.74 en los planes de alto volumen más grandes.

Tu plan también define la concurrencia. El nivel gratuito permite 1 solicitud a la vez, Startup 15, Business 30, Growth 50, y los planes de alto volumen van de 200 a 1,500. Reintenta con retroceso en el error 429 en cualquier proceso desatendido, porque un agente que se despliega sobre una lista de negocios alcanzará el límite antes que tú.

Una solicitud que devuelve un código distinto de 200 no se factura. Una llamada exitosa que no encuentra nada sigue siendo una llamada.

Selección de herramientas

Empieza por lo que te da el prompt. Una palabra clave y un lugar van a la herramienta de búsqueda, un ID o alias de Yelp va directamente a la herramienta de lugar, y una pregunta sobre lo que dijeron los clientes va a la herramienta de reseñas. Gastar una llamada de búsqueda para llegar a un ID que ya tienes es el desperdicio más común.

Luego elige según lo que pregunta la pregunta. La herramienta de lugar responde preguntas sobre el negocio en sí, sus horarios, servicios, nivel de precio y calificación principal. La herramienta de reseñas responde preguntas sobre sus clientes, y es la única que devuelve el texto de las reseñas, los autores y la distribución de calificaciones. El bloque reviewHighlights en la herramienta de lugar es una muestra que Yelp selecciona, no un sustituto del feed.

Lee el feed con la página más grande. num ya tiene como valor predeterminado su máximo de 49, así que déjalo solo a menos que estés muestreando deliberadamente.

Cómo se compara

La propia API Fusion de Yelp es la ruta oficial a estos datos, y es un instrumento diferente.

API Fusion de YelpEste servidor
ElegibilidadUna aplicación de desarrollador aprobadaUna clave de API
Texto de reseñasHasta tres por negocio, truncadasEl feed completo, texto completo, paginado
Autores de reseñasNombre y fotoNombre, ubicación, conteos de por vida, año Elite
Distribución de calificacionesNo se devuelvereviewCountsByRating en cada llamada
Reseñas filtradasNo se devuelvenEl feed de no recomendadas
Historial de edicionesNo se devuelvepreviousReviews cuando una reseña fue reescrita
Servicios y horariosUn conjunto de atributos limitadoEl bloque de servicios tal como lo muestra la página

La fila que lo decide es el texto de las reseñas. Fusion devuelve tres extractos por negocio, lo que responde una pregunta de visualización en un escaparate y no puede responder una pregunta de análisis sobre sentimiento, quejas o cómo cambió una calificación. Cuando tres extractos y un contrato oficial son lo que necesitas, Fusion es la mejor opción.

Preguntas frecuentes

¿Existe un servidor MCP oficial de Yelp?

Yelp no publica uno. Este es mantenido por HasData y lee páginas públicas de Yelp.

¿Qué es un servidor MCP de Yelp?

Un servidor MCP expone herramientas que un cliente de IA puede llamar. Este convierte los resultados de búsqueda de Yelp, las páginas de negocios y los feeds de reseñas en JSON sobre el que un agente puede razonar, sin un navegador ni una biblioteca de scraping en tu stack.

¿Necesito una cuenta de Yelp o una clave de Fusion?

No. La única credencial es tu clave de HasData.

¿Qué sitios de Yelp están cubiertos?

Los 41 dominios que acepta la API, desde www.yelp.com hasta los sitios europeos, asiáticos y latinoamericanos. Varios países tienen más de uno, divididos por idioma, como fr.yelp.ca junto a www.yelp.ca. Pasa domain para cambiar.

¿Puedo obtener todas las reseñas de un negocio?

Sí, paginando. El feed devuelve 49 a la vez, y pagination.hasNextPage te dice cuándo detenerte. Leer un negocio con 347 reseñas toma ocho llamadas.

¿Cuál es la diferencia entre reseñas recomendadas y no recomendadas?

Yelp ejecuta software que oculta algunas reseñas del feed principal. La respuesta predeterminada es el feed recomendado, el que ve un visitante. Configurar notRecommended devuelve el oculto en su lugar, que es más pequeño, paginado de diez en diez, y sin fotos ni reacciones.

¿Por qué mi filtro de calificación devolvió todas las calificaciones?

Porque se configuró un query al mismo tiempo. Yelp elimina el filtro de estrellas cuando ejecuta una búsqueda de texto, por lo que no se pueden combinar en el lado del servidor.

¿Puedo usar esto junto con otras APIs de HasData?

Sí. Una clave cubre todo, y un endpoint las sirve todas a través del parámetro apis. Apunta un cliente a ?apis=yelp,google_maps para obtener ambos conjuntos de herramientas en una conexión, o a mcp.hasdata.com/api/mcp para el catálogo completo.

¿HasData está afiliado a Yelp?

No. HasData es un servicio independiente y no está afiliado, respaldado ni patrocinado por Yelp. Yelp es una marca comercial de su respectivo propietario. Las herramientas trabajan solo con datos disponibles públicamente, y eres responsable de usar los resultados de acuerdo con los términos de Yelp y la ley que te aplica.

Cumplimiento y datos personales

Las herramientas de reseñas devuelven datos personales. Una reseña lleva el nombre visible del autor, foto de perfil, ubicación declarada, ID de usuario y un enlace a su perfil, y los reseñadores son individuos privados en lugar de negocios. Eso pone la respuesta en el ámbito del GDPR y la CCPA de una manera que un listado de negocio no lo está. Decide qué necesitas antes de almacenarlo, consérvalo no más tiempo del que requiere el propósito, y verifica tus propias obligaciones. El análisis agregado rara vez necesita los campos de autor.

Enlaces de HasData

Otros servidores MCP de HasData: Google Search, Google Maps, Google Trends, Google Flights, DuckDuckGo, YouTube, TikTok, Instagram, Amazon, Zillow, Airbnb, Booking.com, Indeed.

Desarrollo

El lanzador es un puente stdio delgado hacia el servidor remoto, así que no hay nada que compilar.

npm install
HASDATA_API_KEY=your_key_here npm test

Las pruebas en test/ verifican el contrato de las herramientas, la parte que puede romperse sin un commit aquí. Comprueban que ?apis=yelp devuelve el número esperado de herramientas, que ningún nombre cambió, que cada herramienta todavía declara sus parámetros requeridos y lleva una descripción, y que la clave en uso es realmente aceptada. Esa última verificación llama a una herramienta de verdad y cuesta 10 créditos, que es el precio de un canario que puede fallar por la razón correcta.

La suite de contrato también se ejecuta semanalmente en un horario, porque la lista de herramientas upstream puede cambiar sin que nadie toque este repositorio.

Contribuciones

Una tabla de herramientas, una muestra de respuesta o un comportamiento documentado que no coincide con la realidad merece un issue. Hay una plantilla exactamente para eso. Las solicitudes de extracción son bienvenidas para lo mismo, y para cualquier cosa en el lanzador.

Licencia

MIT, ver LICENCIA.