Skip to main content
Glama

Servidor MCP que permite ao Claude Desktop consultar o SPA — Sistema de Processos Automatizados da Prefeitura Municipal de Teresina (spa.pmt.pi.gov.br, plataforma Rails/Devise da Coreplan) diretamente em linguagem natural.

Sem browser: o SPA não tem Cloudflare nem captcha, então tudo é feito em HTTP puro com Scrapling — login Devise, tabelas DataTables e PDFs. Rápido, leve e sem janela de Chrome abrindo.

✨ Funcionalidades

  • 🔐 Login 100% automatizado: e-mail + senha do Keychain do macOS, com relogin transparente quando a sessão expira

  • 📥 Caixas de processos (fluxos): listagem paginada com busca textual local

  • Prazos urgentes em todas as caixas, ordenados do mais urgente ao menos urgente — com detecção do prazo vigente (o campo do SPA acumula prazos históricos)

  • 🆕 Entradas recentes: o que chegou numa caixa nos últimos N dias

  • 🗞️ Triagem em uma chamada: briefing completo da banca — tudo que entrou nos últimos dias, já com o resumo dos documentos judiciais mais recentes de cada processo

  • ⚖️ Pasta do Processo judicial: lista, lê (texto paginado, direto na conversa) e baixa os documentos que o SPA recebe do PJe por integração SOAP/MNI

  • 🔍 Busca global por número CNJ, nome de parte ou CPF/CNPJ

  • 📄 Download do PDF integral do processo administrativo

  • 🔔 Notificações do sino do sistema

  • 🛡️ Leitura passiva: nenhuma ferramenta toma ciência, executa passo de fluxo ou escreve no SPA

Related MCP server: MCP-PJe-TRF1

🛠️ As 12 ferramentas

Caixas e painel

Ferramenta

O que faz

listar_fluxos

as caixas (fluxos) do usuário com o total de processos em cada uma — o equivalente às abas de "Meus Processos"

listar_caixa

processos de uma caixa, com paginação e busca textual (filtro aplicado no cliente — ver avisos)

prazos_urgentes

varre TODAS as caixas e retorna os processos com prazo vigente nos próximos N dias (negativo = atrasado), com rótulo e hora do prazo

entradas_recentes

processos que ENTRARAM numa caixa nos últimos N dias, do mais recente ao mais antigo

triagem

briefing em uma chamada: entradas recentes de todas as caixas + resumo dos documentos judiciais mais novos de cada processo (paralelizado, leitura passiva)

notificacoes

notificações do sino do SPA

Consulta e busca

Ferramenta

O que faz

buscar_processo

busca global do topo do sistema: nº CNJ, nome de parte ou CPF/CNPJ

obter_processo

abre um processo pelo id interno: campos do cabeçalho (partes, classe, vara, responsável, status, prazos) + timeline de andamentos

Documentos e autos

Ferramenta

O que faz

baixar_processo

PDF integral do processo administrativo (todas as peças num único arquivo, como o SPA monta)

listar_documentos_judiciais

a "Pasta do Processo" judicial — documentos que o SPA baixa do tribunal por comunicação eletrônica (inicial, despachos, certidões, intimações...)

baixar_documento_judicial

baixa UM documento da pasta judicial pelo id — ou, sem id, os autos completos num único PDF

ler_documento_judicial

extrai o TEXTO de um documento judicial direto na conversa, paginado, sem salvar arquivo — com cache (continuar a leitura não rebaixa o PDF) e detecção dos ids do PJe citados no texto

🧰 Requisitos

  • macOS (credenciais no Keychain — em Linux/Windows funciona com backend keyring equivalente)

  • Python 3.12+ e uv

  • Claude Desktop instalado

  • Conta ativa no SPA da PMT (login por e-mail e senha)

📦 Instalação

1) Clone o repositório

git clone https://github.com/fxbarros/MCP-SPA-PMT.git spa-mcp
cd spa-mcp

2) Instale as dependências

uv sync

3) Salve as credenciais no Keychain

uv run setup_credenciais.py

O script pergunta o e-mail e a senha do SPA. Tudo fica criptografado no Keychain do macOS (service mcp-spa) — nunca em arquivo. Alternativa sem Keychain: exporte SPA_EMAIL e SPA_SENHA no ambiente do processo.

4) Teste o login (opcional mas recomendado)

uv run diagnostico_login.py

