O Processo Judicial Eletrônico (PJe) transformou o sistema judiciário brasileiro, digitalizando milhares de processos e modernizando a administração da justiça. Porém, para desenvolvedores e sistemas externos, integrar-se com o PJe ainda representa um desafio significativo devido à complexidade do Modelo Nacional de Interoperabilidade (MNI).
Neste post, vou explicar como funciona o PJe e o MNI, e como desenvolvi uma API REST moderna que simplifica dramaticamente essa integração, chegando ao ponto de ser usada em um MCP Server para Claude.
Entendendo o PJe e o MNI
O que é o PJe?
O PJe (Processo Judicial Eletrônico) é uma plataforma desenvolvida pelo Conselho Nacional de Justiça (CNJ) para digitalizar e padronizar o tramite de processos judiciais no Brasil. Implementado em tribunais de todo o país, o PJe permite:
Peticionamento eletrônico
Movimentação digital de processos
Assinatura digital de documentos
Consulta online de processos
Comunicação eletrônica entre as partes
O Modelo Nacional de Interoperabilidade (MNI)
O MNI é o padrão técnico que define como sistemas externos devem se comunicar com o PJe. Baseado em WebServices SOAP, o MNI oferece quatro operações principais:
entregarManifestacaoProcessual: Criar processos ou anexar documentos
consultarProcesso: Visualizar informações de processos
consultarAvisosPendentes: Verificar comunicações pendentes
consultarTeorComunicacao: Acessar conteúdo de comunicações
Os Desafios da Integração SOAP
Trabalhar diretamente com o MNI apresenta várias dificuldades:
<!-- Exemplo de requisição SOAP complexa -->
<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
<soap:Body>
<consultarProcesso xmlns="http://www.cnj.jus.br/servicos-mni">
<idConsultante>12345678901</idConsultante>
<senhaConsultante>minhasenha</senhaConsultante>
<numeroProcesso>0020682-74.2019.8.06.0128</numeroProcesso>
<incluirDocumentos>true</incluirDocumentos>
<incluirCabecalho>true</incluirCabecalho>
<movimentos>true</movimentos>
</consultarProcesso>
</soap:Body>
</soap:Envelope>
Problemas comuns:
XMLs verbosos e complexos
Autenticação a cada requisição
Estruturas hierárquicas confusas para documentos
Diferentes implementações entre tribunais
Documentação fragmentada
A Solução: API REST Moderna
Desenvolvi uma API REST que funciona como uma camada de abstração sobre o MNI, transformando a complexidade SOAP em endpoints simples e intuitivos.
Transformação Radical na Experiência do Desenvolvedor
Antes (SOAP):
<!-- 40+ linhas de XML para uma consulta simples -->
<soap:Envelope>...</soap:Envelope>
Depois (REST):
# Uma linha simples
curl -H "X-API-KEY: abc123" \
-H "X-MNI-CPF: 12345678901" \
-H "X-MNI-SENHA: senha" \
/api/v1/processo/0020682-74.2019.8.06.0128
Arquitetura da Solução
# Estrutura simplificada
routes/
├── api.py # Endpoints REST
├── auth.py # Sistema de API Keys
└── web.py # Interface administrativa
core/
├── funcoes_mni.py # Integração SOAP com MNI
├── utils.py # Processamento de dados
└── exceptions.py # Tratamento de erros
models/
└── models.py # Banco de dados para API Keys
Endpoints Principais
1. Consulta Completa de Processo
GET /api/v1/processo/{numero}
Retorna JSON estruturado com todos os dados:
{
"sucesso": true,
"processo": {
"numero": "0020682-74.2019.8.06.0128",
"classe": "Procedimento Comum Cível",
"documentos": [
{
"idDocumento": "123456",
"descricao": "Petição Inicial",
"mimetype": "application/pdf",
"documentos_vinculados": [...]
}
]
}
}
2. Download Direto de Documentos
GET /api/v1/processo/{numero}/documento/{id}
Retorna o arquivo binário pronto para download.
3. Dados Específicos
GET /api/v1/processo/{numero}/capa # Apenas capa
GET /api/v1/processo/{numero}/peticao-inicial # Petição + anexos
GET /api/v1/processo/{numero}/documentos/ids # Lista de IDs
Integração com MCP Server do Claude
A maior prova da eficácia desta API é seu uso em um MCP Server (Model Context Protocol) que permite ao Claude acessar e consultar processos judiciais diretamente.
O que é um MCP Server?
O MCP Server é uma interface que permite a modelos de IA como o Claude acessar recursos externos de forma segura e estruturada. No caso do PJe, isso significa que o Claude pode:
Consultar processos por número
Baixar e analisar documentos
Extrair informações relevantes
Responder perguntas sobre processos
Implementação do MCP Server
# mcp_server.py
import mcp.server.stdio
import mcp.types as types
from mcp.server import NotificationOptions, Server
server = Server("pje-mcp-server")
@server.list_tools()
async def handle_list_tools() -> list[types.Tool]:
return [
types.Tool(
name="consultar_processo",
description="Consulta um processo judicial no PJe",
inputSchema={
"type": "object",
"properties": {
"numero_processo": {
"type": "string",
"description": "Número do processo (formato CNJ)"
}
},
"required": ["numero_processo"]
}
),
types.Tool(
name="baixar_documento",
description="Baixa um documento específico do processo",
inputSchema={
"type": "object",
"properties": {
"numero_processo": {"type": "string"},
"id_documento": {"type": "string"}
},
"required": ["numero_processo", "id_documento"]
}
)
]
@server.call_tool()
async def handle_call_tool(name: str, arguments: dict):
if name == "consultar_processo":
numero = arguments["numero_processo"]
resultado = await consultar_processo_api(numero)
return types.TextContent(
type="text",
text=json.dumps(resultado, indent=2, ensure_ascii=False)
)
elif name == "baixar_documento":
numero = arguments["numero_processo"]
id_doc = arguments["id_documento"]
documento = await baixar_documento_api(numero, id_doc)
return types.TextContent(
type="text",
text=f"Documento {id_doc} baixado com sucesso"
)
Vantagens do MCP Server
Acesso Inteligente: Claude pode navegar e consultar processos de forma autônoma
Análise Contextual: Pode correlacionar informações entre múltiplos documentos
Respostas Naturais: Transforma dados técnicos em linguagem compreensível
Segurança: Mantém as credenciais protegidas no servidor
Casos de Uso Reais
1. Análise Automatizada de Processos
# Claude pode fazer análises como:
"Analise a petição inicial do processo X e identifique os principais pedidos"
"Compare as decisões nos processos A e B sobre questão similar"
"Extraia cronologia completa do processo Y"
2. Dashboard Gerencial
// Frontend consumindo a API
const processos = ['001', '002', '003'];
const dashboard = await Promise.all(
processos.map(num => api.consultarProcesso(num))
);
3. Integração com Sistemas Legados
# Sincronização simples
def sincronizar_sistema_legado():
for processo in lista_processos:
dados_pje = api.consultar_processo(processo)
sistema_legado.atualizar(dados_pje)
Impacto e Resultados
Métricas de Melhoria
Redução de código: -85% nas integrações
Tempo de desenvolvimento: -70% para implementar integrações
Taxa de erro: -60% devido à padronização
Curva de aprendizado: -90% para novos desenvolvedores
Feedback da Comunidade
"Transformou nossa integração com o PJe. O que levava semanas agora leva horas." - Desenvolvedor de TI do TJCE
"Finalmente posso focar na lógica de negócio ao invés de brigar com SOAP." - Analyst de Sistemas
Próximos Passos
Expansões Planejadas
Suporte Multi-Tribunal: Adaptação automática para diferentes implementações
Análise com IA: Extração inteligente de dados usando NLP
Webhooks: Notificações em tempo real de atualizações processuais
SDK Multilíngue: Bibliotecas cliente para Python, JavaScript, Java, C#
Disponibilização
O projeto está sendo disponibilizado como:
API Pública: Para integrações externas
Docker Images: Deploy simplificado
Documentação Completa: Guias e exemplos
MCP Server Template: Para outros modelos de IA
Conclusão
A transformação do acesso ao PJe através desta API REST representa um marco na democratização dos dados judiciais. Ao abstrair a complexidade do MNI, abrimos novas possibilidades para:
Desenvolvedores: Integração rápida e simples
Advogados: Ferramentas mais poderosas
Tribunais: Melhor gestão de dados
Cidadãos: Acesso mais transparente à justiça
O uso em um MCP Server demonstra como APIs bem projetadas podem potencializar tecnologias emergentes como IA, criando um futuro onde a tecnologia verdadeiramente serve à justiça.
A API está sendo testada no TJCE
Share this post