Snowflake Cortex Agents MCP: cómo cargar las quejas en redes junto a las devoluciones
Los conectores MCP de Snowflake solo aceptan OAuth. Ejemplos de acceso externo y coste mensual estimado, con 12 llamadas a la API (Amazon falló).

Si vendes en Amazon o en tu propia tienda en línea, conoces bien el coste de las devoluciones. Cada producto devuelto suma envío, revisión y, muchas veces, una venta perdida. Los datos de ventas y devoluciones ya suelen estar en el almacén de datos de la empresa. Lo que casi nunca está ahí es lo que los clientes dicen del producto en público: las reseñas de Amazon, los hilos de Reddit y los comentarios de TikTok. Este artículo explica cómo poner esas dos cosas juntas en Snowflake y qué pasa cuando lo intentas con datos reales. La National Retail Federation estimó en octubre de 2025 que los consumidores de Estados Unidos devolverían unos 849.900 millones de dólares en mercancía en 2025. Es el 15,8 % de las ventas, y la tasa de las compras en línea es del 19,3 % (nota de prensa de la NRF).
El punto de partida es Snowflake Expedition 2026. El 2026-11-03, Snowflake presentó CoWork, el nuevo nombre de Snowflake Intelligence, y varias funciones nuevas de Cortex Agents (nota de prensa). La que más llama la atención son los conectores MCP, que permiten a un agente llamar a herramientas de un servidor MCP externo (documentación de conectores MCP). La idea surge sola: cargar reseñas y comentarios junto a las tablas de ventas y devoluciones y preguntar al agente qué tema de queja sube a la vez que la tasa de devoluciones.
Probamos la parte de datos de verdad. El 2026-11-06, entre las 00:16 y las 00:36 (hora de Singapur), hicimos 12 llamadas a la API de EveryInfra y guardamos cada petición y cada respuesta. La parte de Snowflake, en cambio, son ejemplos de configuración. En este equipo no tenemos una cuenta de Snowflake, así que no ejecutamos el SQL, los procedimientos ni el agente. Cada dato sobre Snowflake sale de snowflake.com o de docs.snowflake.com, con su fecha de lectura en Referencias.
La respuesta corta es esta. Hoy no puedes añadir el servidor MCP de EveryInfra como conector MCP de Snowflake, porque Snowflake solo acepta OAuth con un tipo de registro de cliente que nuestro servidor todavía no ofrece. Y aunque se pudiera, un conector no resolvería este problema. Lo que devuelve un conector se queda en la conversación y nunca llega a una tabla. El camino que funciona es una integración de acceso externo de Snowflake con un procedimiento almacenado en Python que llama a la API cada día y escribe las reseñas en tablas. Conviene decir desde ya lo que este artículo no muestra: las llamadas a reseñas de Amazon no devolvieron datos esa noche y no tenemos datos de devoluciones, así que aquí hay un plan de montaje y una estimación de coste, no una conclusión sobre qué queja provoca devoluciones. EveryInfra no tiene ninguna colaboración con Snowflake; todo lo que decimos de Snowflake sale de sus documentos y notas de prensa públicos.

Qué presentó Snowflake en Expedition 2026: snowflake cowork y Cortex Agents
El producto estrella del evento es Snowflake CoWork. La nota de prensa lo describe como un espacio de trabajo con agentes para equipos de negocio, en ai.snowflake.com. Cortex Code, o CoCo, es la herramienta hermana para desarrolladores e ingenieros de datos (nota de prensa de Expedition 2026, página de producto de CoWork).
Otra nota de prensa del mismo día anunció Business Ontology y Cortex AI Gateway. Business Ontology guarda el significado aprobado de los términos de negocio y se lo da a los agentes. Cortex AI Gateway controla cómo los agentes usan modelos, llaman a herramientas y actúan en los sistemas de la empresa (nota de prensa de Business Ontology y AI Gateway). Las dos cosas importan para nuestra pregunta. Un término como «tasa de devoluciones» necesita una sola fórmula aceptada por todos; si no, dos agentes darán dos respuestas distintas.
En este artículo, CoWork es el lugar donde la gente pregunta y Cortex Agents es quien trabaja. Cada asistente de CoWork es un objeto Cortex Agent. Su especificación fija el modelo, las instrucciones y las herramientas. Entre las herramientas están Cortex Analyst, que escribe SQL sobre vistas semánticas, Cortex Search para texto, la ejecución de código, las herramientas personalizadas que llaman a un procedimiento o función, los conectores MCP y la búsqueda web (introducción a Cortex Agents, crear y gestionar agentes).
Por eso la calidad de la respuesta depende sobre todo de las tablas y de la vista semántica. El agente traduce la pregunta a SQL y explica el resultado, pero no puede inventar datos que no estén cargados. La tabla siguiente resume el estado de las dos funciones que importan aquí, tal como lo leímos el 2026-11-06. «No consta» significa que ni la documentación ni la nota de prensa indican un estado.
| Función | Estado el 2026-11-06 | Fuente |
|---|---|---|
| Automations de CoWork | No consta | Documentación de Automations |
| Conectores MCP de Cortex Agents | La documentación no indica estado; solo OAuth | Documentación de conectores |
La entrada del blog de CoWork (blog de CoWork) menciona la búsqueda analítica, que está en vista previa. Su ejemplo se parece mucho al nuestro: qué problemas de clientes aparecieron más el mes pasado. Primero reduce el conjunto con Cortex Search y después cuenta y compara con funciones de IA y SQL. La diferencia es que trabaja con documentos que ya están en Snowflake. En nuestro caso, la voz del cliente vive fuera, en Amazon, Reddit y TikTok. El primer trabajo es traerla dentro, con un calendario y con una forma que se pueda cruzar con ventas y devoluciones. Los límites y permisos de las Automations están más abajo, en la sección del correo semanal.
¿Puede snowflake cortex agents mcp conectarse directamente a EveryInfra?
Es la primera idea que se le ocurre a cualquiera. EveryInfra ya tiene un servidor MCP remoto (servidor MCP de EveryInfra), y Cortex Agents ahora puede llamar a servidores MCP externos. ¿Por qué no pegar la dirección del servidor en Snowflake y listo? Comparamos punto por punto lo que pide Snowflake con lo que hace nuestro servidor. La respuesta es que hoy no se puede, y el bloqueo está en cómo se registra el cliente OAuth.
La documentación de Snowflake es clara: Snowflake solo admite OAuth para conectarse a servidores MCP. Un administrador crea una integración de API con API_PROVIDER = external_mcp que guarda la configuración OAuth. Después crea un objeto de servidor MCP externo que apunta a esa integración (documentación de conectores MCP). Hay dos formas de rellenar la configuración OAuth.
La primera es OAuth estándar. Registras una aplicación en el servidor de autorización remoto y obtienes un identificador de cliente, con o sin secreto. También debes registrar en esa aplicación la URL de retorno https://identity.snowflake.com/oauth2/callback. La segunda forma es el registro dinámico de clientes: Snowflake pide por sí mismo un identificador al servidor remoto, y para eso el servidor debe implementar el RFC 7591 (RFC 7591). Los conectores ya preparados son Atlassian, GitHub, Glean, Linear y Salesforce, y el ejemplo de Atlassian usa el registro dinámico.