O diagnóstico faz o ciclo completo (CSRF → POST → rota autenticada) e imprime os módulos que a sua conta enxerga. Se o layout do login mudar um dia, há um fallback com Chrome real: uv run diagnostico_login_browser.py.

5) Registre o MCP no Claude Desktop

~/Library/Application Support/Claude/claude_desktop_config.json (ajuste o caminho):

{
  "mcpServers": {
    "spa-pmt": {
      "command": "uv",
      "args": [
        "--directory", "/Users/SEU_USUARIO/spa-mcp",
        "run", "spa-mcp"
      ]
    }
  }
}

6) Reinicie o Claude Desktop

Cmd+Q e abra de novo — as ferramentas devem aparecer.

💬 Exemplos de uso

Faz a triagem da minha caixa no SPA

Quais meus prazos urgentes nos próximos 15 dias?

O que entrou na caixa de Processo Patrimonial nos últimos 7 dias?

Lista minhas caixas no SPA com os totais

Busca o processo 0000000-00.0000.0.00.0000 no SPA

Abre o processo 12345 e me resume o cabeçalho e a timeline

Lista os documentos judiciais do processo 0000000-00.0000.0.00.0000

Lê a última decisão da pasta judicial desse processo

Baixa os autos completos desse processo pra ~/Downloads

Tenho notificações no SPA?

🏗️ Estrutura do projeto

spa-mcp/
├── README.md                     # este arquivo
├── pyproject.toml                # dependências e entry point (uv)
├── setup_credenciais.py          # setup inicial (rodar 1x)
├── diagnostico_login.py          # diagnóstico de login HTTP puro
├── diagnostico_login_browser.py  # fallback com Chrome real (patchright, headed)
├── docs/assets/banner.svg        # arte do repositório
└── src/spa_mcp/
    └── server.py                 # servidor MCP completo (sessão, parsers e as 12 tools)

🔬 Como funciona por dentro

Detalhes de engenharia reversa do SPA que este MCP encapsula — úteis se o sistema mudar ou se você for adaptar para outra instalação da mesma plataforma:

Login e sessão — autenticação Devise clássica: GET /users/sign_in para extrair o token CSRF do form#new_user, depois POST com user[email]/user[password]. Os cookies persistem em ~/.mcp-spa-session.json (chmod 600) e são reaproveitados entre chamadas; quando qualquer requisição cai na tela de login, o servidor reloga automaticamente uma vez — com um lock de thread, porque ferramentas como a triagem rodam requisições em paralelo e dois relogins simultâneos disputariam a sessão.

Caixas = DataTables server-side — a página /procedures?flow_id=N não traz os dados: a tabela #procedures-box aponta o endpoint JSON no atributo data-url (/procedures/inbox?...). Esse endpoint devolve cada processo como uma lista de células HTML; o valor limpo vem no texto visível (o truncamento do SPA é só CSS) com o atributo title de fallback. Os nomes das colunas saem dos data-name dos <th>.

Dois bugs server-side contornados — enviar search[value] preenchido ou qualquer cláusula order[...] ao inbox responde HTTP 500 (bugs do próprio SPA). Por isso busca e ordenação são feitas 100% no cliente: com busca, o MCP baixa até 500 linhas da caixa e filtra localmente (substring case-insensitive em todos os campos; com 4+ dígitos, compara também só os dígitos — acha CNJ com ou sem pontuação).

Número CNJ nas caixas de expediente — a listagem dessas caixas não tem coluna de número de processo. A única fonte é o link de "Documentos Externos" na coluna Ações (/judicial_processes/<cnj>/documents?soap_setting_id=N), de onde o MCP extrai o CNJ (20 dígitos) e o soap_setting_id (origem da comunicação — ex.: TJPI 1º grau).

Prazo vigente — o campo de prazo do SPA acumula o histórico ("Ciência tácita 17/07/2026 - 01:00 | ..."). O MCP descarta datas administrativas ("Data da criação: ..."), escolhe a data futura mais próxima (ou, se todas passaram, a mais recente) e devolve data_prazo + dias_para_prazo (negativo = atrasado), mantendo o texto completo em prazo_completo para conferência.

Data de entrada na caixa — exata quando o tooltip traz a data por extenso ("03 de Julho de 2026, 17:28"); senão aproximada (±1 dia) a partir do texto relativo ("aproximadamente 23 horas", "3 meses").

