Skip to main content
Glama

Resolve EU Legal Citation

eurlex_lookup_celex
Read-onlyIdempotent

Resolve an EU legal citation — a CELEX number, ELI URI, ECLI, an OJ citation naming its act type and year (e.g. "Regulation (EU) 2016/679", "Directive 95/46/EC"), or an Official Journal reference naming its issue, date, and first page (e.g. "OJ L 119, 4.5.2016, p. 1") — to its canonical CELLAR work, confirming it exists before you fetch or traverse it. Returns the work URI, confirmed CELEX number, document type, date, and the ECLI of a case that carries one. A CELEX that CELLAR holds under several works resolves to the one the EUR-Lex content resolver serves. An ECLI shared by several records (a judgment and its abstract or extract, or a joined AG opinion) resolves to the primary record with the lowest CELEX. An OJ reference whose first page starts several acts returns found false, its notice naming each CELEX.

Input Schema

NameRequiredDescriptionDefault
identifierYesThe EU legal citation to resolve: a CELEX number (e.g. 32016R0679), a work-level ELI URI (e.g. http://data.europa.eu/eli/reg/2016/679, with or without the /oj suffix), an ECLI (e.g. ECLI:EU:C:2014:317), or an OJ citation that names its act type and year, resolved to the CELEX it names under identifier_type "auto": Regulation (EU) 2016/679, Regulation (EC) No 1049/2001, Directive 95/46/EC, Decision No 1313/2013/EU, Council Framework Decision 2002/584/JHA, Council Joint Action 2008/124/CFSP, Common Position 2003/444/CFSP. "No" before the numbers means number/year, otherwise year/number; a two-digit year is 19YY. A citation without its act type (95/46/EC) or year (Regulation No 17) is not parsed; one followed by its parenthesized OJ reference (Directive 95/46/EC (OJ L 281, 23.11.1995, p. 31)) resolves as the citation. An Official Journal reference resolves, also under "auto", to the act starting on the page it cites: OJ L 281, 23.11.1995, p. 31 (also "of 23.11.1995", a page range, a class letter as in OJ L 42I, OJ C, and before 1968 the series-less OJ 13, 21.2.1962, p. 204/62), the year-first OJ 1995 L 281, p. 31, and the act-by-act OJ L, 2024/1689, 12.7.2024 or OJ C, C/2024/2664, 29.4.2024; the cited date must be the publication date. A reference without its year or first page (OJ L 281, OJ L 119/1) is not parsed. A CELEX is also read in lowercase, after a CELEX: prefix, from a EUR-Lex page URL carrying uri=CELEX:… (e.g. https://eur-lex.europa.eu/legal-content/EN/TXT/?uri=CELEX:32016R0679), or from a publications.europa.eu/resource/celex/ URI; an ELI over https, on the eur-lex.europa.eu host, without a scheme, with a trailing slash, or with a language segment after /oj or a date (…/oj/eng). A case number (C-131/12) names several records rather than one work and returns found false with a pointer to eurlex_get_cases.
identifier_typeNoFormat of the identifier. "auto" detects a CELEX, an ELI URI, an ECLI (by its ECLI: prefix, in any letter case), an OJ citation, or an Official Journal reference; "celex", "eli", or "ecli" forces that lookup. An OJ citation or reference is recognized only under "auto".auto

Output Schema

NameRequiredDescriptionDefault
dateNoDocument date in ISO 8601 format (YYYY-MM-DD).
ecliNoEuropean Case Law Identifier of the case (e.g. "ECLI:EU:C:2014:317"), as CELLAR stores it — the resolved work's own, or the one another work holding the same CELEX records. Present for case law that carries one; absent for legislation and judicial notices.
errorNoPresent when the call failed. Absent on success.
foundNoTrue when the identifier resolves to a CELLAR work; false when a well-formed CELEX, ELI, ECLI, OJ citation, or Official Journal reference matches no work in the corpus, when an OJ reference's first page starts several acts, or when the identifier is a case number, with a notice naming what was tried. Only an identifier_type "auto" value that, after trimming, is neither an ECLI, an ELI, a CELEX in any accepted form, an OJ citation naming its act type and year, nor an OJ reference naming its issue, year, and first page raises ambiguous_identifier instead.
noticeNoPresent only when found is false: the CELEX, ELI, ECLI, or OJ reference looked up, the accepted forms, and the search to use instead; for an OJ reference whose first page starts several acts, the CELEX of each.
work_uriNoCELLAR work URI (stable resource identifier).
celex_numberNoConfirmed CELEX number for the resolved work.
resource_typeNoHuman-readable document category resolved from the CDM resource type (e.g. "Regulation", "Directive", "Judgment"). An authority value with no known label falls back to its code (e.g. "BUDGET"). Absent for some works.

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed5 schema fields changed
    • changedInput schema / properties / identifier / description
      Previous value: -"The EU legal citation to resolve: a CELEX number (e.g. 32016R0679), a work-level ELI URI (e.g. http://data.europa.eu/eli/reg/2016/679, with or without the /oj suffix), an ECLI (e.g. ECLI:EU:C:2014:317), or an OJ citation that names its act type and year, resolved to the CELEX it names under identifier_type \"auto\": Regulation (EU) 2016/679, Regulation (EC) No 1049/2001, Directive 95/46/EC, Decision No 1313/2013/EU, Council Framework Decision 2002/584/JHA, Council Joint Action 2008/124/CFSP, Common Position 2003/444/CFSP. \"No\" before the numbers means number/year, otherwise year/number; a two-digit year is 19YY. A citation without its act type (95/46/EC) or year (Regulation No 17) is not parsed. A CELEX is also read in lowercase, after a CELEX: prefix, from a EUR-Lex page URL carrying uri=CELEX:… (e.g. https://eur-lex.europa.eu/legal-content/EN/TXT/?uri=CELEX:32016R0679), or from a publications.europa.eu/resource/celex/ URI; an ELI over https, on the eur-lex.europa.eu host, without a scheme, with a trailing slash, or with a language segment after /oj or a date (…/oj/eng). A case number (C-131/12) names several records rather than one work and returns found false with a pointer to eurlex_get_cases."New value: +"The EU legal citation to resolve: a CELEX number (e.g. 32016R0679), a work-level ELI URI (e.g. http://data.europa.eu/eli/reg/2016/679, with or without the /oj suffix), an ECLI (e.g. ECLI:EU:C:2014:317), or an OJ citation that names its act type and year, resolved to the CELEX it names under identifier_type \"auto\": Regulation (EU) 2016/679, Regulation (EC) No 1049/2001, Directive 95/46/EC, Decision No 1313/2013/EU, Council Framework Decision 2002/584/JHA, Council Joint Action 2008/124/CFSP, Common Position 2003/444/CFSP. \"No\" before the numbers means number/year, otherwise year/number; a two-digit year is 19YY. A citation without its act type (95/46/EC) or year (Regulation No 17) is not parsed; one followed by its parenthesized OJ reference (Directive 95/46/EC (OJ L 281, 23.11.1995, p. 31)) resolves as the citation. An Official Journal reference resolves, also under \"auto\", to the act starting on the page it cites: OJ L 281, 23.11.1995, p. 31 (also \"of 23.11.1995\", a page range, a class letter as in OJ L 42I, OJ C, and before 1968 the series-less OJ 13, 21.2.1962, p. 204/62), the year-first OJ 1995 L 281, p. 31, and the act-by-act OJ L, 2024/1689, 12.7.2024 or OJ C, C/2024/2664, 29.4.2024; the cited date must be the publication date. A reference without its year or first page (OJ L 281, OJ L 119/1) is not parsed. A CELEX is also read in lowercase, after a CELEX: prefix, from a EUR-Lex page URL carrying uri=CELEX:… (e.g. https://eur-lex.europa.eu/legal-content/EN/TXT/?uri=CELEX:32016R0679), or from a publications.europa.eu/resource/celex/ URI; an ELI over https, on the eur-lex.europa.eu host, without a scheme, with a trailing slash, or with a language segment after /oj or a date (…/oj/eng). A case number (C-131/12) names several records rather than one work and returns found false with a pointer to eurlex_get_cases."
    • changedInput schema / properties / identifier_type / description
      Previous value: -"Format of the identifier. \"auto\" detects a CELEX, an ELI URI, an ECLI (by its ECLI: prefix, in any letter case), or an OJ citation; \"celex\", \"eli\", or \"ecli\" forces that lookup. An OJ citation is recognized only under \"auto\"."New value: +"Format of the identifier. \"auto\" detects a CELEX, an ELI URI, an ECLI (by its ECLI: prefix, in any letter case), an OJ citation, or an Official Journal reference; \"celex\", \"eli\", or \"ecli\" forces that lookup. An OJ citation or reference is recognized only under \"auto\"."
    • changedOutput schema / properties / error / properties / data / properties / reason / description
      Previous value: -"Machine-readable failure mode. Declared by this tool: `ambiguous_identifier`: identifier_type is \"auto\" and the identifier, after trimming, is neither an ECLI (ECLI: prefix), an ELI, a CELEX (bare, after a CELEX: prefix, or in a EUR-Lex URL), a prefixed case number, nor an OJ citation naming its act type and year (e.g. \"Regulation No 17\" names no year), so no lookup branch applies. `sparql_error`: CELLAR rejected the lookup query this call sent. The same call fails the same way again. `sparql_timeout`: The lookup query ran past the client timeout, or CELLAR refused it as too costly to run. It is not retried. Other values are possible when a failure originates below the handler."New value: +"Machine-readable failure mode. Declared by this tool: `ambiguous_identifier`: identifier_type is \"auto\" and the identifier, after trimming, is neither an ECLI (ECLI: prefix), an ELI, a CELEX (bare, after a CELEX: prefix, or in a EUR-Lex URL), a prefixed case number, an OJ citation naming its act type and year (e.g. \"Regulation No 17\" names no year), nor an Official Journal reference naming its issue, year, and first page (e.g. \"OJ L 281\" names neither), so no lookup branch applies. `sparql_error`: CELLAR rejected the lookup query this call sent. The same call fails the same way again. `sparql_timeout`: The lookup query ran past the client timeout, or CELLAR refused it as too costly to run. It is not retried. Other values are possible when a failure originates below the handler."
    • changedOutput schema / properties / found / description
      Previous value: -"True when the identifier resolves to a CELLAR work; false when a well-formed CELEX, ELI, ECLI, or OJ citation matches no work in the corpus, or the identifier is a case number, with a notice naming what was tried. Only an identifier_type \"auto\" value that, after trimming, is neither an ECLI, an ELI, a CELEX in any accepted form, nor an OJ citation naming its act type and year raises ambiguous_identifier instead."New value: +"True when the identifier resolves to a CELLAR work; false when a well-formed CELEX, ELI, ECLI, OJ citation, or Official Journal reference matches no work in the corpus, when an OJ reference's first page starts several acts, or when the identifier is a case number, with a notice naming what was tried. Only an identifier_type \"auto\" value that, after trimming, is neither an ECLI, an ELI, a CELEX in any accepted form, an OJ citation naming its act type and year, nor an OJ reference naming its issue, year, and first page raises ambiguous_identifier instead."
    • changedOutput schema / properties / notice / description
      Previous value: -"Present only when found is false: the CELEX, ELI, or ECLI looked up, the accepted forms, and the search to use instead."New value: +"Present only when found is false: the CELEX, ELI, ECLI, or OJ reference looked up, the accepted forms, and the search to use instead; for an OJ reference whose first page starts several acts, the CELEX of each."
  2. Changed4 schema fields changed
    • changedInput schema / properties / identifier / description
      Previous value: -"The EU legal citation to resolve: a CELEX number (e.g. 32016R0679), a work-level ELI URI (e.g. http://data.europa.eu/eli/reg/2016/679, with or without the /oj suffix), an ECLI (e.g. ECLI:EU:C:2014:317), or an OJ citation that names its act type and year, resolved to the CELEX it names under identifier_type \"auto\": Regulation (EU) 2016/679, Regulation (EC) No 1049/2001, Directive 95/46/EC, Decision No 1313/2013/EU, Council Framework Decision 2002/584/JHA, Council Joint Action 2008/124/CFSP, Common Position 2003/444/CFSP. \"No\" before the numbers means number/year, otherwise year/number; a two-digit year is 19YY. A citation without its act type (95/46/EC) or year (Regulation No 17) is not parsed."New value: +"The EU legal citation to resolve: a CELEX number (e.g. 32016R0679), a work-level ELI URI (e.g. http://data.europa.eu/eli/reg/2016/679, with or without the /oj suffix), an ECLI (e.g. ECLI:EU:C:2014:317), or an OJ citation that names its act type and year, resolved to the CELEX it names under identifier_type \"auto\": Regulation (EU) 2016/679, Regulation (EC) No 1049/2001, Directive 95/46/EC, Decision No 1313/2013/EU, Council Framework Decision 2002/584/JHA, Council Joint Action 2008/124/CFSP, Common Position 2003/444/CFSP. \"No\" before the numbers means number/year, otherwise year/number; a two-digit year is 19YY. A citation without its act type (95/46/EC) or year (Regulation No 17) is not parsed. A CELEX is also read in lowercase, after a CELEX: prefix, from a EUR-Lex page URL carrying uri=CELEX:… (e.g. https://eur-lex.europa.eu/legal-content/EN/TXT/?uri=CELEX:32016R0679), or from a publications.europa.eu/resource/celex/ URI; an ELI over https, on the eur-lex.europa.eu host, without a scheme, with a trailing slash, or with a language segment after /oj or a date (…/oj/eng). A case number (C-131/12) names several records rather than one work and returns found false with a pointer to eurlex_get_cases."
    • changedOutput schema / properties / error / properties / data / properties / reason / description
      Previous value: -"Machine-readable failure mode. Declared by this tool: `ambiguous_identifier`: identifier_type is \"auto\" and the identifier, after trimming, is neither an ECLI (ECLI: prefix), an ELI URI, CELEX-shaped (uppercase), nor an OJ citation naming its act type and year (e.g. \"Regulation No 17\" names no year), so no lookup branch applies. Other values are possible when a failure originates below the handler."New value: +"Machine-readable failure mode. Declared by this tool: `ambiguous_identifier`: identifier_type is \"auto\" and the identifier, after trimming, is neither an ECLI (ECLI: prefix), an ELI, a CELEX (bare, after a CELEX: prefix, or in a EUR-Lex URL), a prefixed case number, nor an OJ citation naming its act type and year (e.g. \"Regulation No 17\" names no year), so no lookup branch applies. `sparql_error`: CELLAR rejected the lookup query this call sent. The same call fails the same way again. `sparql_timeout`: The lookup query ran past the client timeout, or CELLAR refused it as too costly to run. It is not retried. Other values are possible when a failure originates below the handler."
    • changedOutput schema / properties / error / properties / data / properties / reason / examples
      Previous value: -[
      -  "ambiguous_identifier"
      -]New value: +[
      +  "ambiguous_identifier",
      +  "sparql_error",
      +  "sparql_timeout"
      +]
    • changedOutput schema / properties / found / description
      Previous value: -"True when the identifier resolves to a CELLAR work; false when a well-formed CELEX, ELI, ECLI, or OJ citation matches no work in the corpus, with a notice naming what was tried. Only an identifier_type \"auto\" value that, after trimming, is neither an ECLI, an ELI URI, CELEX-shaped (uppercase), nor an OJ citation naming its act type and year raises ambiguous_identifier instead."New value: +"True when the identifier resolves to a CELLAR work; false when a well-formed CELEX, ELI, ECLI, or OJ citation matches no work in the corpus, or the identifier is a case number, with a notice naming what was tried. Only an identifier_type \"auto\" value that, after trimming, is neither an ECLI, an ELI, a CELEX in any accepted form, nor an OJ citation naming its act type and year raises ambiguous_identifier instead."
  3. Changed5 schema fields changed
    • changedInput schema / properties / identifier / description
      Previous value: -"The EU legal citation to resolve: a CELEX number (e.g. 32016R0679), a work-level ELI URI (e.g. http://data.europa.eu/eli/reg/2016/679, with or without the /oj suffix), or an ECLI (e.g. ECLI:EU:C:2014:317)."New value: +"The EU legal citation to resolve: a CELEX number (e.g. 32016R0679), a work-level ELI URI (e.g. http://data.europa.eu/eli/reg/2016/679, with or without the /oj suffix), an ECLI (e.g. ECLI:EU:C:2014:317), or an OJ citation that names its act type and year, resolved to the CELEX it names under identifier_type \"auto\": Regulation (EU) 2016/679, Regulation (EC) No 1049/2001, Directive 95/46/EC, Decision No 1313/2013/EU, Council Framework Decision 2002/584/JHA, Council Joint Action 2008/124/CFSP, Common Position 2003/444/CFSP. \"No\" before the numbers means number/year, otherwise year/number; a two-digit year is 19YY. A citation without its act type (95/46/EC) or year (Regulation No 17) is not parsed."
    • changedInput schema / properties / identifier_type / description
      Previous value: -"Format of the identifier. \"auto\" detects it automatically (an ECLI by its ECLI: prefix, in any letter case); supply \"celex\", \"eli\", or \"ecli\" explicitly if detection fails."New value: +"Format of the identifier. \"auto\" detects a CELEX, an ELI URI, an ECLI (by its ECLI: prefix, in any letter case), or an OJ citation; \"celex\", \"eli\", or \"ecli\" forces that lookup. An OJ citation is recognized only under \"auto\"."
    • changedOutput schema / properties / error / properties / data / properties / reason / description
      Previous value: -"Machine-readable failure mode. Declared by this tool: `ambiguous_identifier`: identifier_type is \"auto\" and the identifier, after trimming, is neither an ECLI (ECLI: prefix), an ELI URI, nor CELEX-shaped (uppercase), so no lookup branch applies. Other values are possible when a failure originates below the handler."New value: +"Machine-readable failure mode. Declared by this tool: `ambiguous_identifier`: identifier_type is \"auto\" and the identifier, after trimming, is neither an ECLI (ECLI: prefix), an ELI URI, CELEX-shaped (uppercase), nor an OJ citation naming its act type and year (e.g. \"Regulation No 17\" names no year), so no lookup branch applies. Other values are possible when a failure originates below the handler."
    • changedOutput schema / properties / found / description
      Previous value: -"True when the identifier resolves to a CELLAR work; false when a well-formed CELEX, ELI, or ECLI matches no work in the corpus. Only an identifier_type \"auto\" value that, after trimming, is neither an ECLI, an ELI URI, nor CELEX-shaped (uppercase) raises ambiguous_identifier instead."New value: +"True when the identifier resolves to a CELLAR work; false when a well-formed CELEX, ELI, ECLI, or OJ citation matches no work in the corpus, with a notice naming what was tried. Only an identifier_type \"auto\" value that, after trimming, is neither an ECLI, an ELI URI, CELEX-shaped (uppercase), nor an OJ citation naming its act type and year raises ambiguous_identifier instead."
    • addedOutput schema / properties / notice
      Added value: +{
      +  "description": "Present only when found is false: the CELEX, ELI, or ECLI looked up, the accepted forms, and the search to use instead.",
      +  "type": "string"
      +}
  4. Changed1 schema field changed
    • changedOutput schema / properties / ecli / description
      Previous value: -"European Case Law Identifier of the resolved work (e.g. \"ECLI:EU:C:2014:317\"), as CELLAR stores it. Present for case law that carries one; absent for legislation and judicial notices."New value: +"European Case Law Identifier of the case (e.g. \"ECLI:EU:C:2014:317\"), as CELLAR stores it — the resolved work's own, or the one another work holding the same CELEX records. Present for case law that carries one; absent for legislation and judicial notices."
  5. Changed6 schema fields changed
    • changedInput schema / properties / identifier / description
      Previous value: -"The EU legal citation to resolve: a CELEX number (e.g. 32016R0679) or a work-level ELI URI (e.g. http://data.europa.eu/eli/reg/2016/679, with or without the /oj suffix)."New value: +"The EU legal citation to resolve: a CELEX number (e.g. 32016R0679), a work-level ELI URI (e.g. http://data.europa.eu/eli/reg/2016/679, with or without the /oj suffix), or an ECLI (e.g. ECLI:EU:C:2014:317)."
    • changedInput schema / properties / identifier_type / description
      Previous value: -"Format of the identifier. \"auto\" detects it automatically; supply \"celex\" or \"eli\" explicitly if detection fails."New value: +"Format of the identifier. \"auto\" detects it automatically (an ECLI by its ECLI: prefix, in any letter case); supply \"celex\", \"eli\", or \"ecli\" explicitly if detection fails."
    • changedInput schema / properties / identifier_type / enum
      Previous value: -[
      -  "celex",
      -  "eli",
      -  "auto"
      -]New value: +[
      +  "celex",
      +  "eli",
      +  "ecli",
      +  "auto"
      +]
    • addedOutput schema / properties / ecli
      Added value: +{
      +  "description": "European Case Law Identifier of the resolved work (e.g. \"ECLI:EU:C:2014:317\"), as CELLAR stores it. Present for case law that carries one; absent for legislation and judicial notices.",
      +  "type": "string"
      +}
    • changedOutput schema / properties / error / properties / data / properties / reason / description
      Previous value: -"Machine-readable failure mode. Declared by this tool: `ambiguous_identifier`: identifier_type is \"auto\" and the identifier, after trimming, is neither an ELI URI nor CELEX-shaped (uppercase), so no lookup branch applies. Other values are possible when a failure originates below the handler."New value: +"Machine-readable failure mode. Declared by this tool: `ambiguous_identifier`: identifier_type is \"auto\" and the identifier, after trimming, is neither an ECLI (ECLI: prefix), an ELI URI, nor CELEX-shaped (uppercase), so no lookup branch applies. Other values are possible when a failure originates below the handler."
    • changedOutput schema / properties / found / description
      Previous value: -"True when the identifier resolves to a CELLAR work; false when a well-formed CELEX/ELI matches no work in the corpus. Only an identifier_type \"auto\" value that, after trimming, is neither an ELI URI nor CELEX-shaped (uppercase) raises ambiguous_identifier instead."New value: +"True when the identifier resolves to a CELLAR work; false when a well-formed CELEX, ELI, or ECLI matches no work in the corpus. Only an identifier_type \"auto\" value that, after trimming, is neither an ECLI, an ELI URI, nor CELEX-shaped (uppercase) raises ambiguous_identifier instead."
  6. Changed1 schema field changed
    • changedOutput schema / properties / resource_type / description
      Previous value: -"Human-readable document category resolved from the CDM resource type (e.g. \"Regulation\", \"Directive\", \"Judgment\"). An authority value with no known label falls back to its code (e.g. \"CONS_TEXT\"). Absent for some works."New value: +"Human-readable document category resolved from the CDM resource type (e.g. \"Regulation\", \"Directive\", \"Judgment\"). An authority value with no known label falls back to its code (e.g. \"BUDGET\"). Absent for some works."
  7. Changed1 schema field changed
    • changedOutput schema / properties / resource_type / description
      Previous value: -"CDM resource type URI indicating the document category (e.g. .../resource-type/REG for Regulation). Absent for some works."New value: +"Human-readable document category resolved from the CDM resource type (e.g. \"Regulation\", \"Directive\", \"Judgment\"). An authority value with no known label falls back to its code (e.g. \"CONS_TEXT\"). Absent for some works."
  8. Changed2 schema fields changed
    • changedOutput schema / properties / error / properties / data / properties / reason / description
      Previous value: -"Machine-readable failure mode. Declared by this tool: `ambiguous_identifier`: identifier_type is \"auto\" and the identifier format could not be determined. Other values are possible when a failure originates below the handler."New value: +"Machine-readable failure mode. Declared by this tool: `ambiguous_identifier`: identifier_type is \"auto\" and the identifier, after trimming, is neither an ELI URI nor CELEX-shaped (uppercase), so no lookup branch applies. Other values are possible when a failure originates below the handler."
    • changedOutput schema / properties / found / description
      Previous value: -"True when the identifier resolves to a CELLAR work; false when a well-formed CELEX/ELI matches no work in the corpus. A malformed or undetectable identifier raises ambiguous_identifier instead."New value: +"True when the identifier resolves to a CELLAR work; false when a well-formed CELEX/ELI matches no work in the corpus. Only an identifier_type \"auto\" value that, after trimming, is neither an ELI URI nor CELEX-shaped (uppercase) raises ambiguous_identifier instead."
  9. Changed6 schema fields changed
    • changedInput schema / $schema
      Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
    • addedInput schema / additionalProperties
      Added value: +false
    • changedOutput schema / $schema
      Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
    • addedOutput schema / anyOf
      Added value: +[
      +  {
      +    "not": {
      +      "required": [
      +        "error"
      +      ]
      +    },
      +    "required": [
      +      "found"
      +    ]
      +  },
      +  {
      +    "required": [
      +      "error"
      +    ]
      +  }
      +]
    • addedOutput schema / properties / error
      Added value: +{
      +  "additionalProperties": {},
      +  "description": "Present when the call failed. Absent on success.",
      +  "properties": {
      +    "code": {
      +      "description": "JSON-RPC error code for this failure.",
      +      "maximum": 9007199254740991,
      +      "minimum": -9007199254740991,
      +      "type": "integer"
      +    },
      +    "data": {
      +      "additionalProperties": {},
      +      "properties": {
      +        "reason": {
      +          "description": "Machine-readable failure mode. Declared by this tool: `ambiguous_identifier`: identifier_type is \"auto\" and the identifier format could not be determined. Other values are possible when a failure originates below the handler.",
      +          "examples": [
      +            "ambiguous_identifier"
      +          ],
      +          "type": "string"
      +        },
      +        "recovery": {
      +          "additionalProperties": {},
      +          "description": "Actionable next step for the caller.",
      +          "properties": {
      +            "hint": {
      +              "type": "string"
      +            }
      +          },
      +          "required": [
      +            "hint"
      +          ],
      +          "type": "object"
      +        },
      +        "retryable": {
      +          "description": "Whether retrying may succeed.",
      +          "type": "boolean"
      +        }
      +      },
      +      "type": "object"
      +    },
      +    "message": {
      +      "description": "Human-readable description of what went wrong.",
      +      "type": "string"
      +    }
      +  },
      +  "required": [
      +    "code",
      +    "message"
      +  ],
      +  "type": "object"
      +}
    • removedOutput schema / required
      Removed value: -[
      -  "found"
      -]
  10. Changed1 schema field changed
    • changedInput schema / properties / identifier_type / description
      Previous value: -"Format of the identifier. Use \"auto\" to let the server detect the format automatically. Supply explicitly if auto-detection fails or if the identifier is ambiguous."New value: +"Format of the identifier. \"auto\" detects it automatically; supply \"celex\" or \"eli\" explicitly if detection fails."
  11. Changed1 schema field changed
    • changedOutput schema / properties / found / description
      Previous value: -"Always true on success (the tool throws not_found when the identifier does not resolve). Present as a discriminator for downstream logic."New value: +"True when the identifier resolves to a CELLAR work; false when a well-formed CELEX/ELI matches no work in the corpus. A malformed or undetectable identifier raises ambiguous_identifier instead."
  12. Changed2 schema fields changed
    • changedInput schema / properties / identifier / description
      Previous value: -"The EU legal citation to resolve: a CELEX number (e.g. 32016R0679), ELI URI, or Official Journal reference (e.g. OJ L 119)."New value: +"The EU legal citation to resolve: a CELEX number (e.g. 32016R0679) or a work-level ELI URI (e.g. http://data.europa.eu/eli/reg/2016/679, with or without the /oj suffix)."
    • changedInput schema / properties / identifier_type / enum
      Previous value: -[
      -  "celex",
      -  "eli",
      -  "oj",
      -  "auto"
      -]New value: +[
      +  "celex",
      +  "eli",
      +  "auto"
      +]
  13. First observed

TDQS

A4.4/5.0
Behavior5/5

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

Annotations already cover the read-only/idempotent/open-world profile, and the description goes well beyond them: it spells out resolution precedence for ambiguous inputs (multiple works per CELEX resolves to the EUR-Lex-served one; shared ECLI resolves to the primary record with the lowest CELEX; ambiguous OJ first page returns found=false with each CELEX named in the notice) and enumerates the returned fields.

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 core purpose is front-loaded in the opening clause and the ambiguity rules are grouped at the end. The first sentence is a long em-dash run listing every accepted citation form, which duplicates the schema and costs readability, but there is no filler.

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?

For a citation-normalization tool this is complete: input formats, disambiguation rules, fallback behavior for case numbers, and a note on returned fields. With an output schema and safety annotations already present, nothing an agent needs before calling is missing.

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% and the identifier parameter's schema description already enumerates the accepted formats and parsing rules in detail. The description's first sentence largely restates that enumeration, adding only light framing rather than new semantics beyond the schema.

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?

A specific verb (resolve) with a well-scoped resource (an EU legal citation of several named formats) and an explicit output target (canonical CELLAR work). It also distinguishes itself from a sibling by noting that a case number like C-131/12 returns found=false with a pointer to eurlex_get_cases.

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?

It states the workflow position clearly — 'confirming it exists before you fetch or traverse it' — and names eurlex_get_cases for the case-number case. It does not say when to prefer eurlex_search_documents or eurlex_get_document for a citation that fails to resolve, so alternatives are only partly covered.

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.