← Back to search

io.github.matematicsolutions/br-eli-mcp

matematicsolutions Scanned 26d ago

MCP server for Brazilian federal law: legislation, DataJud, STJ, CARF, TST, TCU citations.

C
63.1 / 100

Versions

0.6.0latest
first seen Jul 8, 2026
PermissionsTool SafetyAuthAnnotationsCode QualityStabilitySpecVuln HistoryAuthorTransparencyCommunity

Tools 15

br_search_proposicoes
annotations: none low

List Brazilian federal bills (proposicoes) of a given type and year. Args: sigla_tipo: bill type code, e.g. ``"PL"`` (Projeto de Lei), ``"PLP"``, ``"PEC"``. ano: year, e.g. ``2024``. itens: max results (default 20, API caps around 100). Returns: ``{"total": int, "items": [...]}`` - each item carries the citation contract.

ano int itens int sigla_tipo str
br_get_proposicao
annotations: none low

Fetch full detail (including current status) for one bill by its numeric id. Args: id: the Camara dos Deputados proposicao id (from ``br_search_proposicoes``). Returns: A dict with ``sigla_tipo``, ``numero``, ``ano``, ``ementa``, ``situacao``, ``lex_uri``, ``human_readable_citation``, ``source_url``.

id int
br_get_norma
annotations: none low

Resolve a Brazilian Norma Juridica (enacted law/decree/amendment) by its URN Lex. Identification + Diario Oficial da Uniao publication provenance + amendment history + any STF unconstitutionality notes - NOT the full compiled article text (no confirmed URL rule to Planalto; see DISCOVERY.md). Args: urn: a URN Lex, e.g. ``"urn:lex:br:federal:lei:2002-01-10;10406"`` (Codigo Civil). Must start with ``"urn:lex:br:"`` - never invent one, take it from the user or from another tool's output. Returns: A dict with ``tipo``, ``numero``, ``norma_nome``, ``apelido``, ``data_assinatura``, ``ementa``, ``observacao``, ``amendments``, ``lex_uri``, ``human_readable_citation``, ``source_url``.

urn str
br_get_norma_index
annotations: none low

List the addressable structure of a Norma Juridica: parts, books, titles, chapters, sections, and articles, in document order. Use this to find the `dispositivo` suffix for the article you need (e.g. `"art5"`), then pass it to `br_get_norma_texto` - do not guess a suffix. Args: urn: a URN Lex, e.g. ``"urn:lex:br:federal:lei:2002-01-10;10406"`` (Codigo Civil). Must start with ``"urn:lex:br:"``. Returns: ``{"urn": str, "total": int, "items": [{"suffix", "tipo", "name"}, ...]}``.

urn str
br_get_norma_texto
annotations: none low

Fetch the real text of one dispositivo (article, or a titulo/capitulo header) of a Norma Juridica. An article's text includes its caput and every paragraph/inciso/alinea beneath it, concatenated in document order - not a summary. Args: urn: a URN Lex, e.g. ``"urn:lex:br:federal:lei:2002-01-10;10406"``. dispositivo: a suffix from `br_get_norma_index`, e.g. ``"art5"``. Never guess one - a wrong suffix returns `not_found`, it does not silently fall back to a different article. Returns: A dict with ``dispositivo``, ``text``, ``lex_uri``, ``human_readable_citation``, ``source_url``.

urn str dispositivo str
br_search_processos
annotations: none low

Search court dockets (procedural metadata, NOT ruling text) in one tribunal's DataJud CNJ index. DataJud carries classe/assuntos/orgaoJulgador and the full procedural timeline (`movimentos`) for each docket - it does not carry the prose text of a ruling/acordao/ementa. STF is not covered (see server docstring). Args: tribunal: one of the supported tribunal codes, e.g. ``"STJ"``, ``"TST"``, ``"TRF1"``, ``"TJSP"``, ``"TRT2"``, ``"TRE-SP"``. query: free text - a CNJ process number (15+ digits) matches `numeroProcesso` exactly; anything else matches `classe.nome`. limit: max results (default 20). Returns: ``{"total": int, "items": [...]}`` - each item carries the citation contract.