Leitura de PDFsler_documento_judicial extrai o texto com PyMuPDF em páginas, trunca em max_chars e indica a próxima pagina_inicial; os últimos 5 PDFs ficam num cache LRU em memória, então continuar a leitura de um documento longo não rebaixa o arquivo do tribunal. PDFs escaneados sem camada de texto são detectados e a resposta orienta baixar para OCR externo.

Honestidade estatística — toda ferramenta que avalia uma amostra da caixa (busca, prazos, entradas recentes, triagem) avisa explicitamente quando a caixa tem mais processos do que os avaliados, para o modelo não concluir "não há nada" a partir de uma amostra parcial.

🔒 Segurança

  • Credenciais ficam no Keychain do macOS (service mcp-spa), nunca em arquivo nem no código

  • Cookies de sessão em ~/.mcp-spa-session.json com permissão 600 (só o seu usuário lê)

  • Nenhuma ação de escrita no SPA: este MCP só — não toma ciência, não executa passos de fluxo, não protocola nem altera nada; os downloads gravam apenas no seu disco local

  • Nenhum dado de processo no repositório: o código não contém números de processo, nomes de parte nem credenciais

⚠️ Avisos importantes

Fragilidade de scraping — o projeto depende do HTML e dos endpoints atuais do SPA. Se a plataforma for atualizada: rode uv run diagnostico_login.py para ver onde trava, inspecione as páginas salvas em /tmp/spa_*.html e ajuste os seletores em src/spa_mcp/server.py. Para depurar visualmente há o fallback headed: uv run diagnostico_login_browser.py.

Busca e ordenação são locais — o endpoint de inbox do SPA responde HTTP 500 a search[value] e order[...] (bugs do sistema, não deste projeto). A busca baixa até 500 linhas da caixa e filtra no cliente; caixas maiores que isso retornam aviso de amostra parcial.

Datas aproximadas — quando o SPA só expõe texto relativo ("há 2 dias"), a data de entrada é aproximada em ±1 dia. A resposta indica quando a data é exata (tooltip por extenso) e quando é estimada.

Uso responsável — sistema interno de trabalho: use com a sua conta, para os seus processos, respeitando as normas do órgão. Nada de varredura massiva.

🔄 Adaptando para outras instalações

O SPA da Coreplan atende outros entes públicos. Para adaptar: mude BASE_URL em src/spa_mcp/server.py, confira o id do form de login (new_user) e da tabela de inbox (procedures-box) no DevTools, ajuste os flow_id de exemplo nas docstrings e renomeie o MCP (FastMCP("spa-pmt")).

🚧 Roadmap

  • OCR local para documentos judiciais escaneados sem camada de texto

  • Suporte a outros soap_setting_id (tribunais de origem) descobertos automaticamente

  • Cache opcional em disco da listagem de caixas para triagens mais rápidas

📝 Licença e créditos

Uso pessoal e profissional, sem garantias — use por sua conta e risco, respeitando as regras do órgão. Construído por Fábio Ximenes Barros com ajuda do Claude, usando FastMCP, Scrapling, BeautifulSoup e PyMuPDF.

Available Tools

12 tools
baixar_documento_judicialA

Baixa um documento da Pasta do Processo judicial (PJe/TJPI) pelo id retornado por listar_documentos_judiciais — ou, sem documento_id, baixa os autos completos num único PDF.

ParametersJSON Schema
NameRequiredDescriptionDefault
pastaNo~/Downloads
documento_idNo
numero_processoYes
soap_setting_idNo

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the full burden. It discloses the two operating modes and the source system, but lacks details on error handling (e.g., invalid ID), file naming, or required permissions. The description adds value beyond the schema but falls short of full behavioral transparency.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single sentence with the main action front-loaded and the alternative mode clearly introduced by a dash. Every word contributes to understanding, with no redundancy.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The description covers the core behavior and both modes, and an output schema exists to handle return values. However, with 4 parameters and no annotations, more could be said about parameter semantics and error behavior, but the tool's simplicity makes this adequate.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description must compensate. It clarifies that documento_id is the ID returned by listar_documentos_judiciais and that omitting it triggers full-case download, but it leaves numero_processo, pasta, and soap_setting_id only partially explained by their names and defaults.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states that the tool downloads a document from the judicial case folder (PJe/TJPI) using an ID from listar_documentos_judiciais, and also supports downloading complete case files as a single PDF when no ID is provided. It distinguishes itself from sibling tools like listar_documentos_judiciais (which lists) and ler_documento_judicial (which reads content).

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It specifies when to use the tool: when you have a document ID from listar_documentos_judiciais or when you want the full case files by omitting the ID. It does not explicitly exclude or compare with baixar_processo, but the two-mode behavior is clearly described, providing adequate usage context.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