EveryInfra tiene dos direcciones MCP. La habitual, https://api.everyinfra.com/mcp, usa una clave de API en una cabecera Bearer. A las 00:43 (hora de Singapur) del 2026-11-06 pedimos sus metadatos de recurso protegido y de servidor de autorización. Las dos peticiones devolvieron 404, así que esa dirección no ofrece descubrimiento OAuth. La dirección completa, https://api.everyinfra.com/mcp/all, se comporta de otra manera. En el mismo minuto, una petición sin credenciales devolvió 401 con una cabecera WWW-Authenticate.
Esa cabecera apunta a unos metadatos de recurso con el formato del RFC 9728, y esos metadatos nombran auth.everyinfra.com/oidc como servidor de autorización (RFC 9728). Después leímos los metadatos del servidor de autorización, que siguen el RFC 8414 (RFC 8414). Admiten PKCE con S256 y clientes públicos sin secreto. Pero el campo registration_endpoint está vacío, así que no hay registro dinámico. Nuestra documentación pública tampoco ofrece una página donde un cliente registre por su cuenta un cliente OAuth.
| Petición (2026-11-06) | Hora de Singapur | Resultado |
|---|---|---|
/.well-known/oauth-protected-resource | 00:43:08 | 404 |
/.well-known/oauth-protected-resource/mcp | 00:43:08 | 404 |
/.well-known/oauth-authorization-server | 00:43:09 | 404 |
POST /mcp/all sin credenciales | 00:43 | 401 con cabecera WWW-Authenticate |
Metadatos de auth.everyinfra.com/oidc | 00:43 | PKCE S256, clientes públicos, sin registration_endpoint |
| Lo que pide Snowflake | EveryInfra `/mcp` (clave de API) | EveryInfra `/mcp/all` (probado a las 00:43, hora de Singapur) |
|---|---|---|
| Solo OAuth | No, usa una clave Bearer | Sí, 401 con metadatos del RFC 9728 |
| Registro dinámico de clientes (RFC 7591) | No aplica | No, los metadatos no tienen punto de registro |
| OAuth estándar con cliente y URL de retorno registrados | No aplica | No hay registro de autoservicio en la documentación pública |
| Solo herramientas MCP | Sí | Sí |
| Nombre de host sin guiones bajos | Sí | Sí |
La especificación MCP no obliga a usar OAuth. La versión 2025-06-18 dice que la autorización es opcional. Si un servidor la ofrece, debe publicar metadatos según los RFC 9728 y 8414, y el registro dinámico es una recomendación, no una obligación (autorización MCP, 2025-06-18). Un servidor con clave de API cumple la especificación, y un cliente que solo acepta OAuth también. Simplemente no encajan entre sí.
Snowflake tiene un segundo lugar para servidores MCP externos. En Cortex AI Gateway, un administrador puede añadir un servidor MCP personalizado. Su documentación también exige OAuth, una URL que termine en /mcp y el rol ACCOUNTADMIN (aplicaciones personalizadas de AI Gateway). Nuestra dirección con OAuth termina en /mcp/all, y la que termina en /mcp solo acepta clave. Ninguna dirección cumple las dos condiciones a la vez.
Supongamos que el problema del registro desaparece. Aun así, un conector no sirve para este trabajo. Cada persona pulsa Connect en CoWork, inicia sesión en la página remota y aprueba el acceso. A partir de ahí, el agente llama a las herramientas remotas durante la conversación, y los resultados se quedan en esa conversación (uso de conectores MCP en CoWork). Cada persona que pregunta necesita su propia cuenta de EveryInfra. Y, sobre todo, ninguna reseña llega a una tabla, así que el agente no puede cruzar tres meses de reseñas con tres meses de devoluciones.
Una pregunta sobre tendencias necesita historia, y la historia vive en tablas. Los conectores sirven para otro tipo de preguntas, como «de qué discute la gente ahora mismo bajo este vídeo». Esa pregunta es puntual y no necesita guardar nada. Encontramos cuatro maneras de conectar Snowflake con una API de datos externa. La tabla las ordena según dos criterios: si los datos llegan a una tabla y si hace falta OAuth.
| Camino | Los datos llegan a una tabla | Necesita OAuth | Útil para | Fuente |
|---|---|---|---|---|
| Conector MCP (objeto de servidor MCP externo) | No, solo en la conversación | Sí | Preguntas puntuales | Conectores |
| Integración de acceso externo, procedimiento y tarea | Sí | No, la clave va en un secreto | Cargas diarias, nuestra opción | Acceso a redes externas |
| Recolector fuera de Snowflake y Snowpipe | Sí | No | Equipos que ya tienen recolectores | Snowpipe |
| MCP externo en el SDK de agentes de Cortex Code | No, salvo que tu código escriba en tablas | No, admite cabeceras | Desarrolladores que prueban en código | SDK de agentes |
En el cuarto camino, una herramienta de desarrollo de Snowflake permite poner la clave de la API en una cabecera (documentación del SDK). Pero vive en el código del desarrollador, no en la interfaz de negocio de CoWork. El resto del artículo sigue el segundo camino, porque escribe datos en tablas según un calendario y bajo el control de acceso normal de Snowflake.
El camino que funciona: acceso externo y un procedimiento almacenado (ejemplo de configuración)
Todo el flujo cabe en un dibujo. La API de EveryInfra recoge reseñas y comentarios públicos de Amazon, Reddit y TikTok. Dentro de Snowflake, una tarea programada llama una vez al día a un procedimiento almacenado. El procedimiento llama a la API a través de una integración de acceso externo, guarda cada respuesta tal cual y luego la despliega en tablas de reseñas. Tus datos de ventas y el informe de devoluciones de FBA se cargan en otras dos tablas, como ya haces hoy. Encima van una vista semántica y un Cortex Agent, y el equipo de negocio pregunta desde CoWork.
Una integración de acceso externo es la forma estándar de Snowflake para que procedimientos y funciones salgan a internet. Usa tres objetos. La regla de red dice a qué hosts y puertos puede llegar el código. El secreto guarda la credencial. La integración une las dos cosas y se concede a roles concretos (introducción al acceso a redes externas, crear y usar una integración de acceso externo).
Nuestra regla solo deja pasar api.everyinfra.com. Aunque alguien cambie el código del procedimiento, no podrá llegar a otro host. La clave queda en el secreto, así que el código nunca la lleva en texto plano y el rol que ejecuta el procedimiento no puede leerla. En el ejemplo, voc es el nombre de la base de datos, por «voz del cliente».
-- 1. Permitir tráfico de salida a un solo host
CREATE OR REPLACE NETWORK RULE voc.raw.everyinfra_egress
MODE = EGRESS
TYPE = HOST_PORT
VALUE_LIST = ('api.everyinfra.com');
-- 2. Guardar la clave de la API. Crea una clave aparte en la consola de EveryInfra
-- con su propio límite de llamadas por minuto.
CREATE OR REPLACE SECRET voc.raw.everyinfra_key
TYPE = GENERIC_STRING
SECRET_STRING = '<clave de la API de EveryInfra>';
-- 3. Unir la regla y el secreto
CREATE OR REPLACE EXTERNAL ACCESS INTEGRATION everyinfra_access
ALLOWED_NETWORK_RULES = (voc.raw.everyinfra_egress)
ALLOWED_AUTHENTICATION_SECRETS = (voc.raw.everyinfra_key)
ENABLED = TRUE;
-- 4. Concederla solo al rol de carga
GRANT USAGE ON INTEGRATION everyinfra_access TO ROLE voc_loader;
GRANT READ ON SECRET voc.raw.everyinfra_key TO ROLE voc_loader;La sintaxis sigue la referencia SQL de Snowflake (CREATE NETWORK RULE, CREATE SECRET, CREATE EXTERNAL ACCESS INTEGRATION). Crear la integración requiere un privilegio de cuenta, así que normalmente lo hace un administrador una sola vez. Después, el rol de carga solo necesita uso sobre la integración y lectura sobre el secreto. La página de ejemplos de Snowflake muestra procedimientos completos que llaman a APIs externas con un secreto (ejemplos de acceso a redes externas).
El procedimiento tiene una decisión de diseño que cambia la factura: esperar cada resultado o enviar la petición y volver más tarde. La API de EveryInfra admite las dos cosas. Una llamada síncrona mantiene la conexión abierta hasta que llegan los datos; en nuestra prueba, la llamada más lenta a reseñas de Amazon la mantuvo 67 segundos. Una llamada asíncrona añade "mode": "async" al cuerpo de la petición. La API responde con un estado 202 y un identificador de tarea en unos dos segundos, y el resultado se recoge después con GET /api/v1/jobs/{job_id} (Documentación).
En Snowflake, esa diferencia se convierte en dinero. El procedimiento corre en un almacén, y el almacén cobra cada segundo que está encendido, también los segundos de espera. Por eso dividimos la carga en dos procedimientos y dos tareas. Uno solo envía las peticiones y termina en segundos. El otro recoge las tareas que ya acabaron. La tabla resume todos los objetos de Snowflake de este montaje.
| Objeto | Para qué sirve | Quién suele crearlo |
|---|---|---|
Regla de red everyinfra_egress | Permite la salida hacia un solo host | Administrador de la cuenta |
Secreto everyinfra_key | Guarda la clave de la API | Administrador de la cuenta |
Integración everyinfra_access | Une la regla y el secreto | Administrador de la cuenta |
Procedimiento submit_pulls | Envía tareas asíncronas por cada fila de la lista | Ingeniero de datos |
Procedimiento collect_results | Recoge las tareas terminadas | Ingeniero de datos |
Tareas t_submit y t_collect | Ejecutan los dos procedimientos con calendario | Ingeniero de datos |
Vista semántica voc_returns | Define temas, semanas y medidas de devolución | Ingeniero de analítica |
Agente con VocAnalyst | Responde preguntas en CoWork | Ingeniero de analítica |
CREATE OR REPLACE PROCEDURE voc.raw.submit_pulls()
RETURNS VARIANT
LANGUAGE PYTHON
RUNTIME_VERSION = '3.11'
PACKAGES = ('snowflake-snowpark-python', 'requests')
HANDLER = 'run'
EXTERNAL_ACCESS_INTEGRATIONS = (everyinfra_access)
SECRETS = ('ei' = voc.raw.everyinfra_key)
AS
$$
import json, requests, _snowflake
API = "https://api.everyinfra.com/api/v1/social"
def run(session):
key = _snowflake.get_generic_secret_string("ei")
headers = {"Authorization": f"Bearer {key}", "Content-Type": "application/json"}
# watchlist: una fila por URL de producto, URL de vídeo o palabra clave
rows = session.sql(
"SELECT watch_id, platform, action, params FROM voc.raw.watchlist WHERE active"
).collect()
submitted = 0
for r in rows:
body = {"platform": r["PLATFORM"], "action": r["ACTION"],
"params": json.loads(r["PARAMS"]), "mode": "async"}
resp = requests.post(API, headers=headers, json=body, timeout=30)
payload = resp.json()
session.sql(
"""INSERT INTO voc.raw.jobs
(watch_id, job_id, http_status, charged_usd, first_payload, submitted_at)
SELECT ?, ?, ?, ?, PARSE_JSON(?), CURRENT_TIMESTAMP()""",
params=[r["WATCH_ID"], payload.get("job_id"), resp.status_code,
(payload.get("billing") or {}).get("charged_usd"), json.dumps(payload)],
).collect()
submitted += 1
return {"submitted": submitted}
$$;El procedimiento sigue la guía de Snowflake para procedimientos en Python. La cláusula SECRETS asocia el secreto a un nombre, el código lo lee con _snowflake.get_generic_secret_string y PACKAGES declara los paquetes externos (procedimientos almacenados en Python). Hay dos detalles que conviene copiar. El primero: guarda la primera respuesta completa. En ella aparece el cargo exacto en dólares, y con eso puedes cuadrar cada mes con la facturación de EveryInfra.
El segundo: no reintentes el mismo objetivo dentro del procedimiento. La API no cobra los parámetros erróneos, los objetivos no disponibles temporalmente ni los resultados vacíos, y la respuesta explica el motivo. Deja que lo intente la ejecución del día siguiente. Nuestras respuestas 503 de Amazon decían justamente que reintentar enseguida el mismo producto probablemente no serviría de nada.
El recolector tiene la misma forma. Lee los identificadores de tarea pendientes en voc.raw.jobs y pregunta el estado de cada uno. Se salta las tareas en running o en finalizing, escribe los resultados terminados en voc.raw.api_responses y los marca como recogidos. En nuestra propia prueba, al principio solo tratamos running como «sin terminar». Resultado: leímos una tarea demasiado pronto, cuando todavía se estaba cerrando. Incluye los dos estados en la comprobación.
Programa el envío a las 02:00 (hora de Singapur) cada día, y el recolector a las 02:20 y a las 03:20, para que la segunda pasada recoja lo que falte. No pongas el recolector cada pocos minutos. Cada vez que el almacén se reanuda cobra al menos 60 segundos, así que las ejecuciones frecuentes sobre todo pagan tiempo ocioso. También recomendamos una suspensión automática de 60 segundos en vez de los 10 minutos por defecto.
CREATE OR REPLACE TASK voc.raw.t_submit
WAREHOUSE = voc_xs_wh
SCHEDULE = 'USING CRON 0 2 * * * Asia/Singapore'
AS
CALL voc.raw.submit_pulls();
CREATE OR REPLACE TASK voc.raw.t_collect
WAREHOUSE = voc_xs_wh
SCHEDULE = 'USING CRON 20 2,3 * * * Asia/Singapore'
AS
CALL voc.raw.collect_results();
ALTER TASK voc.raw.t_collect RESUME;
ALTER TASK voc.raw.t_submit RESUME;La sintaxis de las tareas está en CREATE TASK y en la introducción a las tareas. También puedes quitar WAREHOUSE y usar una tarea sin servidor, que Snowflake cobra según el cómputo real; la tabla de consumo le asigna un multiplicador de 0,9 (tabla de consumo de servicios).
Cuatro tablas: reseñas, menciones sociales, ventas y devoluciones
Tres reglas dan forma a las tablas. Guarda cada respuesta en bruto tal como llegó. En las tablas desplegadas, guarda solo los campos que usa el análisis. Y deja fuera los datos personales siempre que puedas. La API devuelve nombres y avatares de quienes escriben las reseñas, y el análisis de devoluciones nunca los usa. Al dejarlos fuera ahorras espacio y te quitas una pregunta de privacidad. Abajo están las cuatro tablas principales y una tabla de correspondencias. Ventas y devoluciones vienen de tus propios sistemas, así que solo mostramos su estructura.
-- Respuestas en bruto: una fila por respuesta de la API, en VARIANT
CREATE TABLE IF NOT EXISTS voc.raw.api_responses (
job_id STRING,
platform STRING,
action STRING,
fetched_at TIMESTAMP_TZ,
payload VARIANT
);
-- Reseñas de Amazon (desplegadas desde amazon/reviews)
CREATE TABLE IF NOT EXISTS voc.core.reviews (
review_id STRING PRIMARY KEY,
asin STRING,
country STRING,
rating NUMBER(3,1),
title STRING,
body STRING,
posted_at TIMESTAMP_TZ,
is_verified_purchase BOOLEAN,
helpful_count NUMBER,
variant STRING,
fetched_at TIMESTAMP_TZ
);
-- Menciones sociales: comentarios de TikTok y publicaciones de Reddit
CREATE TABLE IF NOT EXISTS voc.core.social_mentions (
platform STRING, -- tiktok o reddit
source_id STRING, -- id del comentario o de la publicación
source_url STRING, -- URL del vídeo o de la publicación
community STRING, -- comunidad de Reddit, vacío en TikTok
product_key STRING, -- clave de product_map
body STRING,
like_count NUMBER,
reply_count NUMBER,
is_reply BOOLEAN,
posted_at TIMESTAMP_TZ,
fetched_at TIMESTAMP_TZ,
themes ARRAY, -- etiquetas de AI_CLASSIFY
PRIMARY KEY (platform, source_id)
);
-- Ventas diarias, desde tu sistema de pedidos
CREATE TABLE IF NOT EXISTS voc.core.sales_daily (
sale_date DATE,
sku STRING,
asin STRING,
units_ordered NUMBER,
PRIMARY KEY (sale_date, sku)
);
-- Informe de devoluciones de FBA (GET_FBA_FULFILLMENT_CUSTOMER_RETURNS_DATA)
CREATE TABLE IF NOT EXISTS voc.core.fba_returns (
return_date TIMESTAMP_TZ,
order_id STRING,
sku STRING,
asin STRING,
fnsku STRING,
quantity NUMBER,
fulfillment_center_id STRING,
detailed_disposition STRING,
reason STRING,
status STRING,
customer_comments STRING,
return_themes ARRAY
);
-- Correspondencias: qué ASIN, SKU, vídeos y palabras pertenecen a un producto
CREATE TABLE IF NOT EXISTS voc.core.product_map (
product_key STRING,
asin STRING,
sku STRING,
tiktok_urls ARRAY,
reddit_terms ARRAY
);La tabla de devoluciones copia el informe de devoluciones de clientes de FBA de Amazon SP-API. El tipo de informe es GET_FBA_FULFILLMENT_CUSTOMER_RETURNS_DATA. Sus campos son fecha de devolución, pedido, SKU, ASIN, FNSKU, nombre del producto, cantidad, centro logístico, disposición, motivo, estado, número de placa y comentarios del cliente, y la documentación dice que Amazon lo actualiza a diario (tipos de informe de FBA en SP-API).
La columna de comentarios del cliente es la que más importa aquí. Es texto libre, igual que un comentario de TikTok. Si clasificas los dos con la misma lista de temas, las dos fuentes se alinean por tema. La columna de motivo usa códigos fijos de Amazon, mucho más gruesos que un tema como «la tapa gotea», así que por sí sola no dice qué tema empuja las devoluciones.
La tabla siguiente relaciona los campos de la API con las columnas. Los nombres de campo salen del catálogo de EveryInfra en GET /api/v1/social/catalog, leído el 2026-11-06 (catálogo).
| Capacidad | Campos de la API | Columna | Nota |
|---|---|---|---|
amazon/reviews | review_id, product_asin, country | reviews.review_id, asin, country | Sin duplicados por id de reseña |
amazon/reviews | rating, title, text, posted_at | rating, title, body, posted_at | Puntuación de 1 a 5 |
amazon/reviews | is_verified_purchase, helpful_count, variant | Mismos nombres | Color y tamaño van en variant |
amazon/reviews | author_name, author_id, author_avatar_url | No se guardan | Datos personales que el análisis no usa |
tiktok/comments | id, text, like_count, reply_count, is_reply, posted_at | Columnas equivalentes de social_mentions | Cada comentario principal trae hasta 2 respuestas |
tiktok/comments | author_username, author_id | No se guardan | Mismo motivo |
reddit/search | id, url, title y text, community, like_count, comment_count | source_id, source_url, body, community, like_count, reply_count | Título y cuerpo en un solo texto |
reddit/search | author_username | No se guarda | Mismo motivo |
El despliegue solo necesita SQL. Selecciona las filas de api_responses por plataforma, usa LATERAL FLATTEN sobre payload:results y haz un MERGE en la tabla de destino por identificador. Cuando vuelves a descargar el mismo vídeo, los comentarios antiguos actualizan sus «me gusta» y los nuevos se añaden. Más adelante verás que volver a descargar el mismo vídeo meses después es el paso más útil de todo el montaje.
Una ida y vuelta real: REST, asíncrono y MCP
No pudimos ejecutar la parte de Snowflake. Pero el procedimiento envía las mismas peticiones a la misma API que usamos en nuestro equipo y recibe el mismo formato de respuesta. El 2026-11-06, entre las 00:16 y las 00:36 (hora de Singapur), hicimos 12 llamadas con una clave de prueba. Cubren las tres capacidades del artículo y dos búsquedas que nos ayudaron a elegir objetivos. De cada llamada guardamos la petición, la hora de inicio y fin, el estado HTTP, la duración y el cargo.
| # | Hora de Singapur | Capacidad | Modo | Resultado | Duración | Cargo |
|---|---|---|---|---|---|---|
| 1 | 00:16:52 | amazon/search, portable blender | Síncrono | 10 productos, 9 de Ninja | 42,14 s | 0,002236 USD |
| 2 | 00:17:41 | amazon/reviews, producto B0C2FF4JD1 | Síncrono | 503, no disponible temporalmente (sin cobro) | 60,12 s | 0 USD |
| 3 | 00:18:41 | amazon/reviews, producto B0CN3S2SW2 | Síncrono | 503 | 58,57 s | 0 USD |
| 4 | 00:19:47 | amazon/reviews, producto B09B8V1LZ3 | Síncrono | 0 filas, reembolsado | 67,25 s | 0 USD |
| 5 | 00:20:55 | reddit/search, portable blender, recientes | Síncrono | 14 publicaciones | 6,56 s | 0,000556 USD |
| 6 | 00:21:13 | tiktok/search, ninja blast portable blender review | Síncrono | 10 vídeos | 3,78 s | 0,000556 USD |
| 7 | 00:21:21 | tiktok/comments, vídeo de barato contra caro | Síncrono | 200 comentarios | 52,30 s | 0,000556 USD |
| 8 | 00:22:13 | walmart/reviews, página de producto | Síncrono | 0 filas, reembolsado | 54,34 s | 0 USD |
| 9 | 00:24:22 | amazon/reviews, producto B0D2YYHN1B | Síncrono | 503 | 19,48 s | 0 USD |
| 10 | 00:25:26 | reddit/search, ninja blast | MCP | 7 publicaciones | 7,62 s | 0,000556 USD |
| 11 | 00:27:36 | tiktok/comments, vídeo de prueba de un producto | Asíncrono | 202, listo en unos 100 s, 73 comentarios | Envío 1,95 s | 0,000556 USD |
| 12 | 00:36:23 | amazon/reviews, B0C2FF4JD1 otra vez | Síncrono | 503 | 38,42 s | 0 USD |
Seis de las 12 llamadas se cobraron, por un total de 0,005016 USD. Las otras seis devolvieron 503 o un resultado vacío, y no se cobró ninguna. La URL de Walmart de la llamada 8 la adivinamos a partir del nombre del producto, así que el resultado vacío es culpa nuestra. Aun así, confirma que el reembolso por resultado vacío también se aplica a las reseñas de Walmart.

