AdLens

Tus números de AdMob, sin la consola de AdMob. Un servidor MCP rápido para que tu asistente de IA pueda consultar los mismos datos en vivo.

Servidor MCP alojado

npx add-mcp 'https://adlens.moreproductive.in/mcp'

Se instala en Claude Code, Codex, Cursor y más

Documentación

AdLens

Tus números de AdMob, sin la consola de AdMob.
Un panel de análisis rápido de AdMob, más un servidor MCP para que tu asistente de IA pueda consultar los mismos datos en vivo.

App en vivo · Configuración MCP · Autoalojamiento · Problemas

Free Read-only AdMob access MCP: Streamable HTTP License: MIT

Demo: asking Claude a question and getting live AdMob answers through the AdLens MCP server
Haz una pregunta. Claude llama a AdLens. Respuestas en vivo de AdMob.


¿Qué es AdLens?

La consola de AdMob te muestra totales. AdLens te muestra las causas.

Conecta tu cuenta de AdMob una vez (solo lectura) y obtienes:

  1. Un panel web rápido para ingresos, impresiones, eCPM, mediación y desgloses por país.
  2. Un servidor MCP para que Claude, Cursor, Codex y otros clientes de IA puedan responder preguntas a partir de los mismos datos en vivo, como "¿Qué formato de anuncio tiene el mejor eCPM este mes?"

Es gratuito, de solo lectura y no almacena ninguno de tus datos de informes. Puedes usar la versión alojada o ejecutar la tuya propia.

Características

Panel

  • En vivo, no sincronizado: se obtiene de la API de AdMob cuando abres una página.
  • Hoy de un vistazo: hoy, ayer, últimos 7 días y este mes, con impresiones y eCPM.
  • Comparaciones de períodos: cada KPI muestra su cambio frente al período anterior.
  • Desgloses ordenables: por día, app, unidad de anuncio, formato, fuente de mediación o país.
  • Análisis profundos por app con la misma profundidad, más temas oscuro y claro.

AdLens dashboard showing revenue, eCPM and country breakdowns
El panel de AdLens (datos de muestra).

Servidor MCP

Cinco herramientas de solo lectura que cualquier cliente MCP puede llamar:

HerramientaQué hace
account_overviewLista tus conexiones y apps (id, nombre, plataforma, nombre del paquete)
revenue_summaryTotales más series diarias o semanales, usando ajustes predefinidos o fechas explícitas
breakdownIngresos por app, unidad de anuncio, formato, país, fuente de anuncios (mediación) o fecha
top_moversMovimientos período a período, con el período anterior elegido automáticamente para ajustes predefinidos
list_ad_unitsTu inventario de unidades de anuncio

Ejemplos de indicaciones para probar:

  • "Resumen de ingresos de los últimos 30 días"
  • "Principales movimientos por país, esta semana vs la anterior"
  • "Desglosa los ingresos de mediación de mi app principal"
  • "¿Qué formato de anuncio tiene el mejor eCPM este mes?"

Primeros pasos (alojado)

La configuración toma alrededor de un minuto.

  1. Inicia sesión en adlens.moreproductive.in con un código de un solo uso por correo o con Google. Una contraseña es opcional.
  2. Conecta AdMob. Apruebas una pantalla de consentimiento de OAuth de Google con el alcance admob.readonly.
  3. Úsalo a tu manera. Abre el panel o genera una clave de API y conecta tu cliente de IA (abajo).

Conecta tu asistente de IA (MCP)

Genera una clave de API en la página de Claves de API del panel. Las claves se ven como ak_live_... y se muestran una sola vez, así que copia la tuya de inmediato. Luego agrega AdLens a tu cliente.

El endpoint de MCP es:

https://adlens.moreproductive.in/mcp

Si autoalojas, reemplaza el dominio con el tuyo. AdLens es un servidor MCP estándar de HTTP transmisible autenticado con un token Bearer, por lo que cualquier cliente que admita una URL remota con encabezados personalizados funcionará.

Claude Code
claude mcp add --transport http adlens https://adlens.moreproductive.in/mcp \
  --header "Authorization: Bearer ak_live_..."