baixar_processoA

Baixa o PDF integral do processo do SPA-PMT (todas as peças num único arquivo, como o sistema monta) para a pasta indicada.

ParametersJSON Schema
NameRequiredDescriptionDefault
pastaNo~/Downloads
id_processoYes

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.2/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the transparency burden. It discloses the key behavior that the tool downloads an integral PDF assembled by the system, which is useful context. However, it does not mention permissions, potential errors, or side effects, though for a download operation this is acceptable.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single, concise sentence that front-loads the action ('Baixa o PDF integral') and includes all essential information without any filler. It is easy to parse and well-structured.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple download tool with two parameters and an output schema, the description is fairly complete. It explains the output (PDF), destination, and full-process scope. It does not detail error handling or how to obtain the process ID, but these are not critical for using the tool correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema descriptions are missing (coverage 0%), so the description must compensate. It adds meaning to 'pasta' (indicated folder) through 'para a pasta indicada', but 'id_processo' is only implied via 'do processo' and its name. The description partially clarifies parameters but not fully.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states that the tool downloads the full PDF of a SPA-PMT process, including all parts in a single file, to a specified folder. The verb 'Baixa' and resource 'processo do SPA-PMT' are specific, and it distinguishes itself from sibling tools like 'baixar_documento_judicial' which handles individual judicial documents.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies the tool is used when a user needs the complete process PDF, as opposed to individual document downloads or process lookup. It provides clear context but does not explicitly mention when not to use it or name alternative tools.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

buscar_processoB

Busca processos no SPA-PMT por número CNJ, nome de parte ou CPF/CNPJ (a busca global do topo do sistema).

ParametersJSON Schema
NameRequiredDescriptionDefault
termoYes

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

B3.4/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations are entirely absent, so the description carries the full burden. It discloses the search criteria but doesn't mention that the operation is read-only, any rate limits, pagination behavior, or what the response contains. This is a notable gap for a search tool.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single, front-loaded sentence that directly conveys the purpose and parameter semantics with zero wasted words.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple one-parameter search tool with an output schema, the description covers the core purpose and parameter meaning. Still, it lacks explicit usage guidelines and behavioral details (e.g., read-only confirmation), leaving some gaps for an AI agent deciding between tools.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The single parameter 'termo' is explicitly explained as accepting a CNJ number, party name, or CPF/CNPJ, which adds significant meaning beyond the bare schema. However, it doesn't specify formatting details (e.g., CNJ punctuation), so it's not exhaustive.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool searches processos in SPA-PMT by CNJ number, party name, or CPF/CNPJ, with a specific verb ('Busca') and resource. It distinguishes itself by noting it's the global top-of-system search, but it doesn't explicitly name alternative tools for different use cases.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The phrase 'a busca global do topo do sistema' implies this is the general-purpose search tool, but it doesn't explicitly state when to use it over siblings like obter_processo or listar_caixa, nor does it mention any exclusions or prerequisites.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

entradas_recentesA

Processos que ENTRARAM numa caixa do SPA nos últimos dias dias, do mais recente ao mais antigo. A data de entrada é exata quando o SPA expõe o tooltip por extenso; senão é aproximada (±1 dia) a partir do texto relativo ("há 2 dias", "aproximadamente 1 mês").

ParametersJSON Schema
NameRequiredDescriptionDefault
diasNo
limiteNo
flow_idYes

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A3.8/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries the full burden. It discloses an important behavioral nuance: entry dates may be approximate (±1 day) depending on whether the SPA exposes full tooltips. It also states the ordering behavior. This adds meaningful context beyond the schema, though it doesn't discuss pagination or limits.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is two sentences, front-loaded with the core purpose and ordering, followed by a concise explanation of date precision. Every sentence adds value without unnecessary detail.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

