← Back to search

io.github.matematicsolutions/fr-eli-mcp

matematicsolutions Scanned 20d ago

MCP server for French Legifrance (PISTE): legislation and case law with citations and ECLI.

C
64.8 / 100

Versions

0.1.0latest
first seen Jun 30, 2026
PermissionsTool SafetyAuthAnnotationsCode QualityStabilitySpecVuln HistoryAuthorTransparencyCommunity

Tools 8

fr_search
annotations: none low

Keyword-search French legislation or case law on Legifrance. Args: query: free-text query (e.g. "republique numerique", "responsabilite"). fond: one of ``LODA`` (laws & decrees), ``CODE`` (codes), ``JURI`` (Cour de cassation case law), ``CONSTIT`` (Conseil constitutionnel - QPC/DC decisions), ``CETAT`` (administrative case law: Conseil d'Etat, cours administratives d'appel, tribunaux administratifs), ``CNIL`` (CNIL deliberations, incl. sanctions), ``KALI`` (collective labour agreements / conventions collectives), ``ACCO`` (company-level agreements - metadata + search only). page_size: number of hits (1..100). Returns: ``SearchResult`` with ``hits``, each carrying the citation contract.

fond str query str page_size int
fr_get_act
annotations: none low

Consult a LODA law or decree by its ``LEGITEXT...`` id. Args: text_id: a ``LEGITEXT...`` identifier (from ``fr_search`` on fond ``LODA``). date: version date ``YYYY-MM-DD`` (default: today - the version in force now). Returns: ``Act`` with metadata, citation and a table of contents (``articles``).

date string text_id str
fr_get_text
annotations: none low

Fetch the verbatim text of a single article (``LEGIARTI...`` or ``KALIARTI...``). Args: article_id: a ``LEGIARTI...`` identifier (from ``fr_get_act`` or a ``CODE`` search hit), or a ``KALIARTI...`` identifier (from ``fr_get_convention``). Returns: ``ArticleText`` with the article ``text``, citation and ``source_url``.

article_id str
fr_get_decision
annotations: none low

Consult a court decision by its id (returns the native ECLI). Covers three jurisdictions via the same Legifrance ``consult/juri`` endpoint: - ``JURITEXT...`` - Cour de cassation / cours d'appel (fond ``JURI``). - ``CONSTEXT...`` - Conseil constitutionnel QPC/DC decisions (fond ``CONSTIT``). - ``CETATEXT...`` - Conseil d'Etat, CAA, TA administrative case law (fond ``CETAT``). Args: decision_id: a ``JURITEXT...``, ``CONSTEXT...`` or ``CETATEXT...`` identifier (from ``fr_search`` on fond ``JURI``, ``CONSTIT`` or ``CETAT`` respectively). Returns: ``Decision`` with ``ecli``, court, formation, solution and the decision ``text``.

decision_id str
fr_get_deliberation
annotations: none low

Consult a CNIL deliberation by its ``CNILTEXT...`` id. Args: deliberation_id: a ``CNILTEXT...`` identifier (from ``fr_search`` on fond ``CNIL``). Returns: ``Deliberation`` with the deliberation ``text``, nature (e.g. ``Sanction``), citation and ``source_url``. CNIL deliberations carry no ECLI/ELI - none is invented.

deliberation_id str
fr_get_convention
annotations: none low

Consult a collective labour agreement text by its ``KALITEXT...`` id. Args: convention_id: a ``KALITEXT...`` identifier (from ``fr_search`` on fond ``KALI``). Returns: ``Act`` with metadata, citation and a table of contents whose ``KALIARTI...`` ``article_id`` values resolve through ``fr_get_text``.

convention_id str
fr_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.

fr_get_company_agreement
annotations: none low

Consult a company-level agreement by its ``ACCOTEXT...`` id - METADATA ONLY. Legifrance distributes the full text of ACCO agreements only as a ``.docx`` attachment, so this tool returns the agreement metadata (company, SIRET, IDCC, sector, themes, signatory unions, dates) plus the resolvable ``source_url``. Args: agreement_id: an ``ACCOTEXT...`` identifier (from ``fr_search`` on fond ``ACCO``). Returns: ``CompanyAgreement`` metadata with citation and ``source_url``.

agreement_id str

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 47

low
Tool 'fr_search' has no annotations annotation_checker · 100%
low
Tool 'fr_get_act' has no annotations annotation_checker · 100%
low
Tool 'fr_get_text' has no annotations annotation_checker · 100%
low
Tool 'fr_get_decision' has no annotations annotation_checker · 100%
low
Tool 'fr_get_deliberation' has no annotations annotation_checker · 100%
low
Tool 'fr_get_convention' has no annotations annotation_checker · 100%
low
Tool 'fr_coverage' has no annotations annotation_checker · 100%
low
Tool 'fr_get_company_agreement' has no annotations annotation_checker · 100%
medium
OAuth implementation without PKCE auth_checker · 75%
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%
medium
Vulnerable dependency: anyio@4.3 (GHSA-5p39-cfhj-2xmp) dependency_analyzer · 95%
medium
Vulnerable dependency: anyio@4.3 (GHSA-82r6-8w77-94w6) dependency_analyzer · 95%
info
pyproject.toml metadata manifest_parser · 100%
info
Tool: fr_search manifest_parser · 90%
info
Tool: fr_get_act manifest_parser · 90%
info
Tool: fr_get_text manifest_parser · 90%
info
Tool: fr_get_decision manifest_parser · 90%
info
Tool: fr_get_deliberation manifest_parser · 90%
info
Tool: fr_get_convention manifest_parser · 90%
info
Tool: fr_coverage manifest_parser · 90%
info
Tool: fr_get_company_agreement manifest_parser · 90%
info
Required env vars (7) 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 'fr_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%