HasData Google Maps MCP Server
Lugares de Google Maps, reseñas, historial de contribuyentes, fotos y publicaciones como JSON, sin proyecto de Google Cloud.
Documentación
Servidor MCP de Google Maps
Un servidor de Protocolo de Contexto de Modelo (MCP) alojado que brinda a Claude, Cursor, Windsurf y cualquier otro cliente MCP seis herramientas de solo lectura de Google Maps. Busca lugares, lee un lugar completo, obtén sus reseñas, fotos y publicaciones, y recorre el historial de un solo reseñador, todo como JSON estructurado, sin proyecto de Google Cloud y sin facturación que activar.
https://mcp.hasdata.com/api/mcp?apis=google_maps
Contenido
- Lo que necesitas
- Inicio rápido
- Ejemplos de indicaciones
- Herramientas
- Errores y rutas de fallo
- Precios, nivel gratuito y límites
- Selección de herramientas
- Cómo se compara
- Preguntas frecuentes
- Enlaces de HasData
- Desarrollo
- Contribuciones
- Licencia
Lo que necesitas
Un cliente MCP que hable HTTP transmisible con encabezados personalizados. Una clave de API de HasData desde el panel de control, gratuita de crear sin tarjeta, y la prueba cubre alrededor de 200 llamadas a la tarifa de 5 créditos. Nada más. Este es un servidor remoto, por lo que la ruta más simple es una URL y un encabezado, sin contenedor que ejecutar y sin proyecto de Google Cloud ni clave de API en ningún lugar del flujo. Un cliente solo stdio puede usar el lanzador @hasdata/google-maps-mcp (npm) o hasdata-google-maps-mcp (PyPI) en su lugar.
Inicio rápido
| URL | https://mcp.hasdata.com/api/mcp?apis=google_maps |
| Transporte | HTTP, transmisible |
| Encabezado de autenticación | x-api-key: HASDATA_API_KEY |
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.
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 google-maps "https://mcp.hasdata.com/api/mcp?apis=google_maps" \
--header "x-api-key: HASDATA_API_KEY"
Claude Desktop
Claude Desktop carga solo servidores locales (stdio) desde su archivo de configuración, por lo que llega a un servidor remoto a través de un lanzador stdio. El paquete @hasdata/google-maps-mcp es ese lanzador, y lee la clave del entorno.
claude_desktop_config.json:
{
"mcpServers": {
"google-maps": {
"command": "npx",
"args": ["-y", "@hasdata/google-maps-mcp"],
"env": { "HASDATA_API_KEY": "YOUR_KEY" }
}
}
}
¿Python en lugar de Node? Cambia el lanzador por el paquete de PyPI, que uvx ejecuta sin instalación manual:
{
"mcpServers": {
"google-maps": {
"command": "uvx",
"args": ["hasdata-google-maps-mcp"],
"env": { "HASDATA_API_KEY": "YOUR_KEY" }
}
}
}
Un cliente con soporte OAuth puede en su lugar agregar la URL como un conector personalizado y omitir el lanzador.
Cursor
.cursor/mcp.json:
{
"mcpServers": {
"google-maps": {
"url": "https://mcp.hasdata.com/api/mcp?apis=google_maps",
"headers": { "x-api-key": "HASDATA_API_KEY" }
}
}
}
Windsurf
~/.codeium/windsurf/mcp_config.json:
{
"mcpServers": {
"google-maps": {
"serverUrl": "https://mcp.hasdata.com/api/mcp?apis=google_maps",
"headers": { "x-api-key": "HASDATA_API_KEY" }
}
}
}
Cline
{
"mcpServers": {
"google-maps": {
"url": "https://mcp.hasdata.com/api/mcp?apis=google_maps",
"type": "streamableHttp",
"headers": { "x-api-key": "HASDATA_API_KEY" },
"disabled": false
}
}
}
VS Code
.vscode/mcp.json:
{
"servers": {
"google-maps": {
"type": "http",
"url": "https://mcp.hasdata.com/api/mcp?apis=google_maps",
"headers": { "x-api-key": "HASDATA_API_KEY" }
}
}
}
Gemini CLI
~/.gemini/settings.json:
{
"mcpServers": {
"google-maps": {
"httpUrl": "https://mcp.hasdata.com/api/mcp?apis=google_maps",
"headers": { "x-api-key": "HASDATA_API_KEY" }
}
}
}
Ejemplos de indicaciones
Cada una de estas es una llamada a una herramienta, a menos que el recuento indique lo contrario.
Busca en Google Maps café cerca del centro de Seattle y dame los diez mejores con su calificación, número de reseñas y sitio web.
Una llamada, 5 créditos. La búsqueda devuelve los lugares con placeId y dataId ya adjuntos, y los seguimientos a continuación no necesitan paso de búsqueda.
Obtén los detalles completos de
ChIJAb0KE0RrkFQRuI4X0By5Mcw: horarios, opciones de servicio, nivel de precio y el enlace del menú.
Una llamada, 5 créditos.
Lee las reseñas más recientes de ese lugar, ordenadas de más nuevas a más antiguas, y dime qué temas aparecen con más frecuencia.
Una llamada, 5 créditos. La respuesta incluye los grupos de temas propios de Google con un recuento de menciones cada uno, y la clasificación está en los datos.
Toma al autor de la reseña principal y enumera todos los demás lugares que ha reseñado, con la calificación que dejó.
Una llamada, 5 créditos. Una reseña lleva el contributorId de su autor, que es exactamente lo que toma la herramienta de contribuyente.
Obtén el feed de fotos de ese lugar y las publicaciones recientes del negocio.
Dos llamadas. Las fotos cuestan 5 créditos, las publicaciones cuestan 10.
Dos cosas hacen que estas cadenas sean económicas. La búsqueda devuelve placeId y dataId en cada resultado, y las llamadas de detalle, reseña, foto y publicación no necesitan un paso de resolución separado. Y una reseña lleva el contributorId del autor, lo que convierte "quién dejó esta reseña" en un salto de una llamada al historial completo de esa persona.
Herramientas
Seis herramientas, todas de solo lectura. Las muestras a continuación están recortadas de llamadas reales, y los números en ellas cambian a medida que los lugares ganan reseñas. Léelas como formas. El nombre de cada herramienta enlaza a su referencia de endpoint.
Las muestras son la carga útil, no la respuesta completa. Un resultado tools/call lleva un bloque de texto, y ese texto es en sí mismo JSON que contiene url, status, text y json, con los datos extraídos bajo json. Desde una respuesta JSON-RPC cruda, la ruta es result.content[0].text, analizada, luego .json. Un cliente de chat desenvuelve eso por ti, y el código que habla con el endpoint directamente no lo hace.
Cuatro de las herramientas aceptan un lugar mediante placeId o dataId. La búsqueda devuelve ambos en cada resultado. El flujo habitual es una búsqueda seguida de llamadas de detalle, reseña, foto o publicación que reutilizan el id que conservaste.
Buscar en Google Maps
hasdata_google_maps_search_performMapSearch
Lugares para una consulta, clasificados como Google Maps los clasifica.
| Parámetro | Tipo | Requerido | Notas |
|---|---|---|---|
q | string | sí | Consulta de texto libre, por ejemplo coffee o plumber |
ll | string | Centro del mapa y zoom como @lat,lng,zoomz, por ejemplo @47.6062,-122.3321,14z. Así es como fijas la búsqueda a un lugar | |
gl / hl | string | Códigos de país de dos letras y de idioma | |
domain | string | Dominio de Google a consultar, por ejemplo google.com | |
start | number | Desplazamiento de resultados para paginación, en pasos de 20. Requiere que ll también esté configurado |
Cada resultado lleva position, title, placeId, dataId, address, gpsCoordinates, rating, reviews, type, types, price, website, thumbnail, openState, workingHours, serviceOptions y, donde Google muestra uno, un enlace menu.
La ubicación vive en
ll, no en la consulta. Pon el centro del mapa y el zoom allí, porque "café" solo devuelve donde sea que Google decida que estás. El dígito de zoom amplía o reduce el área de la que se extraen los resultados.
{
"localResults": [
{
"position": 1,
"title": "Howdy Y'all Coffee (Central Library)",
"placeId": "ChIJAb0KE0RrkFQRuI4X0By5Mcw",
"dataId": "0x54906b44130abd01:0xcc31b91cd0178eb8",
"address": "1000 4th Ave Fl 3, Seattle, WA 98104",
"rating": 4.9,
"reviews": 117,
"type": "Coffee shop",
"website": "https://howdyyallcoffee.com/",
"workingHours": {
"timezone": "America/Los_Angeles",
"days": [ { "day": "Friday", "time": "10 AM–4 PM" } ]
}
}
]
}
Obtener detalles del lugar
hasdata_google_maps_place_getPlaceDetails
Un lugar completo por placeId.
| Parámetro | Tipo | Requerido | Notas |
|---|---|---|---|
placeId | string | sí | El placeId de un resultado de búsqueda |
hl | string | Código de idioma | |
domain | string | Dominio de Google |
Devuelve un solo objeto placeResults con los mismos campos que lleva un resultado de búsqueda, más un array images. Es la forma de obtener el registro completo de un lugar sin ejecutar una búsqueda que no necesitas.
Obtener reseñas del lugar
hasdata_google_maps_reviews_getMapReviews
El feed de reseñas de un lugar, página por página.
| Parámetro | Tipo | Requerido | Notas |
|---|---|---|---|
placeId | string | El lugar. Debe estar presente placeId o dataId | |
dataId | string | El lugar como dataId en su lugar | |
sortBy | string | mostRelevant por defecto, más newestFirst, ratingHigh y ratingLow | |
topicId | string | Filtrar a un tema, usando un id del array topics | |
hl | string | Código de idioma | |
nextPageToken | string | El pagination.nextPageToken de la respuesta anterior |
Devuelve placeInfo, un array topics, un array reviews y pagination. Cada reseña lleva reviewId, rating, snippet, date, isoDate, link, images, un objeto user y, donde el propietario respondió, un response.
topicses la agrupación propia de Google de lo que mencionan las reseñas, cada una con unkeywordy un recuentomentions, y los temas vienen precontados en lugar de necesitar que leas cada reseña. Alimenta elidde un tema de vuelta comotopicIdpara leer solo las reseñas que lo mencionan.
El
userde cada reseña lleva uncontributorId. Ese es el dato que toma la herramienta de contribuyente, por lo que "quién escribió esto" está a una llamada de distancia de "todo lo que escribieron".
{
"placeInfo": { "title": "Howdy Y'all Coffee (Central Library)", "rating": 4.9, "reviews": 117 },
"topics": [
{ "keyword": "earl grey matcha", "mentions": 26, "id": "bew1w_KAk5U" },
{ "keyword": "friendly baristas", "mentions": 17, "id": "FOw-91tYieQ" }
],
"reviews": [
{
"reviewId": "…",
"rating": 5,
"snippet": "…",
"isoDate": "2026-07-06T19:49:00.657Z",
"user": { "name": "Angela Li", "contributorId": "106033685843245983748" },
"response": { "isoDate": "2026-07-07T04:44:34.000Z", "snippet": "Thank you!! 🥺☺️" }
}
],
"pagination": { "nextPageToken": "…" }
}
Obtener reseñas de un contribuyente
hasdata_google_maps_contributor_reviews_getMapReviews
Cada reseña que una persona ha escrito, en todos los lugares que calificó.
| Parámetro | Tipo | Requerido | Notas |
|---|---|---|---|
contributorId | string | sí | El contributorId del objeto user de una reseña |
num | number | Cuántas reseñas devolver | |
gl / hl | string | Códigos de país e idioma | |
nextPageToken | string | Token de la respuesta anterior |
Devuelve un objeto contributor con name, level, points y un desglose contributions, y un array reviews donde cada entrada lleva su propio placeInfo, y ves de qué lugar trata cada reseña sin una segunda búsqueda. Esta es la herramienta detrás del trabajo de credibilidad de reseñadores y redes de reseñas que el feed de reseñas solo no puede hacer. Lee el historial público de reseñas de una persona, así que usa los resultados dentro de los términos de Google y la ley que te aplica.
Obtener fotos del lugar
hasdata_google_maps_photos_getMapPhotos
El feed de fotos de un lugar.
| Parámetro | Tipo | Requerido | Notas |
|---|---|---|---|
placeId | string | El lugar. Debe estar presente placeId o dataId | |
dataId | string | El lugar como dataId en su lugar | |
categoryId | string | Filtrar a una categoría, usando un id del array categories | |
hl | string | Código de idioma | |
nextPageToken | string | Token de la respuesta anterior |
Devuelve un array categories (All, Latest, Videos, Menu y específicos del lugar), un array photos donde cada entrada tiene URLs image y thumbnail, y pagination.
Obtener publicaciones del lugar
hasdata_google_maps_posts_getMapPosts
Las publicaciones y actualizaciones propias del negocio en su ficha de Google.
| Parámetro | Tipo | Requerido | Notas |
|---|---|---|---|
placeId | string | El lugar. Debe estar presente placeId o dataId | |
dataId | string | El lugar como dataId en su lugar | |
hl | string | Código de idioma | |
nextPageToken | string | Token de la respuesta anterior |
Devuelve un array posts.
La mayoría de los lugares no publican nada, por lo que un array
postsvacío es el caso común. Lee la longitud antes de asumir que hay una publicación.
Errores y rutas de fallo
Su cliente casi nunca ve un código de error HTTP de una llamada a herramienta. La capa MCP responde 200 y coloca el fallo dentro del resultado, con isError establecido en true y el motivo como texto. El agente lee un mensaje donde podrías esperar una línea de estado.
Una clave incorrecta aparece como salida de herramienta, no como una conexión fallida. Listar herramientas acepta cualquier clave no vacía, y el cliente completa el protocolo de enlace y muestra verde. La primera llamada a herramienta regresa entonces con isError: true y el texto HasData API error: 401 Unauthorized. Presta atención a esa cadena, porque nada antes en el flujo informa del problema.
El único error HTTP real es una clave faltante. La autorización se ejecuta antes de cualquier herramienta, y la conexión misma falla con 401.
Un argumento que rompe el esquema se rechaza antes de convertirse en una solicitud. Una búsqueda sin q regresa con isError: true y el texto MCP error -32602: Input validation error, nombrando el campo. No se obtiene nada y no se cobra nada.
Una llamada de reseña, foto o publicación necesita un lugar. Esas tres aceptan placeId o dataId, y enviar ninguna devuelve 422 nombrando ambos campos, porque el requisito es condicional y el esquema no puede expresarlo como una lista obligatoria simple. Pasa uno.
Un id de lugar que no se resuelve es un error limpio, no datos vacíos. Devuelve isError: true con HasData API error: 400 Bad Request y requestMetadata.status establecidos en error. Prueba la bandera en lugar de la longitud del arreglo.
Un posts vacío son datos reales. La mayoría de los listados no tienen publicaciones, por lo que la llamada tiene éxito con status ok y un arreglo vacío. El lugar simplemente no tiene nada publicado.
Los resultados que contienen datos también incluyen un requestMetadata.id que vale la pena citar en soporte, además de enlaces html y json al artefacto almacenado de esa llamada exacta.
Precios, nivel gratuito y límites
Búsqueda, detalles de lugar, reseñas, reseñas de colaboradores y fotos cuestan 5 créditos por llamada exitosa. Las publicaciones cuestan 10. El tamaño de la respuesta no cambia el precio. Una página completa de reseñas cuesta lo mismo que una página con una sola.
La prueba gratuita es de 1,000 créditos durante 30 días sin tarjeta, lo que equivale a 200 llamadas a la tarifa de 5 créditos. Después de eso, una cuenta activa sigue recibiendo 100 créditos recargados cada día cuando su saldo baja de 100, por lo que un agente de bajo volumen funciona en el nivel gratuito indefinidamente.
Los planes de pago comienzan en $49 al mes por 200,000 créditos, lo que equivale a 40,000 llamadas de cinco créditos. El precio por crédito baja con el volumen, y los números actuales están en la página de precios.
Tu plan también establece la concurrencia. La prueba gratuita permite 1 solicitud a la vez, Startup 15, Business 30, Growth 50, y los planes de alto volumen van de 200 a 1,500. La concurrencia es el único límite. No hay un tope separado de solicitudes por minuto, y la prueba no se ralentiza ni se recorta de ninguna otra manera. Maneja el caso de desbordamiento de forma defensiva en cualquier proceso desatendido, porque un agente que se expande entre lugares alcanzará el techo antes que tú.
Paginación cuesta una llamada cada vez. Las reseñas vienen aproximadamente diez por página, así que cien reseñas son aproximadamente diez llamadas y 50 créditos, mientras que las fotos vienen veinte por página. La prueba rinde mucho antes de que lo notes.
Selección de herramientas
?apis=google_maps expone exactamente estas seis herramientas. El parámetro acepta una lista, y ?apis=google_maps,google_serp añade la búsqueda de Google junto a las herramientas de mapas. Omite el parámetro y obtienes todo lo que HasData expone, que actualmente son 57 herramientas.
Una lista reducida suele ser el mejor valor predeterminado. Un modelo que elige entre seis herramientas acierta más a menudo que uno que elige entre cincuenta y siete, y las descripciones de las herramientas cuestan contexto en cada turno.
Cómo se compara
Casi todos los demás servidores MCP de Google Maps envuelven la plataforma oficial de Google Maps, y esa es la decisión real a considerar.
Esos servidores llaman a las APIs de Places, Routes y Geocoding con tus propias credenciales de Google Cloud. Para ejecutar uno, creas un proyecto de Google Cloud, activas la facturación con una tarjeta, habilitas cada API y gestionas una clave y sus cuotas. Esa es la herramienta adecuada cuando quieres enrutamiento, geocodificación y validación de direcciones, que este servidor no hace.
Este servidor lee lo que Google Maps muestra a un visitante y lo devuelve analizado. No hay proyecto de Google Cloud, ni facturación que activar, ni cuota por API que gestionar. También accede a datos que la API de Places no entrega: el feed completo de reseñas en lugar de una muestra fija pequeña, el historial completo de un solo reseñador, el feed de fotos y las publicaciones del negocio.
| Envoltorio oficial de la Plataforma | Este servidor | |
|---|---|---|
| Qué configuras | Un proyecto de Google Cloud, facturación, claves y cuotas por API | Una clave de API, una vez |
| Enrutamiento, geocodificación, validación de direcciones | Sí | No ofrecido |
| Reseñas | Una muestra fija pequeña por lugar | El feed, paginado, con grupos de temas |
| El historial de un reseñador | No disponible | Sí, por contributorId |
| Fotos y publicaciones | Limitado | Feed de fotos y publicaciones del negocio |
| Salida | JSON según el esquema de la Plataforma | JSON analizado de lo que ve un visitante |
| Costo | Precio por llamada de Google en tu factura | 5 créditos por llamada, 10 por publicaciones |
La decisión se reduce a dos filas. Si necesitas indicaciones o convertir una dirección en coordenadas, este servidor no puede ayudarte y la Plataforma sí. Si necesitas las reseñas más allá de las primeras, o quién es un reseñador en todos los lugares que calificó, la Plataforma no puede ayudarte y esto sí.
Lo que este servidor no hace. Sin enrutamiento, sin geocodificación, sin validación de direcciones, sin matriz de distancias y nada que escriba. Lee el mapa.
Preguntas frecuentes
¿Qué es un servidor MCP de Google Maps?
Un servidor que expone datos de Google Maps como herramientas que un cliente de IA puede llamar. El cliente envía una llamada de herramienta a través del Protocolo de Contexto de Modelo, el servidor obtiene los datos y devuelve JSON estructurado, y el modelo trabaja con el resultado y nunca ve una página de HTML. Este expone seis herramientas de solo lectura y se ejecuta de forma remota. El cliente se conecta a una URL y no inicia ningún proceso local.
¿Existe un servidor MCP oficial de Google Maps?
Google no publica uno de propósito general. Está la Plataforma de Google Maps, un conjunto de APIs de pago que llamas con tu propio proyecto de Cloud, y varios servidores MCP de la comunidad la envuelven. Este servidor es una alternativa alojada que no necesita proyecto de Cloud.
¿Necesito un proyecto de Google Cloud o una clave de API de Maps?
No. La única credencial es tu clave de HasData. No hay proyecto de Google Cloud que crear, ni facturación que activar, ni cuota por API que gestionar.
¿Cuál es la diferencia entre placeId y dataId?
Son dos ids que Google usa para el mismo lugar. La búsqueda devuelve ambos en cada resultado, y las herramientas de detalle, reseña, foto y publicación aceptan cualquiera. Guarda el que prefieras del resultado de búsqueda y reutilízalo.
¿Cómo obtengo todas las reseñas, no solo la primera página?
Lee pagination.nextPageToken de cada respuesta y pásalo de vuelta como nextPageToken hasta que deje de aparecer. Cada página es una llamada.
¿Necesito alojar o ejecutar algo?
No. Este es un servidor MCP remoto en HTTP transmisible. Nada que instalar, sin entorno de Python, sin proceso que reiniciar.
¿Los datos son en vivo o en caché?
En vivo. Cada llamada obtiene datos en el momento de la solicitud y lleva su propio requestMetadata.id. Dos llamadas idénticas son dos obtenciones separadas y no una reproducción de una copia almacenada.
¿Puedo usar un servidor para varias superficies de Google?
Sí. El parámetro apis acepta una lista, y ?apis=google_maps,google_serp le da a tu agente las herramientas de mapas más la búsqueda de Google a la vez.
¿La clave de API caduca?
No. La clave no caduca. Rótala en el panel cuando lo necesites.
¿Esto está afiliado a Google?
No. HasData es un servicio independiente y no está afiliado, respaldado ni patrocinado por Google. Google y Google Maps son marcas comerciales de sus respectivos propietarios. Las herramientas trabajan solo con datos disponibles públicamente, y eres responsable de usar los resultados de acuerdo con los términos de Google y la ley que te aplica.
Enlaces de HasData
| Páginas de producto | Búsqueda, Reseñas, Fotos y Publicaciones |
| Documentación del servidor | Docs del servidor MCP |
| Las 57 herramientas en un servidor | HasData/hasdata-mcp |
| Guías de clientes | Clientes e integraciones MCP |
| Las otras superficies que analizamos | 53 APIs de scraping más |
| Planes y costos de créditos | Planes y costos de créditos |
| Claves y uso | Panel de HasData |
| Lanzador de Node en npm | @hasdata/google-maps-mcp |
| Lanzador de Python en PyPI | hasdata-google-maps-mcp |
Desarrollo
Este repositorio es configuración y documentación para un servidor remoto. No hay paso de compilación ni nada que contenerizar.
Sí incluye una prueba de contrato. El README promete seis herramientas con parámetros específicos, y la lista de herramientas ascendente puede cambiar sin un commit aquí, lo que dejaría este archivo mintiéndote silenciosamente. La prueba afirma la promesa y se ejecuta semanalmente en CI, además de en cada push.
HASDATA_API_KEY=your_key_here npm test
En PowerShell:
$env:HASDATA_API_KEY = "your_key_here"; npm test
La última verificación hace una llamada real y cuesta 5 créditos, que es el precio de un canario que puede fallar por la razón correcta. Listar herramientas tiene éxito con cualquier clave no vacía, y una prueba que solo lista herramientas permanece verde con una clave revocada.
Contribuciones
Las correcciones a las tablas de herramientas y a los ejemplos de respuesta son la contribución más útil, porque esas son las partes que se desvían. Incluye la llamada que hiciste y la respuesta que obtuviste. Las solicitudes de extracción desde bifurcaciones ejecutan la suite sin clave, y las verificaciones en vivo se omiten en lugar de ponerse rojas.
Licencia
MIT. Ver LICENCIA.