MCP Guía de integración
El Protocolo de Contexto del Modelo (MCP) es un estándar abierto que permite a los asistentes de IA llamar directamente a herramientas externas. SocialHub implementa un servidor MCP para que puedas administrar tiendas, miembros, cupones y puntos desde Claude Desktop, Cursor o cualquier cliente compatible con MCP.
En lugar de escribir código, simplemente le pides a la IA: "Listar todas las tiendas activas" o "Otorgar 500 puntos al miembro m_abc123" y el asistente llama a la herramienta SocialHub MCP en tu nombre.
Configuración de la conexión
SocialHub expone un punto final HTTP MCP para transmisión. Necesitas dos datos:
| URL del punto final | https://flash.socialhub.ai/api/mcp |
| API Encabezado de clave | Authorization: Bearer fl_live_... |
Cree una clave API en /flash/account/api-keys. Asegúrese de que la clave tenga los ámbitos necesarios para las herramientas que planea usar.
Claude Desktop Configuración
Agregue lo siguiente a su configuración Claude Desktop MCP (claude_desktop_config.json):
{
"mcpServers": {
"flash": {
"type": "http",
"url": "https://flash.socialhub.ai/api/mcp",
"headers": {
"Authorization": "Bearer fl_live_your_key_here"
}
}
}
}Cursor Configuración
En Cursor, ve a Configuración > MCP y añade un nuevo servidor:
{
"mcpServers": {
"flash": {
"type": "http",
"url": "https://flash.socialhub.ai/api/mcp",
"headers": {
"Authorization": "Bearer fl_live_your_key_here"
}
}
}
}El campo type también acepta streamable-http como alias. Estos clientes de escritorio almacenan la clave en su archivo de configuración; trátela como un secreto y prefiera el formato de variable de entorno (ver más abajo) cuando sea compatible para mantener la clave en texto plano fuera del disco.
Conéctate desde Claude Code
Agregue SocialHub como un servidor HTTP MCP con el comando claude mcp add. Exporte su clave como una variable de entorno primero para que la clave en texto plano nunca se guarde en un archivo de configuración ni en el historial de su shell:
export FLASH_API_KEY="fl_live_your_key_here"
claude mcp add --transport http flash \
https://flash.socialhub.ai/api/mcp \
--header "Authorization: Bearer ${FLASH_API_KEY}"O confirme un .mcp.json con alcance de proyecto en la raíz del repositorio. Haga referencia a la var env con ${FLASH_API_KEY}; nunca pegue una clave de texto sin formato:
{
"mcpServers": {
"flash": {
"type": "http",
"url": "https://flash.socialhub.ai/api/mcp",
"headers": {
"Authorization": "Bearer ${FLASH_API_KEY}"
}
}
}
}Autocomprobación tras la conexión:
- Ejecute
claude mcp listy confirme queflashse muestra como conectado. - Pídale al asistente que "enumere las herramientas de SocialHub disponibles"; debería ver solo las herramientas que permiten los alcances de su clave.
- La clave del servidor debe ser exactamente
flash; asegúrese de queFLASH_API_KEYse exporte en el shell que inicia Claude Code.
Te tengo: una clave no válida o revocada aparece como una conexión fallida, no como un mensaje de autenticación. SocialHub utiliza autenticación de token de portador con sin respaldo de OAuth, por lo que si el servidor se muestra como fallido/desconectado, vuelva a verificar el valor de la clave y que tenga los alcances que necesita antes de depurar cualquier otra cosa.
Herramientas disponibles (75)
cwm_get_forecast_capabilitiesLeer TimesFM 2.5 Preparación para tendencia agregada/cuantil y preparación para fusión inquilino-privada 7/30/90d. Se especifica que está pendiente de capacitación/validación. Requiere predictions:read.
cwm_predict_next_behaviorsUna predicción del consumidor: distribución/clasificación final del próximo evento plus CWM + TimesFM 7/30/90d purchaseWindowsModelo de eventos de inquilinos ganados preferido; una referencia pública previa interna de reserva. Sin resultados de expertos individuales. Probabilidades de eventos sin calibrar; ventanas de compra null hasta que esté capacitado/validado. Requiere predictions:read; metrics:read Además, habilita ventanas de compra.
member_id*cwm_forecast_aggregate_trendPronosticar las métricas diarias de marca/categoría con TimesFM 2.5: punto + q10..q90. Historial faltante devuelve nullLos cuantiles agregados no están calibrados; nunca son intervalos personales. Requiere predictions:read AND metrics:read.
metric?, horizon_days?, history_days?, category?cwm_predict_purchase_windowsInquilino-privado CWM + TimesFM Probabilidades de compra a los 7/30/90d (0–1). Nulo hasta que se entrene y valide; sin reserva fabricada. Requiere predictions:read AND metrics:read.
member_idlist_metricsEnumera las métricas disponibles para este equipo desde la capa semántica gobernada (clave, etiqueta, unidad, certificación, categoría). Llama primero para descubrir claves de métricas válidas. Requiere metrics:read.
category?describe_metricObtenga la especificación completa de una métrica: definición autorizada, unidad, certificación, dimensiones, campos filtrables, parámetros ajustables y guía de uso. Requiere metrics:read.
metricquery_metricEjecuta una consulta de métricas controlada y devuelve números con su definición autorizada. Selecciona una clave de métrica, además de dimensiones opcionales, filtros, rango de tiempo, granularidad y comparación entre periodos; nunca SQL. Requiere metrics:read.
metric, dimensions?, filters?, timeRange?, grain?, compare?, params?breakdown_metricDesglosar una métrica por una sola dimensión en una ventana reciente fija, con etiquetas legibles para humanos (nombres de tiendas/niveles/canales). Requiere metrics:read.
metric, dimension, days, state?ask_metricsResponda a una pregunta en lenguaje natural seleccionando las métricas gobernadas correctas, recuperándolas y desglosando la métrica principal. Para diagnóstico abierto. Requiere metrics:read.
question, categories?list_storesEnumere todas las tiendas del equipo actual. Admite filtro de estado, búsqueda y paginación opcionales.
status?, search?, limit?, offset?get_storeObtenga detalles de una tienda específica por su ID.
store_idlist_membersListar los miembros del programa de fidelización. Admite filtrado y paginación de programas.
programId?, limit?, offset?, status?get_memberObtenga los detalles de un miembro del programa de fidelización específico mediante su ID. Devuelve los campos de información personal identificable (PII) descifrados.
member_idlist_coupon_poolsListar los grupos de cupones. Admite filtros de estado y tipo.
status?, coupon_type?, limit?, offset?get_dashboard_statsInstantánea del panel operativo (capturas, escaneos, tasa de captura, cupones, tiendas, plan). No es una métrica regulada; utiliza las herramientas de métricas para obtener métricas de negocio fiables.
(none)earn_pointsOtorgue puntos de fidelidad a un miembro. Devuelve el ID de la transacción y el nuevo saldo.
member_id, amount, description?redeem_pointsSe deducen los puntos de fidelidad de un miembro (consumo FIFO).
member_id, amount, reasonget_points_balanceObtener el saldo de puntos actual del miembro y su historial de transacciones recientes.
member_id, limit?get_member_couponsObtener los cupones disponibles (no canjeados ni caducados) de un miembro.
member_idget_member_tierObtén el nivel actual del miembro, los requisitos para la siguiente actualización y todos los niveles.
member_idget_member_receiptsObtenga el historial de envío de recibos de los miembros con el estado de OCR y los puntos otorgados.
member_id, limit?redeem_points_for_couponCanjea puntos de fidelidad por un cupón de un fondo específico (atómico: puntos + cupón, o ninguno).
member_id, pool_id, points_costissue_couponEmitir un cupón desde un grupo a un miembro (miembro único; las audiencias masivas pasan por el flujo de confirmación de So). Requiere coupons:write.
member_id, pool_id, run_id?check_email_frequencyVerifique si se puede enviar un correo electrónico de marketing a una dirección dentro de los límites de frecuencia (1/día, 2/semana, 4/mes).
emaillist_ambassador_candidatesListe los candidatos a Embajador puntuados para el programa de fidelización (modo Pro). Vacío en el modo Lite.
band?, status?, level?, sort_by?, limit?, offset?get_ambassador_metricsObtenga el informe de ROI de Embajador: los tres subobjetivos, la retención del segundo mes y la prueba de viabilidad de 90 días.
since_days?, assumed_paid_cac_usd?issue_ambassador_codeEmite o actualiza el código de afiliado Embajador personal de un miembro. Devuelve el código string.
member_id, single_use?, max_redemptions?, min_order_amount?get_tracking_statsObtenga análisis de visitas a páginas y comportamiento: resumen, páginas más visitadas, desglose por dispositivo o fuentes de tráfico.
metric?, period?, start?, end?, campaign?, limit?get_member_profilePerfil agregado de un miembro (accesibilidad, consentimiento/CCPA, lealtad, agregaciones de comercio/categoría/canal/participación, preferencias declaradas, etiquetas, geolocalización general, rango de edad). Información personal identificable censurada: sin nombres ni valores de contacto. Requiere members:read.
member_idget_member_timelineHistorial de comportamiento reciente de un miembro (visitas, puntos, cupones, correos electrónicos, recibos) + resumen, para decidir una acción personalizada. Devuelve información personal identificable descifrada. Requiere members:behavior:leer.
member_id, limit?list_segmentsEnumera los segmentos de audiencia del equipo (nombre, estado, número de miembros en caché). Requiere segments:read.
status?, limit?, offset?create_segmentCrea un segmento de audiencia a partir de condiciones estructuradas (nunca SQL); rechaza duplicados. Requiere segments:write + una clave de usuario.
name, conditions, description?list_automationsEnumere las automatizaciones del equipo (campañas activadas por eventos) y su estado. Requiere el permiso `automations:read`.
status?pause_automationPausa una automatización en ejecución por ID de campaña (idempotente). Requiere automations:write.
campaign_idlist_campaign_templatesLista de plantillas de campaña disponibles para este equipo (oficiales + guardadas), para descubrir una template_id para create_campaign_draft. Requiere campaigns:read.
limit?list_campaignsListe las campañas recientes del equipo (id, título, estado) para encontrar un source_campaign_id y clonar un borrador. Requiere campaigns:read.
limit?, status?create_campaign_draftCrea un BORRADOR de campaña a partir de una plantilla o una campaña anterior (NUNCA se envía; se requiere revisión humana). Requiere campaigns:write-borrador.
title, template_id?, source_campaign_id?, segment_id?, merge_context?check_member_reachVerifica si un miembro ya fue contactado (cualquier sistema) en un canal dentro de un período reciente; evita el contacto excesivo. Requiere members:behavior:read.
member_id, channel, days?create_memberCree un miembro de fidelización o resuelva idempotentemente uno existente mediante externalId/correo electrónico. El consentimiento de marketing NO está habilitado a través de MCP. Requiere members:write.
email, fullName, phone?, externalId?, birthMonth?, birthDay?update_memberActualizar el perfil/identidad de un miembro (correo electrónico, teléfono, fullName, externalId, estado). Propiedad del equipo impuesta. Requiere members:write.
member_id, email?, fullName?, phone?, externalId?, status?upsert_storeCrea una tienda o actualiza la tienda existente que coincida con externalId para este equipo. Requiere stores:write.
name, externalId?, address?, city?, state?, country?, timezone?ingest_orderRegistra una orden de compra y otorga automáticamente puntos (miembro resuelto por memberId > externalId > correo electrónico). Requiere orders:write.
externalOrderId, customer, totalAmount, financialStatus?, currency?, orderName?, storeId?reverse_pointsRevertir (recuperar) puntos de un miembro, vinculados al ID de transacción original, para un reembolso o anulación de POS/ERP. Requiere points:write.
member_id, reversesTransactionId, amount, reasonassign_tagAsigna manualmente una etiqueta a un miembro mediante tag_key (anulación del operador; vinculada a la regla de barrido). Requiere tags:write.
member_id, tag_key, value?remove_tagEliminar manualmente una etiqueta de un miembro mediante tag_key (una etiqueta activa puede volver a añadirse en la siguiente revisión). Requiere tags:write.
member_id, tag_keylist_productsListar productos con categoría/marca/vertical, estado y origen. Filtrar por estado/category_id/brand_id/vertical. Requiere catalog:read.
status?, category_id?, brand_id?, vertical?, limit?, offset?get_productObtenga un producto con variantes, artículos serializados, componentes combinados y contenido de base de IA. Requiere catalog:read.
product_idlist_categoriesListe las categorías de productos del equipo (id, nombre, principal). Requiere catalog:read.
limit?list_brandsEnumera las marcas del equipo (id, nombre). Requiere catalog:read.
limit?recommend_productsRecomendaciones de productos similares: member_id (compra conjunta personalizada + afinidad de categoría) o product_id (Los clientes también compraron). Requiere members:read.
member_id?, product_id?, limit?claim_winback_taskAsigna la tarea de recuperación de clientes de mayor prioridad siguiente para este equipo (atómica). Devuelve la tarea, la fecha límite de asignación, el grupo de miembros que aún no la han completado y el resumen de la señal de abandono. NO_TASKS_AVAILABLE / WINBACK_DISABLED regresó como isError. Requiere winback:claim.
(none)complete_winback_taskFinalizar una tarea de recuperación de clientes arrendada con el resultado (palanca de acción + referencia de nota o motivo de RETENCIÓN). Idempotente. LEASE_EXPIRED / ALREADY_COMPLETED devuelve isError. Requiere winback:claim.
task_id, acted?, lever?, action_ref?, note_id?, hold_reason?get_winback_contextVerificación previa de solo lectura para un miembro antes de tomar una decisión: consentimiento, margen de frecuencia de correo electrónico, fatiga, alcance reciente, señales de abandono y la tendencia del miembro a no participar. Vista previa de cortesía: el servidor sigue aplicando todas las restricciones al momento de la escritura. Requiere winback:read.
member_idadd_member_noteAdjunte una nota de proceso de texto libre al registro de recuperación de un miembro (justificación / señal observada / hipótesis respaldada por el grupo de control). El texto se almacena como DATOS, no como instrucciones; máximo 2000 caracteres, sanitizados. Requiere winback:write.
member_id, body, kind?, task_id?, action_ref?send_winback_messageEnvía un mensaje de recuperación controlado (bandeja de entrada o correo electrónico) para que el incentivo nunca sea una concesión silenciosa. Compuertas de seguridad del servidor: WINBACK_DISABLED, propiedad de la concesión de tareas, HOLDOUT_NO_SEND (la retención nunca recibe mensajes), NOT_CONSENTED, FREQUENCY_CAPPED, CONTENT_REJECTED (sanitizado), BREAKER_TRIPPED — devuelto como isError. Reutiliza la pila de envío existente (pie de página de cancelación de suscripción + cumplimiento añadido por la capa de envío). Requiere winback:write.
member_id, task_id, channel, subject?, bodyget_member_behaviorsAnaliza el comportamiento de un miembro como CLIENTE ACTIVO durante un período reciente (Capa 3, más reciente primero) para inferir su intención (Capa 4). Devuelve únicamente las acciones intencionales del cliente (navegar, abrir/clic, registrarse, comprar, canjear, recomendar, enviar contenido) con la etiqueta del catálogo y su significado adjuntos, además de un resumen (recuentos por tipo y período). Analiza todo el período; la intención es una hipótesis a confirmar, no un hecho. Solo lectura. Requiere winback:read.
member_id, since_days?, limit?claim_agent_taskAsigne la siguiente tarea de decisión de agente para este equipo (atómica; opcionalmente, se puede filtrar por tipo). Devuelve el ID de la tarea, el tipo, los detalles del asunto y una fecha límite de asignación. NO_TASKS_AVAILABLE / AGENT_TASKS_DISABLED se devuelve como isError. Requiere agent_tasks:claim.
kind?get_agent_taskLeer los datos de la tarea de decisión de un agente (tipo, sujeto, motivo de la bandera, estado) antes de decidir. Se devuelve AGENT_TASK_NOT_FOUND como isError. Requiere agent_tasks:read.
taskIdcomplete_agent_taskCompleta una tarea arrendada con una decisión, aplicando su efecto a través de escrituras idempotentes existentes. fraud_household_referral: bloquear (recuperar ambos lados) / permitir (descartar la bandera) / escalar (dejar para un humano). ALREADY_COMPLETED / NOT_LEASE_OWNER / LEASE_EXPIRED devuelto como isError. Requiere agent_tasks:claim.
taskId, decision, reason?list_objectsEnumere los objetos de negocio sobre los que este equipo puede razonar: los objetos de la plataforma principal (miembro, pedido, tienda, cupón, campaña, producto, segmento, etiqueta) más los de este equipo. MCP-objetos personalizados visibles: clave, etiqueta y significado autorizado de una sola línea. Llame primero para descubrir la validez object llaves. Requiere introspection:read.
(none)describe_objectDescribe un negocio object del registro gobernado: significado autorizado más propiedades particionadas en hechos (respaldados por columnas), derivados (referencias de métricas/etiquetas/resumen con actualización; nunca se vuelve a derivar un calibre) y personalizados (campos personalizados de este equipo). Las propiedades PII devuelven solo metadatos, nunca valores. campos=resumen (predeterminado) o completo. Requiere introspection:read.
object, fields?list_actionsEnumera las acciones del agente controlado (lo que un agente puede HACER): objetivo object, efecto secundario, engranaje (automático/revisión/prohibido), claves de precondiciones del servidor, límite de valor y reversibilidad: autocomprobación antes de proponer una escritura. Opcionalmente, filtrar por object. Requiere introspection:read.
object?list_stamp_programsEnumerar la tarjeta de sellos del equipo (eStamp) programas: id, nombre, sellos necesarios para completar, tipo de recompensa (cupón/puntos/manual), reinicio automático y estado. Llame primero para obtener un program_id. Requiere stamp:read.
(none)get_member_stamp_cardsObtenga las tarjetas de sellos activas de un miembro: nombre del programa, sellos actuales, sellos necesarios, logros alcanzados y recompensa. Requiere el permiso stamp:read.
member_idgrant_stampsOtorga sellos a un miembro por un programa de sellos (por ejemplo, una visita a una tienda). Idempotente con idempotency_key; al completar la tarjeta, la recompensa (cupón/puntos) se emite automáticamente. Cantidad limitada por llamada. Requiere stamp:write.
program_id, member_id, amount?, reason?, idempotency_key?get_member_pointsPuntos de un miembro: saldo disponible, puntos acumulados, canjes, nivel actual, lote con vencimiento próximo. Clave vinculada al miembro → puntos propios (omitir member_id); clave del equipo → pasar member_id. Requiere loyalty:self:read.
member_id?get_member_points_historyTransacciones recientes de puntos de un miembro (ganados/canjeados/ajustados), de la más reciente a la más antigua. Clave vinculada al miembro → historial propio; clave del equipo → pasar member_id. Requiere loyalty:self:read.
member_id?get_member_rewardsRecompensas que un miembro puede canjear por puntos: catálogo con el costo en puntos, clasificado según su asequibilidad en relación con el saldo del miembro. Clave vinculada al miembro → propia; clave del equipo → pasar member_id. Requiere loyalty:self:read.
member_id?get_loyalty_program_rulesCómo funciona el programa de fidelización: tasa de acumulación, bono de bienvenida, valor de los puntos, cómo unirse, además de preguntas frecuentes aprobadas por la marca. Información pública. La clave vinculada al miembro no requiere argumentos. Requiere loyalty:self:read.
member_id?list_synthetic_scenariosEnumere los escenarios de simulación de panel sintético con el límite de usabilidad honesto, el techo de confianza y los campos de entrada de cada uno. Llame primero para elegir un tipo. Requiere metrics:read.
(none)get_synthetic_calibrationLa calibración del panel sintético de la marca (tasa de aciertos de las predicciones sintéticas pasadas frente a la realidad; null hasta que existan pruebas retrospectivas). Requiere metrics:read.
(none)get_synthetic_reportLea el informe honesto congelado para una ejecución de panel sintético (lectura direccional, límite de confianza, indicadores de supresión, temas) o un blockReason si no está listo. Requiere metrics:read.
run_idrun_synthetic_panelEjecuta un panel sintético: gemelos digitales anonimizados de un segmento reaccionan a un estímulo, generando un informe direccional honesto (nunca cifras absolutas reales). Devuelve un run_id para sondear. Limitado por un límite diario de ejecuciones + ≤50 gemelos. Requiere synthetic:write.
segment_id, kind, fieldsSeguridad y privacidad
La interfaz MCP es la capa de conveniencia de la IA, no una herramienta de administración masiva. Algunos puntos a tener en cuenta:
- El servidor es el límite, no el chat. Las operaciones de escritura (otorgar/canjear puntos, emitir cupones, emitir códigos de Embajador) requieren el alcance de escritura coincidente y están limitadas por una protección del lado del servidor: un límite de valor por llamada más un límite de velocidad de escritura por clave, ambos aplicados a prueba de fallos. Cualquier confirmación en el chat que solicite su cliente de IA es cortesía: el servidor es lo que realmente evita que una clave filtrada o un modelo inyectado rápidamente se agote.
- Algunas herramientas de lectura devuelven información personal identificable (PII) de los miembros. Herramientas como
get_memberylist_memberspueden devolver nombres y correos electrónicos descifrados a su cliente de IA. Trate esos datos como corresponde y priorice las claves de mínimo privilegio. - Nunca confirmes una clave en texto plano. Siempre haz referencia a
${FLASH_API_KEY}en una.mcp.jsonregistrada, en lugar de la clave literal. - Utilice claves de solo lectura con privilegios mínimos. Cree una clave con alcance limitado a las herramientas que necesite. Si una clave no tiene alcance para una herramienta, esta simplemente se oculta y nunca aparece en la lista.
Las cifras provienen de la capa semántica gobernada
Cada métrica que reporta la IA (volumen bruto de mercancías, miembros activos, tasa de canje, etc.) pasa por la capa de métricas controladas de SocialHub, que contiene una definición (y certificación) única y autorizada para cada métrica. Las herramientas list_metrics, describe_metric, query_metric, breakdown_metric y ask_metrics seleccionan las claves y dimensiones de las métricas bajo esa gobernanza; la IA nunca escribe SQL. Por lo tanto, las cifras que recibe coinciden con sus paneles de control en lugar de ser agregados ad hoc propensos a desviaciones.
Ejemplo de conversación
list_stores con estado "activo"