Skip to main content
Glama

be-eli-mcp

An MCP server for Belgian legislation via [Moniteur Belge / Belgisch Staatsblad] (https://www.ejustice.just.fgov.be), the official gazette of the Belgian Federal Public Service Justice. It fetches act metadata and full text by ELI coordinates, with verifiable citations. Part of the eu-legal-mcp line of national legal connectors by MateMatic.

Belgian legislation is addressed by ELI coordinates - type / year / month / day / numac (the Belgian legislative numbering system) - at https://www.ejustice.just.fgov.be/eli/{type}/{yyyy}/{mm}/{dd}/{numac}/justel. Every response carries a native eli_uri, a human_readable_citation and a source_url.

Read-only. The server only queries ejustice.just.fgov.be and writes a local audit log. It never modifies official text.

Belgium is trilingual (French / Dutch / German). human_readable_citation defaults to the French form by LDH convention; use be_get_text(language=...) for Dutch (Belgisch Staatsblad) or German. See CONSTITUTION.md Art. 4 for the full caveat.

Tools

Tool

What it does

be_get_act(doc_type, year, month, day, numac)

Metadata for an act by its ELI coordinates. doc_type is one of loi, decret, ordonnance, arrete, constitution. Returns the native eli_uri, title, source authority, publication date, entry-into-force date, table of contents, and the citation contract.

be_get_text(doc_type, year, month, day, numac, language="fr")

The verbatim consolidated text ("Texte"/"Tekst" section) in fr (default), nl or de.

be_list_year(doc_type, year)

Browse a year's listing for one doc_type, to discover NUMAC coordinates. Titles in this listing are best-effort (may be None); call be_get_act for the authoritative title.

be_coverage()

Declare what this connector covers, when each family was captured, and - explicitly - what it does NOT cover. Every gap carries a fallback.

There is no free-text search: ejustice.just.fgov.be exposes no keyword-search API. Discover acts by ELI coordinates (from a citation you already hold) or by browsing be_list_year.

Related MCP server: Belgian Law MCP Server

Configuration

ejustice.just.fgov.be is keyless. Configuration is optional:

Variable

Meaning

BE_ELI_BASE_URL

ejustice host (default https://www.ejustice.just.fgov.be).

BE_ELI_CACHE_DIR

Disk cache dir (default ~/.matematic/cache/be-eli).

BE_ELI_AUDIT_DIR

Audit log dir (default ~/.matematic/audit).

Copy .mcp.json.example to your MCP client config.

Install

py -3.13 -m venv .venv
.\.venv\Scripts\python.exe -m pip install -e ".[dev]"   # Windows
# or: python -m pip install -e ".[dev]"                  # POSIX

Windows 11 with Smart App Control

Smart App Control blocks unsigned executables, which covers uvx.exe, pip.exe and the be-eli-mcp.exe launcher that pip writes at install time. The python.exe and py.exe from the python.org installer are signed by the Python Software Foundation, so running the module through the interpreter works:

python -m pip install be-eli-mcp
python -m be_eli_mcp

pip.exe is blocked for the same reason, so install with python -m pip, not pip install. If python is not on PATH, use the Windows launcher: py -3 -m be_eli_mcp.

{ "mcpServers": { "be-eli-mcp": { "command": "python", "args": ["-m", "be_eli_mcp"] } } }

Do not turn Smart App Control off to work around this - it cannot be re-enabled without reinstalling Windows.

Tests

pytest tests/test_instructions_drift.py tests/test_parse.py   # offline
pytest tests/test_smoke.py -v                                 # live, hits ejustice.just.fgov.be

Licence

Apache-2.0. Moniteur Belge / Belgisch Staatsblad content is © the Belgian federal state; this software only retrieves and cites it. See CONSTITUTION.md Art. 1 for a note on the licence status of the source data (widely described as CC0 by third-party catalogs; not independently re-verified against ejustice.just.fgov.be's own terms page in this project).

Available Tools

3 tools
be_get_actB
Read-onlyIdempotent

Fetch metadata for a Belgian act by its ELI coordinates.

ParametersJSON Schema
NameRequiredDescriptionDefault
dayYespublication day, 1-31.
yearYespublication year, e.g. ``2020``.
monthYespublication month, 1-12.
numacYesthe NUMAC identifier (Belgian legislative numbering system), e.g. ``2020040054``.
doc_typeYesone of ``loi``, ``decret``, ``ordonnance``, ``arrete``, ``constitution``.

Output Schema

ParametersJSON Schema
NameRequiredDescription
dayNo
yearNo
monthNo
numacNo
titleNo
eli_uriNo
doc_typeNo
languageNo
source_urlNo
dataset_noteNo
dossier_numberNo
entry_into_forceNo
publication_dateNo
source_authorityNo
table_of_contentsNo
human_readable_citationNo

TDQS

B3.4/5.0
Behavior2/5

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

Annotations already declare readOnlyHint=true, openWorldHint=true, idempotentHint=true, destructiveHint=false. The description 'Fetch metadata' is consistent but adds no extra behavioral context (e.g., permissions, limits, or side effects) beyond what annotations provide. The value added is minimal.

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?

Single sentence, front-loaded with the main purpose, no redundant information. Every word earns its place.

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 is short but adequate given the existence of a full output schema and 100% parameter coverage in the schema. It explains what the tool does and how to identify the act. Could be slightly more detailed about the concept of ELI coordinates, but the schema fills the gap.

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 100%, so baseline is 3. The description hints at ELI coordinates but doesn't add new semantic meaning beyond the schema's parameter descriptions (e.g., doc_type enum, date fields, numac). No additional clarification on formats or constraints.

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 specifies the verb 'Fetch', the resource 'metadata for a Belgian act', and the method 'by its ELI coordinates'. It distinguishes from siblings 'be_get_text' (which likely fetches text) and 'be_list_year' (which lists acts by year).

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?

The description provides no guidance on when to use this tool versus alternatives like 'be_get_text' or 'be_list_year'. It only states what it does without indicating prerequisites or exclusion cases.

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

be_get_textA
Read-onlyIdempotent

Fetch the verbatim consolidated text of a Belgian act.

ParametersJSON Schema
NameRequiredDescriptionDefault
dayYespublication day, 1-31.
yearYespublication year.
monthYespublication month, 1-12.
numacYesthe NUMAC identifier.
doc_typeYesone of ``loi``, ``decret``, ``ordonnance``, ``arrete``, ``constitution``.
languageNo``fr`` (default), ``nl`` or ``de``.fr

Output Schema

ParametersJSON Schema
NameRequiredDescription
dayNo
yearNo
monthNo
numacNo
contentNo
eli_uriNo
variantNo
doc_typeNo
languageNo
byte_sizeNo
source_urlNo
dataset_noteNo
human_readable_citationNo

TDQS

A3.5/5.0
Behavior3/5

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

Annotations already indicate readOnly, idempotent, non-destructive behavior. The description adds 'verbatim consolidated text' but no further behavioral traits; no contradiction.

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?

A single sentence of 9 words efficiently conveys the purpose with no 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?

The description is complete for a simple fetch tool with good annotations, but it lacks usage context to differentiate from sibling tools, and does not explain 'consolidated'.

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 100%, so the description adds no extra parameter meaning beyond the schema's own descriptions.

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 specific verb ('Fetch') and resource ('verbatim consolidated text of a Belgian act'), clearly distinguishing from siblings like 'be_get_act' and 'be_list_year'.

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 given on when to use this tool versus alternatives, nor 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.

be_list_yearA
Read-onlyIdempotent

Browse a year's listing of a Belgian legislation type, to discover NUMAC coordinates.

ParametersJSON Schema
NameRequiredDescriptionDefault
yearYese.g. ``2020``.
doc_typeYesone of ``loi``, ``decret``, ``ordonnance``, ``arrete``, ``constitution``.

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A3.9/5.0
Behavior4/5

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

Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false, so the description does not need to repeat these. The description adds value by specifying that the tool is used to 'discover NUMAC coordinates,' which clarifies the behavior beyond what annotations provide.

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 conveys the purpose and outcome without any waste. It is front-loaded with the action and resource, making it efficient and easy to understand.

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 the tool's simplicity (2 parameters, output schema present), the description explains the purpose and the output (NUMAC coordinates) sufficiently. Annotations cover safety and idempotency, and sibling tools provide context. No gaps remain for this listing-oriented 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?

Input schema covers 100% of parameters with clear descriptions (year as integer with example, doc_type as enum). The description does not add any additional semantic meaning beyond what the schema already provides, so baseline score of 3 is appropriate.

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 uses specific verbs and resources: 'Browse a year's listing of a Belgian legislation type' and explicitly mentions the outcome 'to discover NUMAC coordinates'. It clearly states what the tool does but does not explicitly differentiate it from sibling tools be_get_act and be_get_text, though the listing vs retrieval distinction is implicit.

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 browsing and discovering NUMAC coordinates, but it does not provide explicit guidance on when to use this tool versus alternatives or when not to use it. Sibling tools are listed but not compared.

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. Dates show when Glama detected each change.

  1. 3 tool updatesv0.1.0
    • First observedbe_get_act
    • First observedbe_get_text
    • First observedbe_list_year

TDQS

A3.6/5.0
Disambiguation5/5

Each tool serves a distinct purpose: fetching metadata, fetching text, and browsing year listings. No overlap in functionality.

Naming Consistency4/5

All tools follow a 'be_verb_noun' pattern (be_get_act, be_get_text, be_list_year). Consistent prefix and verb usage, though 'year' as a noun slightly diverges from the resource type pattern.

Tool Count4/5

With 3 tools, the server is minimal but covers a basic workflow for Belgian legislation. The count is appropriate for a focused domain, though a small set may limit flexibility.

Completeness3/5

The server covers metadata retrieval, text retrieval, and year browsing. However, it lacks search or filter capabilities, which are common in legal databases, leaving some discovery gaps.

Maintenance

ActivityMaintained
ResponsivenessNo issues

Resources

Unclaimed servers have limited discoverability.

Looking for Admin?

If you are the server author, to access and configure the admin panel.

Related MCP Connectors

Related MCP Servers

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/matematicsolutions/be-eli-mcp'

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