Fontes
Server Configuration
Describes the environment variables required to run the server.
| Name | Required | Description | Default |
|---|---|---|---|
| WLM_PERMITTED | No | Comma-separated jurisdiction codes to turn on sources whose terms need permission, only once you have that permission. | |
| WLM_US_GOVINFO_KEY | No | Free api.data.gov key for US case-law search. | |
| FONTES_NO_UPDATE_CHECK | No | Set to 1 to turn off the once-a-day version check against PyPI. | 1 |
| WLM_FR_PISTE_CLIENT_ID | No | Client ID of a free piste.gouv.fr app subscribed to Judilibre and Légifrance; France is off without it. | |
| WLM_FR_PISTE_CLIENT_SECRET | No | Client secret of a free piste.gouv.fr app subscribed to Judilibre and Légifrance; France is off without it. |
Instructions
Guidance the server publishes about itself, which clients place ahead of the tool catalog so the model reads it before choosing anything.
Live case law and legislation from official government sources. Call list_jurisdictions first to see codes, supported tools and filters. Every result carries the source URL or identifier; always read the full text before relying on a decision or provision.
Capabilities
Features and capabilities supported by this server
Protocol revision2025-11-25
| Capability | Details |
|---|---|
| tools | {
"listChanged": false
} |
| prompts | {
"listChanged": false
} |
| resources | {
"subscribe": false,
"listChanged": false
} |
| experimental | {} |
Tools
Functions exposed to the LLM to take actions
| Name | Description |
|---|---|
| list_jurisdictionsA | List the jurisdictions this server covers. Call this first. For each jurisdiction it shows: the code to pass as Args: query: optional text to narrow the list (matches code, alias or name, e.g. "nl", "united", "netherlands"). An exact code, alias or name gives that jurisdiction in full; many matches give a compact index. |
| search_caselawA | Search court decisions (case law / precedent) in one jurisdiction. Most sources search the full text; some search only titles, parties or metadata, and a few ignore the words (the result header and Note say so; see list_jurisdictions Notes). A count of 0 may then mean "not searchable this way", not "no such decision". Args:
jurisdiction: code from list_jurisdictions, e.g. "nl", "gb" (alias "uk").
query: search words in the language of the source (Dutch for nl, English for gb).
May be empty ("") for sources that can list by filters alone (date, court, number).
Date, court, type, year and similar narrowing belong INSIDE Returns a markdown list; each hit has the identifier to pass to get_decision. Snippets are not enough to cite: fetch the full decision. |
| get_decisionA | Fetch one court decision as markdown (metadata, summary, full text, source URL). Args: jurisdiction: code from list_jurisdictions, e.g. "nl", "gb". id: the identifier the source uses, as returned by search_caselaw. nl: ECLI ("ECLI:NL:HR:2024:123"). gb: neutral citation ("[2024] UKSC 1", "[2026] EWHC 2093 (Ch)") or Find Case Law slug ("uksc/2024/1"). max_chars: page size (default 60000). Long decisions end with a note giving the next offset. offset: character offset to continue from (from that note). |
| search_legislationA | Find laws, acts and statutory instruments in one jurisdiction. Args: jurisdiction: code from list_jurisdictions, e.g. "nl", "gb". query: (may be empty "" when filters alone select) words from the title (or full text where the source allows), in the source's language, e.g. "huurprijzen woonruimte" (nl), "Companies Act 2006" (gb). nl also accepts a BWB-id directly. limit: results per page (default 20). page: 1-based page number. filters: optional jurisdiction-specific filters as a dict, e.g. {"current_only": false} for nl or {"search_in": "text", "doc_type": "ukpga"} for gb. See list_jurisdictions. Date, type and similar narrowing belong INSIDE Returns a markdown list; each hit has the id to pass to the get_legislation_* tools. |
| get_legislation_tocA | Table of contents of a law (parts, chapters, articles/sections) with provision labels. Args: jurisdiction: code from list_jurisdictions, e.g. "nl", "gb". id: law id from search_legislation. nl: BWB-id ("BWBR0005289"). gb: type/year/number ("ukpga/2006/46"). keyword: optional; only list provisions whose number/title starts a word with (else contains) this text, case-insensitive. It does NOT search the body text. Strongly recommended for big codes. Use the provision labels it shows with get_legislation_provision. |
| get_legislation_provisionA | Text of one article / section / regulation / schedule paragraph. Usually the current consolidated text; some jurisdictions publish only the as-enacted text, and the result then says so at the top (check "Text as of" and any warning). Args: jurisdiction: code from list_jurisdictions, e.g. "nl", "gb". id: law id from search_legislation (nl "BWBR0005289", gb "ukpga/2006/46"). provision: nl: article number ("2", "6:2", "Artikel 7a"). gb: "172", "s.172", "section/172", "reg 3", "sch 1 para 2", "schedule/1/paragraph/2". |
| get_legislation_textA | Full consolidated (current) text of a law as markdown, pageable. Args: jurisdiction: code from list_jurisdictions, e.g. "nl", "gb". id: law id from search_legislation. max_chars: page size (default 60000). Big codes run to megabytes; prefer get_legislation_toc + get_legislation_provision. offset: character offset to continue from (from the truncation note). |
| report_bugA | Prepare a bug report about Fontes for its developers. Only when the user asks to report a problem. The report holds the Fontes version, the OS, and the last failed call's jurisdiction, tool and error message (search text and ids removed). The user sees it in a dialog from their app and decides whether to send it; nothing is sent otherwise. Args: note: what went wrong, in the user's words. Do not copy document text, search terms or client details into it unless the user explicitly asks you to. |
Prompts
Interactive templates invoked by user choice
| Name | Description |
|---|---|
No prompts | |
Resources
Contextual data attached and managed by the client
| Name | Description |
|---|---|
No resources | |
TDQS
Scored across 8 tools
Tools split cleanly along resource (caselaw vs legislation) and action (search vs fetch vs structure), and report_bug is unmistakably separate. The only soft overlap is get_legislation_text versus get_legislation_toc + get_legislation_provision, since both return statutory text; the descriptions do steer agents (full code vs single provision) but an agent could still pick the wrong one for a large code.
Consistent snake_case verb_noun pattern throughout (search_caselaw, get_decision, get_legislation_toc, list_jurisdictions, report_bug). The one asymmetry is that caselaw retrieval is get_decision rather than get_caselaw_decision, breaking the parallel with the get_legislation_* family, though it remains readable.
Eight tools is well within the ideal range and each earns its place: discovery, two search tools, three legislation-retrieval granularities, and a scoped bug reporter. Nothing appears redundant or missing at the count level.
The surface covers the full research loop: list jurisdictions, search caselaw/legislation, then fetch decisions, tables of contents, provisions, or whole texts, with paging on long documents. Gaps are minor—no cross-jurisdiction search in a single call, no body-text search within a law (the TOC keyword explicitly does not search text), and no citator/related-case traversal.