Skip to main content
Glama

Get Norm

get_norm
Read-onlyIdempotent

Fetch a legal text, or one of its articles, as it stood on a given date. Returns the version in force at as_of (omit for today): full text, status, validity dates, and the timeline of all versions: say which version you quote. The text carries inline markdown links to cross-referenced articles (/norm/, open with get_norm; when served at a date, the links point to the same date). commentaries links out to commentary anchored on the article. number absent means you hold the whole text; the url of an article's section, or of a section entry of articles, returns all its articles at once.

Input Schema

NameRequiredDescriptionDefault
urlNoA librejustice.fr article URL `/norm/{jurisdiction}/{code}/{article}`: take it from a search_norms hit or an inline citation link, or compose it: {jurisdiction} is the enacting state as ISO 3166-1 alpha-2 lowercase ("fr", "be"), "eu" for the Union, its treaties included, "intl" for a treaty signed outside it (the ECHR, a bilateral accord), {code} is the code slug ("code-civil", as in facets.legal_instrument), {article} the lowercase article key ("l761-1" for L. 761-1, "1240" for 1240). `/norm/{jurisdiction}/{code}` alone addresses the text itself, which is how a text with no articles (circulaire, publication decree) is read.
codeNoCode slug, when you hold the code and the article apart rather than as a url ("code-civil"). Alone, addresses the text itself.
as_ofNoConsultation date (YYYY-MM-DD): returns the version in force at that date. Omit for the version currently in force.
articleNoLowercase article key, alongside `code` ("l761-1" for L. 761-1, "1240" for 1240).
text_idNoLégifrance id: an article (LEGIARTI, JORFARTI, KALIARTI), a text (LEGITEXT, JORFTEXT) or a section (LEGISCTA); or a BOFiP id (BOI-…), with `article` for one paragraph.

Output Schema

