---
name: radar-cnpj
description: Operate Radar CNPJ (radar-cnpj.com) as an agent — evaluate a business idea against Receita counts, CNPJ lookup, search (name, partner, phone), paid reveal of partners/phones/email, IA filters, monitor session, contact x402. Use when working with Radar CNPJ or exf-radar.
---

# Radar CNPJ — skill para agentes

**Live:** https://radar-cnpj.com  
**Descoberta:** `GET /api/` · `/llms.txt` · `/openapi.json`  
**Integrações:** `/developers`; agentes consomem contratos, MCP e llms. A UI humana organiza pesquisa → recorte → empresas → ficha → acompanhamento.
**Catálogo:** `src/lib/apidocs.js`  
**MCP (remoto, recomendado):** `POST https://radar-cnpj.com/mcp` — Streamable HTTP, JSON-RPC 2.0.
Pluga direto no cliente MCP; não precisa deste repositório. Confira com `GET https://radar-cnpj.com/mcp`.
**MCP (stdio, local):** `node ~/src/mm/scripts/mcp/server.mjs --product radar-cnpj`
**Origem de dados:** api.radar-cnpj.com (este Worker é proxy fino + contato SES)

Conta MM (identidade só): `/api/auth/bootstrap`, `/api/auth/login`, callback, `/api/me`, perfil em
`/api/account/profile`, foto em `/api/account/avatar` e logout vêm do SDK único da plataforma, no Worker;
o monitoramento é da conta (cookie). São caminhos de navegador (cookie HttpOnly + CSRF): o botão "Conta"
leva a `/conta/global`. Agente sem conta monitora com o crédito global — `Authorization: Bearer cred_…`
(ou `X-Credito`); a carteira é a dona dos monitores (10 grátis; vaga a mais debita US$ 0,50 por 30 dias).
Não envie senha, código ou segredo de cliente por MCP.

Paridade UI/API/skill/MCP no mesmo commit: `AGENTS.md` do produto e `AGENTS-API.md` da raiz.

## Acervo de empresas (sem API, 13/09/2026)

Para uma lista útil, leia `itens[].dados`: até 20 empresas por página em JSON,
MCP e Markdown, sem uma chamada de detalhe por registro. Preserve o cursor e
a data da fonte; não é um feed incremental de alterações.
`/api-access-guide.md` orienta escolha da operação, orçamento e recuperação.
O cliente público `/api-access-client.js` só compra com `buy:true` e teto explícito.

`https://radar-cnpj.com/empresas/` — estabelecimentos ATIVOS por estado → município → atividade
(CNAE) → páginas de 20 → ficha por CNPJ (`/empresas/cnpj/<14 dígitos>/`). Cada nó em HTML, JSON
(`index.json`), Markdown (`index.md`) e OKF (`index.okf.md`); siga `itens[].url` e `links.proximo`,
sem inventar caminhos. Sitemap completo em `/empresas/sitemap.xml`. A ficha descreve a empresa (sem
sócios, telefone ou e-mail): o JSON da ficha está em `GET /api/cnpj/:cnpj`, com sócio pessoa física,
telefones e e-mail mascarados; o completo é `POST /api/revelar/:cnpj`, pago. Também listado em
`docs.data_indexes` do `GET /api/`.

## Operações (MCP ↔ HTTP)

| Tool | HTTP |
|------|------|
| `api_index` | `GET /api/` |
| `avaliar` | `POST /api/avaliar` `{texto}` — ideia → oferta formal (CNAE, lugar, ativas). Sem volume de busca. |
| `get_cnpj` | `GET /api/cnpj/:cnpj` (14 dígitos) — `mascarado: true`: sócio pessoa física `LUIS F. R. P.`, telefones e e-mail parciais |
| `reveal_cnpj` | `POST /api/revelar/:cnpj` — a mesma ficha sem máscara, **$0.10 por empresa**: `Authorization: Bearer cred_…` (crédito) ou x402. A mesma empresa, no mesmo dia (Brasília), com o mesmo código, não cobra de novo; CNPJ inexistente não cobra |
| `search` | `GET /api/busca?q=&tipo=&f=` — `tipo`: `nome` (padrão), `fantasia`, `socio`, `telefone` (com DDD, 10–11 dígitos; 400 `telefone_invalido`), `endereco`, `cnae` |
| `suggest` | `GET /api/sugerir?q=` |
| `ref` | `GET /api/ref?tipo=&q=` |
| `ia_filters` | `POST /api/ia` `{texto}` |
| `local` | `GET /api/local` (geo borda; no-store) |
| (não MCP) | `GET /api/municipio-proximo?lat=&lon=` — município IBGE + bairro CNEFE (ambiental) |
| `contact` | `POST /api/contato` (agente → 402 $0.10) · 1º envio sai na hora; seguintes 429 + `Retry-After` (60s→2×, teto 1h) |
| (fora do MCP) | `GET /api/metrics` — sem token: visitas de hoje e uso (público, 5 min de borda; é o que o rodapé lê); Bearer `METRICS_TOKEN`: série de 7 dias com contatos |
| `list_watches` / `add_watch` | `/api/me/monitor/watches` · `/api/me/monitor/watch` — argumento `credito` (`cred_…`) vira o header `X-Credito` |
| (fora do MCP) | `GET /api/monitor/changes/:cnpj` — histórico de alterações cadastrais de um CNPJ (conta ou crédito, como as de cima) |

