MewCP Google Business MCP
Servidor MCP de Google Business Profile alojado, sin estado y multitenencia que permite a los asistentes de IA gestionar listados de negocios, reseñas, ubicaciones e interacciones con clientes a través de Google Business Profile.
Documentación
Gestiona perfiles de Google Business Profile y perspectivas de rendimiento — con Agentes.
Un servidor de Model Context Protocol (MCP) que expone la API de Información de Negocios de Google My Business y la API de Rendimiento de Perfiles de Negocio para gestionar perfiles de ubicaciones comerciales, sus atributos, y analizar cómo esas ubicaciones se desempeñan en Google Search y Maps.
Descripción general
El servidor MCP mewcp-google-business proporciona acceso directo, autenticado mediante OAuth, a los datos de ubicaciones de Google Business Profile y análisis de rendimiento:
- Gestión completa del ciclo de vida de ubicaciones — listar, crear, leer, actualizar y eliminar ubicaciones y sus atributos personalizados, con registros de antes/después para cada actualización
- Consultas de referencia contra las taxonomías de categorías, cadenas y metadatos de atributos de Google, además de coincidencias con los propios registros de ubicaciones de Google
- Análisis de rendimiento de Business Profile — series temporales diarias y de múltiples métricas, y recuentos mensuales de impresiones por palabras clave de búsqueda
El servidor accede a ambas APIs upstream de Google — mybusinessbusinessinformation v1 y businessprofileperformance v1 — mediante OAuth: intercambia el token de acceso de tu credencial de Google conectada para realizar llamadas a través del SDK oficial de la API de Google para Python (googleapiclient), solicitando el alcance https://www.googleapis.com/auth/business.manage.
Ideal para:
- Agencias y propietarios de negocios que gestionan perfiles de negocio con múltiples ubicaciones de forma programática
- Equipos de marketing y operaciones que rastrean impresiones, clics y tendencias de palabras clave de búsqueda en todas las ubicaciones
- Desarrolladores que crean integraciones de Business Profile que necesitan datos de referencia de categorías, atributos y cadenas junto con operaciones CRUD de ubicaciones
Herramientas
Ubicaciones
list_locations — Listar ubicaciones de una cuenta, con filtrado, ordenación y paginación opcionales
Lista las ubicaciones de la cuenta especificada, opcionalmente filtradas y ordenadas, y devuelve los objetos Location coincidentes con información de paginación.
Entradas:
- `parent` (string, required) — The name of the account to fetch locations from. If the parent Account is of type PERSONAL, only directly-owned Locations are returned; otherwise all accessible locations (direct or indirect) are returned.
- `read_mask` (string, required) — Comma-separated list of fully qualified field names to return. Example: "user.displayName,photo".
- `page_size` (integer, optional) — How many locations to fetch per page. Default 10, minimum 1, maximum 100.
- `page_token` (string, optional) — Fetches the next page; returned by a previous call when more locations exist than fit the page size.
- `filter_` (string, optional) — Filter constraining which locations to return. Empty means no constraints (all locations, paginated). See Google's "Work with Location Data" guide for valid fields.
- `order_by` (string, optional) — Comma-separated sort fields (SQL syntax). Default ascending; append " desc" for descending. Valid fields: title, storeCode. E.g. "title, storeCode desc".
Esquema de salida data:
{
locations: {
name: string;
languageCode: string | null;
storeCode: string | null;
title: string | null;
phoneNumbers: object | null;
categories: object | null;
storefrontAddress: object | null;
websiteUri: string | null;
regularHours: object | null;
specialHours: object | null;
serviceArea: object | null;
labels: any[] | null;
adWordsLocationExtensions: object | null;
latlng: object | null;
openInfo: object | null;
metadata: object | null;
profile: object | null;
relationshipData: object | null;
moreHours: any[] | null;
serviceItems: any[] | null;
}[];
nextPageToken: string | null;
totalSize: number | null;
}
create_location — Crear una nueva ubicación propiedad del usuario autenticado
Crea una nueva Location que será propiedad del usuario conectado y devuelve la Location recién creada.
Entradas:
- `parent` (string, required) — The name of the account in which to create this location.
- `location` (object, required) — Location object to create. Required sub-fields: title (and primaryCategory within categories if categories are set).
- `validate_only` (boolean, optional) — If true, validates the request without actually creating the location.
- `request_id` (string, optional) — A unique request ID for the server to detect duplicate requests. UUIDs recommended. Max 50 characters.
Esquema de salida data:
{
name: string;
languageCode: string | null;
storeCode: string | null;
title: string | null;
phoneNumbers: object | null;
categories: object | null;
storefrontAddress: object | null;
websiteUri: string | null;
regularHours: object | null;
specialHours: object | null;
serviceArea: object | null;
labels: any[] | null;
adWordsLocationExtensions: object | null;
latlng: object | null;
openInfo: object | null;
metadata: object | null;
profile: object | null;
relationshipData: object | null;
moreHours: any[] | null;
serviceItems: any[] | null;
}
get_location — Obtener los valores de campos establecidos por el comerciante de una ubicación
Devuelve la ubicación especificada tal como la estableció por última vez el comerciante; puede no reflejar actualizaciones de Google o contenido generado por usuarios en vivo en Google Maps.
Entradas:
- `name` (string, required) — The name of the location to fetch.
- `read_mask` (string, required) — Read mask specifying which fields to return in the response. Comma-separated list of fully qualified field names. Example: "title,websiteUri".
Esquema de salida data:
{
name: string;
languageCode: string | null;
storeCode: string | null;
title: string | null;
phoneNumbers: object | null;
categories: object | null;
storefrontAddress: object | null;
websiteUri: string | null;
regularHours: object | null;
specialHours: object | null;
serviceArea: object | null;
labels: any[] | null;
adWordsLocationExtensions: object | null;
latlng: object | null;
openInfo: object | null;
metadata: object | null;
profile: object | null;
relationshipData: object | null;
moreHours: any[] | null;
serviceItems: any[] | null;
}
update_location — ACTUALIZAR: cambiar campos específicos de una ubicación y obtener el estado antes/después
Actualiza los campos de la ubicación especificada según la máscara de actualización proporcionada y devuelve la Location actualizada. Solo se cambian los campos que proporcionas; los demás conservan su valor actual. NOTA: esto sobrescribe los valores de campo actuales — el estado original no se almacena después de la llamada. La respuesta incluye tanto el estado anterior como el posterior para que tengas un registro completo de lo que cambió.
Entradas:
- `location_name` (string, required) — Google identifier for this location, in the form locations/{locationId}.
- `update_mask` (string, required) — The specific fields to update. Comma-separated list of fully qualified field names.
- `location` (object, required) — Location object carrying the updated field values.
- `validate_only` (boolean, optional) — If true, validates the request without actually updating; response is empty unless there are validation errors.
Esquema de salida data:
{
before: {
name: string;
languageCode: string | null;
storeCode: string | null;
title: string | null;
phoneNumbers: object | null;
categories: object | null;
storefrontAddress: object | null;
websiteUri: string | null;
regularHours: object | null;
specialHours: object | null;
serviceArea: object | null;
labels: any[] | null;
adWordsLocationExtensions: object | null;
latlng: object | null;
openInfo: object | null;
metadata: object | null;
profile: object | null;
relationshipData: object | null;
moreHours: any[] | null;
serviceItems: any[] | null;
};
after: {
name: string;
languageCode: string | null;
storeCode: string | null;
title: string | null;
phoneNumbers: object | null;
categories: object | null;
storefrontAddress: object | null;
websiteUri: string | null;
regularHours: object | null;
specialHours: object | null;
serviceArea: object | null;
labels: any[] | null;
adWordsLocationExtensions: object | null;
latlng: object | null;
openInfo: object | null;
metadata: object | null;
profile: object | null;
relationshipData: object | null;
moreHours: any[] | null;
serviceItems: any[] | null;
};
}
delete_location — DESTRUCTIVO: eliminar permanentemente una ubicación (requiere confirmación explícita del usuario)
DESTRUCTIVO — REQUIERE CONFIRMACIÓN EXPLÍCITA DEL USUARIO ANTES DE LLAMAR. Elimina permanentemente la ubicación. Esta acción es irreversible — la ubicación y sus datos no se pueden recuperar a través de esta API (el sitio web de Google Business Profile puede ofrecer otras vías de recuperación). NUNCA llames a esta herramienta de forma autónoma o como parte de un flujo automatizado. DEBES detenerte, informar al usuario exactamente qué se eliminará y que es permanente, y esperar su confirmación escrita explícita antes de continuar.
Entradas:
- `name` (string, required) — The name of the location to delete.
Esquema de salida data:
{
// no fields — deletion is confirmed by the envelope's success/statusCode
}
get_google_updated_location — Obtener una ubicación tal como aparece en vivo en Google Maps/Search, con máscaras de diferencias y pendientes
Devuelve la ubicación especificada tal como aparece en vivo en Google Maps y Search, que puede diferir de la versión del comerciante, junto con máscaras de lo que Google cambió y lo que aún está pendiente.
Entradas:
- `name` (string, required) — The name of the location to fetch.
- `read_mask` (string, required) — Comma-separated list of fully qualified field names to return.
Esquema de salida data:
{
location: object;
diffMask: string | null;
pendingMask: string | null;
}
get_location_attributes — Obtener los atributos establecidos por el comerciante de una ubicación
Recupera los atributos de una ubicación tal como los estableció por última vez el comerciante.
Entradas:
- `name` (string, required) — Google identifier for this location, in the form locations/{locationId}/attributes.
Esquema de salida data:
{
name: string;
attributes: {
name: string;
valueType: string | null;
values: any[] | null;
repeatedEnumValue: object | null;
uriValues: any[] | null;
}[];
}
update_location_attributes — ACTUALIZAR: cambiar atributos específicos de una ubicación y obtener el estado antes/después
Actualiza los atributos de una ubicación determinada según la máscara de atributos proporcionada y devuelve los Attributes actualizados. Solo se cambian los campos que proporcionas; los demás conservan su valor actual. NOTA: esto sobrescribe los valores de campo actuales — el estado original no se almacena después de la llamada. La respuesta incluye tanto el estado anterior como el posterior para que tengas un registro completo de lo que cambió.
Entradas:
- `attributes_name` (string, required) — Google identifier for this location, in the form locations/{locationId}/attributes.
- `attribute_mask` (string, required) — Attribute names (as attributes/{attribute}) to update. Every attribute you want updated must be in both attributes and attributeMask. To delete an attribute, put it in attributeMask with no matching entry in attributes.
- `name` (string, required) — Google identifier for this location, in the form locations/{locationId}/attributes (body field, same value as attributes.name).
- `attributes` (array<object>, optional) — The attributes to set (each with name, valueType, values, repeatedEnumValue, uriValues). May be empty when deleting all attributes via attributeMask.
Esquema de salida data:
{
before: {
name: string;
attributes: {
name: string;
valueType: string | null;
values: any[] | null;
repeatedEnumValue: object | null;
uriValues: any[] | null;
}[];
};
after: {
name: string;
attributes: {
name: string;
valueType: string | null;
values: any[] | null;
repeatedEnumValue: object | null;
uriValues: any[] | null;
}[];
};
}
get_google_updated_location_attributes — Obtener los atributos de una ubicación tal como aparecen en vivo en Google Maps/Search
Recupera los atributos de una ubicación tal como aparecen en vivo en Google Maps y Search, que pueden diferir de la versión del comerciante.
Entradas:
- `name` (string, required) — Google identifier for this location, in the form locations/{locationId}/attributes.
Esquema de salida data:
{
name: string;
attributes: {
name: string;
valueType: string | null;
values: any[] | null;
repeatedEnumValue: object | null;
uriValues: any[] | null;
}[];
}
Cadenas
get_chain — Obtener una cadena por nombre de recurso
Obtiene la cadena especificada, devolviendo NOT_FOUND si la cadena no existe.
Entradas:
- `name` (string, required) — The chain's resource name, in the format `chains/{chain_place_id}`.
Esquema de salida data:
{
name: string;
chainNames: {
displayName: string | null;
languageCode: string | null;
}[] | null;
websites: {
uri: string | null;
}[] | null;
locationCount: number | null;
}
search_chains — Buscar cadenas por nombre
Busca una cadena según su nombre y devuelve la lista de cadenas coincidentes.
Entradas:
- `chain_name` (string, required) — Search for a chain by its name. Exact/partial/fuzzy/related queries are supported. Examples: "walmart", "wal-mart", "walmmmart", "沃尔玛".
- `page_size` (integer, optional, default: 10) — The maximum number of matched chains to return from this query. Default is 10, maximum is 500.
Esquema de salida data:
{
chains: {
name: string;
chainNames: {
displayName: string | null;
languageCode: string | null;
}[] | null;
websites: {
uri: string | null;
}[] | null;
locationCount: number | null;
}[] | null;
}
Categorías
list_categories — Listar categorías de negocios que coinciden con el inicio de un nombre
Devuelve una lista de categorías de negocios que coinciden con el inicio del nombre de la categoría (por ejemplo, 'food' coincide con 'Food Court' pero no con 'Fast Food Restaurant').
Entradas:
- `region_code` (string, required) — The ISO 3166-1 alpha-2 country code.
- `language_code` (string, required) — The BCP 47 code of the language.
- `view` (string, required) — Specifies which parts of the Category resource to return. Values: `CATEGORY_VIEW_UNSPECIFIED` (equivalent to `BASIC`), `BASIC` (only `displayName`, `category_id`, `languageCode`), `FULL` (all fields).
- `filter_` (string, optional) — Filter string from the user; the only supported field is `displayName`, e.g. `filter=displayName=foo`.
- `page_size` (integer, optional) — How many categories to fetch per page. Default is 100, minimum is 1, maximum is 100.
- `page_token` (string, optional) — If specified, fetches the next page of categories.
Esquema de salida data:
{
categories: {
name: string | null;
displayName: string | null;
languageCode: string | null;
}[] | null;
nextPageToken: string | null;
}
batch_get_categories — Obtener categorías de negocios para un conjunto de IDs de categoría
Devuelve una lista de categorías de negocios para el idioma y los IDs de categoría (GConcept) proporcionados.
Entradas:
- `names` (array<string>, required) — The GConcept ids the localized category names should be returned for. Repeat this parameter to request more than one category; at least one name must be set.
- `language_code` (string, required) — The BCP 47 code of the language that the category names should be returned in.
- `view` (string, required) — Specifies which parts of the Category resource to return. Values: `CATEGORY_VIEW_UNSPECIFIED` (equivalent to `BASIC`), `BASIC` (only `displayName`, `category_id`, `languageCode`), `FULL` (all fields).
- `region_code` (string, optional) — The ISO 3166-1 alpha-2 country code used to infer non-standard language.
Esquema de salida data:
{
categories: {
name: string | null;
displayName: string | null;
languageCode: string | null;
}[] | null;
}
Atributos
list_available_attributes — Listar atributos disponibles para la categoría y el país de una ubicación
Devuelve la lista de atributos que estarían disponibles para una ubicación con la categoría principal y el país dados. Proporciona exactamente uno de: parent (el nombre de recurso de una ubicación existente), O category_name junto con region_code y language_code. Establece show_all en true para obtener metadatos de todos los atributos disponibles independientemente de parent/category_name — en ese caso, region_code y language_code son obligatorios. Usa page_token de una respuesta anterior para paginar los resultados.
Entradas:
- `parent` (string, optional) — Resource name of the location to look up available attributes for. If set, category_name, region_code, language_code and show_all are not required and must not be set.
- `category_name` (string, optional) — The primary category stable ID to find available attributes. Must be of the format categories/{category_id}.
- `region_code` (string, optional) — The ISO 3166-1 alpha-2 country code to find available attributes.
- `language_code` (string, optional) — The BCP 47 code of language to get attribute display names in. Falls back to English if unavailable.
- `show_all` (boolean, optional) — If true, metadata for all available attributes is returned, disregarding parent and category_name. region_code and language_code are required when this is true.
- `page_size` (integer, optional) — How many attributes to include per page. Default is 200, minimum is 1.
- `page_token` (string, optional) — If specified, the next page of attribute metadata is retrieved.
Esquema de salida data:
{
attributeMetadata: {
parent: string | null;
valueType: string | null;
displayName: string | null;
groupDisplayName: string | null;
repeatable: boolean | null;
valueMetadata: any[] | null;
deprecated: boolean | null;
}[] | null;
nextPageToken: string | null;
}
Ubicaciones de Google
search_google_locations — Buscar los registros de ubicaciones propios de Google por detalles de ubicación o consulta de texto
Busca todas las ubicaciones posibles en Google que coincidan con la solicitud especificada y devuelve las entradas GoogleLocation coincidentes. Se debe proporcionar exactamente uno de location o query.
Entradas:
- `page_size` (integer, optional) — The number of matches to return. Default is 3, maximum is 10. No pagination.
- `location` (object, optional) — Union field `search_query` — exactly one of `location` or `query` is required. Location to search for; if provided, finds locations matching the provided details.
- `query` (string, optional) — Union field `search_query` — exactly one of `location` or `query` is required. Text query to search for. Less accurate than an exact location, but can surface more inexact matches.
Esquema de salida data:
{
googleLocations: {
name: string | null;
location: object | null;
requestAdminRightsUri: string | null;
}[] | null;
}
Rendimiento
get_daily_metrics_time_series — Obtener una serie temporal de rango de fechas para una métrica diaria
Devuelve los valores para cada fecha en un rango de tiempo dado para una única métrica diaria especificada. Solo están disponibles datos diarios; las métricas por hora no son compatibles.
Entradas:
- `name` (string, required) — The location for which the time series should be fetched. Format: `locations/{locationId}` where `locationId` is an unobfuscated listing id.
- `daily_metric` (string, required) — The metric to retrieve time series for. One of: `DAILY_METRIC_UNKNOWN`, `BUSINESS_IMPRESSIONS_DESKTOP_MAPS`, `BUSINESS_IMPRESSIONS_DESKTOP_SEARCH`, `BUSINESS_IMPRESSIONS_MOBILE_MAPS`, `BUSINESS_IMPRESSIONS_MOBILE_SEARCH`, `BUSINESS_CONVERSATIONS`, `BUSINESS_DIRECTION_REQUESTS`, `CALL_CLICKS`, `WEBSITE_CLICKS`, `BUSINESS_BOOKINGS`, `BUSINESS_FOOD_ORDERS`, `BUSINESS_FOOD_MENU_CLICKS`.
- `daily_range` (object, required) — The timerange to fetch. `{ "startDate": {"year", "month", "day"}, "endDate": {"year", "month", "day"} }`, both inclusive.
- `daily_sub_entity_type` (object, optional) — The sub-entity type/id the time series relates to. Currently no `DailyMetric` supports this (breakdown not available). Union of `dayOfWeek` (enum) or `timeOfDay` (`{"hours", "minutes", "seconds", "nanos"}`).
Esquema de salida data:
{
timeSeries: {
datedValues: {
date: object | null;
value: string | null;
}[] | null;
} | null;
}
fetch_multi_daily_metrics_time_series — Obtener una serie temporal de rango de fechas para múltiples métricas diarias a la vez
Devuelve los valores para cada fecha en un rango de tiempo dado para múltiples métricas diarias especificadas a la vez. Solo están disponibles datos diarios; las métricas por hora no son compatibles.
Entradas:
- `location` (string, required) — The location for which the time series should be fetched. Format: `locations/{locationId}` where `locationId` is an unobfuscated listing id.
- `daily_metrics` (array<string>, required) — The metrics to retrieve time series for. Same enum values as `get_daily_metrics_time_series`. Repeat this parameter for multiple metrics.
- `daily_range` (object, required) — The timerange to fetch. `{ "startDate": {"year", "month", "day"}, "endDate": {"year", "month", "day"} }`, both inclusive.
Esquema de salida data:
{
multiDailyMetricTimeSeries: {
dailyMetricTimeSeries: {
dailyMetric: string | null;
dailySubEntityType: object | null;
timeSeries: {
datedValues: {
date: object | null;
value: string | null;
}[] | null;
} | null;
}[] | null;
}[] | null;
}
list_search_keyword_impressions_monthly — Listar recuentos mensuales de impresiones por palabras clave de búsqueda para una ubicación
Devuelve las palabras clave de búsqueda utilizadas para encontrar un negocio en Search o Maps, cada una acompañada de recuentos de impresiones agregados mensualmente.
Entradas:
- `parent` (string, required) — The location for which the time series should be fetched. Format: `locations/{locationId}` where `locationId` is an unobfuscated listing id.
- `monthly_range` (object, required) — The range in months to aggregate search keyword impressions over. `{ "startMonth": {"year", "month", "day"}, "endMonth": {"year", "month", "day"} }`, both inclusive — only year and month are considered.
- `page_size` (integer, optional, default: 100) — Number of results requested. Default 100, maximum 100.
- `page_token` (string, optional) — Base64-encoded token indicating the next paginated result to return.
Esquema de salida data:
{
searchKeywordsCounts: {
searchKeyword: string | null;
insightsValue: {
value: string | null;
threshold: string | null;
} | null;
}[] | null;
nextPageToken: string | null;
}
Referencia de Parámetros de la API
Envoltura de Respuesta
Cada herramienta devuelve la misma envoltura de nivel superior. Solo data varía según la herramienta.
// Success
{
"success": true,
"statusCode": 200,
"retriable": false,
"retry_after_seconds": null,
"error": null,
"data": { ... }
}
// Error
{
"success": false,
"statusCode": 400,
"retriable": false,
"retry_after_seconds": null,
"error": { "code": "VALIDATION_ERROR", "message": "page_size must be between 1 and 100", "details": null },
"data": null
}
retriable—truecuando es seguro reintentar (límite de velocidad, error de red, 503).falsepara errores de validación y autenticación.retry_after_seconds— segundos a esperar antes de reintentar; presente solo cuandoretriableestruey el upstream especifica un retraso.error.code— cadena legible por máquina:VALIDATION_ERROR(entrada incorrecta, detectada antes de realizar la llamada),AUTH_ERROR(sin token de acceso OAuth en la credencial),UPSTREAM_ERROR(la API de Google devolvió un estado de error),SERVER_ERROR(fallo inesperado).
Parámetros Comunes
page_size— Número máximo de resultados a devolver por página. Cada herramienta de listado/búsqueda define su propio valor predeterminado y máximo — consulta las Entradas de esa herramienta.page_token— Token de paginación opaco de lanextPageTokende una respuesta anterior (o equivalente), utilizado para obtener la siguiente página de resultados.filter_— Expresión de filtro específica de la herramienta que restringe qué registros se devuelven; los campos compatibles difieren según la herramienta (consultalist_locationsylist_categories).
Formatos de Recursos
Ubicación:
locations/{locationId}
Example: locations/12345678901234567890
Atributos de Ubicación:
locations/{locationId}/attributes
Example: locations/12345678901234567890/attributes
Atributo:
attributes/{attribute}
Example: attributes/has_wifi
Cadena:
chains/{chain_place_id}
Example: chains/10248
Categoría:
categories/{category_id}
Example: categories/gcid:coffee_shop
Solución de problemas
Encabezados faltantes o no válidos
- Causa: Token de acceso OAuth no proporcionado en los encabezados de la solicitud o formato incorrecto
- Solución:
- Verifica que los encabezados
Authorization: Bearer YOUR_ACCESS_TOKENyX-Mewcp-Credential-Id: CREDENTIAL-IDestén presentes - Comprueba que tu credencial de Google esté activa en tu cuenta de MewCP
- Verifica que los encabezados
Créditos insuficientes
- Causa: Las llamadas a la API han superado tus límites de solicitudes
- Solución:
- Revisa el uso de créditos en tu panel de Curious Layer
- Mejora a un plan de pago o agrega créditos para límites más altos
- Contacta al soporte para ajustes de créditos
Credencial no conectada
- Causa: No hay ninguna credencial de Google vinculada a tu cuenta
- Solución:
- Ve a Credenciales en tu panel de MewCP
- Conecta tu cuenta de Google mediante OAuth
- Reintenta la solicitud con el encabezado
X-Mewcp-Credential-Idcorrecto
Carga útil de solicitud malformada
- Causa: La carga útil JSON no es válida o le faltan campos obligatorios
- Solución:
- Valida la sintaxis JSON antes de enviar
- Asegúrate de que todos los parámetros obligatorios de la herramienta estén incluidos
- Verifica que los tipos de parámetros coincidan con los valores esperados
Servidor no encontrado
- Causa: Nombre de servidor incorrecto en el endpoint de la API
- Solución:
- Verifica el formato del endpoint:
{server-name}/mcp/{tool-name} - Usa el nombre de servidor correcto de la documentación
- Revisa los servidores disponibles en tu cuenta de Curious Layer
- Verifica el formato del endpoint:
Error de la API de Google Business Profile
- Causa: Una llamada ascendente a la API de My Business Business Information o a la API de Business Profile Performance devolvió un error
- Solución:
- Consulta el Panel de estado de Google Cloud para ver si hay interrupciones
- Verifica que tu cuenta de Google sea propietaria o administradora de la ubicación del negocio y que el alcance
business.managese haya otorgado durante OAuth - Revisa el mensaje de error para obtener detalles específicos
Recursos
- Referencia de la API de My Business Business Information — Referencia completa de endpoints para ubicaciones, cadenas, categorías, atributos y Google Locations
- Referencia de la API de Business Profile Performance — Referencia completa de endpoints para métricas de rendimiento e impresiones de palabras clave de búsqueda
- Documentación de FastMCP — Especificación de FastMCP
- Credenciales de FastMCP — Paquete de credenciales de FastMCP para el manejo de credenciales