O agrégalo a .mcp.json:

{
  "mcpServers": {
    "adlens": {
      "type": "http",
      "url": "https://adlens.moreproductive.in/mcp",
      "headers": { "Authorization": "Bearer ak_live_..." }
    }
  }
}
Claude Desktop

El archivo de configuración de Claude Desktop no tiene soporte nativo para URL + encabezado, así que conéctalo con mcp-remote.

Edita claude_desktop_config.json:

  • macOS: ~/Library/Application Support/Claude/
  • Windows: %APPDATA%\Claude\
  • Linux: ~/.config/Claude/
{
  "mcpServers": {
    "adlens": {
      "command": "npx",
      "args": [
        "-y", "mcp-remote",
        "https://adlens.moreproductive.in/mcp",
        "--header", "Authorization: Bearer ak_live_..."
      ]
    }
  }
}

En Windows, usa npx.cmd en lugar de npx como comando:

{
  "mcpServers": {
    "adlens": {
      "command": "npx.cmd",
      "args": [
        "-y", "mcp-remote",
        "https://adlens.moreproductive.in/mcp",
        "--header", "Authorization: Bearer ak_live_..."
      ]
    }
  }
}
Codex

En ~/.codex/config.toml (Windows: %USERPROFILE%\.codex\config.toml):

[mcp_servers.adlens]
url = "https://adlens.moreproductive.in/mcp"
http_headers = { "Authorization" = "Bearer ak_live_..." }
Cursor, VS Code, Windsurf y otros clientes

Para Cursor, edita ~/.cursor/mcp.json (Windows: %USERPROFILE%\.cursor\mcp.json):

{
  "mcpServers": {
    "adlens": {
      "url": "https://adlens.moreproductive.in/mcp",
      "headers": { "Authorization": "Bearer ak_live_..." }
    }
  }
}

Para clientes solo stdio, usa el puente mcp-remote que se muestra en la sección de Claude Desktop.

Antigravity

En ~/.gemini/antigravity/mcp_config.json (Windows: %USERPROFILE%\.gemini\antigravity\mcp_config.json), o a través del panel de MCP Store → Administrar servidores MCP → Ver configuración sin procesar:

{
  "mcpServers": {
    "adlens": {
      "serverUrl": "https://adlens.moreproductive.in/mcp",
      "headers": { "Authorization": "Bearer ak_live_..." }
    }
  }
}
OpenCode

En opencode.json (proyecto) o ~/.config/opencode/opencode.json. Esta ruta es la misma en Windows (%USERPROFILE%\.config\opencode\opencode.json), no %APPDATA%. Configurar oauth: false hace que OpenCode use tu clave Bearer en lugar de intentar el inicio de sesión OAuth primero.

{
  "$schema": "https://opencode.ai/config.json",
  "mcp": {
    "adlens": {
      "type": "remote",
      "url": "https://adlens.moreproductive.in/mcp",
      "enabled": true,
      "oauth": false,
      "headers": { "Authorization": "Bearer ak_live_..." },
      "timeout": 30000
    }
  }
}

Consejo: para probar el endpoint sin un cliente de IA, ejecuta el Inspector MCP: npx @modelcontextprotocol/inspector

Autoalojamiento

AdLens es multiinquilino por diseño y fácil de ejecutar tú mismo. Necesitas:

  • Node.js (LTS) y pnpm, o solo Docker
  • Una base de datos Postgres (el archivo Docker Compose incluido inicia una)
  • Un proyecto MojAuth para el inicio de sesión (OTP por correo + Google). Necesitarás su clave de API.
  • Un cliente OAuth de Google Cloud con la API de AdMob habilitada y el alcance admob.readonly

1. Clona y configura

git clone https://github.com/ys-pro-duction/AdLens.git
cd AdLens
cp .env.example .env   # then fill in the values below

Genera los secretos aleatorios con:

openssl rand -hex 32
VariableRequeridaDescripción
APP_URLsíURL pública de tu instancia (usa tu dominio https en producción)
DATABASE_URLsíCadena de conexión de Postgres
MOJOAUTH_API_KEYsíClave del proyecto MojAuth (OTP por correo + inicio de sesión con Google)
SESSION_SECRETsíSecreto aleatorio usado para firmar cookies de sesión
GOOGLE_CLIENT_ID / GOOGLE_CLIENT_SECRETsíCliente OAuth de Google para conectar AdMob
ENCRYPTION_KEYsíClave hexadecimal de 32 bytes usada para cifrar tokens de actualización en reposo
OAUTH_STATE_SECRETnoSecreto separado para firmar el estado de OAuth
TRUST_PROXYnoConfigúralo en 1 cuando se ejecute detrás de nginx para que los límites de velocidad vean las IP reales de los clientes
HOSTnoDirección de enlace. Usa 127.0.0.1 detrás de un proxy inverso
MOJOAUTH_AUDIENCEnoVerificación opcional de audiencia para tokens de MojAuth
MOJOAUTH_ISSUERSnoAnula los emisores de tokens de MojAuth permitidos

.env.example se mantiene actualizado y tiene la lista completa anotada.

En tu cliente OAuth de Google Cloud, registra <APP_URL>/api/admob/callback como URI de redirección autorizado. En tu panel de MojAuth, registra la URL de devolución de llamada que te muestra.

2a. Ejecuta con Docker (todo)

docker compose up --build

2b. Ejecuta localmente para desarrollo

pnpm install
docker compose up -d db   # Postgres only
pnpm db:migrate
pnpm dev                  # API on :3000, web on :5173

3. Producción

Compila desde la raíz del repositorio (compilar un solo paquete puede dejar un packages/db/dist obsoleto):

git pull && pnpm install && pnpm db:migrate && pnpm build

En producción, la API sirve la aplicación web compilada (apps/web/dist), por lo que hay un solo proceso para ejecutar. Ejecútalo bajo un administrador de procesos de tu elección (la instancia alojada usa pm2, con Postgres en Docker).

Detrás de nginx (o cualquier proxy inverso):

  • Configura APP_URL a tu dominio https
  • Configura TRUST_PROXY=1
  • Vincula la app a localhost con HOST=127.0.0.1

Nota: los límites de velocidad se mantienen en memoria por proceso, por lo que AdLens está diseñado para ejecutarse como un solo proceso. Si se expone directamente (sin proxy), deja TRUST_PROXY sin configurar, porque X-Forwarded-For puede ser falsificado.

Límites de uso justo

AdLens es gratuito, sin planes ni facturación. Los límites de velocidad por IP protegen el servicio:

EndpointLímite
API del panel (/api)300 solicitudes / minuto
Servidor MCP (/mcp)15 solicitudes / minuto

Si autoalojas, estos límites son tuyos para ajustarlos en el código fuente.

Arquitectura

flowchart LR
  A[Vue dashboard] --> B[Express API]
  C[MCP clients] --> B
  B --> D[Live AdMob layer<br/>60-min cache · single-flight]
  D --> E[(Google AdMob API)]
  B --> F[(Postgres<br/>identity · encrypted keys )]

No hay trabajador, ni almacén de datos, ni métricas almacenadas. Los informes se obtienen de Google bajo demanda y se agregan en JS.

Pila tecnológica y estructura

Monorepo de TypeScript (espacios de trabajo pnpm):

apps/web        Vue 3 + Vite SPA (ECharts): dashboard, reports, mediation, API keys, settings
apps/api        Express API + stateless MCP server; serves web/dist in production
                (live AdMob serving layer: apps/api/src/live)
packages/db     Drizzle schema + migrations (multi-tenant: tenant_id everywhere)
packages/admob  AdMob OAuth + reporting API client
packages/crypto AES-256-GCM secrets, API key generation/hashing, scrypt
packages/shared Shared TypeScript types and AdMob constants

Aviso legal

AdLens es un proyecto independiente y no está afiliado, respaldado ni patrocinado por Google. AdMob y Google son marcas comerciales de Google LLC.

Licencia

MIT