An output schema exists, so return values don't need explanation. However, the description omits the meaning of the required parameter flow_id and the optional limite, which are part of the tool's correct invocation. The date precision nuance is helpful, but the tool is not fully described for correct use.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 0%, so the description must explain all parameters. It explains 'dias' (time window and date precision) but does not clarify the required 'flow_id' (likely the box identifier) or 'limite' (record limit). This leaves critical parameters undocumented for the agent.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb and resource: lists processes that entered a SPA box within a time window, ordered newest to oldest. This clearly distinguishes it from siblings like 'listar_caixa' (likely current contents) and 'buscar_processo' (search by criteria).

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies usage for retrieving recent arrivals, but it does not explicitly state when to use this tool versus alternatives like listar_caixa or buscar_processo. No exclusions or alternative recommendations are provided.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

ler_documento_judicialA

Extrai o TEXTO de um documento da Pasta do Processo judicial (despacho, decisão, sentença, petição...) direto na conversa, sem salvar arquivo. Use listar_documentos_judiciais para obter o id.

Documento longo: o texto é truncado em max_chars e a resposta indica a próxima pagina_inicial para continuar (o PDF fica em cache — continuar a leitura não rebaixa o arquivo). Também detecta os ids do PJe citados no texto (ids_pje_detectados), úteis para citar peças em minutas.

Anexo escaneado sem camada de texto vem vazio — a resposta avisa e o caminho é baixar_documento_judicial para OCR externo.

ParametersJSON Schema
NameRequiredDescriptionDefault
max_charsNo
documento_idYes
pagina_inicialNo
numero_processoYes
soap_setting_idNo

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.9/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries full behavioral disclosure. It explains truncation via max_chars, pagination via pagina_inicial, PDF caching for continuation, detection of PJe IDs, and the behavior for scanned attachments (empty response with a warning). This is rich, specific, and goes beyond basic operational details.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is well-structured in three short paragraphs: purpose and ID source, long-document behavior, and scanned attachment edge case. Every sentence adds value, with no redundant repetition of schema or annotations.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The description is complete given the tool's complexity and lack of annotations. It covers edge cases (long documents, scanned attachments), explains key output behaviors (truncation, pagination, PJe detection), and provides alternatives. With an output schema present, detailed return values are not necessary here.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

With 0% schema coverage, the description adds meaning to several parameters: max_chars is tied to truncation, pagina_inicial to continuation, and documento_id to the list function. It does not explain soap_setting_id, but it compensates well for the parameters that matter to the user.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool's function: extracting text from a judicial document without saving the file. It specifies the resource type (document in the case folder) and distinguishes it from siblings like baixar_documento_judicial (download) and listar_documentos_judiciais (list).

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description explicitly instructs to use listar_documentos_judiciais to obtain the document ID, and for scanned attachments without a text layer, it directs users to baixar_documento_judicial for OCR. This provides clear when-to-use and alternative guidance.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

listar_caixaA

Lista os processos de uma caixa do SPA-PMT (fluxo).

Caixas conhecidas da Procuradoria Patrimonial (use listar_fluxos para a lista atualizada com totais): 12 = Processo Patrimonial 26 = Processo Patrimonial - Procurador(a)-Chefe 40 = TRF1 - Processos Judiciais 1º grau 41 = TRF1 - Processos Judiciais 2º grau 15 = Inventário e Partilha - Fiscal 22 = Solicitação ao(a) Assessor(a) da Patrimonial

ParametersJSON Schema
NameRequiredDescriptionDefault
buscaNofiltro de texto livre — aplicado NO CLIENTE (enviar search[value] ao inbox do SPA responde HTTP 500, bug do sistema); com busca, baixamos até 500 linhas e filtramos localmente.
paginaNopágina da listagem (1-based).
flow_idYesid do fluxo (caixa) no SPA.
por_paginaNoprocessos por página.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.7/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description carries the full burden. It discloses important behavioral details: the `busca` parameter is applied client-side because server-side filtering triggers HTTP 500 (a bug), and with a search it downloads up to 500 lines and filters locally. It also lists specific known caixa IDs, adding useful context beyond the schema. This exceeds expectations for a simple list operation.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is compact and well-structured: a one-sentence summary, then a bulleted list of known caixas. Every line adds value — the list of IDs is practical, and the note about `listar_fluxos` is directly useful. No filler or redundant content.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given that an output schema exists (so return values are already documented), the description covers all necessary contextual aspects: the tool's purpose, how to specify a caixa, a critical bug behavior, and an alternative tool for getting the list of caixas. It is fully sufficient for an agent to select and invoke this tool correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

