Skip to main content
Glama
matematicsolutions

mcp-fr-legal

README.md
<!-- mcp-name: io.github.matematicsolutions/mcp-fr-legal -->

# mcp-fr-legal

An **MCP** server exposing an **offline corpus of French law** (Legifrance / DILA, full text)
in a local **SQLite FTS5** database, with tools for search and **citation grounding**. Snippets are
returned **verbatim** from the database (zero-LLM), each with a `document_id`, a `provision_ref` and a
Legifrance URL. Anti-hallucination by mechanism, not by trust in the model.

**Scope:** consolidated LEGI codes and statutes (Code civil, Code du travail, Code penal, Code de
commerce, Code de la defense, Code de la securite interieure, ...) - **3,953 documents / 193,681
provisions** in the bundled snapshot. **No case law (jurisprudence)** and no full JORF.

Part of the MateMatic law-connector family: [`mcp-saos`](https://github.com/matematicsolutions/mcp-saos)
(PL case law), [`mcp-eu-compliance`](https://github.com/matematicsolutions/mcp-eu-compliance)
(EU law), [`mcp-eu-sparql`](https://github.com/matematicsolutions/mcp-eu-sparql) (live EUR-Lex).

## Installation

```bash
npm install            # Node 22.5+ (node:sqlite built in, FTS5)
npm run fetch-corpus   # downloads database.db (~303 MB) from the DILA/Ansvar artifact (Apache-2.0 + Etalab)
npm run build
npm start
```

Air-gapped / fully offline: point `FR_LEGAL_DB` at a local copy of `database.db`.

MCP client configuration:

```json
{ "name": "fr-legal", "command": "node", "args": ["/path/to/mcp-fr-legal/dist/index.js"] }
```

## Tools

| Tool | Description |
|---|---|
| `fr_search(query, documents?, limit?)` | Full-text (FTS5) over provisions, verbatim snippets + citations. |
| `fr_article(document_id, provision_ref)` | Full verbatim text of a provision (tolerant `provision_ref`). |
| `fr_validate_citation(document_id, provision_ref)` | **Grounding**: whether the citation exists (fail-closed) - anti-hallucination. |
| `fr_list_documents(type?, query?)` | List documents (discovery of `document_id`). |

Every tool returns `structuredContent.citations` (document_id, provision_ref, Legifrance URL,
`source_authority` DILA, `license` Etalab v2.0, `snapshot`, `age_days`, and a `staleness_advisory`
when the snapshot is older than the `FR_STALENESS_DAYS` threshold (365 by default) - provenance and
staleness modelled on russellbrenner/jurisd, Apache-2.0).

## Grounding (anti-hallucination)

`fr_validate_citation` is a grounding primitive: it mechanically checks whether `document_id +
provision_ref` exists in the corpus. **Fail-closed** - a missing document or provision yields
`provision_exists=false` (not "probably ok"). It plugs into
[`citation-grounding-pl`](https://github.com/matematicsolutions/awesome-matematic-skills-pl)
as the anchor resolver for French law (EXISTENCE level).

## Zero-cloud / GDPR

No network calls at runtime (the database is opened read-only). Corpus bootstrap (`fetch-corpus`) is
the only moment a network is used. Text is returned verbatim (grounding). For currency, check
Legifrance (a snapshot is not the authoritative source - the Journal officiel is).

## License and attribution

- **Code:** MIT (MateMatic Solutions).
- **Corpus:** the `database.db` artifact from [Ansvar-Systems/French-law-mcp](https://github.com/Ansvar-Systems/French-law-mcp)
  (Apache-2.0); the legal text is under the **Licence Ouverte v2.0 (Etalab)**, DILA/Legifrance,
  commercial reuse with attribution. Full attribution: [THIRD_PARTY_INSPIRATIONS.md](./THIRD_PARTY_INSPIRATIONS.md).

Citation: *MateMatic Solutions (2026), mcp-fr-legal - an offline MCP corpus of French law
(Legifrance/DILA), MIT. Data: DILA, Licence Ouverte v2.0.*

TDQS

A4.3/5.0

Scored across 4 tools

Disambiguation5/5

Each tool has a distinct purpose: retrieving a specific article, listing available documents, full-text search, and citation validation. No overlap or ambiguity.

Naming Consistency5/5

All tool names follow a consistent pattern with 'fr_' prefix and snake_case verbs/nouns (article, list_documents, search, validate_citation).

Tool Count5/5

Four tools is well-scoped for a legal research server, covering essential operations without unnecessary complexity.

Completeness5/5

The set covers retrieval, listing, search, and validation—core operations for legal reference. No obvious missing functionality given the domain.

Maintenance

ActivitySlowing
ResponsivenessNo issues