limit int query str tribunal str
br_get_processo
annotations: none low

Fetch one court docket by its exact CNJ unified process number. Args: tribunal: one of the supported tribunal codes, e.g. ``"STJ"``. numero_processo: the CNJ unified process number (digits, punctuation ignored), e.g. ``"5000035-87.2010.8.21.0057"``. Returns: A dict with ``numero_processo``, ``classe_nome``, ``orgao_julgador``, ``assuntos``, ``movimentos`` (full procedural timeline), ``human_readable_citation``, ``source_url``.

tribunal str numero_processo str
br_search_case_stj
annotations: none low

Search STJ (Superior Tribunal de Justica) acordaos - real ruling text. Unlike `br_search_processos` (DataJud, metadata only), this returns the actual `ementa` (headnote) and `decisao` (ruling body prose) from the STJ Open Data Portal. Scans the most recent monthly bulk files for one orgao julgador (chamber/section) - a miss means "not in the scanned window", not "does not exist". Coverage starts May 2022. Args: orgao: deciding chamber/section, one of the keys in the supported list, e.g. ``"CORTE ESPECIAL"``, ``"TERCEIRA TURMA"``. query: free text - a process/registration number (6+ digits) matches exactly; anything else matches `ministroRelator` or `ementa` (case-insensitive substring). limit: max results (default 20). Returns: ``{"total": int, "items": [...]}`` - each item carries the citation contract.

limit int orgao str query str
br_get_case_stj
annotations: none low

Fetch one STJ acordao by its exact numeroProcesso, with real ruling text. Args: orgao: deciding chamber/section, e.g. ``"CORTE ESPECIAL"``. numero_processo: the STJ process or registration number (digits; punctuation ignored). Returns: A dict with ``ementa``, ``decisao`` (full ruling prose), ``ministro_relator``, ``data_decisao``, ``human_readable_citation``, ``source_url``.

orgao str numero_processo str
br_get_case_carf
annotations: none low

Fetch one CARF (tax appeals) acordao by exact docket or decision number. Exactly one of `numero_processo` / `numero_decisao` must be given - this is an exact lookup, not a search. There is no free-text search tool for CARF because its full-text index is not reliably populated upstream (confirmed empty on live probing for common Portuguese terms). Args: numero_processo: CARF docket number, e.g. ``"16095.000602/2007-70"``. numero_decisao: CARF decision number, e.g. ``"9101-002.402"``. Returns: A dict with ``ementa``, ``decisao_texto`` (full ruling prose), ``relator``, ``turma``/``camara``/``secao``, ``data_publicacao``, ``human_readable_citation``, ``source_url``.

numero_decisao string numero_processo string
br_search_case_tst
annotations: none low

Search TST (labor supreme court) rulings by free text - real ruling text. The query goes into the TST frontend's own "contendo as palavras" (AND) field - quote an expression for an exact-phrase match, e.g. ``"adicional de insalubridade"``. Returns the index's own total plus a page of records carrying the real `ementa` and `inteiro_teor` prose. Args: query: free text (AND semantics; quotes for exact phrase). tipo: document type - ``"ACORDAO"`` (default), ``"DESPACHO"``, ``"SUM"`` (sumulas), ``"OJ"`` (orientacoes jurisprudenciais), ``"PN"``, ``"DESPGP"``, ``"DESPGVP"``, ``"DESPGCG"``. limit: max results per page (default 20). Returns: ``{"total": int, "items": [...]}`` - `total` is the TST index's own `totalRegistros` for the whole query, not the page size.

tipo str limit int query str
br_get_case_tst
annotations: none low