## Contato

- Humano: Turnstile na UI  
- Agente: sem captcha → **x402 $0.10** (`X-PAYMENT`)

## Cota (leia antes de gastar chamada)

Consulte `GET /api/pricing` (tool `pricing`) para franquias e preços e `GET /api/billing`
(tool `billing`) para x402 e crédito. São leituras públicas; o desafio 402 da operação
informa o valor a pagar.

- **Grátis, sem cota:** `POST /api/avaliar`, consulta e busca de CNPJ, `/api/ref`, `/api/export`,
  IA de filtros. Cache de borda 6h em `/api/cnpj/*`.
- **Grátis:** **10 watches** de monitoramento por sessão.
- **Pago:** revelação de sócios, telefones e e-mail **$0.10 por empresa** · watch além do 10º **$0.50 por 30 dias** · contato de agente **$0.10** — x402 ou crédito pré-pago, USDC na Base.
- **Crédito pré-pago:** `POST /api/credito?usd=1|5|10|25` → 402 → pague → `201 {token}` (mostrado UMA vez; é o portador do saldo). `GET /api/credito` com `Authorization: Bearer cred_…` devolve saldo e extrato. Cada compra gera um código novo.
- Bloco `quota` em `GET /api/`.

## Cota estourada

**Acervos em volume:** `api_access` / `GET /api/acesso` informa disponibilidade do
pacote de US$1 por 1.000 leituras/30 dias, sem renovação automática. Compra explícita
por `api_access_buy` / `POST /api/acesso`, via x402 ou crédito. Gere e guarde o passe
antes da compra; retries usam o mesmo `api_pass`. Envie `X-API-Pass` somente às
origens declaradas do pacote: `/empresas`, `/enderecos`, `/licitacoes`.
`GET <prefixo>/api/uso` consulta saldo; documento/OCR/IA têm tarifas separadas.
402 no índice oferece o caminho de compra; não tente pagar a URL de dados diretamente.
Pagamento incerto: conserve passe/prova e reconcilie com `X-API-Transaction`, sem nova cobrança.

**402** com `accepts[]`. Pague e **repita a mesma chamada** com `X-PAYMENT`. Quem decide a cota
de monitoramento é a origem (`api.radar-cnpj.com`); o Worker traduz o 402 dela no desafio x402.

## Não fazer

- Não reintroduzir iframe/link para o app antigo na UI.
- Não cachear `/api/local` ou `/api/contato`.
- Não inventar filtros que a origem não aceita — validação de forma no proxy, semântica na origem.
- Não inventar volume de busca / CPC na ficha de `/api/avaliar`. O número é oferta formal da Receita.

A oferta conta o município/UF, sem bairro. Para listar as mesmas ativas, retire `bairro` dos filtros da resposta e force `situacao=2`. Não interprete a classificação automática como demanda ou viabilidade. A UI preserva filtros/abas após F5; a contratação de acompanhamento adicional permanece pela integração.

## Acervos públicos de dados

`GET /api/` → `docs.data_indexes` descobre quatro acervos de leitura: endereços CNEFE,
metadados PNCP, domínios observados em CT e arquivos de programação XMLTV. As mesmas raízes
estão em `/llms.txt`, `/llms-full.txt`, `/okf/index.md` e `/developers#dados`. Abra o
`formats.json` adequado e siga a hierarquia e `links.proximo` (até 20 itens por página).
Atualização manual: confira fonte e referência. Respeite `Retry-After` em 429/503. Não
encaminhe credenciais do produto a esses hosts. Leia somente o recorte necessário à tarefa.

<!-- GERADO por scripts/monta-ui.mjs — fonte: .agents/skills/<produto>/SKILL.md. Não edite. npm run ui -->