All four parameters are described in the schema (100% coverage), so the baseline is 3. The description adds extra meaning for the `busca` parameter by explaining the client-side filter and the bug, which is not evident from the schema alone. This additional nuance justifies a 4.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states 'Lista os processos de uma caixa do SPA-PMT (fluxo)' — a specific verb ('Lista') and resource ('processos de uma caixa'). It also distinguishes itself from the sibling tool `listar_fluxos` by noting that `listar_fluxos` provides the updated list of caixas with totals, while this tool lists the processes inside a given caixa.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description explains when to use this tool: to list processes in a known caixa, and points to `listar_fluxos` as the alternative for retrieving the list of caixas with totals. However, it does not explicitly state when not to use it versus other siblings like `buscar_processo`, but the context is sufficiently clear.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

listar_documentos_judiciaisA

Lista os documentos externos do processo judicial — a "Pasta do Processo" que o SPA baixa do PJe/TJPI por comunicação eletrônica (petição inicial, despachos, certidões, intimações etc.).

ParametersJSON Schema
NameRequiredDescriptionDefault
numero_processoYesnúmero CNJ, com ou sem pontuação.
soap_setting_idNoorigem da comunicação (1 = TJPI 1º grau, padrão).

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A3.7/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the full burden. It reveals the data source (PJe/TJPI) and document types, and the verb 'Lista' implies a read-only operation. However, it does not explicitly state read-only nature, pagination, ordering, or potential side effects like triggering a download.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single sentence that front-loads the main action and then adds necessary context about the document source and types. It is reasonably compact, with parenthetical examples adding useful detail without excessive length.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool's low complexity (2 params, output schema exists), the description is adequate: it explains what documents are included and their origin. Return values are not described but are covered by the output schema. It does not address ordering or filters, but that is not critical for a listing tool.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The input schema already covers both parameters with 100% coverage (numero_processo as CNJ number, soap_setting_id as communication origin). The description adds no additional parameter semantics beyond the schema, so the baseline of 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool 'Lista os documentos externos do processo judicial' with a specific verb and resource. It further distinguishes itself from siblings like baixar_documento_judicial and ler_documento_judicial by identifying the 'Pasta do Processo' scope and providing document examples.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies the use case (listing external judicial documents) but does not explicitly compare with alternative sibling tools or specify when not to use it. There are no named alternatives or exclusions, so guidance is implied rather than explicit.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

listar_fluxosA