Fetch one TST ruling by its exact CNJ unified process number - real ruling text (`ementa` + `inteiro_teor`). Args: numero_processo: CNJ unified process number, formatted (``"21036-38.2019.5.04.0021"``) or as the raw 20 digits. The fifth segment is 5 (Justica do Trabalho) for every TST case. tipo: document type (default ``"ACORDAO"``). Returns: A dict with ``numero_formatado``, ``nome_relator``, ``orgao_judicante``, ``data_julgamento``, ``ementa``, ``inteiro_teor`` (full ruling prose), ``human_readable_citation``, ``source_url``.

tipo str numero_processo str
br_search_case_tcu
annotations: none low

Search TCU (Federal Court of Accounts) acordaos - public-procurement and public-spending jurisprudence. Returns summaries (`sumario`) plus the index's own total. Use `br_get_case_tcu` for the full ruling text of one acordao. The query supports the portal's own field-scoped syntax in addition to plain words, e.g. ``NUMACORDAO:1771 ANOACORDAO:2026``. Args: query: free text or field-scoped query. limit: max results (default 20). Returns: ``{"total": int, "items": [...]}`` - `total` is the TCU index's own `quantidadeEncontrada` for the whole query, not the page size.

limit int query str
br_coverage
annotations: none low

Declare what this connector covers, how it is sourced, and what it does NOT cover. Call this before telling a user that the law "does not contain" something, and whenever a search comes back empty: the absence may be a gap in this connector rather than in the law. Every gap carries a fallback saying where to look instead. Returns: ``Coverage`` with families, an as-of note, and a non-empty list of known gaps.

br_get_case_tcu
annotations: none low

