Skip to main content
Glama
README.md
# Jurisfylex

Servidor MCP de **pesquisa e verificação jurídica com prova de origem**, para advocacia
brasileira. Versão **0.3.0** (laboratório; não homologado para uso em petições sem conferência humana).

O objetivo central é impedir que uma peça seja protocolada com citação inexistente, divergente,
cancelada ou revogada. Para isso, toda resposta traz a fonte, a data da coleta e um status de
verificação próprio, e **falha de fonte nunca vira "nenhum resultado"**.

## O que funciona hoje

| Ferramenta | O que faz | Fonte |
|---|---|---|
| `pesquisar_jurisprudencia` | Pesquisa acórdãos, decisões, súmulas, OJs e PNs do TST com relator, órgão, datas e link oficial; para STF e STJ devolve status explícito e o link oficial de pesquisa já preenchido | TST (portal oficial) |
| `verificar_julgado` | Confere um julgado pelo número CNJ e, campo a campo, classe, relator, data, órgão e trecho da ementa; só atesta a citação (`citation_fully_verified`) se relator ou data conferirem e a decisão for única; guarda SHA-256 do inteiro teor | TST; demais tribunais: existência via DataJud |
| `verificar_sumula` | Confere texto e **situação** (ex.: Súmula 437 do TST — CANCELADA) de súmula, OJ ou PN | TST |
| `verificar_norma` | Confere identidade, data e publicação de norma federal, revogação total e o histórico de alterações de um artigo (ex.: art. 611-A da CLT) | Senado Federal |
| `consultar_processo_publico` | Metadados públicos do processo (classe, órgão, assuntos, movimentos); sigilo respeitado. **Desligado por padrão** até a análise jurídica da issue #11 | DataJud (CNJ) |
| `auditar_citacoes` | Recebe a minuta inteira, extrai as citações (com classe, relator e data ao lado do número) e confere cada uma; aponta trechos com cara de citação que não reconheceu; `can_file` é só indicativo e a revisão humana é sempre exigida | todas |
| `verificar_fontes` | Catálogo das fontes: o que está operacional, bloqueado, planejado ou sob análise jurídica (sem rede) | — |
| `validar_numero_cnj` | Dígito verificador e tribunal do número CNJ (não prova existência) | — |
| `diagnosticar_fontes` | Estado das fontes, disjuntores e teste ao vivo opcional | — |

Regras de verificação: `verified_against_primary_source` só quando a fonte oficial devolveu o
registro e os campos conferem; `contradicted_or_invalid` só com prova (dígito verificador CNJ
inválido, campo divergente, ausência em todas as fontes oficiais); qualquer falha de fonte é
`pending_primary_source_verification` com `can_cite=false`.

## Limites conhecidos (sem maquiagem)

- **STF e STJ** bloqueiam automação com desafio anti-robô. O servidor não contorna: devolve o link
  oficial e marca a citação como pendente de conferência manual.
- **TJs, TRFs e TRTs:** só existência e metadados do processo (DataJud); o conteúdo do acórdão
  não é conferido automaticamente.
- **Normas:** não há texto compilado por artigo; há alertas de alteração/revogação por artigo.
- **Autenticação por tokens** serve para uso privado (Claude Code e clientes que aceitam cabeçalho).
  Conectores que exigem OAuth (ex.: conector personalizado do claude.ai) precisam do modo `jwt`
  com um servidor de autorização (Keycloak, Auth0 etc.).
- Módulo de autos/peças (Fase 5) e multi-tenant não foram implementados.

Detalhes em `docs/AUDITORIA_FASE0.md` e `docs/TESTES_ACEITE.md`.

## Uso local (stdio)

```bash
python -m venv .venv && . .venv/bin/activate
pip install -e '.[dev]'
export DATAJUD_API_KEY='<chave publica vigente na wiki do DataJud>'
jurisfylex            # stdio, para Claude Desktop/Code no mesmo computador
```

## Uso como serviço HTTP (MackNa Cloud)

```bash
jurisfylex-token igor research,verify     # gera o token e a linha para JURISFYLEX_TOKENS
docker build -t jurisfylex .
docker run -p 8110:8110 -e JURISFYLEX_TOKENS='igor=sha256:...=research|verify' \
           -e DATAJUD_API_KEY='...' jurisfylex
```

Endpoint MCP: `/mcp` (Streamable HTTP). Saúde: `/health` e `/ready`. Passo a passo no MackNa em
`docs/MACKNA_DEPLOY.md`.

Claude Code:

```bash
claude mcp add --transport http jurisfylex https://<dominio>/mcp \
  --header "Authorization: Bearer <token>"
```

## Testes

```bash
pytest                     # 102 testes offline (fixtures reduzidas de respostas reais)
pytest -m live -v          # 7 testes contra as fontes reais (rede; DataJud exige chave)
ruff check src tests
```

## Licenças e fontes

Código MIT. Dados de terceiros têm regras próprias: DataJud é restrito a fins legais e não
comerciais, com citação obrigatória do CNJ (Portaria CNJ 160/2020 e alterações). Ver
`docs/LICENCAS_E_FONTES.md`.

## Produto único

O usuário conecta apenas ao **Jurisfylex**. BRLaw e MCP Brasil foram auditados e ficam como
componentes internos opcionais, desligados (ver `docs/AUDITORIA_FASE0.md` e `NOTICE`). Não há
segundo MCP público.

## Planejamento

Acompanhamento no [ROADMAP.md](ROADMAP.md) e na [lista mestra #20](https://github.com/cocoputiz-sudo/jurisfylex/issues/20).
Estudo dos tribunais: `docs/ESTUDO_TRIBUNAIS_2026-10-17.md`.

> **Atenção:** repositório público. Nenhum documento sigiloso, token, senha ou processo privado
> deve ser commitado. Os workflows `security.yml` (Bandit, pip-audit, extensões proibidas) e
> `secret-history.yml` (Gitleaks) rodam em cada PR.