Repository navigation
Releases
1.1.0 - 2026-11-02
Release Notes
Ajouts compatibles de la 1.1.0 (PR #63, vagues V1, V2a, V2b et V3) : champs de sortie optionnels, paramètre optionnel, textes de descriptions et d'instructions. Aucun champ requis retiré, aucun type changé, aucune valeur d'énumération retirée : lock-descriptors --compare v1.0.1 classe ses 35 changements en 18 additions et 17 correctifs de texte, sans rupture.
Added
fr_resolveetfr_verify_citations: les articles résolus portent la période de validité de la version lue, en champs optionnelsetat,date_debutetdate_fin(candidates[]etcitations[].resolved; date de fin sentinelle et valeurs absentes omises ; aucun champ pour les décisions et les textes). Complète la note de version de la 1.0.1. Un article cité par son identifiant LEGIARTI ou KALIARTI porte les mêmes champs qu'un article trouvé par son numéro. (journey_patrimoine-14, D-03)fr_diff_article: champ de sortie optionnelnote, présent quand moins de 40 % des mots de la version A se retrouvent dans la version B (article renuméroté ou remplacé par un texte sans rapport, par exemple Code civil art. 9 : nationalité puis vie privée, 4 % de mots conservés ; le seuil de 40 % est calibré sur six textes courts (Code civil 1382 et 1240, CGI 777) et sur 45 paires (deux sens) de dix articles réels sans rapport, de 130 à 3 928 mots, qui gardent au plus 25,8 % de leurs mots ; deux textes courts sans rapport peuvent garder 30 % de mots outils. Seuil provisoire de ce côté : aucun amendement réel gardant 40 à 70 % des mots n'a été relevé, un tel amendement recevrait la note ou non selon sa part conservée). Le diff reste rendu en entier ; la note invite à lire les deux versions avecfr_get_text. Absent pour des versions identiques, un amendement ou un texte sans mot. (related_diff-1, D-06)summary_truncated: booléen optionnel (absent sauf si vrai) sur les sorties defr_get_text,fr_get_decisionetfr_get_deliberation, vrai quand le résumé lui-même est coupé ou n'est que le début du texte (sourcelead, y compris quand le début rendu est plus court que le texte sans que le plafond l'ait coupé) ; absent pour un sommaire officiel ou un dispositif donné entier, qui peut ne couvrir qu'une partie du texte. (decisions-4, D-01)fr_get_related: paramètre facultatifrelation(cites,cited_by,cites_case_law,applies_text, sans casse) pour ne demander que les liens d'un sens. Le filtre est appliqué avant le plafond de 100 liens :totalcompte la relation demandée, ce qui rend accessibles les liens « cités par » d'un article très cité (L. 1234-9 du Code du travail : 254 liens, 100 servis jusque-là). Valeur inconnue :invalid_argqui liste les quatre valeurs. Une relation de l'autre famille que l'identifiant (cites_case_lawouapplies_textpour un article,citesoucited_bypour une décision) est refusée sans appel au port par uninvalid_argqui liste les relations valides de la famille, au lieu de rendretotal: 0etlinks: [], indiscernables d'un vrai « aucun lien » (relationest nouveau en 1.1.0 : ce n'est pas une rupture). Sansrelation, la réponse est inchangée. Pour une décision,truncatedetnotedécrivent la liste filtrée : ils n'annoncent plus des références coupées ni des codes qui ne concernent que d'autres relations (la note sur les codes n'accompagne queapplies_text). (related_diff-6, D-05)fr_get_text,fr_get_decisionetfr_get_deliberation: en modefocus, chaque passage porte sonscore(score BM25 du segment, arrondi à 2 décimales, jamais sous 0,01 : un score brut inférieur à 0,005, qui donnerait 0,00 après l'arrondi, est relevé à 0,01), conformément au contrat 05 §5.0.3 qui l'annonçait. Les passages restent classés du mieux noté au moins bon ; le score permet d'écarter les passages marginaux, il ne se compare qu'entre passages d'une même réponse. (get_text-6, D-02)fr_search: paramètre optionnelin_force_only(booléen, KALI seulement) qui ne garde que les textes en vigueur (étatsVIGUEUR,VIGUEUR_ETEN,VIGUEUR_NON_ETEN;DENONCE,MODIFIE,PERIME,REMPLACEetABROGEsont exclus ; la description du paramètre dit queDENONCEest exclu bien qu'une convention dénoncée puisse encore s'appliquer pendant le préavis et la survie, code du travail L. 2261-10), par la facette PISTELEGAL_STATUS; il se combine avecdate_from/date_to. Pour un autre fond, la valeurtrueest refusée par uninvalid_argqui le dit. Le filtre porte sur les textes, pas sur le statut d'un article sous un texte en vigueur.VIGUEUR_DIFF(entrée en vigueur différée) n'est pas une valeur de la facetteLEGAL_STATUSde KALI (les huit valeurs relevées,ABROGE,DENONCE,MODIFIE,PERIME,REMPLACE,VIGUEUR,VIGUEUR_ETENetVIGUEUR_NON_ETEN, totalisent les 27 589 résultats du relevé sans filtrec110/D08-kali-cc-sans-filtre) : aucun texte KALI n'y est écarté à tort. Comportement de la facette (OU entre valeurs, états exclus) relevé en sandbox seulement : à recontrôler en production lors de la PR de version. Défense en profondeur, la production ne pouvant pas être testée : siin_force_onlyest vrai et qu'un résultat rendu a unetathors des trois gardés, le champnoteexistant ajoute « in_force_only was set, but a hit is not VIGUEUR, VIGUEUR_ETEN or VIGUEUR_NON_ETEN: the source may not have applied the filter. Check each etat. » (aucun champ nouveau ; un résultat sansetatn'est pas signalé). (journey_general-1, complément de L2-11, D-08)fr_searchetfr_search_all: une recherche sans résultat porte maintenant unenote(« No match: try other words, remove the date filters or call fr_coverage; an empty result does not mean the law is silent. » ; pourfr_search_all, quand tous les fonds sont vides, « No match in any fond: try other words or other fonds, or call fr_coverage; an empty result does not mean the law is silent. »). Aucun champ nouveau : c'est le champnoteoptionnel existant. Une page vide d'une recherche dont le total est positif, ou un fond en erreur, ne reçoit pas cette note. (search_all-9, D-10)- Descriptions et instructions enrichies : glossaire de
etatsans joker (revue finale de la PR 2) :VIGUEUR,VIGUEUR_ETEN,VIGUEUR_NON_ETENetABROGE_DIFFen vigueur ;VIGUEUR_DIFFpas encore en vigueur (entrée différée,date_debutpeut être absente) ;MODIFIE,ABROGE,PERIME,ANNULE,REMPLACE,TRANSFERE,SUBSTITUE,DISJOINTetMODIFIE_MORT_NE(jamais en vigueur : modifié avant d'avoir pris effet) plus en vigueur ;DENONCEdénoncé, qui peut encore s'appliquer pendant le préavis et la survie (code du travail L. 2261-10) ;INITIALEetSANS_ETATsans signal. L'ancienne règle « VIGUEUR* en vigueur, tout autre code non » rangeaitVIGUEUR_DIFFparmi les versions en vigueur, etINITIALE,SANS_ETATet les codes inconnus parmi celles qui ne le sont plus. Le glossaire complet est dans la description du champetatdefr_get_text;fr_search,fr_resolve,fr_verify_citationsetfr_get_actportent une version courte qui renvoie à lui, et les instructions une règle plus courte encore ; descriptions des champsdate_debut,date_findes candidats defr_resolveet des enregistrements defr_verify_citations(date_fin: jour où la version suivante ou l'abrogation prend effet ; absente : sans fin connue) ; description dequote(seul un extrait collé à la citation est contrôlé, l'absence dequoteveut dire non contrôlé). (D-12)
Changed
fr_get_text: en mode résumé, un article (LEGIARTI ou KALIARTI) de 2 000 caractères au plus (min(max_chars, 2 000)) est rendu entier au lieu de 1 200 ; le résumé d'un article plus long, d'une décision ou d'une délibération reste plafonné à 1 200 caractères (par exemple l'article 757 B du CGI, 1 307 caractères, revient entier). (decisions-4, D-01)summary/summary_source(fr_get_decision,fr_get_text,fr_get_deliberation) : une entrée du sommaire officiel de moins de 20 caractères alphanumériques (par exemple le « X » amont d'une ordonnance du TJ de Paris) n'est plus présentée comme sommaire officiel ; le résumé retombe sur le dispositif puis sur le début du texte etsummary_sourcele dit. Aucun champ ni schéma ne change. (decisions-1, D-07)fr_get_deliberation: le résumé d'une sanction ou d'une mise en demeure de la CNIL est son dispositif (summary_source=dispositif, avec l'amende, l'injonction, l'astreinte et la publicité prononcées) au lieu du début du texte ; un avis reste au début du texte (lead). Marqueurs lus sur quatre sanctions et une mise en demeure relevées (celle de la mise en demeure n'est établie que sur un texte) ; sans marqueur, comportement inchangé. La signature (« Le Président », « La Présidente », seuls ou suivis du nom) et la mention des voies de recours (« Cette décision peut faire… », « est susceptible… ») ferment le dispositif ; une phrase du dispositif qui commence par ces mots (« Le Président de la CNIL est chargé… », « Cette décision est rendue publique… ») ne le ferme pas. (D-09, gap4-14, gap4-1)- Instructions du serveur (3 278 → 3 499 caractères, plafond 3 500) : « A summary is never the whole text: pass
detail="full"before quoting a threshold, amount or rate » remplace « For the text itself passdetail="full"» ; « Texts are verbatim » précise que les cellules d'un tableau sont jointes par « | » (L4-01). Les lignes ELI et[config_error]et la phrase d'ouverture (« Use them for any question on French law or case law. ») sont raccourcies sans changer de sens. (D-12) fr_get_deliberation: la description donne le seuil réel (un texte d'environ 1 200 caractères ou moins revient entier), dit que le résumé d'une sanction ou d'une mise en demeure est son dispositif (sinon le début du texte) et quefocusl'emporte surdetailetoffset. (D-12, accompagne D-09)fr_search: la description dit que ledated'un résultat est la date que Légifrance donne pour...
1.0.1 - 2026-11-01
Release Notes
Correctifs des défauts relevés par le test de bout en bout de la 1.0.0 (2026-11-01, PR #61). Aucun outil, paramètre, champ ni valeur d'énumération nouveau : lock-descriptors --compare v1.0.0 classe ses 89 changements en correctifs. Les ajouts (champs structurés, nouvelles valeurs) viennent en 1.1.0.
Fixed
fr_verify_citations: un extrait entre guillemets fait de repères d'énumération tolérés sans fin trouvée (« 1. 1. 1. … 1. zzz », 665 repères contre une décision de 53 683 mots) n'explore plus 35,8 millions d'états (1,7 Gio de pic, appel synchrone) : la comparaison s'arrête à 1 000 000 d'états par extrait. Au-delà, l'extrait n'est pas contrôlé (quoteabsent, nimatchniquote_mismatch) et lanotedit « The quoted passage was too long to compare and was not checked. ». Aucune valeur d'énumération nouvelle. (revue finale S1)fr_verify_citations: un article dont le numéro ne peut pas être lu (« CGI, art. 885-0 V bis A », « art. 150-0 B ter I du CGI », refusés en entier par le filet de L1-01) ne disparaît plus sans trace quand d'autres citations sont lues : lanotede la réponse dit « An article reference could not be read and was not checked. ». Détectionunread_article_mentions(lf-domain) ; aucun des 185 textes du corpus positif ne la déclenche. (revue finale I3)- États « plus en vigueur » :
fr_resolve,fr_verify_citationsetfr_get_textpartagent une seule règle (LegalStatus::is_superseded).ABROGE_DIFF(abrogation différée, encore en vigueur) n'est plus présenté comme une version remplacée parfr_resolve;DISJOINTl'est désormais aussi parfr_get_text. (revue finale I2) - Notes de version et de plage : les textes de L2-07 et L2-12 sont raccourcis pour que la mention de plage, qui justifie la confiance
medium, ne disparaisse plus derrière la note de version d'un articleMODIFIEà date de fin (129 + 90 caractères dépassaient 200) ; au pire état, version (112) et plage (59) tiennent ensemble. (revue finale I1) fr_resolve(etfr_verify_citationspour une citation datée) : une version d'article lue à une date passée et remplacée ou abrogée depuis le dit dansnote(« Version in force on 2011-06-01 (etat=MODIFIE, ended 2011-06-12); omit the date to read the current text. »), au lieu de rester muette (journey_patrimoine-14, resolve-5). Aucun champ ajouté ; les champs structurés viennent en 1.1.0. (L2-12)fr_verify_citationssignale ce qui n'est pas contrôlé : un passage entre guillemets que ne jouxte aucune citation (« énonce : », « précise que ») donne une note de la réponse, et une citation avec alinéa, point ou phrase reçoit la note « The sub-division was not checked, only the article. » ;fr_resolveajoute la même note de subdivision (verify_citations-8, gap3-8, journey_patrimoine-7 par la note de L2-08). Statuts inchangés. Limite connue : quand un écart d'extrait et une version remplacée (112 caractères au pire, MODIFIE_MORT_NE avec date de fin) remplissent déjà les 200 caractères denote, la note de subdivision (ou la lecture du sigle, qui forme une seule note avec la plage) est omise plutôt que coupée : au pire état, « CP » et « CC » tiennent avec la plage, les titres plus longs sautent ; les champs structurés de 1.1.0 lèvent cette limite. (L2-17)- Citations : les articles à suffixe composé sont lus en entier, « 150-0 B ter » (jusqu'ici lu « 150-0 B », avec une fausse validation sur l'article voisin quand un code précédait) et « 199 terdecies-0 A » (jusqu'ici ignoré sans trace). Un numéro dont un adverbe latin ou une lettre ne peut pas être lu (« 5 bis ter », « 885-0 V bis A ») n'est plus tronqué : il n'est pas reconnu comme citation. La propagation du sigle devant « (art. 777 ; … » (gap3-6, partie B) n'est pas corrigée. (L1-01)
fr_verify_citations: une décision de la CJUE ou du Tribunal de l'UE citée avec ses parties entre la date et le numéro d'affaire (« CJUE, 6 octobre 2015, Schrems, C-362/14 ») est maintenant détectée et rapportée hors périmètre (unresolvable) au lieu d'être omise silencieusement (checked0,found0). (L1-06, verify_citations-15)- Une convention collective citée avec son IDCC sans parenthèses (« convention collective IDCC 1486 », « CCN IDCC 1486 ») est maintenant reconnue et résolue comme « IDCC 1486 » (
fr_resolve,fr_verify_citations) ; auparavant l'IDCC était avalé dans le titre et la réponse était une liste vide avec une note fausse. (L1-05, resolve-7) fr_verify_citations: un extrait entre guillemets n'est plus tenu pour fidèle (quote: "match") quand un chiffre, une négation ou un mot du texte officiel a été changé (par exemple « 12 mois » pour « 8 mois » à l'article L. 1234-9 du code du travail, ou « un préjudice » pour « un dommage » à l'article 1240 du code civil). Chaque mot de l'extrait doit figurer à la suite et dans l'ordre dans le texte officiel ; la casse, les accents, la ponctuation, les espaces, les apostrophes, les repères d'énumération (« 1° », « a) », « I.- ») et la forme « L. 1234-9 » / « L1234-9 » restent tolérés, et « […] » coupe l'extrait en tronçons ordonnés. Le seuil de similarité de 90 % est supprimé. Conséquence : une citation approximative mais honnête, ou un ajout entre crochets, donne désormaisquote_mismatch(ADR-0020). (L2-03, verify_citations-1)fr_verify_citationsrenvoie une note quand aucune citation n'est reconnue (found: 0) : « No citation recognised. Only citations introduced by 'article' or 'art.' are read; an empty result does not prove the text cites nothing. » La même note, étendue, est celle defr_resolve. (L2-08, errors-14, verify_citations-16)fr_search:page_size=100n'est plus refusé (« use page_size <= 96 ») pour des citations usuelles, et les extraits et détails ne sont plus retirés plus qu'il ne faut ; l'estimation de taille defr_searchcompte exactement le JSON de la vue (clés, guillemets, séparateurs et échappements), et seulement les champs que la vue rend : letitlecontenu dans la citation (tous les hits JURI) et une date sentinelle n'y sont plus comptés. Sur les cent résultats JURI réels du rejeu, un premier état de ce correctif retirait les cent extraits et lanaturedu dernier pour une réponse de 24 394 caractères ; seuls les derniers extraits nécessaires partent désormais, jusqu'à la cible de 42 000, et la page CODE de 30 résultats garde tous ses extraits. La note dit « the last hit » au singulier (fr_search,fr_search_all). (L4-06, search-5)fr_get_related: la liste n'est plus coupée à 79-86 liens par une estimation trop pessimiste ; elle va jusqu'à 100 liens (citesd'abord, puiscited_by) tant que la réponse tient sous 45 000 caractères. (L4-06, gap1-3)fr_verify_citationsetfr_resolve: « art. 9, al. 1er, C. pr. civ. ; art. 9 C. civ. » ne perd plus la seconde citation et ne rend plus de faux « verified » sur le mauvais code ; l'alinéa s'écrit « 1er », « premier », « 2e » ou « dernier ». (L1-02, verify_citations-6)- « et s. », « s. », « ss. », « suiv. » et « et suivants » après un numéro d'article ne font plus perdre le code de la citation ; la note « No code or text given » n'accuse plus l'utilisateur d'un oubli inexistant. (L1-02, gap3-2)
fr_searchsur un code (CODE) :has_moreest maintenant vrai quand des articles correspondants restent à lire (total_articlessupérieur àpage×page_size, dans la fenêtre de 10 000), et unenoteindique le nombre d'articles, ceux affichés et la page à demander pour la suite. Avant, une recherche à un texte et 16 articles annonçaithas_more: falsesans note alors que les pages 2 à 4 listaient les 11 autres. (L4-07, journey_patrimoine-11)fr_verify_citations: les articles du TFUE, du TUE, de la CDFUE, du RGPD et de la Convention européenne des droits de l'homme (« Art. 267 TFUE », « article 8 de la Convention européenne des droits de l'homme », « article 6 § 1 de la CEDH », « article 17 du RGPD », « règlement (UE) 2016/679 du 27 avril 2016 (RGPD), art. 17 ») sont reconnus comme références hors périmètre (unresolvable, kindunsupported) au lieu de ressortirambiguousavec un conseil renvoyant vers un code français. (L1-07, verify_citations-15, partie articles)fr_resolveetfr_verify_citationsne trouvaient aucune loi, ordonnance ni décret d'avant 2000 (loi n° 89-462, loi n° 78-17, décret n° 93-1419) : le numéro était cherché sous la forme1989-462alors que l'index ne connaît que89-462, et la note affirmait à tort « nothing was found in LODA ». Le numéro est maintenant cherché sousAA-NpuisAAAA-N(un seul appel de plus, seulement si la première forme ne donne rien). (L2-01, ground_truth-1, resolve-10)fr_resolveetfr_verify_citationsdonnaientinvalid(ou une confiancemediumavec une fausse note « Cited date … differs ») à toute loi, ordonnance ou décret correctement daté, et validaient une date fausse égale à la date d'entrée en vigueur : la date citée était comparée àhit.date(entrée en vigueur ou publication) au lieu de la date de signature. Elle est maintenant comparée à la date de signature lue dans le titre du texte ; titre illisible = confiancemedium. (L2-02, resolve-2, gap3-5 partie B)fr_searchavecpage_size= 1 rendait toujours le même hit quelle que soit la page (PISTE ignorepageNumberàpageSize1). L'adaptateur demande désormais des pages de 2 et ne garde que le résultat de la page demandée (tous les fonds ;CODEen modeARTICLEexclu). (L3-05, search-1)- Le titre (donc la citation) d'une décision JURI coupé à 256 caractères par l'amont ne finit plus en plein numéro de pourvoi : le dernier jeton partiel est retiré et
…est ajouté, dansfr_searchetfr_get_decision. Les titres CONSTIT, CETAT et CNIL ne changent pas. (L3-06, search-4) - Notes de
fr_resolveetfr_verify_citations: la note d'un article sans code reconnu ne renvoie plus l'outil à lui-même et dit qu'un sigle inconnu ou non rattaché à l'article compte comme absent et de nommer l...
1.0.0 - 2026-10-31
Release Notes
Première version publiée. Elle reprend tout [0.3.0] ci-dessous, qui n'a jamais été publiée seule (seule la préversion 0.3.0-rc.1 l'a été), et y ajoute le mode hors ligne (M9). Les binaires pèsent environ 24 % de plus que ceux de 0.3.0-rc.1 (de +0,85 à +1,43 Mio par archive, selon la cible) à cause de l'index local DILA ; le bundle MCPB passe de 28,5 à 35,7 Mio.
Added
- Sous-commande
build-dila-index --archives <dossier> [--index <dossier>](fonctionnalitédila) : construit ou met à jour l'index local DILA à partir d'archives LEGI déjà téléchargées, avec reprise, sans accès réseau (#51). - Script
scripts/fetch-dila-dumps.sh: télécharge le dernier global LEGI et ses incréments depuisechanges.dila.gouv.fr, hors du binaire (#51). - La fonctionnalité
dilaest activée dans les binaires publiés, l'image Docker et le build de fumée (dist-workspace.toml,packaging/oci/Dockerfile,smoke-targets.yml).
Security
- Ingestion DILA : les en-têtes tar de noms longs sont lus sur 513 octets au plus, les en-têtes PAX et de cibles de lien ne sont plus lus, chaque liste de suppression n'est lue qu'une fois par archive, et le registre est lu sur 1 Mio au plus (#52, P-01 de 09 §3.16.7).
Install mcp-legifrance 1.0.0
Install prebuilt binaries via shell script
curl --proto '=https' --tlsv1.2 -LsSf https://github.com/muchiny/mcp-legifrance/releases/download/v1.0.0/mcp-legifrance-installer.sh | shInstall prebuilt binaries via powershell script
powershell -ExecutionPolicy Bypass -c "irm https://github.com/muchiny/mcp-legifrance/releases/download/v1.0.0/mcp-legifrance-installer.ps1 | iex"Download mcp-legifrance 1.0.0
| File | Platform | Checksum |
|---|---|---|
| mcp-legifrance-aarch64-apple-darwin.tar.xz | Apple Silicon macOS | checksum |
| mcp-legifrance-x86_64-apple-darwin.tar.xz | Intel macOS | checksum |
| mcp-legifrance-x86_64-pc-windows-msvc.zip | x64 Windows | checksum |
| mcp-legifrance-aarch64-unknown-linux-gnu.tar.xz | ARM64 Linux | checksum |
| mcp-legifrance-x86_64-unknown-linux-gnu.tar.xz | x64 Linux | checksum |
| mcp-legifrance-aarch64-unknown-linux-musl.tar.xz | ARM64 MUSL Linux | checksum |
| mcp-legifrance-x86_64-unknown-linux-musl.tar.xz | x64 MUSL Linux | checksum |
Verifying GitHub Artifact Attestations
The artifacts in this release have attestations generated with GitHub Artifact Attestations. These can be verified by using the GitHub CLI:
gh attestation verify <file-path of downloaded artifact> --repo muchiny/mcp-legifranceYou can also download the attestation from GitHub and verify against that directly:
gh attestation verify <file-path of downloaded artifact> --bundle <file-path of downloaded attestation> --repo muchiny/mcp-legifrance1.0.0-rc.3 - 2026-10-31
Release Notes
Préversion de répétition de la 1.0.0 : mêmes sources que [1.0.0] ci-dessous, qui reste « non publiée » jusqu'à la version finale. Elle compile la fonctionnalité dila pour les sept cibles et permet de mesurer la taille des binaires ; elle ne figure pas au registre MCP (08 §6.5).
Fixed
- Portes de publication : la comparaison avec l'étiquette précédente accepte une préversion (
v0.3.0-rc.1), et la release GitHub n'est plus créée quand les portes échouent (#56). - Release : la compilation macOS Apple Silicon utilise
macos-15(etmacos-15-intelpour Intel) au lieu demacos-14, que GitHub retire le 2026-11-02.
Install mcp-legifrance 1.0.0-rc.3
Install prebuilt binaries via shell script
curl --proto '=https' --tlsv1.2 -LsSf https://github.com/muchiny/mcp-legifrance/releases/download/v1.0.0-rc.3/mcp-legifrance-installer.sh | shInstall prebuilt binaries via powershell script
powershell -ExecutionPolicy Bypass -c "irm https://github.com/muchiny/mcp-legifrance/releases/download/v1.0.0-rc.3/mcp-legifrance-installer.ps1 | iex"Download mcp-legifrance 1.0.0-rc.3
| File | Platform | Checksum |
|---|---|---|
| mcp-legifrance-aarch64-apple-darwin.tar.xz | Apple Silicon macOS | checksum |
| mcp-legifrance-x86_64-apple-darwin.tar.xz | Intel macOS | checksum |
| mcp-legifrance-x86_64-pc-windows-msvc.zip | x64 Windows | checksum |
| mcp-legifrance-aarch64-unknown-linux-gnu.tar.xz | ARM64 Linux | checksum |
| mcp-legifrance-x86_64-unknown-linux-gnu.tar.xz | x64 Linux | checksum |
| mcp-legifrance-aarch64-unknown-linux-musl.tar.xz | ARM64 MUSL Linux | checksum |
| mcp-legifrance-x86_64-unknown-linux-musl.tar.xz | x64 MUSL Linux | checksum |
Verifying GitHub Artifact Attestations
The artifacts in this release have attestations generated with GitHub Artifact Attestations. These can be verified by using the GitHub CLI:
gh attestation verify <file-path of downloaded artifact> --repo muchiny/mcp-legifranceYou can also download the attestation from GitHub and verify against that directly:
gh attestation verify <file-path of downloaded artifact> --bundle <file-path of downloaded attestation> --repo muchiny/mcp-legifrance1.0.0-rc.1 - 2026-10-31
Release Notes
Préversion de répétition de la 1.0.0 : mêmes sources que [1.0.0] ci-dessous, qui reste « non publiée » jusqu'à la version finale. Elle compile la fonctionnalité dila pour les sept cibles et permet de mesurer la taille des binaires ; elle ne figure pas au registre MCP (08 §6.5).
Install mcp-legifrance 1.0.0-rc.1
Install prebuilt binaries via shell script
curl --proto '=https' --tlsv1.2 -LsSf https://github.com/muchiny/mcp-legifrance/releases/download/v1.0.0-rc.1/mcp-legifrance-installer.sh | shInstall prebuilt binaries via powershell script
powershell -ExecutionPolicy Bypass -c "irm https://github.com/muchiny/mcp-legifrance/releases/download/v1.0.0-rc.1/mcp-legifrance-installer.ps1 | iex"Download mcp-legifrance 1.0.0-rc.1
| File | Platform | Checksum |
|---|---|---|
| mcp-legifrance-aarch64-apple-darwin.tar.xz | Apple Silicon macOS | checksum |
| mcp-legifrance-x86_64-apple-darwin.tar.xz | Intel macOS | checksum |
| mcp-legifrance-x86_64-pc-windows-msvc.zip | x64 Windows | checksum |
| mcp-legifrance-aarch64-unknown-linux-gnu.tar.xz | ARM64 Linux | checksum |
| mcp-legifrance-x86_64-unknown-linux-gnu.tar.xz | x64 Linux | checksum |
| mcp-legifrance-aarch64-unknown-linux-musl.tar.xz | ARM64 MUSL Linux | checksum |
| mcp-legifrance-x86_64-unknown-linux-musl.tar.xz | x64 MUSL Linux | checksum |
Verifying GitHub Artifact Attestations
The artifacts in this release have attestations generated with GitHub Artifact Attestations. These can be verified by using the GitHub CLI:
gh attestation verify <file-path of downloaded artifact> --repo muchiny/mcp-legifranceYou can also download the attestation from GitHub and verify against that directly:
gh attestation verify <file-path of downloaded artifact> --bundle <file-path of downloaded attestation> --repo muchiny/mcp-legifrance0.3.0-rc.1 - 2026-10-31
Release Notes
Préversion de répétition de la première release : mêmes sources que [0.3.0] ci-dessous, qui reste « non publiée » jusqu'à la version finale. Elle passe les portes de release-gates.yml et la chaîne de build (08 §7), et ne figure pas au registre MCP (08 §6.5).
Install mcp-legifrance 0.3.0-rc.1
Install prebuilt binaries via shell script
curl --proto '=https' --tlsv1.2 -LsSf https://github.com/muchiny/mcp-legifrance/releases/download/v0.3.0-rc.1/mcp-legifrance-installer.sh | shInstall prebuilt binaries via powershell script
powershell -ExecutionPolicy Bypass -c "irm https://github.com/muchiny/mcp-legifrance/releases/download/v0.3.0-rc.1/mcp-legifrance-installer.ps1 | iex"Download mcp-legifrance 0.3.0-rc.1
| File | Platform | Checksum |
|---|---|---|
| mcp-legifrance-aarch64-apple-darwin.tar.xz | Apple Silicon macOS | checksum |
| mcp-legifrance-x86_64-apple-darwin.tar.xz | Intel macOS | checksum |
| mcp-legifrance-x86_64-pc-windows-msvc.zip | x64 Windows | checksum |
| mcp-legifrance-aarch64-unknown-linux-gnu.tar.xz | ARM64 Linux | checksum |
| mcp-legifrance-x86_64-unknown-linux-gnu.tar.xz | x64 Linux | checksum |
| mcp-legifrance-aarch64-unknown-linux-musl.tar.xz | ARM64 MUSL Linux | checksum |
| mcp-legifrance-x86_64-unknown-linux-musl.tar.xz | x64 MUSL Linux | checksum |
Verifying GitHub Artifact Attestations
The artifacts in this release have attestations generated with GitHub Artifact Attestations. These can be verified by using the GitHub CLI:
gh attestation verify <file-path of downloaded artifact> --repo muchiny/mcp-legifranceYou can also download the attestation from GitHub and verify against that directly:
gh attestation verify <file-path of downloaded artifact> --bundle <file-path of downloaded attestation> --repo muchiny/mcp-legifrance