| name | jurisprudencia-eleitoral |
| description | Busca precedentes da Justiça Eleitoral — TSE e os 27 TREs — no portal SJUR do TSE, via Chrome MCP (o site exige hCaptcha invisível a cada busca, então usa o navegador real para gerar o token). Retorna acórdãos/resoluções com ementa, relator, classe, PDF do inteiro teor e link. Use quando o usuário pedir jurisprudência eleitoral, precedente do TSE ou de TRE, pesquisa de acórdão eleitoral, propaganda/inelegibilidade/registro de candidatura, ou citar decisão da Justiça Eleitoral. Palavras-chave: jurisprudência eleitoral, TSE, TRE, precedente eleitoral, acórdão eleitoral, buscar jurisprudência TSE.
|
| context | fork |
| agent | general-purpose |
| allowed-tools | Bash Read Write mcp__claude-in-chrome__tabs_context_mcp mcp__claude-in-chrome__tabs_create_mcp mcp__claude-in-chrome__navigate mcp__claude-in-chrome__javascript_tool mcp__claude-in-chrome__computer |
| compatibility | Requer Chrome MCP (extensão claude-in-chrome) ativo, com acesso aos domínios jurisprudencia.tse.jus.br e jurisprudencia-tres.tse.jus.br. Projetado para Claude Code.
|
| metadata | {"author":"super-jurista","version":"1.0.0","category":"pesquisa-juridica"} |
Pesquisador de jurisprudência da Justiça Eleitoral (TSE + 27 TREs)
Direito eleitoral; busca em Elasticsearch via portal SJUR do TSE
Buscar e reportar precedentes eleitorais do TSE e dos TREs com ementa,
metadados e link do inteiro teor
A API de busca exige um token hCaptcha invisível de uso único por requisição —
impossível gerar em Python puro. Um navegador real (Chrome MCP) gera o token
silenciosamente, tornando a busca viável e confiável.
<quando_usar>
<ativar_quando>
- Usuário pede "jurisprudência eleitoral", "precedente do TSE", "acórdão de TRE"
- Usuário quer decisões sobre temas eleitorais (propaganda, inelegibilidade,
registro de candidatura, prestação de contas, AIJE, captação ilícita de sufrágio)
- Usuário quer citar/verificar uma decisão da Justiça Eleitoral
- Um pipeline de sentença/decisão precisa de precedente eleitoral
</ativar_quando>
<nao_usar_quando>
- Jurisprudência NÃO eleitoral → usar bnp-api, cjf-jurisprudencia, julia-trf5, tjsc-eproc
- Chrome MCP indisponível → avisar que a busca depende do navegador (ver casos de borda)
- Baixar processo do PJE → usar pje-download
</nao_usar_quando>
</quando_usar>
1. `mcp__claude-in-chrome__tabs_context_mcp` (createIfEmpty: true) para obter/abrir aba.
2. Se nenhuma aba tiver o portal SJUR, `navigate` para
`https://jurisprudencia.tse.jus.br/#/jurisprudencia/pesquisa?expressaoLivre=teste¶ms=s`
e aguardar ~8s (`computer` action wait) — o SPA precisa carregar `window.hcaptcha`.
Uma aba SÓ já atende TSE **e** TREs (o token vale para os dois tenants).
3. Verificar prontidão via `javascript_tool`: `({hc: !!window.hcaptcha})`.
Se `false`, esperar mais 5s e repetir uma vez.
4. Injetar o motor: `Read` de `references/engine.js` e colar TODO o conteúdo em UM
`javascript_tool` (define `window.__jeSearch`). Confirmar retorno `'engine pronto'`.
Traduza o pedido do usuário para o objeto `opts` (ver `` p/ campos):
- `query`: a expressão. Pode manter E/OU/NÃO (o motor normaliza para AND/OR/NOT).
- `tribunais`: `'tse'` (só TSE) | `'tres'` (todos os TREs) | `'ambos'` (TSE + TREs).
Regra: TRE específico ⇒ `tribunais:'tres'` + `tribunal:'TRE-XX'`.
- `tribunal`/`uf`/`ordenacao`/`pagina`/`tamanho`/`ementaCompleta` conforme o caso.
Rodar em UM `javascript_tool`:
`JSON.stringify(await window.__jeSearch({ ...opts }))`
O motor gera um token novo por chamada (com `hcaptcha.reset()` + retry até 3x) e
limpa HTML/realce dos textos; devolve `{consulta, total, itens[]}` (ou `{tse, tres}`
quando `tribunais:'ambos'`). Se `total` alto, pagine com `pagina`/`tamanho` conforme
a necessidade — não despeje centenas de itens.
Escolha o modo conforme o pedido:
- **buscar** (padrão): XML `` (ver formato em conhecimento).
- **gerar_relatorio**: Markdown legível (cabeçalho por tribunal, item numerado,
ementa/resumo, relator, data, classe, link do PDF).
- **listar_filtros**: escopos, códigos dos 27 TREs, ordenações e tabela de operadores
(de `references/sintaxe-booleana.md`); opcionalmente classes via `/pesquisa/classes`.
Sempre incluir o link do inteiro teor quando `temPDF` (campo `pdf`). Se `resumo` veio
da decisão (`fonteResumo:'decisao'`), sinalizar "(sem ementa; trecho da decisão)".
Retornar só o essencial: consulta efetiva, total por tenant, os itens formatados e,
se aplicável, o caminho do arquivo salvo. Não retornar o JSON cru nem logs do browser.
Portais (SPA Angular) sobre um backend Elasticsearch:
- TSE: front `jurisprudencia.tse.jus.br` → tenant `/tse/`
- TREs: front `jurisprudencia-tres.tse.jus.br` → tenant `/tres/` (federa os 27 TREs)
- Busca: `POST https://sjur-pesquisa-api.tse.jus.br/{tse|tres}/sjur-pesquisa-backend/rest/public/pesquisa`
- Inteiro teor (ABERTO, sem captcha): `GET https://sjur-servicos.tse.jus.br/sjur-servicos/rest/download/pdf/{codigoDecisao}`
Detalhes completos em `references/engenharia-reversa.md`.
Toda busca exige `captchaToken` (hCaptcha invisível, sitekey 755c2e18-…), de USO ÚNICO.
O motor gera um novo por chamada via `window.hcaptcha.execute({async:true})` na página.
Token não é hostname-bound: minerado em qualquer um dos dois portais, vale para os dois
tenants (comprovado). Nunca logar/gravar o token.
`query` (str) · `tribunais` ('tse'|'tres'|'ambos', pad. 'tse') · `tribunal` ('TRE-XX')
· `uf` ('CE'…) · `relator` (nome/sobrenome — filtro `relatores.nome`) · `parte`
(nome da parte — filtro `partes.nomeParte`) · `sinonimos` (bool — usa o dicionário de
sinônimos do portal, analyzer `meu_sinonimos`) · `dataInicio`/`dataFim` (dd/mm/aaaa →
filtro DATD) · `incluirInteiroTeor` (bool, adiciona campo INTE) · `ordenacao`
('dj_desc' pad.|'dj_asc'|'dtj_desc'|'score') · `pagina` (0…) · `tamanho` (pad. 25) ·
`ementaCompleta` (bool) · `incluirDecisao` (bool). Item devolvido: `id, tribunal, uf,
municipio, processo, numeroUnico, classe, classeDesc, tipoDecisao, data, anoEleicao,
relator, temPDF, pdf, temEmenta, fonteResumo, resumo, ementa`.
Origem de relator/parte/sinonimos: minerados do bundle do front (templates do form
avançado — ver engenharia-reversa.md §8). Se um desses filtros zerar resultados de
forma inesperada, validar por contagens (com × sem o filtro) antes de confiar.
Elasticsearch query_string. Operadores: `AND OR NOT` (ou `&&`/`||`/`+`/`-`), frase
`"..."`, proximidade `"..."~N`, curinga `*` e `?`, fuzzy `~`, campo `campo:termo`,
grupo `()`. `E/OU/NÃO` em português são normalizados pelo motor. Tabela completa e
filtros por campo em `references/sintaxe-booleana.md`.
```xml
REl — Recurso Eleitoral
0600511-87
Des. Maria Iraneide Moura Silva
07/07/2026
...
https://sjur-servicos.tse.jus.br/.../download/pdf/3523184
```
Ache no TSE acórdãos sobre "propaganda eleitoral antecipada" nas redes sociais
opts = { query:'"propaganda eleitoral antecipada" E ("redes sociais" OU internet)',
tribunais:'tse', tamanho:10 }
→ XML com os acórdãos, relator, data e link do PDF.
Jurisprudência do TRE-CE sobre inelegibilidade da LC 64/90
opts = { query:'inelegibilidade E "Lei Complementar 64"', tribunais:'tres',
tribunal:'TRE-CE', tamanho:10 } → relatório Markdown.
Compare TSE e TREs sobre captação ilícita de sufrágio (art. 41-A)
opts = { query:'"captação ilícita de sufrágio" OU "art. 41-A"', tribunais:'ambos' }
→ totais por tenant + itens de cada.
Acórdãos da relatora Cármen Lúcia no TSE sobre fraude à cota de gênero
opts = { query:'"cota de gênero" E fraude', tribunais:'tse',
relator:'Cármen Lúcia', tamanho:10 } → XML com os acórdãos da relatora.
<casos_de_borda>
tabs_context_mcp falha ou extensão desconectada.
Avisar que esta busca depende do navegador real (por causa do hCaptcha) e
pedir para abrir o Chrome com a extensão claude-in-chrome. Não há fallback em Python.
Resposta com erro: "Falha ao validar o HCaptcha.". O widget "esfria"
quando a aba fica ociosa entre buscas e a 1ª chamada falha.
O motor já faz hcaptcha.reset() + regenera o token e re-tenta até 3x por
chamada (opts.tentativas). Se AINDA assim vier erro, a página perdeu o widget:
recarregar o portal (navigate + wait 8s), reinjetar engine.js e repetir a busca.
Se só um tenant falhar, abrir o portal correspondente (tse ou tres) e repetir.
textoEmenta vazio em vários acórdãos de TRE.
O motor já cai para o texto da decisão (fonteResumo:'decisao'). Sinalizar
isso no output e lembrar que o inteiro teor está no PDF.
total na casa dos milhares.
Refinar a query (frase exata, filtro por tribunal/UF/classe/ano, ou recorte de
data via dataInicio/dataFim) e paginar; nunca despejar tudo. Reportar o total e
mostrar os primeiros N mais recentes.
As Dicas oficiais alertam: tradução automática (navegador/Google Tradutor)
pode quebrar o funcionamento do SPA.
Não acionar tradução automática na aba do portal; manter em português.
- [references/engine.js](references/engine.js) - Motor in-page (mint + busca + parse)
- [references/sintaxe-booleana.md](references/sintaxe-booleana.md) - Operadores, filtros, escopos
- [references/engenharia-reversa.md](references/engenharia-reversa.md) - API, contrato, HAR, PDF
<pre_requisitos>
- Chrome MCP (extensão claude-in-chrome) ativo e conectado ao Chrome do usuário
- Acesso a jurisprudencia.tse.jus.br e jurisprudencia-tres.tse.jus.br
</pre_requisitos>