NameRequiredDescriptionDefault
urlYes
codeYes
dateNo
noteNo
textNo
titleYes
numberNo
statusNo
omittedNo
sectionNo
articlesNo
valid_toNo
versionsYes
source_urlNo
valid_fromNo
modified_byNoTexts that created, modified or repealed this article.
commentariesNo
article_countNo
legislative_historyNo

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed1 schema field changed
    • removedOutput schema / properties / commentaries / items / properties / access
      Removed value: -{
      -  "anyOf": [
      -    {
      -      "enum": [
      -        "libre",
      -        "abonnes"
      -      ],
      -      "type": "string"
      -    },
      -    {
      -      "type": "null"
      -    }
      -  ],
      -  "default": null
      -}
  2. Changed36 schema fields changed
    • addedInput schema / properties / as_of
      Added value: +{
      +  "anyOf": [
      +    {
      +      "type": "string"
      +    },
      +    {
      +      "type": "null"
      +    }
      +  ],
      +  "default": null,
      +  "description": "Consultation date (YYYY-MM-DD): returns the version in force at that date. Omit for the version currently in force."
      +}
    • removedInput schema / properties / date
      Removed value: -{
      -  "anyOf": [
      -    {
      -      "type": "string"
      -    },
      -    {
      -      "type": "null"
      -    }
      -  ],
      -  "default": null,
      -  "description": "Consultation date (YYYY-MM-DD): returns the version in force at that date. Omit for the version currently in force."
      -}
    • removedInput schema / properties / textId
      Removed value: -{
      -  "description": "Légifrance id: an article (LEGIARTI, JORFARTI, KALIARTI), a text (LEGITEXT, JORFTEXT) or a section (LEGISCTA); or a BOFiP id (BOI-…), with `article` for one paragraph.",
      -  "type": "string"
      -}
    • addedInput schema / properties / text_id
      Added value: +{
      +  "description": "Légifrance id: an article (LEGIARTI, JORFARTI, KALIARTI), a text (LEGITEXT, JORFTEXT) or a section (LEGISCTA); or a BOFiP id (BOI-…), with `article` for one paragraph.",
      +  "type": "string"
      +}
    • changedInput schema / properties / url / description
      Previous value: -"A librejustice.fr article URL `/norm/{juridiction}/{code}/{article}`: take it from a search_norms hit or an inline citation link, or compose it: {juridiction} is the enacting state as ISO 3166-1 alpha-2 lowercase (\"fr\", \"be\"), \"eu\" for the Union, its treaties included, \"intl\" for a treaty signed outside it (the ECHR, a bilateral accord), {code} is the code slug (\"code-civil\", as in facets.legal_instrument), {article} the lowercase article key (\"l761-1\" for L. 761-1, \"1240\" for 1240). `/norm/{juridiction}/{code}` alone addresses the text itself, which is how a text with no articles (circulaire, publication decree) is read."New value: +"A librejustice.fr article URL `/norm/{jurisdiction}/{code}/{article}`: take it from a search_norms hit or an inline citation link, or compose it: {jurisdiction} is the enacting state as ISO 3166-1 alpha-2 lowercase (\"fr\", \"be\"), \"eu\" for the Union, its treaties included, \"intl\" for a treaty signed outside it (the ECHR, a bilateral accord), {code} is the code slug (\"code-civil\", as in facets.legal_instrument), {article} the lowercase article key (\"l761-1\" for L. 761-1, \"1240\" for 1240). `/norm/{jurisdiction}/{code}` alone addresses the text itself, which is how a text with no articles (circulaire, publication decree) is read."
    • removedOutput schema / properties / articleCount
      Removed value: -{
      -  "type": "integer"
      -}
    • addedOutput schema / properties / article_count
      Added value: +{
      +  "type": "integer"
      +}
    • removedOutput schema / properties / articles / items / properties / num
      Removed value: -{
      -  "type": "string"
      -}
    • addedOutput schema / properties / articles / items / properties / number
      Added value: +{
      +  "type": "string"
      +}
    • changedOutput schema / properties / articles / items / required
      Previous value: -[
      -  "kind",
      -  "num",
      -  "url"
      -]New value: +[
      +  "kind",
      +  "number",
      +  "url"
      +]
    • removedOutput schema / properties / commentaires
      Removed value: -{
      -  "items": {
      -    "additionalProperties": false,
      -    "properties": {
      -      "access": {
      -        "anyOf": [
      -          {
      -            "enum": [
      -              "libre",
      -              "abonnes"
      -            ],
      -            "type": "string"
      -          },
      -          {
      -            "type": "null"
      -          }
      -        ],
      -        "default": null
      -      },
      -      "author": {
      -        "anyOf": [
      -          {
      -            "type": "string"
      -          },
      -          {
      -            "type": "null"
      -          }
      -        ],
      -        "default": null
      -      },
      -      "date": {
      -        "anyOf": [
      -          {
      -            "type": "string"
      -          },
      -          {
      -            "type": "null"
      -          }
      -        ],
      -        "default": null,
      -        "format": "date"
      -      },
      -      "issue": {
      -        "anyOf": [
      -          {
      -            "type": "string"
      -          },
      -          {
      -            "type": "null"
      -          }
      -        ],
      -        "default": null
      -      },
      -      "kind": {
      -        "enum": [
      -          "conclusions",
      -          "note"
      -        ],
      -        "type": "string"
      -      },
      -      "pages": {
      -        "anyOf": [
      -          {
      -            "type": "string"
      -          },
      -          {
      -            "type": "null"
      -          }
      -        ],
      -        "default": null
      -      },
      -      "publisher": {
      -        "anyOf": [
      -          {
      -            "type": "string"
      -          },
      -          {
      -            "type": "null"
      -          }
      -        ],
      -        "default": null
      -      },
      -      "title": {
      -        "anyOf": [
      -          {
      -            "type": "string"
      -          },
      -          {
      -            "type": "null"
      -          }
      -        ],
      -        "default": null
      -      },
      -      "url": {
      -        "anyOf": [
      -          {
      -            "type": "string"
      -          },
      -          {
      -            "type": "null"
      -          }
      -        ],
      -        "default": null
      -      },
      -      "volume": {
      -        "anyOf": [
      -          {
      -            "type": "string"
      -          },
      -          {
      -            "type": "null"
      -          }
      -        ],
      -        "default": null
      -      }
      -    },
      -    "required": [
      -      "kind"
      -    ],
      -    "type": "object"
      -  },
      -  "type": "array"
      -}
    • addedOutput schema / properties / commentaries
      Added value: +{
      +  "items": {
      +    "additionalProperties": false,
      +    "properties": {
      +      "access": {
      +        "anyOf": [
      +          {
      +            "enum": [
      +              "libre",
      +              "abonnes"
      +            ],
      +            "type": "string"
      +          },
      +          {
      +            "type": "null"
      +          }
      +        ],
      +        "default": null
      +      },
      +      "author": {
      +        "anyOf": [
      +          {
      +            "type": "string"
      +          },
      +          {
      +            "type": "null"
      +          }
      +        ],
      +        "default": null
      +      },
      +      "body": {
      +        "anyOf": [
      +          {
      +            "type": "string"
      +          },
      +          {
      +            "type": "null"
      +          }
      +        ],
      +        "default": null
      +      },
      +      "date": {
      +        "anyOf": [
      +          {
      +            "type": "string"
      +          },
      +          {
      +            "type": "null"
      +          }
      +        ],
      +        "default": null,
      +        "format": "date"
      +      },
      +      "issue": {
      +        "anyOf": [
      +          {
      +            "type": "string"
      +          },
      +          {
      +            "type": "null"
      +          }
      +        ],
      +        "default": null
      +      },
      +      "kind": {
      +        "enum": [
      +          "summary",
      +          "conclusions",
      +          "note"
      +        ],
      +        "type": "string"
      +      },
      +      "pages": {
      +        "anyOf": [
      +          {
      +            "type": "string"
      +          },
      +          {
      +            "type": "null"
      +          }
      +        ],
      +        "default": null
      +      },
      +      "publisher": {
      +        "anyOf": [
      +          {
      +            "type": "string"
      +          },
      +          {
      +            "type": "null"
      +          }
      +        ],
      +        "default": null
      +      },
      +      "title": {
      +        "anyOf": [
      +          {
      +            "type": "string"
      +          },
      +          {
      +            "type": "null"
      +          }
      +        ],
      +        "default": null
      +      },
      +      "url": {
      +        "anyOf": [
      +          {
      +            "type": "string"
      +          },
      +          {
      +            "type": "null"
      +          }
      +        ],
      +        "default": null
      +      },
      +      "volume": {
      +        "anyOf": [
      +          {
      +            "type": "string"
      +          },
      +          {
      +            "type": "null"
      +          }
      +        ],
      +        "default": null
      +      }
      +    },
      +    "required": [
      +      "kind"
      +    ],
      +    "type": "object"
      +  },
      +  "type": "array"
      +}
    • addedOutput schema / properties / date
      Added value: +{
      +  "anyOf": [
      +    {
      +      "type": "string"
      +    },
      +    {
      +      "type": "null"
      +    }
      +  ],
      +  "default": null,
      +  "format": "date"
      +}
    • removedOutput schema / properties / dateDebut
      Removed value: -{
      -  "anyOf": [
      -    {
      -      "type": "string"
      -    },
      -    {
      -      "type": "null"
      -    }
      -  ],
      -  "default": null,
      -  "format": "date"
      -}
    • removedOutput schema / properties / dateFin
      Removed value: -{
      -  "anyOf": [
      -    {
      -      "type": "string"
      -    },
      -    {
      -      "type": "null"
      -    }
      -  ],
      -  "default": null,
      -  "format": "date"
      -}
    • removedOutput schema / properties / etat
      Removed value: -{
      -  "anyOf": [
      -    {
      -      "type": "string"
      -    },
      -    {
      -      "type": "null"
      -    }
      -  ],
      -  "default": null
      -}
    • addedOutput schema / properties / legislative_history
      Added value: +{
      +  "items": {
      +    "additionalProperties": false,
      +    "properties": {
      +      "date": {
      +        "anyOf": [
      +          {
      +            "type": "string"
      +          },
      +          {
      +            "type": "null"
      +          }
      +        ],
      +        "default": null,
      +        "format": "date"
      +      },
      +      "href": {
      +        "anyOf": [
      +          {
      +            "type": "string"
      +          },
      +          {
      +            "type": "null"
      +          }
      +        ],
      +        "default": null
      +      },
      +      "label": {
      +        "type": "string"
      +      }
      +    },
      +    "required": [
      +      "label"
      +    ],
      +    "type": "object"
      +  },
      +  "type": "array"
      +}
    • removedOutput schema / properties / modifiedBy
      Removed value: -{
      -  "description": "Texts that created, modified or repealed this article.",
      -  "items": {
      -    "additionalProperties": false,
      -    "properties": {
      -      "date": {
      -        "anyOf": [
      -          {
      -            "type": "string"
      -          },
      -          {
      -            "type": "null"
      -          }
      -        ],
      -        "default": null,
      -        "format": "date"
      -      },
      -      "href": {
      -        "anyOf": [
      -          {
      -            "type": "string"
      -          },
      -          {
      -            "type": "null"
      -          }
      -        ],
      -        "default": null
      -      },
      -      "label": {
      -        "type": "string"
      -      }
      -    },
      -    "required": [
      -      "label"
      -    ],
      -    "type": "object"
      -  },
      -  "type": "array"
      -}
    • addedOutput schema / properties / modified_by
      Added value: +{
      +  "description": "Texts that created, modified or repealed this article.",
      +  "items": {
      +    "additionalProperties": false,
      +    "properties": {
      +      "date": {
      +        "anyOf": [
      +          {
      +            "type": "string"
      +          },
      +          {
      +            "type": "null"
      +          }
      +        ],
      +        "default": null,
      +        "format": "date"
      +      },
      +      "href": {
      +        "anyOf": [
      +          {
      +            "type": "string"
      +          },
      +          {
      +            "type": "null"
      +          }
      +        ],
      +        "default": null
      +      },
      +      "label": {
      +        "type": "string"
      +      }
      +    },
      +    "required": [
      +      "label"
      +    ],
      +    "type": "object"
      +  },
      +  "type": "array"
      +}
    • removedOutput schema / properties / nota
      Removed value: -{
      -  "anyOf": [
      -    {
      -      "type": "string"
      -    },
      -    {
      -      "type": "null"
      -    }
      -  ],
      -  "default": null
      -}
    • addedOutput schema / properties / note
      Added value: +{
      +  "anyOf": [
      +    {
      +      "type": "string"
      +    },
      +    {
      +      "type": "null"
      +    }
      +  ],
      +  "default": null
      +}
    • removedOutput schema / properties / num
      Removed value: -{
      -  "type": "string"
      -}
    • addedOutput schema / properties / number
      Added value: +{
      +  "type": "string"
      +}
    • removedOutput schema / properties / sourceUrl
      Removed value: -{
      -  "anyOf": [
      -    {
      -      "type": "string"
      -    },
      -    {
      -      "type": "null"
      -    }
      -  ],
      -  "default": null
      -}
    • addedOutput schema / properties / source_url
      Added value: +{
      +  "anyOf": [
      +    {
      +      "type": "string"
      +    },
      +    {
      +      "type": "null"
      +    }
      +  ],
      +  "default": null
      +}
    • addedOutput schema / properties / status
      Added value: +{
      +  "anyOf": [
      +    {
      +      "type": "string"
      +    },
      +    {
      +      "type": "null"
      +    }
      +  ],
      +  "default": null
      +}
    • removedOutput schema / properties / travauxParlementaires
      Removed value: -{
      -  "items": {
      -    "additionalProperties": false,
      -    "properties": {
      -      "date": {
      -        "anyOf": [
      -          {
      -            "type": "string"
      -          },
      -          {
      -            "type": "null"
      -          }
      -        ],
      -        "default": null,
      -        "format": "date"
      -      },
      -      "href": {
      -        "anyOf": [
      -          {
      -            "type": "string"
      -          },
      -          {
      -            "type": "null"
      -          }
      -        ],
      -        "default": null
      -      },
      -      "label": {
      -        "type": "string"
      -      }
      -    },
      -    "required": [
      -      "label"
      -    ],
      -    "type": "object"
      -  },
      -  "type": "array"
      -}
    • addedOutput schema / properties / valid_from
      Added value: +{
      +  "anyOf": [
      +    {
      +      "type": "string"
      +    },
      +    {
      +      "type": "null"
      +    }
      +  ],
      +  "default": null,
      +  "format": "date"
      +}
    • addedOutput schema / properties / valid_to
      Added value: +{
      +  "anyOf": [
      +    {
      +      "type": "string"
      +    },
      +    {
      +      "type": "null"
      +    }
      +  ],
      +  "default": null,
      +  "format": "date"
      +}
    • removedOutput schema / properties / versions / items / properties / dateDebut
      Removed value: -{
      -  "format": "date",
      -  "type": "string"
      -}
    • removedOutput schema / properties / versions / items / properties / dateFin
      Removed value: -{
      -  "anyOf": [
      -    {
      -      "type": "string"
      -    },
      -    {
      -      "type": "null"
      -    }
      -  ],
      -  "default": null,
      -  "format": "date"
      -}
    • removedOutput schema / properties / versions / items / properties / etat
      Removed value: -{
      -  "type": "string"
      -}
    • addedOutput schema / properties / versions / items / properties / status
      Added value: +{
      +  "type": "string"
      +}
    • addedOutput schema / properties / versions / items / properties / valid_from
      Added value: +{
      +  "format": "date",
      +  "type": "string"
      +}
    • addedOutput schema / properties / versions / items / properties / valid_to
      Added value: +{
      +  "anyOf": [
      +    {
      +      "type": "string"
      +    },
      +    {
      +      "type": "null"
      +    }
      +  ],
      +  "default": null,
      +  "format": "date"
      +}
    • changedOutput schema / properties / versions / items / required
      Previous value: -[
      -  "etat",
      -  "dateDebut"
      -]New value: +[
      +  "status",
      +  "valid_from"
      +]
  3. Changed1 schema field changed
    • changedInput schema / properties / textId / description
      Previous value: -"Légifrance id: an article (LEGIARTI, JORFARTI, KALIARTI), a text (LEGITEXT, JORFTEXT) or a section (LEGISCTA)."New value: +"Légifrance id: an article (LEGIARTI, JORFARTI, KALIARTI), a text (LEGITEXT, JORFTEXT) or a section (LEGISCTA); or a BOFiP id (BOI-…), with `article` for one paragraph."
  4. Changed1 schema field changed
    • addedOutput schema / properties / modifiedBy / description
      Added value: +"Texts that created, modified or repealed this article."
  5. Added