Fetch one TCU acordao with the real ruling text: `acordao_texto` (deliberation), `relatorio` (rapporteur's report) and `voto` (vote). A TCU acordao is uniquely identified by (numero, ano, colegiado) - the same numero/ano recurs across the Plenario and the two Camaras. When `colegiado` is omitted and more than one acordao matches, this errors and lists the matching bodies instead of guessing. Args: numero: acordao number, e.g. ``"1771"``. ano: four-digit year, e.g. ``"2026"``. colegiado: deciding body - ``"Plenário"``, ``"Primeira Câmara"`` or ``"Segunda Câmara"`` (accent-sensitive, as spelled in the index). Returns: A dict with ``numero``, ``ano``, ``colegiado``, ``relator``, ``data_sessao``, ``sumario``, ``acordao_texto``, ``relatorio``, ``voto``, ``human_readable_citation``, ``source_url``.

ano str numero str colegiado string

Permissions 3

network medium
Server uses network capabilities via: httpx, urllib
filesystem low
Server uses filesystem capabilities via: open(), os, pathlib
env_vars low
Server uses env_vars capabilities via: os.environ

Scan Findings 58

low
Tool 'br_search_proposicoes' has no annotations annotation_checker · 100%
low
Tool 'br_get_proposicao' has no annotations annotation_checker · 100%
low
Tool 'br_get_norma' has no annotations annotation_checker · 100%
low
Tool 'br_get_norma_index' has no annotations annotation_checker · 100%
low
Tool 'br_get_norma_texto' has no annotations annotation_checker · 100%
low
Tool 'br_search_processos' has no annotations annotation_checker · 100%
low
Tool 'br_get_processo' has no annotations annotation_checker · 100%
low
Tool 'br_search_case_stj' has no annotations annotation_checker · 100%
low
Tool 'br_get_case_stj' has no annotations annotation_checker · 100%
low
Tool 'br_get_case_carf' has no annotations annotation_checker · 100%
low
Tool 'br_search_case_tst' has no annotations annotation_checker · 100%
low
Tool 'br_get_case_tst' has no annotations annotation_checker · 100%
low
Tool 'br_search_case_tcu' has no annotations annotation_checker · 100%
low
Tool 'br_coverage' has no annotations annotation_checker · 100%
low
Tool 'br_get_case_tcu' has no annotations annotation_checker · 100%
info
Sandbox failed to start for behavioral verification behavioral_verifier · 100%
medium
Vulnerable dependency: fastmcp@3.4,<4 (GHSA-5h2m-4q8j-pqpj) dependency_analyzer · 95%
medium
Vulnerable dependency: fastmcp@3.4,<4 (GHSA-c2jp-c369-7pvx) dependency_analyzer · 95%
medium
Vulnerable dependency: fastmcp@3.4,<4 (GHSA-m8x7-r2rg-vh5g) dependency_analyzer · 95%
medium
Vulnerable dependency: fastmcp@3.4,<4 (GHSA-mxxr-jv3v-6pgc) dependency_analyzer · 95%
medium
Vulnerable dependency: fastmcp@3.4,<4 (GHSA-rcfx-77hg-w2wv) dependency_analyzer · 95%
medium
Vulnerable dependency: fastmcp@3.4,<4 (GHSA-rj5c-58rq-j5g5) dependency_analyzer · 95%
medium
Vulnerable dependency: fastmcp@3.4,<4 (GHSA-rww4-4w9c-7733) dependency_analyzer · 95%
medium
Vulnerable dependency: fastmcp@3.4,<4 (GHSA-vv7q-7jx5-f767) dependency_analyzer · 95%
medium
Vulnerable dependency: fastmcp@3.4,<4 (PYSEC-2026-1364) dependency_analyzer · 95%
medium
Vulnerable dependency: fastmcp@3.4,<4 (PYSEC-2026-1365) dependency_analyzer · 95%
medium
Vulnerable dependency: fastmcp@3.4,<4 (PYSEC-2026-2474) dependency_analyzer · 95%
medium
Vulnerable dependency: fastmcp@3.4,<4 (PYSEC-2026-2475) dependency_analyzer · 95%
medium
Vulnerable dependency: fastmcp@3.4,<4 (PYSEC-2026-2476) dependency_analyzer · 95%
medium
Vulnerable dependency: fastmcp@3.4,<4 (PYSEC-2026-338) dependency_analyzer · 95%
medium
Vulnerable dependency: httpx@0.27,<1 (GHSA-h8pj-cxx2-jfg2) dependency_analyzer · 95%
medium
Vulnerable dependency: httpx@0.27,<1 (PYSEC-2022-183) dependency_analyzer · 95%
medium
Vulnerable dependency: diskcache@5.6 (GHSA-w8v5-vhqr-4h9v) dependency_analyzer · 95%
medium
Vulnerable dependency: diskcache@5.6 (PYSEC-2026-2447) dependency_analyzer · 95%
info
pyproject.toml metadata manifest_parser · 100%
info
Tool: br_search_proposicoes manifest_parser · 90%
info
Tool: br_get_proposicao manifest_parser · 90%
info
Tool: br_get_norma manifest_parser · 90%
info
Tool: br_get_norma_index manifest_parser · 90%
info
Tool: br_get_norma_texto manifest_parser · 90%
info
Tool: br_search_processos manifest_parser · 90%
info
Tool: br_get_processo manifest_parser · 90%
info
Tool: br_search_case_stj manifest_parser · 90%
info
Tool: br_get_case_stj manifest_parser · 90%
info
Tool: br_get_case_carf manifest_parser · 90%
info
Tool: br_search_case_tst manifest_parser · 90%
info
Tool: br_get_case_tst manifest_parser · 90%
info
Tool: br_search_case_tcu manifest_parser · 90%
info
Tool: br_coverage manifest_parser · 90%
info
Tool: br_get_case_tcu manifest_parser · 90%
info
Required env vars (12) manifest_parser · 80%
info
Sandbox failed to start for output poisoning scan output_poisoning · 100%
medium
Permission: network access detected permission_analyzer · 90%
low
Permission: filesystem access detected permission_analyzer · 80%
low
Permission: env_vars access detected permission_analyzer · 90%
critical
Tool poisoning in 'br_coverage': Cross-tool sequencing directive poisoning · 85%
info
No dependency files found for SBOM generation sbom_generator · 100%
medium
No build provenance detected (SLSA L0) slsa_assessor · 90%