AdLens

Seus números do AdMob, sem o console do AdMob. Um servidor MCP rápido para que seu assistente de IA consulte os mesmos dados ao vivo.

Servidor MCP hospedado

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

Instala no Claude Code, Codex, Cursor e outros

Documentação

AdLens

Seus números do AdMob, sem o console do AdMob.
Um painel de análise rápido do AdMob, além de um servidor MCP para que seu assistente de IA possa consultar os mesmos dados ao vivo.

App ao vivo · Configuração do MCP · Self-host · 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
Faça uma pergunta. O Claude chama o AdLens. Respostas ao vivo do AdMob.


O que é o AdLens?

O console do AdMob mostra totais. O AdLens mostra causas.

Conecte sua conta do AdMob uma vez (somente leitura) e você terá:

  1. Um painel web rápido para receita, impressões, eCPM, mediação e detalhamentos por país.
  2. Um servidor MCP para que Claude, Cursor, Codex e outros clientes de IA possam responder perguntas a partir dos mesmos dados ao vivo, como "Qual formato de anúncio tem o melhor eCPM este mês?"

É gratuito, somente leitura e não armazena nenhum dos seus dados de relatório. Você pode usar a versão hospedada ou executar a sua própria.

Recursos

Painel

  • Ao vivo, não sincronizado: buscado da API do AdMob quando você abre uma página.
  • Hoje em resumo: hoje, ontem, últimos 7 dias e este mês, com impressões e eCPM.
  • Comparações de períodos: cada KPI mostra sua variação em relação ao período anterior.
  • Detalhamentos classificáveis: por dia, app, unidade de anúncio, formato, fonte de mediação ou país.
  • Análises aprofundadas por app com a mesma profundidade, além de temas claro e escuro.

AdLens dashboard showing revenue, eCPM and country breakdowns
O painel do AdLens (dados de exemplo).

Servidor MCP

Cinco ferramentas somente leitura que qualquer cliente MCP pode chamar:

FerramentaO que faz
account_overviewLista suas conexões e apps (id, nome, plataforma, nome do pacote)
revenue_summaryTotais mais séries diárias ou semanais, usando predefinições ou datas explícitas
breakdownReceita por app, unidade de anúncio, formato, país, fonte de anúncio (mediação) ou data
top_moversMovimentações período a período, com o período anterior escolhido automaticamente para predefinições
list_ad_unitsSeu inventário de unidades de anúncio

Exemplos de prompts para experimentar:

  • "Resumo de receita dos últimos 30 dias"
  • "Principais movimentações por país, esta semana vs. semana passada"
  • "Detalhe a receita de mediação do meu app principal"
  • "Qual formato de anúncio tem o melhor eCPM este mês?"

Primeiros passos (hospedado)

A configuração leva cerca de um minuto.

  1. Entre em adlens.moreproductive.in com um código de uso único por e-mail ou Google. Uma senha é opcional.
  2. Conecte o AdMob. Você aprova uma tela de consentimento do Google OAuth com o escopo admob.readonly.
  3. Use do seu jeito. Abra o painel ou gere uma chave de API e conecte seu cliente de IA (abaixo).

Conecte seu assistente de IA (MCP)

Gere uma chave de API na página de Chaves de API do painel. As chaves têm o formato ak_live_... e são mostradas uma única vez, então copie a sua imediatamente. Depois, adicione o AdLens ao seu cliente.

O endpoint do MCP é:

https://adlens.moreproductive.in/mcp

Se você fizer self-host, substitua o domínio pelo seu próprio. O AdLens é um servidor MCP padrão Streamable HTTP autenticado com um token Bearer, então qualquer cliente que suporte uma URL remota com cabeçalhos personalizados funcionará.

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

Ou adicione ao .mcp.json:

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

O arquivo de configuração do Claude Desktop não tem suporte nativo a URL + cabeçalho, então faça a ponte com o mcp-remote.

Edite 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_..."
      ]
    }
  }
}

No Windows, use npx.cmd em vez de npx como comando:

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

Em ~/.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 e outros clientes

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

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

Para clientes somente stdio, use a ponte mcp-remote mostrada na seção do Claude Desktop.

Antigravity