TDQS

A3.7/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already establish that this is a read-only, idempotent, non-destructive operation. The description adds substantial behavioral context beyond that: it returns the version in force at `as_of`, includes status, validity dates, and a full version timeline, and explains that inline links preserve the served date. It does not discuss auth or rate limits, but the added retrieval behavior is meaningful.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The purpose is front-loaded and most sentences add useful retrieval or citation context. The final sentence is dense and references response fields such as `number` and `commentaries` without clearly framing them as output fields, which slightly harms readability.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The tool has an output schema and rich annotations, so the description does not need to explain return values in full. It still covers the key behavior around dated versions, inline links, and section-level retrieval. The main gap is that it does not explain precedence when multiple optional address parameters are supplied.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the schema already carries the main burden of explaining each parameter. The description adds some semantic detail about `as_of` and section URLs returning all articles, but it does not clarify precedence among `url`, `code`+`article`, and `text_id`, nor how those addressing modes combine.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description opens with a specific verb and resource: 'Fetch a legal text, or one of its articles, as it stood on a given date.' That is clear enough to distinguish it from search_norms and decision tools, but it does not explicitly name its siblings to sharpen the boundary.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It gives useful usage cues: omit `as_of` for today, and open inline cross-referenced articles with get_norm. However, it never says when to use search_norms first or when to prefer get_decision, so the agent must infer the workflow from context.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

Try in Browser

Glama MCP Gateway

Add one secure layer between your agents and this server.