Skip to main content
Glama
pdmtt

Brazilian Law Research MCP Server

by pdmtt

TstLegalPrecedentsRequest

Search and retrieve legal precedents from Brazil's Superior Labor Court (TST) using specific criteria to find relevant labor law decisions and uniform jurisprudence.

Instructions

Requisição dos precedentes judiciais do Tribunal Superior do Trabalho (TST) que satisfaçam os critérios passados.

O TST é o órgão de cúpula da Justiça do Trabalho. Tem a função precípua de uniformizar a jurisprudência trabalhista brasileira.

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
pageNo A página dos resultados a ser retornada. Cada página contém uma fração dos resultados da pesquisa. A página 1 é a primeira página dos resultados. É útil requisitar mais de uma página para conseguir mais informações, se necessário. Por exemplo, se os resultados retornados pela página anteriormente requisitada forem pertinentes, mas não satisfatórios, é adequado requisitar a página seguinte para obter mais precedentes relacionados.
summaryYes Critérios que serão buscados na ementa das decisões desejadas. É admitido o uso de aspas e elas devem ser empregadas para pesquisas exatas de expressões ou palavras compostas.

Implementation Reference

  • The core handler logic: `research` classmethod scrapes the TST jurisprudence website using Playwright, searches by ementa (summary), and extracts precedent summaries.
    async def research( cls, browser: "Page", *, summary_search_prompt: str, desired_page: int = 1 ) -> "list[Self]": _LOGGER.info( "Starting research for legal precedents authored by the TST with the summary search prompt %s", repr(summary_search_prompt), ) await browser.goto("https://jurisprudencia.tst.jus.br/") with contextlib.suppress(TimeoutError): await ( browser.locator("span[class^='jss']") .filter(has_text="Fechar") .click(timeout=1000) ) locator_summary_input = browser.locator("#campoTxtEmenta") await locator_summary_input.fill(summary_search_prompt) await locator_summary_input.press("Enter") await browser.locator("circle").wait_for(state="hidden", timeout=1000 * 30) precedents = [ cls(summary=text) for locator in await browser.locator("div[id^=celulaLeiaMaisAcordao]").all() if (text := await locator.text_content()) is not None ] _LOGGER.info( "Found %d legal precedents", len(precedents), ) return precedents
  • Pydantic input model/schema for the tool, defining the 'summary' search criteria and optional 'page' parameter.
    class TstLegalPrecedentsRequest(BaseLegalPrecedentsRequest): """Requisição dos precedentes judiciais do Tribunal Superior do Trabalho (TST) que satisfaçam os critérios passados. O TST é o órgão de cúpula da Justiça do Trabalho. Tem a função precípua de uniformizar a jurisprudência trabalhista brasileira.""" summary: str = Field( title="Ementa", description=textwrap.dedent(""" Critérios que serão buscados na ementa das decisões desejadas. É admitido o uso de aspas e elas devem ser empregadas para pesquisas exatas de expressões ou palavras compostas."""), min_length=1, examples=[ "trabalho temporário jornada “adicional de periculosidade”", ], )
  • Tool registration: defines the Tool object for TstLegalPrecedentsRequest (among others), linking input schema and the TstLegalPrecedent handler class.
    _TOOLS_AND_MODELS: Final[ list[ tuple[ Tool, type[BaseLegalPrecedent], type[StjLegalPrecedentsRequest] | type[TstLegalPrecedentsRequest] | type[StfLegalPrecedentsRequest], ] ] ] = [ ( Tool( name=request_model.__name__, description=request_model.__doc__, inputSchema=request_model.model_json_schema(), ), domain_model, request_model, ) for request_model, domain_model in [ (StjLegalPrecedentsRequest, StjLegalPrecedent), (TstLegalPrecedentsRequest, TstLegalPrecedent), (StfLegalPrecedentsRequest, StfLegalPrecedent), ] ]
  • MCP server endpoint registration: `list_tools` function returns the registered tools including TstLegalPrecedentsRequest.
    async def list_tools() -> list["Tool"]: """List all tools available in the MCP server.""" return [i[0] for i in _TOOLS_AND_MODELS]
  • Pydantic output model for TST precedents with a validator to clean summary text from website artifacts.
    class TstLegalPrecedent(BaseLegalPrecedent): """Model for a legal precedent from the Tribunal Superior do Trabalho (TST).""" @field_validator("summary") @classmethod def _remove_style_elements_from_summary(cls, v: str) -> str: """Remove style elements from the summary. On the TST website, the summary is split into multiple elements. In some cases, there's a <style> element among the <p> elements. Its data is not relevant at all to the summary, so we need to filter it out.""" if not v.startswith("<!--"): return v for char_idx, char in enumerate(v): if char == ">" and v[char_idx - 2 : char_idx + 1] == "-->": return v[char_idx + 1 :].strip() raise RuntimeError( "Could not find the end of the style element inside the summary" ) @override

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/pdmtt/brlaw_mcp_server'

If you have feedback or need assistance with the MCP directory API, please join our Discord server