Em ~/.gemini/antigravity/mcp_config.json (Windows: %USERPROFILE%\.gemini\antigravity\mcp_config.json), ou pelo painel MCP Store → Gerenciar servidores MCP → Ver configuração bruta:

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

Em opencode.json (projeto) ou ~/.config/opencode/opencode.json. Este caminho é o mesmo no Windows (%USERPROFILE%\.config\opencode\opencode.json), não %APPDATA%. Definir oauth: false faz o OpenCode usar sua chave Bearer em vez de tentar o login OAuth primeiro.

{
  "$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
    }
  }
}

Dica: para testar o endpoint sem um cliente de IA, execute o MCP Inspector: npx @modelcontextprotocol/inspector

Self-hosting

O AdLens é multi-tenant por design e fácil de executar você mesmo. Você precisa de:

  • Node.js (LTS) e pnpm, ou apenas Docker
  • Um banco de dados Postgres (o arquivo Docker Compose incluído inicia um)
  • Um projeto MojAuth para login (OTP por e-mail + Google). Você precisará da chave de API dele.
  • Um cliente OAuth do Google Cloud com a API do AdMob habilitada e o escopo admob.readonly

1. Clone e configure

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

Gere os segredos aleatórios com:

openssl rand -hex 32
VariávelObrigatóriaDescrição
APP_URLsimURL pública da sua instância (use seu domínio https em produção)
DATABASE_URLsimString de conexão do Postgres
MOJOAUTH_API_KEYsimChave do seu projeto MojAuth (OTP por e-mail + login Google)
SESSION_SECRETsimSegredo aleatório usado para assinar cookies de sessão
GOOGLE_CLIENT_ID / GOOGLE_CLIENT_SECRETsimCliente OAuth do Google para conectar o AdMob
ENCRYPTION_KEYsimChave hex de 32 bytes usada para criptografar tokens de atualização em repouso
OAUTH_STATE_SECRETnãoSegredo separado para assinar o estado do OAuth
TRUST_PROXYnãoDefina como 1 ao executar atrás do nginx para que os limites de taxa vejam os IPs reais dos clientes
HOSTnãoEndereço de bind. Use 127.0.0.1 atrás de um proxy reverso
MOJOAUTH_AUDIENCEnãoVerificação opcional de audiência para tokens MojAuth
MOJOAUTH_ISSUERSnãoSubstitui os emissores de token MojAuth permitidos

.env.example é mantido atualizado e tem a lista completa anotada.

No seu cliente OAuth do Google Cloud, registre <APP_URL>/api/admob/callback como um URI de redirecionamento autorizado. No seu painel MojAuth, registre a URL de callback que ele mostra.

2a. Execute com Docker (tudo)

docker compose up --build

2b. Execute localmente para desenvolvimento

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

3. Produção

Compile a partir da raiz do repositório (compilar um único pacote pode deixar um packages/db/dist desatualizado):

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

Em produção, a API serve o app web compilado (apps/web/dist), então há um único processo para executar. Execute-o sob um gerenciador de processos de sua escolha (a instância hospedada usa pm2, com Postgres em Docker).

Atrás do nginx (ou qualquer proxy reverso):

  • Defina APP_URL para seu domínio https
  • Defina TRUST_PROXY=1
  • Vincule o app ao localhost com HOST=127.0.0.1

Nota: os limites de taxa são mantidos em memória por processo, então o AdLens é projetado para executar como um único processo. Se for exposto diretamente (sem proxy), deixe TRUST_PROXY não definido, porque X-Forwarded-For pode ser falsificado.

Limites de uso justo

O AdLens é gratuito, sem planos e sem cobranças. Limites de taxa por IP protegem o serviço:

EndpointLimite
API do painel (/api)300 requisições / minuto
Servidor MCP (/mcp)15 requisições / minuto

Se você fizer self-host, esses limites são seus para ajustar no código-fonte.

Arquitetura

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 )]

Não há worker, nem warehouse, nem métricas armazenadas. Os relatórios são buscados do Google sob demanda e agregados em JS.

Pilha de tecnologia e estrutura

Monorepo TypeScript (pnpm workspaces):

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

O AdLens é um projeto independente e não é afiliado, endossado ou patrocinado pelo Google. AdMob e Google são marcas registradas da Google LLC.

Licença

MIT