Legal Cite Pl — independently scanned and version-tracked by SaferSkills.
SaferSkills independently audited Legal Cite Pl (Agent Skill) and scored it 100/100 (green). The audit ran 55 deterministic rules across Security, Supply Chain, Maintenance, Transparency, and Community; it found 0 high-severity and 0 lower-severity findings. The full rule-by-rule trace and per-finding evidence are below. Free, methodology-open.
Findings & checks · 0 flagged
Every scanned point with the score it earned and what moved between them.
First recorded scan — no prior version to compare against.
The primary manifest — the file an agent reads to learn what this artifact does.
Legal citation verifier (PL / EU law) — an MCP server that fetches the exact, in-force wording of a cited article straight from the official source. An anti-hallucination tool for Claude (and any MCP client): instead of trusting the model's memory of a statute, it returns the verbatim text of the cited article from the official register.
Weryfikator cytatów prawnych (prawo PL / UE) — serwer MCP pobierający dokładne, aktualne brzmienie cytowanego artykułu prosto z oficjalnego źródła. Narzędzie anti-halucynacyjne dla Claude (i dowolnego klienta MCP).
api.sejm.gov.pl (ELI). Returns the consolidated text (tekst jednolity, currently in force), not the original as-promulgated version.0…-YYYYMMDD, found via the CELLAR SPARQL endpoint), not the original Official Journal text — so amendments (e.g. AI Act art. 111(4) added by Regulation 2026/1744) are not missed. Consolidated text is labelled unofficial (📄), names the amending act behind each changed article and lists amending acts that entered into force after the consolidation date. Amendment markers (►M1, ▼B) are stripped from the quote. Falls back to the original text, with an explicit note, when no consolidated version exists or SPARQL is down.Returns only the cited article (not the whole act). The quote comes straight from the source.
Since 2025 the Sejm ELI API publishes Journal of Laws acts only as PDF — the newest consolidated texts of the Civil Code, Labour Code, Civil Procedure Code and others have no HTML. The tool therefore picks the version first, the format second: the newest consolidated text is the basis, and when it exists only as PDF, the tool converts the official PDF itself with a pinned version of eli2md (MIT) and reads the article from the resulting tree of units. Such a result is an unofficial reading of an official PDF and is labelled as such (📄 instead of 📜), with the Journal of Laws number, link to the PDF, PDF checksum and converter version. Two separate judgements are reported: fidelity of the reading and currency of the law.
Fidelity checks before anything is returned (any failure → the tool refuses instead of returning an older text):
pdftotext (eli2md reads through pdfminer), and words the converter skipped inside the article may only be page headers and footnotes;Currency is a separate line: the amending acts (Journal of Laws number and date, from the ELI register) that entered into force after the consolidated text's date, or none — and, separately, amending acts already published but not yet in force (with their date). The [dla modelu] fields nowelizacje_po_tj and nowelizacje_oczekujace list their ELI ids. The trailing [dla modelu] line carries the same judgements as fields for an LLM reading the tool output.
Measured on 2026-10-10 (8 acts whose newest consolidated text is PDF-only, 4676 articles): 99.7 % pass the text-layer check; of those also present in the older HTML, 4339 are word-for-word identical. Requirements: pdftotext (Debian/Ubuntu: apt install poppler-utils); without it the PDF path refuses. First conversion of a code takes 30–90 s and is cached on disk (LEGAL_CITE_CACHE, default under the system temp dir). Optionally set LEGAL_CITE_GCS_BUCKET (and install .[gcs]) to keep conversions in Cloud Storage: a new instance downloads them instead of converting (file names carry the PDF checksum and converter version; fidelity checks run on the downloaded file as on a fresh one; any bucket error falls back to conversion). On Cloud Run use at least --memory=512Mi and the default request timeout (300 s).
verify_article("art. 45 u.k.k.") — the wording of a provision. Format: art. N [ust. M] CODE.Handles letter suffixes (art. 36a), § as a unit (art. 58 § 2 KC), superscript paragraphs (art. 98 § 1¹ k.p.c. / § 1[1]), superscripts with letters (art. 385¹ / 385[1] / 131¹ᵃ / 131[1a]), dotted codes (k.p.c.). When a consolidated text prints two wordings of the same paragraph/point (current one and one entering into force later), the tool returns only the one in force today, chosen by the date in the footnote, and says so; if the date cannot be read, it refuses.
list_acts() — list of supported act codes (PL + EU).art. 5 Dz.U. 2024 poz. 1061, art. 1 DU/2018/723. A statute can also be named by its title (art. 9 ustawy o ochronie konkurencji i konsumentów; ambiguous titles are refused with candidates). Regulations (rozporządzenia) are cited by paragraph and Journal of Laws address: § 2 ust. 1 Dz.U. 2025 poz. 1899 (random sample of 100 in-force regulations: 713 paragraphs, 0 wrong wordings). Full coverage of all 1,127 in-force substantive statutes outside the list (2026-10-28): 71,174 articles, 0 wrong wordings. A random sample of 100 in-force statutes outside the list (2026-10-28): 6,314 articles, 0 wrong wordings, 0 refusals, 1 explicit ambiguity (testy/pokrycie_proba.py).pip install -e .
legal-cite # stdioclaude_desktop_config.json:
{ "mcpServers": { "legal-cite": { "command": "legal-cite" } } }gcloud run deploy legal-cite \
--source=. \
--region=europe-west4 \
--allow-unauthenticated \
--memory=512Mi --cpu=1 --max-instances=1 --timeout=300 --port=8080Public, no-auth is safe here — the service serves only public legal texts (no data, no database, no LLM calls).
Connect in Claude: Connectors → Add custom connector → https://<service-url>.run.app/mcp (streamable-http mounts MCP at /mcp).
Add an entry to PL_ACTS (key = abbreviation; pub/year/pos from the Journal of Laws / ELI) or EU_ACTS (key = abbreviation, celex) in legal_cite/core.py.
Akty UE są cytowane z najnowszej obowiązującej wersji skonsolidowanej (CELEX 0…-RRRRMMDD, ustalanej przez SPARQL CELLAR), a nie z tekstu pierwotnego z Dz.U. UE — inaczej umykają zmiany (np. art. 111 ust. 4 AI Act dodany rozporządzeniem 2026/1744). Tekst skonsolidowany jest oznaczony jako nieurzędowy (📄), z aktem zmieniającym dany artykuł i aktami zmieniającymi, które weszły w życie po dacie konsolidacji. Znaczniki ►M1/▼B są usuwane z cytatu. Gdy wersji skonsolidowanej nie ma albo SPARQL nie odpowiada — tekst pierwotny z jawną adnotacją.
verify_article("art. 45 u.k.k.") — brzmienie przepisu. Format: art. N [ust. M] KOD.Obsługuje sufiks literowy (art. 36a), § jako jednostkę (art. 58 § 2 KC), paragraf z indeksem górnym (art. 98 § 1¹ k.p.c. / § 1[1]), indeks górny z literą (art. 385¹ / 385[1] / 131¹ᵃ / 131[1a]), kody z kropkami (k.p.c., k.r.o.). Gdy tekst jednolity drukuje dwa brzmienia tego samego paragrafu, ustępu lub punktu (obowiązujące i wchodzące w życie później), narzędzie zwraca tylko obowiązujące dziś — wybrane po dacie z odnośnika — i to zaznacza; gdy daty nie da się odczytać, odmawia.
Od 2025 r. API ELI Sejmu publikuje akty Dziennika Ustaw wyłącznie w PDF — najnowsze teksty jednolite k.c., k.p., k.p.c. i innych nie mają HTML. Narzędzie wybiera więc najpierw wersję, potem format: podstawą jest najnowszy tekst jednolity, a gdy jest tylko w PDF, narzędzie samo konwertuje urzędowy PDF przypiętą wersją eli2md (MIT) i wycina artykuł z drzewa jednostek. Taki wynik to nieurzędowy odczyt urzędowego PDF i tak jest oznaczony (📄 zamiast 📜): numer Dz.U., link do PDF, suma kontrolna PDF, wersja konwertera. Osobno podawane są dwie oceny: wierność odczytu i aktualność prawna.
Kontrole wierności przed oddaniem wyniku (każda niezaliczona → odmowa zamiast starszego brzmienia):
pdftotext (poppler; eli2md czyta przez pdfminer), a słowa pominięte przez konwerter w obrębie artykułu mogą być tylko nagłówkami stron i przypisami;Aktualność to osobna linia: akty zmieniające (numer Dz.U. i data, wg wykazu ELI), które weszły w życie po dacie tekstu jednolitego, albo że żaden — i osobno akty ogłoszone, które jeszcze nie obowiązują (z datą). Pola nowelizacje_po_tj i nowelizacje_oczekujace w linii [dla modelu] podają ich identyfikatory ELI. Linia [dla modelu] na końcu powtarza te oceny jako pola dla modelu czytającego wynik narzędzia.
Pomiar 2026-10-10 (8 aktów z najnowszym t.j. tylko w PDF, 4676 artykułów): 99,7 % przechodzi kontrolę warstwy tekstowej; spośród obecnych w starszym HTML 4339 jest identycznych co do słowa. Wymagania: pdftotext (Debian/Ubuntu: apt install poppler-utils); bez niego ścieżka PDF odmawia. Pierwsza konwersja kodeksu trwa 30–90 s i jest trzymana na dysku (LEGAL_CITE_CACHE, domyślnie w katalogu tymczasowym systemu). Opcjonalnie LEGAL_CITE_GCS_BUCKET (instalacja .[gcs]) trzyma konwersje w Cloud Storage: nowa instancja pobiera je zamiast konwertować (nazwa pliku zawiera sumę PDF i wersję konwertera; kontrole wierności biegną na pobranym pliku tak samo; błąd zasobnika = powrót do konwersji). Na Cloud Run co najmniej --memory=512Mi.
list_acts() — lista obsługiwanych kodów aktów (PL + UE).art. 5 Dz.U. 2024 poz. 1061, art. 1 DU/2018/723. Ustawę można też wskazać tytułem (art. 9 ustawy o ochronie konkurencji i konsumentów; przy niejednoznaczności odmowa z kandydatami). Rozporządzenia — paragrafem i adresem Dz.U.: § 2 ust. 1 Dz.U. 2025 poz. 1899 (losowa próba 100 obowiązujących rozporządzeń: 713 paragrafów, 0 błędnych brzmień). Pełne pokrycie wszystkich 1127 obowiązujących ustaw merytorycznych spoza listy (28.10.2026): 71 174 artykułów, 0 błędnych brzmień. Losowa próba 100 obowiązujących ustaw spoza listy (28.10.2026): 6314 artykułów, 0 błędnych brzmień, 0 odmów, 1 jawna niejednoznaczność (testy/pokrycie_proba.py).pip install -e .
legal-cite # stdioWpis w claude_desktop_config.json:
{ "mcpServers": { "legal-cite": { "command": "legal-cite" } } }gcloud run deploy legal-cite \
--source=. \
--region=europe-west4 \
--allow-unauthenticated \
--memory=512Mi --cpu=1 --max-instances=1 --timeout=300 --port=8080Publiczny bez auth jest tu bezpieczny — serwis serwuje wyłącznie publiczne teksty aktów (zero danych, zero bazy, zero wywołań LLM).
Podłączenie w Claude: Connectors → Add custom connector → https://<adres-serwisu>.run.app/mcp.
Część zestawu otwartych narzędzi LegalTech (PL):
verify_article.Apache License 2.0 — see LICENSE.
~30 seconds. Free. No account. Every finding cites a rule and a line of evidence.