Lista as caixas (fluxos) do usuário no SPA-PMT com o total de processos em cada uma — o equivalente às abas de "Meus Processos".

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.5/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description carries the full burden. It clearly indicates a read-only action ('Lista') and describes the output, implying no side effects. It does not mention auth, pagination, or rate limits, but for a zero-parameter list operation this is adequate and not misleading.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single sentence that is front-loaded with the verb and object, then clarifies scope and output. There is no redundant or filler content; every phrase adds value.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a zero-parameter tool with an output schema, the description is complete. It states what is listed, the user scope, the system, and the key output attribute (process count). The analogy to 'Meus Processos' adds helpful context, and with an output schema available, nothing else is needed.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The tool has zero parameters, so the baseline per rubric is 4. The schema is empty and the description adds no parameter-level details, but none are needed. The description appropriately focuses on the list semantics and output content.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb ('Lista') and resource ('caixas (fluxos)') with scope ('do usuário no SPA-PMT') and output content ('total de processos em cada uma'). It clearly distinguishes from sibling 'listar_caixa' by describing a user-level overview with counts, making its purpose unambiguous.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides clear context by equating the tool to the 'Meus Processos' tabs, strongly implying when to use it (when an overview of all user's boxes with counts is needed). It does not explicitly name alternatives or exclusions, but the context is sufficient for a simple list tool.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

notificacoesB

Notificações do sino do SPA (avisos ao procurador logado).

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

B3.2/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations available, the description carries the full burden of disclosure, but it only provides context about the source (SPA bell) and audience (logged-in attorney). It does not disclose whether the tool lists notifications, marks them as read, or requires specific permissions, leaving significant behavioral gaps.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single, concise sentence that directly states the purpose without unnecessary words. It is appropriately sized and front-loaded with the key information.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

While the tool is simple with no parameters and has an output schema, the description is sparse. It explains what the tool is about but does not clarify the action (e.g., whether it lists or retrieves notifications) or provide any context about the notification behavior, making it minimally adequate but not fully complete.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The tool has zero parameters, so the baseline is 4. The description provides no parameter-specific information, but none is needed given the empty schema, and the context about notifications adds value for understanding what the tool returns.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description identifies the tool as handling SPA bell notifications for the logged-in attorney, which is clear and distinct from sibling tools focused on processes and documents. However, it lacks an explicit verb like 'list' or 'get', so the action is implied rather than stated.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No guidance is provided on when to use this tool versus alternatives. The description simply states what it is, leaving the agent to infer that it is for retrieving notifications, with no mention of exclusions or alternatives.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

obter_processoA

Abre um processo do SPA-PMT pelo id interno (ex.: 25615) e retorna os campos do cabeçalho (partes, classe, vara, responsável, status, prazos, observações) e a timeline de andamentos com seus documentos.

ParametersJSON Schema
NameRequiredDescriptionDefault
id_processoYes

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.3/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description carries the full burden. It discloses the return contents (header fields, timeline, documents) but does not mention whether the operation is read-only, required permissions, or error behavior for invalid IDs. For a retrieval tool, this is basic but not rich.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is concise, with two sentences that front-load the action and list the return fields in a structured way. No unnecessary words or filler.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The tool is simple (1 parameter, has an output schema), and the description provides a good overview of what is returned. It doesn't cover error handling or explicit read-only status, but the output schema likely fills in return-value details, making the description adequate though not exhaustive.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The description adds meaning to the single parameter by explaining it is an 'id interno' and giving a concrete example (25615). With schema description coverage at 0%, this fully compensates for the lack of schema-level parameter documentation.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool opens/retrieves a process by internal ID and returns specific header fields and the timeline of movimentos with documents. The verb 'Abre' and resource 'processo do SPA-PMT' give a specific action and scope, distinct from siblings like buscar_processo.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies the tool should be used when you have the internal ID and need process header and timeline details. It provides clear context but does not explicitly mention alternatives or when not to use it, so it lacks exclusions, aligning with a score of 4.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

prazos_urgentesB

Varre todas as caixas do usuário no SPA-PMT e retorna os processos com prazo VIGENTE nos próximos dias dias, ordenados do mais urgente ao menos urgente (dias_restantes negativo = atrasado).

O campo de prazo do SPA acumula prazos históricos; considera-se vigente a data futura mais próxima (ou, se todas passaram, a mais recente). O texto completo do campo vai em prazo_completo para conferência.

ParametersJSON Schema
NameRequiredDescriptionDefault
diasNo
por_fluxoNo
incluir_atrasadosNo

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

B3.4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the burden of explaining behavior. It discloses the interpretation of 'prazo vigente' (the closest future date from a field that accumulates historical deadlines) and clarifies that negative remaining days indicate overdue processes. This is meaningful context beyond the basic purpose.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is concise, with three sentences that front-load the main purpose and then provide necessary detail about the deadline logic. There is no wasted wording, and the structure is logical.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The description covers the core scanning behavior, ordering, and the vigente calculation, and mentions the output field `prazo_completo`. However, it omits explanations for two of the three parameters and does not describe pagination or edge cases, leaving the tool only partially specified.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description must explain the parameters. It clearly explains `dias` (the lookahead window) but leaves `por_fluxo` and `incluir_atrasados` completely unexplained, creating a significant gap for a tool with only three parameters.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states it scans all user boxes and returns processes with deadlines within the next `dias` days, sorted by urgency. The action and resource are specific, though it does not explicitly differentiate from sibling tools like listar_caixa or buscar_processo.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies when to use this tool (to find processes with upcoming deadlines) but does not provide explicit guidance, exclusions, or alternatives. It does not mention when not to use it or which sibling tool would be preferable in other scenarios.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

triagemA

TRIAGEM em uma chamada — briefing da caixa do procurador: varre todas as caixas, junta o que entrou nos últimos dias dias e, para cada processo com integração judicial, resume os documentos mais recentes da Pasta do Processo (descrição/data, sem baixar PDF). Leitura passiva: não toma ciência nem executa passo de fluxo.

ParametersJSON Schema
NameRequiredDescriptionDefault
diasNo
max_processosNo
max_documentosNo

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.2/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description carries the full disclosure burden and does well: it states it scans all boxes, aggregates entries from the last N days, summarizes only documents for cases with judicial integration, does not download PDFs, and explicitly declares 'Leitura passiva: não toma ciência nem executa passo de fluxo' (passive read, no state change). It doesn't mention rate limits or error conditions, but the core side-effects and output expectations are clear.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is two sentences long, front-loads the tool's purpose ('TRIAGEM em uma chamada'), and every clause earns its place: scanning all boxes, time-window, judicial integration filter, summary content (description/date), and absence of PDF downloads. No fluff or repetition.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The tool is a read-only triage/aggregation function with three optional parameters and an output schema (not shown). The description covers the full scope: all inboxes, time window, filtering by judicial integration, what is summarized, what is omitted (PDFs), and that no workflow action is taken. With an output schema present, the description need not detail return formatting, making this sufficiently complete.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description must compensate for the three parameters. It explicitly explains the 'dias' parameter in context ('nos últimos `dias` dias'), but does not mention 'max_processos' or 'max_documentos' by name. These names are self-explanatory and the description implies limits via 'para cada processo... resume os documentos mais recentes', but full compensation is not achieved.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description uses a strong verb 'varre' (scans) and specifies the scope: all mailboxes, gathering items from the last 'dias' days and summarizing recent documents per process. It clearly distinguishes from siblings like listar_caixa (single box) and baixar_documento_judicial (downloads PDFs) by explicitly stating it does not download PDFs and is a passive read-only briefing.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It states the use case: 'TRIAGEM em uma chamada — briefing da caixa do procurador' (one-call triage to get a prosecutor inbox briefing). It implies when to use it (quick overview) and contrasts with alternatives by noting it scans all boxes without downloading files or executing workflow steps. However, it never explicitly names sibling tools as alternatives or gives a 'use X instead' directive.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections.

  1. 12 tool updatesv0.1.0
    • First observedbaixar_documento_judicial
    • First observedbaixar_processo
    • First observedbuscar_processo
    • First observedentradas_recentes
    • First observedler_documento_judicial
    • First observedlistar_caixa
    • First observedlistar_documentos_judiciais
    • First observedlistar_fluxos
    • First observednotificacoes
    • First observedobter_processo
    • First observedprazos_urgentes
    • First observedtriagem

TDQS

A3.8/5.0

Scored across 12 tools

Disambiguation4/5

Most tools target distinct resources: boxes, processes, documents, notifications, and deadline summaries. The main overlap is between baixar_processo and baixar_documento_judicial (when called without an id), but their descriptions clarify different sources and purposes.

Naming Consistency3/5

The set is split between verb_noun names (listar_caixa, buscar_processo, baixar_processo, etc.) and noun-only or noun-adjective names (notificacoes, prazos_urgentes, entradas_recentes, triagem). While mixed, the names remain readable and somewhat predictable.

Tool Count5/5

With 12 tools, the server is well-scoped for legal process consultation. Each tool serves a distinct step in the workflow—listing, searching, retrieving, downloading, reading, and summarizing—without unnecessary bloat.

Completeness4/5

The toolset covers the core consultative lifecycle: list boxes, search and get processes, download full cases or individual documents, extract text, and generate deadline/recent-entry briefings. It lacks write operations like moving processes or taking official notice, but the read-only focus appears intentional, so gaps are minor.

Maintenance

ActivitySlowing
ResponsivenessNo issues

Related MCP Connectors

Related MCP Servers

  • F
    license
    Not graded
    quality
    C
    maintenance
    Enables querying the Brazilian PJe court system for TJMA (1st and 2nd degrees) via natural language, with automated login, expedient and deadline checks, document listing and download, and case searches.
    3
    -
  • F
    license
    Not graded
    quality
    C
    maintenance
    Enables natural language querying of Brazil's Federal Justice 1st Region electronic court system (PJe-TRF1) for both 1st and 2nd degrees, allowing users to check pending expedients, deadlines, case details, and download documents via an automated login and read-only MCP server.
    2
    -
  • F
    license
    A
    quality
    C
    maintenance
    Allows querying the Diário Oficial do Estado do Piauí (DOE-PI) in natural language: list editions, search content, and read full texts without downloading PDFs.
    4
    -
  • A
    license
    Not graded
    quality
    C
    maintenance
    MCP server for querying case lists from the TJSP court (eproc) via official sources. It provides one read-only tool to consult court cases through natural language in any MCP-compatible client.
    MIT