La primera parte de la captura es lo que recibe el procedimiento de envío: un 202 en 1,95 segundos con el identificador de tarea, y el cargo de 0,000556 USD ya indicado en la respuesta. La segunda parte es lo que recibe el recolector. El estado pasó de running a finalizing y luego a succeeded. Consultamos más o menos cada 8 segundos, 12 veces en total, y la tarea terminó unos 100 segundos después del envío. La tercera parte muestra un fallo: estado 503, motivo access_blocked, reintento sugerido tras 900 segundos y cargo 0. Al procedimiento le basta con ramificar según el código de estado y estos campos.
La llamada 10 sirve de comparación. Hizo la misma búsqueda en Reddit con la herramienta MCP everyinfra_call_api. Devolvió 7 publicaciones en 7,62 segundos, como un resultado de herramienta de 18.619 caracteres dentro de una respuesta de 19.490 bytes. Si un Cortex Agent hiciera esa llamada a través de un conector MCP, esos 18.619 caracteres entrarían en el contexto del modelo como tokens de entrada. Con los datos ya cargados en una tabla, el agente solo paga las pocas filas que lee. Por eso preferimos «primero cargar, luego preguntar» frente a «consultar en vivo en cada conversación».
Este gráfico de tiempos decide cómo se reparte el coste en Snowflake. Por tamaño de datos, las tres capacidades son ligeras: una llamada de comentarios de TikTok con 200 comentarios pesó 71.228 bytes, y una búsqueda en Reddit, unos 30.000. Por tiempo de espera, una llamada síncrona de reseñas o comentarios tarda a menudo entre 50 y 70 segundos. Un almacén cobra por segundo, con un mínimo de 60 segundos cada vez que se reanuda (introducción a los almacenes, coste de cómputo). Durante una llamada síncrona, el almacén pasa casi todo el tiempo esperando a la red. La sección de costes lo convierte en dólares.
Prueba 1: cuántos comentarios de TikTok hablan de un fallo del producto
Elegimos una categoría que casi todo el mundo conoce: las batidoras portátiles. La llamada 1 usó amazon/search con «portable blender». Nueve de los 10 primeros resultados eran productos de Ninja, con precios entre 19,95 y 59,99 USD (API de datos de Amazon, búsqueda de Amazon). La llamada 6 usó tiktok/search con «ninja blast portable blender review». De los 10 vídeos que devolvió, tomamos los dos con más comentarios y descargamos sus comentarios con tiktok/comments (API de datos de TikTok, API de comentarios de TikTok, API de búsqueda de TikTok).
El primer vídeo es una prueba de batidora «barata contra cara» publicada el 2025-07-27. Cuando la descargamos tenía 2.586.703 reproducciones y 251 comentarios, y recibimos 200, el máximo de una llamada. El segundo es un vídeo de prueba de un solo producto publicado el 2026-01-20, con 208.916 reproducciones y 98 comentarios. Recibimos 73, de los que 17 eran respuestas. En este artículo no nombramos a ninguno de los dos creadores.
| Vídeo | Publicado | Reproducciones | Comentarios en el vídeo | Recibidos | Respuestas | Fallos del producto | Porcentaje |
|---|---|---|---|---|---|---|---|
| Barata contra cara | 2025-07-27 | 2.586.703 | 251 | 200 | 23 | 4 | 2,0 % |
| Prueba de un producto | 2026-01-20 | 208.916 | 98 | 73 | 17 | 13 | 17,8 % |
Primero probamos el atajo más habitual: una lista de palabras clave. Batería, gotea, se rompió, devolví, caro, muy pequeña. Un comentario que contuviera alguna contaba como queja. En el primer vídeo, la lista coincidió con 42 de los 200 comentarios. Luego leímos cada comentario a mano. Solo 4 de los 42 describían un fallo de la batidora, así que la regla de palabras clave acertó el 9,5 % de las veces.
La razón se ve enseguida. Los comentarios de un vídeo «barato contra caro» son sobre todo bromas sobre el formato, con peticiones para probar versiones baratas y caras de otras cosas. Treinta comentarios coincidieron con «caro» o con una palabra de precio, y solo 7 decían que la batidora no valía lo que cuesta. En Snowflake, las etiquetas de tema tienen que salir de un modelo, y antes hay que definir por escrito qué es un «fallo del producto». La tabla muestra nuestras etiquetas manuales para los 42 comentarios que encontró la lista.
| Etiqueta manual | Comentarios |
|---|---|
| No habla del producto (bromas, otros temas) | 29 |
| Solo una queja de precio | 7 |
| Fallo del producto | 4 |
| Dudoso | 2 |
| Total de coincidencias | 42 |
Nuestra regla manual fue estricta. Un comentario cuenta solo si dice que este producto tuvo un problema. Los tipos son tapa o derrame, batería corta, sin fuerza con hielo o fruta congelada, falta una pieza, difícil de limpiar y se rompió pronto. Un «no vale la pena, la devolví» general también cuenta. Las quejas de precio, las comparaciones de marcas, las bromas y los emojis no cuentan. Con esa regla, los dos vídeos se ven muy distintos.
El vídeo con diez veces más reproducciones tiene solo un 2,0 % de comentarios sobre fallos. El vídeo pequeño de prueba tiene un 17,8 %. La razón es el público. Un vídeo comparativo atrae a gente que mira por diversión. Un vídeo de prueba atrae a quien ya tiene el producto o piensa comprarlo, y esa es la gente que escribe «a mí también se me derramó». Para el diseño en Snowflake, elegir bien los vídeos de product_map importa más que el número de comentarios por vídeo.
Por el mismo precio de 0,000556 USD por llamada, el vídeo de prueba dio casi nueve veces más señal. Esa elección también se puede automatizar: busca con tiktok/search y quédate con los vídeos cuyo texto incluya palabras como «review», «trying» u «honest» y que tengan entre decenas y cientos de comentarios. En los dos vídeos juntos, 17 de 273 comentarios describían un fallo. Así se reparten por tema.
| Tema | Comentarios | Ejemplo (texto original, autor oculto) | Me gusta |
|---|---|---|---|
| Tapa o derrame | 6 | The way I just gasped when it spilled. Were you supposed to open it from the top instead? | 79 |
| Batería | 3 | the batteries do not last long enough to make a full smoothie | 9 |
| Queja general, devuelta | 2 | Not worth it, returned after a week | 0 |
| Sin fuerza con hielo o fruta congelada | 2 | It's not. I returned mine. Barely could get through frozen fruit | 97 |
| Falta una pieza | 2 | ours both didn't come with the blade cap | 0 |
| Se rompió pronto | 1 | they are shit, lasts 2 spins | 1 |
| Difícil de limpiar | 1 | Hard to wash | 0 |
La tapa y los derrames forman el grupo más grande. El comentario con más «me gusta» de ese grupo, 79, pregunta si había que abrir la tapa por arriba. Otro dice que a quien lo escribió le pasó lo mismo la primera vez, porque no pensó en usar el tapón. Un comentario del 2026-01-22 avisa de que no hay que usar el botón de la tapa, porque se rompe y no venden recambio. Este tipo de problema es distinto de una queja de batería o de motor. A menudo se arregla con mejores instrucciones, otro embalaje u otras fotos del producto, y entonces la tasa de devoluciones puede bajar rápido.
Eso es justo lo que busca la pregunta «qué tema de queja sube con las devoluciones». Cuando un tema coincide con un pico de devoluciones, la acción es concreta. Guarda también los «me gusta» en la tabla. Un «yo la devolví» con 97 «me gusta» y una queja con 0 no representan al mismo número de personas. En la vista semántica, define dos medidas: el número de comentarios y un recuento ponderado por «me gusta», y pide al agente que dé las dos.
En Snowflake, AI_CLASSIFY puede poner las etiquetas. Usa los siete temas más «no es un fallo del producto» como categorías, activa la salida con varias etiquetas y añade una descripción de la tarea que excluya las quejas de precio y las bromas. La documentación recomienda no pasar de unas 20 categorías y acepta ejemplos (documentación de AI_CLASSIFY).
Para un equipo que trabaja en español hay una nota importante. La documentación de AI_CLASSIFY dice que funciona mejor con texto en inglés y que con otros idiomas el resultado puede empeorar. Nuestros comentarios de prueba estaban en inglés, pero si sigues reseñas de Amazon en España o México, o vídeos de TikTok en español, no des por bueno el resultado sin revisarlo. Etiqueta a mano unos 100 comentarios en español, pasa AI_CLASSIFY por encima y compara. Si muchas etiquetas no coinciden, tienes dos salidas: escribir las categorías y la descripción en inglés con ejemplos en español, o dejar que un modelo más potente dentro de Cortex Agents juzgue cada comentario, con un coste mayor.
Además, la descripción de la tarea y las categorías cuentan como tokens en cada fila. Por eso el número real de tokens por fila es mayor que la longitud del comentario, y conviene medirlo con una muestra antes de lanzar la carga completa.
UPDATE voc.core.social_mentions
SET themes = AI_CLASSIFY(
body,
['lid_or_spill', 'battery', 'weak_on_ice', 'missing_part',
'breaks_quickly', 'hard_to_clean', 'general_negative', 'not_a_product_issue'],
{'output_mode': 'multi',
'task_description': 'Label only comments that report a problem with this blender. Price complaints, jokes and brand comparisons are not_a_product_issue.'}
):labels
WHERE themes IS NULL;Aplica la misma clasificación a la columna customer_comments de la tabla de devoluciones y guarda el resultado en return_themes. Así los dos lados usan los mismos temas, el mismo modelo y la misma descripción, y la comparación por tema tiene sentido. AI_SENTIMENT también puede puntuar cada comentario de negativo a positivo (documentación de AI_SENTIMENT). Aquí ayuda menos, porque la pregunta es qué problema hay, no cuánto enfado.
Prueba 2: qué devuelve una búsqueda en Reddit
Muchos equipos ven Reddit como el sitio de las opiniones sinceras, así que miramos si podía completar lo de TikTok. La llamada 5 usó reddit/search con «portable blender», ordenado por lo más reciente, y devolvió 14 publicaciones. La llamada 10 buscó «ninja blast» por MCP y devolvió 7 (API de datos de Reddit, API de búsqueda de Reddit). Esta capacidad busca siempre en el último mes y devuelve hasta 25 publicaciones por llamada. Nuestras 14 publicaciones solo cubrían del 2026-10-30 al 2026-11-05 (UTC), y las 7, del 3 al 5 de noviembre.
Leímos cada publicación. Ninguna de las 21 hablaba de si una batidora funciona bien. De las 14 de «portable blender», 10 eran ofertas, casi todas en comunidades de chollos como r/priceglitch, con títulos del tipo «Ninja Blast Max Portable Blender, Twist & Go, 22oz» más un color y un precio. Hubo ofertas el 2026-10-31, el 2026-11-01 y el 2026-11-05, y resúmenes diarios de ofertas de Amazon el 2026-11-02 y el 2026-11-03. Las otras 4 no tenían nada que ver: una persona preguntaba por un ThinkPad portátil y dos publicaciones de comunidades del programa 3D Blender preguntaban por portátiles.
| Búsqueda | Publicaciones | Ofertas | Sin relación | Opiniones del producto | Fechas (UTC) |
|---|---|---|---|---|---|
| portable blender (REST) | 14 | 10 | 4 | 0 | 2026-10-30 a 2026-11-05 |
| ninja blast (MCP) | 7 | 4 | 3 | 0 | 2026-11-03 a 2026-11-05 |
De las 7 de «ninja blast», 4 eran ofertas y 3 coincidían por casualidad: una hablaba de un videojuego y dos eran de una comunidad de la serie de animación Ninjago. Esto no quiere decir que Reddit no sirva. Quiere decir que una palabra corta ordenada por lo más reciente es la consulta equivocada. Para cargar Reddit en Snowflake, haz tres cambios.
Primero, juzga la relevancia solo por el título y exige que «blender» vaya detrás de portable, personal, smoothie o una marca; nuestra primera regla buscaba «blender» en el cuerpo y contó publicaciones de 3D como si fueran del producto. Segundo, guarda las ofertas como una categoría aparte, porque son datos útiles: cuántas veces aparece una batidora en comunidades de chollos en un mes, y a qué precio, puede ir junto a tu tabla de ventas para ver si una semana de oferta trae un pico de devoluciones. Tercero, las opiniones reales suelen estar en unas pocas comunidades, como las de batidos o comida para deportistas; usa reddit/comments en los hilos de esas comunidades en lugar de buscar en todo el sitio.
Prueba 3: las reseñas de Amazon devolvieron 503, y no se cobró nada
Los datos que más queríamos eran las reseñas de Amazon, porque reseñas y devoluciones vienen de la misma plataforma y de los mismos compradores. Pero nuestras cinco llamadas a amazon/reviews no devolvieron ninguna reseña (API de reseñas de Amazon). A las 00:17, 00:18 y 00:24 (hora de Singapur), tres productos distintos de Ninja y Hamilton Beach devolvieron 503 con el motivo access_blocked. Eso significa que las reseñas de ese producto no estaban disponibles temporalmente, no se cobró nada y la respuesta sugiere reintentar tras 900 segundos.
| Hora de Singapur | Producto | Estado HTTP | Motivo | Duración | Cargo |
|---|---|---|---|---|---|
| 00:17:41 | B0C2FF4JD1 | 503 | access_blocked | 60,12 s | 0 USD |
| 00:18:41 | B0CN3S2SW2 | 503 | access_blocked | 58,57 s | 0 USD |
| 00:19:47 | B09B8V1LZ3 | 200 | Resultado vacío, reembolsado | 67,25 s | 0 USD |
| 00:24:22 | B0D2YYHN1B | 503 | access_blocked | 19,48 s | 0 USD |
| 00:36:23 | B0C2FF4JD1 | 503 | access_blocked | 38,42 s | 0 USD |
A las 00:19 (hora de Singapur) probamos un producto más antiguo: devolvió 200 con 0 filas, y la llamada se reembolsó como resultado vacío. A las 00:36, 19 minutos después del primer intento, volvimos a llamar al primer producto y obtuvimos otro 503. Las cinco llamadas muestran charged_usd igual a 0. Lo contamos tal cual porque una tarea diaria en Snowflake se encontrará con lo mismo.
Con las reglas de EveryInfra, los objetivos no disponibles temporalmente o que piden iniciar sesión devuelven 503 con un motivo y una sugerencia de reintento. Nunca devuelven un 200 vacío que diga que no hay reseñas. Para el cargador, esa diferencia es clave. Un 503 significa «hoy no hay datos, prueba mañana», y un 200 vacío significa «aquí de verdad no hay nada». Si el procedimiento mezcla las dos cosas, la vista semántica mostrará días falsos «sin quejas» para algunos productos, y el agente sacará conclusiones equivocadas.
Guarda el estado HTTP y el motivo en la tabla jobs, despliega solo las respuestas con estado 200 y añade a la vista semántica una medida de «días sin datos», para que el agente diga qué días faltan. El catálogo también indica que amazon/reviews devuelve solo las reseñas destacadas que se ven en la página del producto: normalmente una docena, con un máximo de 100 por llamada, en 11 tiendas de Amazon. Incluso en un buen día, no son todas las reseñas, sino las que Amazon elige mostrar. Sirven para ver qué dicen las quejas más visibles, pero no para contarlas todas; para eso, tus datos de Seller Central y los comentarios del informe de devoluciones de FBA son más completos.
Pregunta al Cortex Agent: qué tema de queja sube con la tasa de devoluciones
Con las tablas listas, crea una vista semanal. Cada fila tiene un producto, un tema y una semana, con el número de menciones sociales, las unidades devueltas y las unidades vendidas. La tasa de devolución de un tema es el número de unidades devueltas por ese tema dividido entre las unidades vendidas esa semana.
CREATE OR REPLACE VIEW voc.core.theme_returns_weekly AS
WITH mentions AS (
SELECT s.product_key,
DATE_TRUNC('week', s.posted_at)::DATE AS week_start,
t.value::STRING AS theme,
COUNT(*) AS mentions,
SUM(1 + COALESCE(s.like_count, 0)) AS weighted_mentions
FROM voc.core.social_mentions s,
LATERAL FLATTEN(input => s.themes) t
WHERE t.value::STRING <> 'not_a_product_issue'
GROUP BY 1, 2, 3
),
returns AS (
SELECT pm.product_key,
DATE_TRUNC('week', f.return_date)::DATE AS week_start,
COALESCE(t.value::STRING, 'unclassified') AS theme,
SUM(f.quantity) AS returned_units
FROM voc.core.fba_returns f
JOIN (SELECT DISTINCT product_key, asin FROM voc.core.product_map) pm
ON pm.asin = f.asin,
LATERAL FLATTEN(input => f.return_themes, OUTER => TRUE) t
GROUP BY 1, 2, 3
),
sales AS (
SELECT pm.product_key,
DATE_TRUNC('week', d.sale_date)::DATE AS week_start,
SUM(d.units_ordered) AS units_sold
FROM voc.core.sales_daily d
JOIN (SELECT DISTINCT product_key, asin FROM voc.core.product_map) pm
ON pm.asin = d.asin
GROUP BY 1, 2
),
theme_weeks AS (
SELECT COALESCE(m.product_key, r.product_key) AS product_key,
COALESCE(m.week_start, r.week_start) AS week_start,
COALESCE(m.theme, r.theme) AS theme,
COALESCE(m.mentions, 0) AS mentions,
COALESCE(m.weighted_mentions, 0) AS weighted_mentions,
COALESCE(r.returned_units, 0) AS returned_units
FROM mentions m
FULL OUTER JOIN returns r
ON r.product_key = m.product_key
AND r.week_start = m.week_start
AND r.theme = m.theme
)
SELECT tw.product_key, tw.week_start, tw.theme,
tw.mentions, tw.weighted_mentions, tw.returned_units,
s.units_sold,
tw.returned_units / NULLIF(s.units_sold, 0) AS theme_return_rate
FROM theme_weeks tw
LEFT JOIN sales s
ON s.product_key = tw.product_key AND s.week_start = tw.week_start;Tres decisiones de esta vista evitan que se pierdan devoluciones. Primero, menciones y devoluciones se unen con un full outer join por producto, semana y tema, y las ventas se añaden después por producto y semana. Así, si en una semana las redes solo hablan de la tapa, las devoluciones por batería de esa semana siguen teniendo su propia fila. Segundo, OUTER => TRUE conserva las devoluciones sin comentario o sin tema, con la etiqueta unclassified. Tercero, un ASIN puede corresponder a varios SKU en product_map, así que la vista une con pares distintos de producto y ASIN; si no, devoluciones y ventas se contarían más de una vez. Un aviso: un comentario puede llevar dos temas, así que las filas por tema pueden sumar más unidades que las devueltas de verdad. Para la tasa total, suma fba_returns directamente en lugar de sumar filas por tema.
Después, crea una vista semántica encima para que Cortex Analyst sepa qué significa cada columna y cuáles son medidas (introducción a las vistas semánticas, CREATE SEMANTIC VIEW). Define al menos cuatro medidas: menciones del tema, menciones ponderadas por «me gusta», unidades devueltas por tema y tasa de devolución por tema. Las dimensiones son producto, tema y semana. Añade sinónimos en español, como «gotea», «se derrama» y «tapa» para lid_or_spill, porque son las palabras que tu equipo escribirá de verdad.
La especificación del agente es YAML. Lo mínimo es una herramienta Cortex Analyst sobre esta vista semántica; nosotros añadimos una herramienta personalizada que devuelve los comentarios con más «me gusta» de un producto y un tema. La estructura sigue CREATE AGENT. La documentación de Cortex Agents dice que los parámetros de una herramienta personalizada no pueden ser de tipo objeto, así que mantenlos simples (introducción a Cortex Agents).
models:
orchestration: claude-sonnet-5-5
orchestration:
budget:
seconds: 120
tokens: 40000
instructions:
orchestration: >
For questions about complaint themes and returns, use VocAnalyst on weekly data.
Compare each theme's mentions with the same week and the next 1 to 4 weeks of
theme_return_rate. Report weeks with missing review data. Never treat a missing
week as zero complaints.
response: >
Answer in the user's language. Give the theme, the weeks, both raw and
like-weighted mention counts, and the return rate change. Quote at most two
comments from TopComments, without author names.
sample_questions:
- question: "¿Qué tema de queja sube a la vez que la tasa de devoluciones?"
- question: "¿Las quejas sobre la tapa de la Ninja Blast siguieron a las devoluciones en las últimas cuatro semanas?"
tools:
- tool_spec:
type: cortex_analyst_text_to_sql
name: VocAnalyst
description: Weekly social complaint themes, returns and sales by product.
- tool_spec:
type: generic
name: TopComments
description: Returns the most liked comments for one product and one theme.
input_schema:
type: object
properties:
product_key: {type: string, description: Product key from product_map}
theme: {type: string, description: One theme label}
required: [product_key, theme]
tool_resources:
VocAnalyst:
semantic_view: voc.core.voc_returns
TopComments:
type: procedure
identifier: voc.core.top_comments
execution_environment:
type: warehouse
warehouse: voc_xs_wh«Subir a la vez» necesita un significado preciso. Las instrucciones piden al agente comparar la misma semana y las cuatro siguientes, y nuestros propios datos muestran por qué: las quejas y las devoluciones no ocurren al mismo tiempo. El vídeo comparativo se publicó el 2025-07-27, y sus 4 comentarios sobre fallos llegaron 6, 44, 245 y 245 días después. El vídeo de prueba se publicó el 2026-01-20; solo 2 de sus 13 comentarios sobre fallos llegaron la primera semana, y el resto se repartió entre marzo y septiembre. Los dos comentarios que mencionan una devolución son de marzo de 2026, uno 245 días después de su vídeo y otro 52 días después.
| Comentario (autor oculto) | Tema | Fecha | Días tras el vídeo | Me gusta |
|---|---|---|---|---|
| Pregunta si la tapa se abre por arriba | Tapa o derrame | 2026-01-20 | 0 | 79 |
| No uses el botón de la tapa, se rompe | Tapa o derrame | 2026-01-22 | 2 | 5 |
| Dice que todo el mundo la critica | Queja general | 2026-03-01 | 40 | 23 |
| La devolvió, no puede con fruta congelada | Sin fuerza con hielo | 2026-03-13 | 52 | 97 |
| La batería no da para un batido entero | Batería | 2026-03-14 | 53 | 9 |
| Las dos llegaron sin el tapón de la cuchilla | Falta una pieza | 2026-07-31 | 192 | 0 |
| Compró otra unidad para tener tapa de recambio | Tapa o derrame | 2026-09-12 | 235 | 0 |
Este gráfico cambia el diseño en Snowflake de dos maneras. Primero, nunca descargues un vídeo una sola vez. Una descarga solo en la primera semana habría perdido 3 comentarios sobre fallos del primer vídeo y 11 del segundo. Por eso la watchlist debe volver a descargar los mismos vídeos cada semana o cada mes, y el MERGE añade los comentarios nuevos. Segundo, cruzar quejas y devoluciones de la misma semana probablemente no mostrará nada. Los compradores usan el producto un tiempo antes de quejarse y devolverlo, así que deja que los datos encuentren el desfase en lugar de suponerlo.
También hay que ser honestos con el volumen. Dos vídeos dieron 17 comentarios sobre fallos en 14 meses, así que casi todas las semanas tienen cero. Una correlación con datos tan escasos no significa nada. Para que el agente tenga una base sólida, sigue entre 20 y 30 vídeos de prueba por producto, además de las reseñas de Amazon y los comentarios de devolución. Empieza por meses y pasa a semanas cuando haya datos suficientes. Este límite viene del volumen de datos, no de Snowflake, y cualquier herramienta lo tendría. Por eso las instrucciones piden al agente que diga qué semanas no tienen datos: un «hay muy pocos datos» honesto es mejor que una tendencia inventada a partir de tres comentarios.
Cuánto cuesta un mes: la API y Snowflake
Empecemos con un plan concreto y luego pongamos precio. Una marca sigue 20 ASIN y 20 vídeos de TikTok, y descarga sus reseñas o comentarios una vez al día. Busca 5 palabras clave en Reddit cada día y 5 en TikTok cada semana para encontrar vídeos nuevos. En 30 días son 1.370 llamadas a la API. El coste de la API usa los precios del catálogo leídos el 2026-11-06, así que es un precio real.
Cada línea de Snowflake es una estimación, y la tabla explica el método. Los precios salen de la tabla de consumo de servicios vigente desde el 2026-11-04 y del precio bajo demanda de la edición Standard en AWS US East: 2,00 USD por crédito de plataforma y 2,00 USD por crédito de IA a la tarifa global (tabla de consumo, precios, precios de Cortex AI).
| Concepto | Método | Al mes |
|---|---|---|
| API de EveryInfra | 600 amazon/reviews × 0,001389 USD + 600 tiktok/comments × 0,000556 + 150 reddit/search × 0,000556 + 20 tiktok/search × 0,000556 | 1,26 USD |
| Almacén esperando respuestas (síncrono, en serie) | Tiempos medidos: reseñas de Amazon 67,25 s (la más lenta de nuestras 5 llamadas, un resultado vacío; con los 19,48 a 60,12 s de las llamadas 503, esta línea queda entre 24,61 y 38,16 USD), comentarios de TikTok 52,3 s, Reddit 7,62 s, búsqueda de TikTok 3,78 s. Total 20,27 horas × 1 crédito por hora en XS × 2 USD | 40,54 USD |
| Almacén esperando (síncrono, 10 en paralelo) | Lo mismo, dividido entre 10 | 4,05 USD |
| Almacén (asíncrono, dos tareas) | Unos 46 envíos al día × 2 s, más 2 recogidas con el mínimo de 60 s, más 60 s de espera antes de la suspensión tras cada una de las 3 ejecuciones. Unos 392 s al día, 3,3 horas al mes | Unos 6,5 USD |
Etiquetas con AI_CLASSIFY | 10.000 comentarios × unos 150 tokens = 1,5 millones de tokens × 1,62 créditos de IA por millón × 2 USD | 4,86 USD |
| Preguntas al Cortex Agent (Sonnet 5.5) | 50 preguntas × 20.000 tokens de entrada y 1.500 de salida, a 1,30 de entrada y 6,50 de salida por millón | 3,58 USD |
| Preguntas al Cortex Agent (Haiku 5.5) | Lo mismo, a 0,065 de entrada y 0,325 de salida | 0,18 USD |
| SQL del agente en el almacén | 50 consultas × mínimo de 60 s × 2 USD por crédito y hora | 1,67 USD |
| Almacenamiento | 1 GB a 23 USD por TB al mes | Unos 0,02 USD |
La segunda fila es la que hay que mirar. La API cuesta 1,26 USD al mes. Pero si el procedimiento usa el código más sencillo, una llamada síncrona detrás de otra, el almacén funciona más de 20 horas al mes. Eso son unos 40,54 USD, 32 veces el coste de la API. Con 10 llamadas en paralelo o con el diseño asíncrono de dos tareas, esa línea baja a entre 4 y 7 USD.
En nuestra estimación, las llamadas en paralelo son lo más barato, pero tienes que gestionar hilos y tiempos de espera en Python. El diseño asíncrono cuesta dos o tres dólares más y, a cambio, ninguna petición se corta por esperar demasiado y una tarea fallida se repite sola al día siguiente. Preferimos el diseño asíncrono. En total, el diseño en serie cuesta unos 51,93 USD al mes y el diseño en paralelo, unos 15,44 USD. En la región de Singapur, el crédito Standard cuesta 2,50 USD, así que multiplica por 1,25 las líneas del almacén. En la edición Enterprise, el precio bajo demanda en US East es de 3,00 USD por crédito, con la misma proporción.
| Diseño de carga | Total al mes (estimado, con Sonnet 5.5) |
|---|---|
| Síncrono en serie | Unos 51,93 USD |
| Síncrono, 10 en paralelo | Unos 15,44 USD |
| Asíncrono, dos tareas | Unos 17,90 USD |
El modelo es la segunda palanca. La orquestación de Cortex Agent se cobra por tokens, y los precios de la tabla de consumo varían mucho. Para las mismas 50 preguntas, Sonnet 5.5 cuesta unos 3,58 USD y Haiku 5.5 unos 0,18 USD. Opus 5.5 cuesta 2,60 por millón de tokens de entrada y 13,00 por millón de salida, el doble que Sonnet. La tabla recoge los precios que importan en este artículo, en créditos de IA por millón de tokens. Las funciones de IA cobran por el total de tokens, sin separar entrada y salida.
| Modelo o función | Entrada | Salida | Uso en este artículo |
|---|---|---|---|
| claude-sonnet-5-5 (CoWork, Agents) | 1,30 | 6,50 | Orquestación, valor por defecto de la tabla de costes |
| claude-haiku-5-5 (CoWork, Agents) | 0,065 | 0,325 | Orquestación barata |
| claude-opus-5-5 (CoWork, Agents) | 2,60 | 13,00 | No hace falta para informes rutinarios |
| openai-gpt-6.1-sol (CoWork, Agents) | 1,30 | 6,50 | Mismo precio que Sonnet |
AI_CLASSIFY | 1,62 (total) | Temas de comentarios y notas de devolución | |
AI_SENTIMENT | 1,60 (total) | Puntuación de sentimiento, opcional | |
AI_AGG | 1,85 (total) | Resumen de textos por tema, opcional |
Los 20.000 tokens de entrada por pregunta son una suposición nuestra: incluyen la vista semántica, las instrucciones y una o dos rondas de resultados de herramientas. Si el agente llama muchas veces a herramientas en una conversación, o lee comentarios largos, el número real sube. Después del lanzamiento, la vista CORTEX_AGENT_USAGE_HISTORY da los números reales. Las preguntas de CoWork aparecen en SNOWFLAKE_COWORK_USAGE_HISTORY, y ninguna de las dos vistas incluye las peticiones de la otra (vista de uso de Cortex Agent, vista de uso de CoWork).
Cada petición de salida del procedimiento aparece en la vista EXTERNAL_ACCESS_HISTORY, que puede llevar hasta 3 horas de retraso (historial de acceso externo). Crúzala por hora con los valores charged_usd de voc.raw.jobs y podrás comprobar cada mes las llamadas y el gasto de los dos lados. Snowflake también permite fijar presupuestos de recursos por agente y cuotas por usuario (presupuestos de recursos de Cortex Agents). En EveryInfra, da a esta clave su propio límite de llamadas por minuto. Con un límite en cada lado, una tarea rota no puede hacer decenas de miles de llamadas en una noche.
Hay una línea de la tabla de consumo que se malinterpreta con facilidad. «Cortex Tools» cobra 8 créditos de IA por cada 1.000 llamadas a herramientas cuando agentes de terceros acceden a puntos fuera de Snowflake, y nada cuando acceden a puntos de Snowflake. En nuestro diseño, quien llama a la API de EveryInfra es un procedimiento de Snowflake, no un agente; el agente solo lee tablas de Snowflake, así que no incluimos esa línea. Si cambias a conectores MCP y dejas que el agente llame a herramientas externas en las conversaciones, la documentación no dice si esta línea se aplica ni cómo se cuenta. Pregunta a tu equipo de cuenta de Snowflake antes de lanzar. Una cuenta nueva puede probar todo con la prueba gratuita: la página de precios indica 30 días y 400 USD en créditos.
Un correo semanal con las snowflake cowork automations
Con los datos y el agente listos, el último paso es que la respuesta llegue a tiempo a quien la necesita. Las Automations de CoWork hacen justo eso. Programas una pregunta, por ejemplo cada lunes a las 09:00: «¿Qué tema de queja subió con la tasa de devoluciones en las últimas cuatro semanas?». El resultado llega por correo (documentación de Automations). Antes conviene conocer los límites que indica la documentación.
| Límite documentado | Valor | Efecto en un informe semanal de quejas |
|---|---|---|
| Frecuencia máxima | Una vez por hora | Ninguno, el informe es semanal |
| Entrega | Solo correo, a direcciones verificadas | Cada destinatario verifica su correo antes |
| Historial | 60 días | Guarda las respuestas en una tabla si necesitas más |
| Permisos | Los de quien la crea | El correo puede incluir cualquier tabla que esa persona pueda leer |
| EXECUTE AGENT TASK | Concedido a PUBLIC por defecto | Retíralo y concédelo por rol si hace falta |
Ninguno de estos límites bloquea nuestro caso. Las quejas y las devoluciones se miran por semanas, así que una ejecución por hora sobra. Que la entrega sea solo por correo impide publicar directamente en Slack, aunque la nota de prensa dice que Snowflake for Slack ya está en vista previa pública (nota de prensa de Expedition 2026). Lo que de verdad hay que vigilar son los permisos. Como EXECUTE AGENT TASK está concedido a PUBLIC, cualquier persona de la cuenta puede crearse una automatización, y esa automatización corre con sus permisos. Si alguien puede leer todas las ventas, puede enviarlas a cualquier dirección que escriba. Si eso no es aceptable, un administrador debe retirar el privilegio a PUBLIC y concederlo por rol.
Límites de esta prueba
Todo lo de Snowflake es un ejemplo de configuración. Aquí no tenemos una cuenta de Snowflake y no ejecutamos este SQL, estos procedimientos ni esta especificación de agente. La sintaxis sigue docs.snowflake.com tal como lo leímos el 2026-11-06. Snowflake acaba de publicar una versión grande este mes, así que la sintaxis y los límites pueden cambiar. Ejecuta cada bloque en tu propia cuenta antes de depender de él.
En la tabla de costes, solo la API es un precio real. Cada línea de Snowflake es una estimación a partir de precios públicos y de nuestras suposiciones. Las dos mayores incógnitas son el número real de tokens por comentario clasificado y el número real de tokens por pregunta al agente. Para comentarios en español, añade una tercera: cuánto empeora AI_CLASSIFY fuera del inglés.
En el lado de los datos, esta vez ninguna de las 5 llamadas a reseñas de Amazon devolvió reseñas. Por eso el análisis de temas usa solo 273 comentarios de TikTok, en inglés. Una sola persona los etiquetó a mano con la regla de arriba y nadie revisó las etiquetas una segunda vez. Los 17 comentarios sobre fallos bastan para decir que la tapa y los derrames merecen atención, pero no para estimar la tasa real de fallos del producto. Este artículo solo da la estructura de las tablas de ventas y devoluciones, sin números reales ni inventados. La respuesta a «qué tema de queja sube con las devoluciones» llegará con tus propios datos.
Un último límite tiene que ver con EveryInfra. Hoy nuestro servidor MCP no se puede añadir como conector de Snowflake, por las razones de arriba. El camino del acceso externo no depende de eso y es el que recomendamos. Pero si tu equipo quiere una conexión de un clic dentro de CoWork, todavía no es posible. Volveremos a comprobar este estado cuando se publique el artículo.
En qué se diferencia de nuestros artículos anteriores
El blog de EveryInfra tiene varios artículos sobre leer reseñas con herramientas de IA, y cada uno responde a una pregunta distinta. En tareas programadas de Claude Cowork, Claude Cowork prepara cada semana una tabla de precios y reseñas de la competencia. En Claude Managed Agents para revisar reseñas cada noche, un agente alojado lee cada noche las reseñas nuevas de tres plataformas. Qwen Agent con MCP añade un servidor MCP propio a un agente de Bailian para comparar precios. Y DeepSeek V4 en Claude Code para limpiar reseñas limpia y etiqueta 695 reseñas con un modelo barato y calcula el coste.
| Artículo | Dónde acaban los datos | Pregunta que responde |
|---|---|---|
| Tareas programadas de Claude Cowork | Una tabla semanal en un archivo | Qué cambió en precios y reseñas de la competencia |
| Claude Managed Agents cada noche | Un resumen del agente | Qué reseñas malas llegaron anoche |
| Qwen Agent con MCP | La conversación del agente | Dónde está más barato un producto |
| DeepSeek V4 en Claude Code | Un archivo de reseñas etiquetadas | Cuánto cuesta limpiar reseñas con un modelo barato |
| Este artículo | Tablas de Snowflake junto a ventas y devoluciones | Qué queja nos cuesta dinero |
Este artículo se diferencia en dónde acaban los datos y junto a qué. En los anteriores, las reseñas se quedan dentro de un agente o de un archivo, y la pregunta es «de qué se queja la gente últimamente». Aquí, las reseñas entran en el almacén de datos de la empresa, con los mismos permisos y las mismas definiciones de negocio que las ventas y las devoluciones. La pregunta pasa a ser «qué queja nos cuesta dinero de verdad». El precio es una factura más de almacén y un conjunto de tablas, unos quince dólares al mes por marca según el cálculo de arriba. Si tus ventas y devoluciones aún no están en Snowflake, los enfoques anteriores son más ligeros. Si ya están ahí, este montaje permite que las quejas se crucen con los números financieros por primera vez.
Cambios recientes
El 2026-11-04 entró en vigor la nueva tabla de consumo de servicios de Snowflake. Todos los precios de modelos, los de las funciones de IA y la línea «Cortex Tools» de este artículo vienen de esa versión (tabla de consumo). Ese mismo día, una nota de versión añadió la ejecución en segundo plano al servidor MCP gestionado por Snowflake. Las herramientas CORTEX_AGENT_RUN y CODING_AGENT ganaron un argumento background que devuelve un identificador al instante. Los servidores con esas herramientas reciben automáticamente tres herramientas más: ASYNC_AGENT_RUN_STATUS, ASYNC_AGENT_RUN_CANCEL y AGENT_RUN_RESULT. Un nuevo parámetro content_cel_filter permite pedir primero un esquema y leer después solo las partes necesarias (nota de versión del 4 de noviembre de 2026).
| Fecha | Cambio | Fuente |
|---|---|---|
| 2026-11-04 | Ejecución en segundo plano en el servidor MCP gestionado | Nota de versión |
| 2026-11-04 | Nueva tabla de consumo de servicios | Tabla de consumo |
Preguntas frecuentes sobre snowflake cortex agents mcp y snowflake cowork
¿El snowflake cortex agents mcp server es lo mismo que un conector MCP?
No, van en direcciones opuestas. Fuente: sugerencia de búsqueda de Google «snowflake cortex agents mcp server». El servidor MCP gestionado por Snowflake convierte a Snowflake en servidor: clientes externos llaman por MCP a tus agentes, a Cortex Search, a Cortex Analyst y a SQL. Sus tipos de herramienta son CORTEX_AGENT_RUN, CODING_AGENT, CORTEX_SEARCH_SERVICE_QUERY, CORTEX_ANALYST_MESSAGE, SYSTEM_EXECUTE_SQL y GENERIC, y la documentación recomienda OAuth en lugar de tokens fijos (servidor MCP gestionado por Snowflake, CREATE MCP SERVER).
Un conector MCP convierte a Snowflake en cliente, para que Cortex Agents y CoWork llamen a un servidor MCP externo, solo con OAuth (documentación de conectores). Este artículo necesita la segunda dirección y, al final, usa acceso externo en lugar de MCP.
¿En qué se diferencian snowflake cowork y CoCo (Cortex Code)?
Fuente: sugerencia de búsqueda de Google «snowflake cowork vs coco». Según la nota de prensa del 2026-11-03, CoWork es para equipos de negocio, que preguntan en lenguaje natural en ai.snowflake.com, abren paneles y programan automatizaciones. CoCo es para desarrolladores e ingenieros de datos, que lo usan para escribir código y crear objetos de datos; un analista también puede describirle un panel para crearlo (nota de prensa de Expedition 2026, documentación de Cortex Code). En este artículo, los ingenieros de datos crean las tablas, los procedimientos y la vista semántica con CoCo o con SQL, y el equipo de negocio pregunta y recibe el informe semanal en CoWork.
¿Puede Cortex Agents llamar a una API externa con una clave en lugar de OAuth?
Sí, pero no mediante un conector MCP. Fuente: la duda que plantea la línea «solo OAuth» de la documentación de conectores de Snowflake. Guarda la clave en un secreto de tipo GENERIC_STRING con una integración de acceso externo, escribe un procedimiento en Python que llame a la API y añádelo al agente como herramienta personalizada. Cuando el agente lo llama, el procedimiento corre en un almacén y se cobra por tiempo de almacén (acceso a redes externas, introducción a Cortex Agents). Preferimos una tarea programada que cargue tablas, para que ninguna pregunta tenga que esperar a la API.
¿Funciona AI_CLASSIFY con comentarios en español?
Funciona, pero compruébalo antes. Fuente: las notas de uso de la documentación de AI_CLASSIFY de Snowflake. La documentación dice que el texto en inglés da los mejores resultados y que otros idiomas pueden ir peor (documentación de AI_CLASSIFY). Etiqueta a mano unos 100 comentarios en español y compara. Donde las categorías no coincidan, haz más concretas la descripción y los ejemplos, o deja que un modelo más potente de Cortex Agents juzgue cada comentario, con un coste mayor.
¿EveryInfra cobra las llamadas que fallan o vuelven vacías?
No. Fuente: las respuestas de nuestras 12 llamadas reales. Los parámetros erróneos, los objetivos no disponibles temporalmente (estado 503) y los resultados vacíos no se cobran, y cada respuesta cobrada indica el importe exacto. Las 6 llamadas de este artículo que no devolvieron datos muestran charged_usd igual a 0. En modo asíncrono el cargo se hace al enviar, y una tarea que falla después se reembolsa sobre ese mismo cargo.
Cómo empezar
- Regístrate en EveryInfra y sigue el inicio rápido. Crea una clave de API solo para Snowflake, con su propio límite por minuto.
- Llama una vez con
curla cada URL de producto, URL de vídeo y palabra clave. Revisa los campos y el número de filas antes de añadirlos a la tablawatchlist. - En Snowflake, crea la regla de red, el secreto y la integración de acceso externo de los ejemplos. Después crea los dos procedimientos y las dos tareas.
- Tras unos días de cargas, crea la vista semanal y la vista semántica. Etiqueta comentarios y notas de devolución con los mismos temas de
AI_CLASSIFY. - Crea el Cortex Agent y hazle algunas preguntas en CoWork. Cuando indique bien las semanas sin datos, programa la automatización semanal.
Todas las capacidades de datos están en el catálogo de EveryInfra. La configuración del MCP remoto está en la página del servidor MCP y los precios por llamada, en la página de precios.
Referencias
- Nota de prensa de Snowflake, Expedition 2026: CoCo y CoWork, leída el 2026-11-06: https://www.snowflake.com/en/news/press-releases/expedition-2026-coco-cowork/
- Nota de prensa de Snowflake, Business Ontology y Cortex AI Gateway, leída el 2026-11-06: https://www.snowflake.com/en/news/press-releases/expedition-2026-business-ontology-ai-gateway/
- Blog de Snowflake, agentes de IA, datos gobernados y contexto de negocio, leído el 2026-11-06: https://www.snowflake.com/en/blog/ai-agents-governed-data-business-context/
- Blog de Snowflake, Snowflake CoWork añade Profiles, Dashboards y Automations, leído el 2026-11-06: https://www.snowflake.com/en/blog/snowflake-cowork-profiles-automations-dashboards
- Blog de Snowflake, agentes en la nube y automatizaciones de CoCo, leído el 2026-11-06: https://www.snowflake.com/en/blog/snowflake-coco-cloud-agents-automations/
- Página de producto de Snowflake CoWork, leída el 2026-11-06: https://www.snowflake.com/en/product/snowflake-cowork/
- Opciones de precios de Snowflake, leídas el 2026-11-06: https://www.snowflake.com/en/pricing-options/
- Tabla de consumo de servicios de Snowflake, vigente desde el 2026-11-04, leída el 2026-11-06: https://www.snowflake.com/legal-files/CreditConsumptionTable.pdf
- Documentación de Snowflake, conectores MCP de Cortex Agents, leída el 2026-11-06: https://docs.snowflake.com/en/user-guide/snowflake-cortex/cortex-agents-mcp-connectors
- Documentación de Snowflake, conectores MCP, sección de límites, leída el 2026-11-06: https://docs.snowflake.com/en/user-guide/snowflake-cortex/cortex-agents-mcp-connectors#limitations
- Documentación de Snowflake, Cortex Agents, leída el 2026-11-06: https://docs.snowflake.com/en/user-guide/snowflake-cortex/cortex-agents
- Documentación de Snowflake, crear y gestionar agentes, leída el 2026-11-06: https://docs.snowflake.com/en/user-guide/snowflake-cortex/cortex-agents-manage
- Documentación de Snowflake, CREATE AGENT, leída el 2026-11-06: https://docs.snowflake.com/en/sql-reference/sql/create-agent
- Documentación de Snowflake, API Run de Cortex Agents, leída el 2026-11-06: https://docs.snowflake.com/en/user-guide/snowflake-cortex/cortex-agents-run
- Documentación de Snowflake, presupuestos de recursos de Cortex Agents, leída el 2026-11-06: https://docs.snowflake.com/en/user-guide/snowflake-cortex/cortex-agents-resource-budgets
- Documentación de Snowflake, herramienta de ejecución de código, leída el 2026-11-06: https://docs.snowflake.com/en/user-guide/snowflake-cortex/cortex-agents-code-execution-tool
- Documentación de Snowflake, servidor MCP gestionado por Snowflake, leída el 2026-11-06: https://docs.snowflake.com/en/user-guide/snowflake-cortex/cortex-agents-mcp
- Documentación de Snowflake, CREATE MCP SERVER, leída el 2026-11-06: https://docs.snowflake.com/en/sql-reference/sql/create-mcp-server
- Nota de versión de Snowflake del 4 de noviembre de 2026, ejecuciones en segundo plano y herramientas auxiliares, leída el 2026-11-06: https://docs.snowflake.com/en/release-notes/2026/other/2026-11-04-mcp-async-agent-tools
- Documentación de Snowflake, aplicaciones y servidores MCP personalizados en Cortex AI Gateway, leída el 2026-11-06: https://docs.snowflake.com/en/user-guide/snowflake-cortex/cortex-ai-gateway/tools/admin-custom-apps
- Documentación de Snowflake, SDK de agentes de Cortex Code: MCP y herramientas personalizadas, leída el 2026-11-06: https://docs.snowflake.com/en/user-guide/cortex-code-agent-sdk/mcp-custom-tools
- Documentación de Snowflake, Cortex Code, leída el 2026-11-06: https://docs.snowflake.com/en/user-guide/cortex-code/cortex-code
- Documentación de Snowflake, Snowflake CoWork, leída el 2026-11-06: https://docs.snowflake.com/en/user-guide/snowflake-cortex/snowflake-cowork
- Documentación de Snowflake, Automations de CoWork, leída el 2026-11-06: https://docs.snowflake.com/en/user-guide/snowflake-cortex/snowflake-cowork/automations
- Documentación de Snowflake, precios de Cortex AI, leída el 2026-11-06: https://docs.snowflake.com/en/user-guide/snowflake-cortex/pricing
- Documentación de Snowflake, funciones de Cortex AI, leída el 2026-11-06: https://docs.snowflake.com/en/user-guide/snowflake-cortex/aisql
- Documentación de Snowflake, AI_CLASSIFY, leída el 2026-11-06: https://docs.snowflake.com/en/sql-reference/functions/ai_classify
- Documentación de Snowflake, AI_SENTIMENT, leída el 2026-11-06: https://docs.snowflake.com/en/sql-reference/functions/ai_sentiment
- Documentación de Snowflake, introducción a las vistas semánticas, leída el 2026-11-06: https://docs.snowflake.com/en/user-guide/views-semantic/overview
- Documentación de Snowflake, CREATE SEMANTIC VIEW, leída el 2026-11-06: https://docs.snowflake.com/en/sql-reference/sql/create-semantic-view
- Documentación de Snowflake, introducción al acceso a redes externas, leída el 2026-11-06: https://docs.snowflake.com/en/developer-guide/external-network-access/external-network-access-overview
- Documentación de Snowflake, crear y usar una integración de acceso externo, leída el 2026-11-06: https://docs.snowflake.com/en/developer-guide/external-network-access/creating-using-external-network-access
- Documentación de Snowflake, ejemplos de acceso a redes externas, leída el 2026-11-06: https://docs.snowflake.com/en/developer-guide/external-network-access/external-network-access-examples
- Documentación de Snowflake, CREATE NETWORK RULE, leída el 2026-11-06: https://docs.snowflake.com/en/sql-reference/sql/create-network-rule
- Documentación de Snowflake, CREATE SECRET, leída el 2026-11-06: https://docs.snowflake.com/en/sql-reference/sql/create-secret
- Documentación de Snowflake, CREATE EXTERNAL ACCESS INTEGRATION, leída el 2026-11-06: https://docs.snowflake.com/en/sql-reference/sql/create-external-access-integration
- Documentación de Snowflake, procedimientos almacenados en Python, leída el 2026-11-06: https://docs.snowflake.com/en/developer-guide/stored-procedure/python/procedure-python-overview
- Documentación de Snowflake, CREATE TASK, leída el 2026-11-06: https://docs.snowflake.com/en/sql-reference/sql/create-task
- Documentación de Snowflake, introducción a las tareas, leída el 2026-11-06: https://docs.snowflake.com/en/user-guide/tasks-intro
- Documentación de Snowflake, Snowpipe, leída el 2026-11-06: https://docs.snowflake.com/en/user-guide/data-load-snowpipe-intro
- Documentación de Snowflake, introducción a los almacenes, leída el 2026-11-06: https://docs.snowflake.com/en/user-guide/warehouses-overview
- Documentación de Snowflake, coste de cómputo, leída el 2026-11-06: https://docs.snowflake.com/en/user-guide/cost-understanding-compute
- Documentación de Snowflake, vista CORTEX_AGENT_USAGE_HISTORY, leída el 2026-11-06: https://docs.snowflake.com/en/sql-reference/account-usage/cortex_agent_usage_history
- Documentación de Snowflake, vista SNOWFLAKE_COWORK_USAGE_HISTORY, leída el 2026-11-06: https://docs.snowflake.com/en/sql-reference/account-usage/snowflake_cowork_usage_history_view
- Documentación de Snowflake, vista EXTERNAL_ACCESS_HISTORY, leída el 2026-11-06: https://docs.snowflake.com/en/sql-reference/account-usage/external_access_history
- Especificación MCP, autorización, versión 2025-06-18, leída el 2026-11-06: https://modelcontextprotocol.io/specification/2025-06-18/basic/authorization
- IETF RFC 9728, OAuth 2.0 Protected Resource Metadata, leído el 2026-11-06: https://datatracker.ietf.org/doc/html/rfc9728
- IETF RFC 8414, OAuth 2.0 Authorization Server Metadata, leído el 2026-11-06: https://datatracker.ietf.org/doc/html/rfc8414
- IETF RFC 7591, OAuth 2.0 Dynamic Client Registration Protocol, leído el 2026-11-06: https://datatracker.ietf.org/doc/html/rfc7591
- Documentación de Amazon SP-API, tipos de informe de FBA, leída el 2026-11-06: https://developer-docs.amazon/sp-api/docs/report-type-values-fba
- National Retail Federation, devoluciones de casi 850.000 millones de dólares en 2025, leída el 2026-11-06: https://nrf.com/media-center/press-releases/consumers-expected-to-return-nearly-850-billion-in-merchandise-in-2025
- Analytics India Magazine, Snowflake presenta Business Ontology y Cortex AI Gateway, leída el 2026-11-06: https://analyticsindiamag.com/ai-news/snowflake-introduces-business-ontology-cortex-ai-gateway-to-bring-ai-agents-into-enterprise-workflows
- Catálogo de capacidades de EveryInfra, GET /api/v1/social/catalog, leído el 2026-11-06: https://api.everyinfra.com/api/v1/social/catalog
- Dirección del MCP remoto de EveryInfra, probada el 2026-11-06: https://api.everyinfra.com/mcp
- Metadatos de recurso protegido de la dirección MCP completa de EveryInfra, probados el 2026-11-06: https://api.everyinfra.com/.well-known/oauth-protected-resource/mcp/all
Referencia BL-97