Skip to main content
Glama

eurlex_fetch

Read-onlyIdempotent

Retrieve the full text of an EU legal act by CELEX ID, ELI, or Official Journal reference, with language and format options plus offset pagination for long documents.

Instructions

Fetches the full text of an EU legal act. Identify it by celex_id (e.g. "32024R1689"), by eli (e.g. "reg/2016/679" or a full ELI URL), or by oj_ref (post-2023 Official Journal reference, e.g. "OJ:L_202401689") — provide exactly one. Paginate long documents with offset and max_chars: pass the previous response's next_offset to continue reading until it is null.

Input Schema

NameRequiredDescriptionDefault
eliNoEuropean Legislation Identifier (ELI), short or full form, e.g. "reg/2016/679" or "http://data.europa.eu/eli/reg/2016/679/oj" (GDPR). Resolved to a CELEX ID via Cellar. Provide exactly one of celex_id, eli, or oj_ref.
formatNoOutput format: xhtml=structured XHTML, plain=text with XHTML tags strippedxhtml
offsetNoCharacter offset for pagination (0-based)
oj_refNoOfficial Journal reference in the post-2023 scheme, e.g. "OJ:L_202401689" (AI Act). Resolved to a CELEX ID via Cellar. Provide exactly one of celex_id, eli, or oj_ref.
celex_idNoCELEX identifier, e.g. "32024R1689" (AI Act). Provide exactly one of celex_id, eli, or oj_ref.
languageNoLanguage of the full text, as a Cellar 3-letter code (any of the 24 official EU languages, e.g. DEU, ENG, FRA, POL, SPA)ENG
max_charsNoMaximum number of characters returned

Output Schema

NameRequiredDescriptionDefault
offsetYesThe offset this window was sliced from
contentYesThe document text in the requested window/format
celex_idYesThe resolved CELEX ID the text was fetched for
languageYesCellar 3-letter language code of the text
truncatedYesTrue when more text remains beyond this window
source_urlYesCellar REST URL of the fetched resource
next_offsetYesOffset to request next, or null when there is no more content
total_charsYesLength of the full processed document
returned_charsYesLength of `content`

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed9 schema fields changedv2.4.4
    • removedInput schema / additionalProperties
      Removed value: -false
    • addedInput schema / properties / offset / maximum
      Added value: +9007199254740991
    • changedOutput schema / properties / next_offset / anyOf
      Previous value: -[
      -  {
      -    "type": "integer"
      -  },
      -  {
      -    "type": "null"
      -  }
      -]New value: +[
      +  {
      +    "maximum": 9007199254740991,
      +    "minimum": -9007199254740991,
      +    "type": "integer"
      +  },
      +  {
      +    "type": "null"
      +  }
      +]
    • addedOutput schema / properties / offset / maximum
      Added value: +9007199254740991
    • addedOutput schema / properties / offset / minimum
      Added value: +-9007199254740991
    • addedOutput schema / properties / returned_chars / maximum
      Added value: +9007199254740991
    • addedOutput schema / properties / returned_chars / minimum
      Added value: +-9007199254740991
    • addedOutput schema / properties / total_chars / maximum
      Added value: +9007199254740991
    • addedOutput schema / properties / total_chars / minimum
      Added value: +-9007199254740991
  2. Changed2 schema fields changedv2.4.2
    • removedInput schema / $schema
      Removed value: -"http://json-schema.org/draft-07/schema#"
    • removedOutput schema / $schema
      Removed value: -"http://json-schema.org/draft-07/schema#"
  3. Changed1 schema field changedv2.3.0
    • changedInput schema / properties / language / default
      Previous value: -"DEU"New value: +"ENG"
  4. First observedv2.2.0

TDQS

A4.5/5.0
Behavior4/5

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

Annotations already declare readOnly/idempotent/openWorld/non-destructive, so the safety profile is covered. The description adds real behavioral detail beyond them: the one-of-three identifier rule (with implicit Cellar resolution) and the offset/next_offset continuation loop that terminates when next_offset is null. It doesn't mention failure modes such as an unresolvable identifier or a language with no available text.

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

Conciseness5/5

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

Two sentences, no filler: purpose first, then the identifier options, then pagination. Front-loaded and every clause carries an actionable instruction.

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

Completeness5/5

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

An output schema exists, so return-value explanation is unnecessary; the description instead covers the two things the schema cannot — which identifiers are acceptable and how to loop over pages. For a 7-parameter, fully documented read tool, nothing an agent needs to invoke it correctly is missing.

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

Parameters4/5

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

Schema coverage is 100%, so the baseline is 3; the description earns above baseline by giving concrete identifier examples and, more importantly, the cross-parameter pagination workflow (pass the previous response's next_offset until null) that is not expressed in any single schema field. The format/language/max_chars semantics are left entirely to the schema, which is reasonable.

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

Purpose5/5

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

States a specific verb+resource ("Fetches the full text of an EU legal act") that is immediately distinguishable from siblings like eurlex_search, eurlex_metadata, eurlex_structure and eurlex_summary. The three accepted identifier forms are named inline, so an agent knows it can address the resource three different ways.

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

Usage Guidelines4/5

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

"Provide exactly one" of celex_id/eli/oj_ref gives an explicit invocation constraint, and the pagination sentence tells the agent how to continue reading a long act. It stops short of naming alternatives (e.g. eurlex_structure or eurlex_summary for non-full-text needs), so sibling routing is left to inference.

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