Skip to main content
Glama

Get CELLAR Relationship Graph

eurlex_get_relations
Read-onlyIdempotent

Traverse the one-hop CDM relationship graph of an EU act: what it amends or is amended by, what it repeals or is repealed by (explicit and implicit), its consolidated versions, national transposition measures, its legal basis, and works that cite it. Returns direct relations only, paginated per relation type and direction. Requires a CELEX number or CELLAR work URI.

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
limitNoMaximum related works per relation type and direction (1–100, default 100). Incoming edges are ordered newest-first, so the cap keeps the newest — page with offset for older ones.
offsetNoPagination offset applied per relation type and direction — related works to skip (default 0). Page forward by adding limit; incoming edges are newest-first, so higher offsets reach older works.
work_uriNoCELLAR work resource URI to traverse (e.g. http://publications.europa.eu/resource/cellar/3e485e15-11bd-11e6-ba9a-01aa75ed71a1). Used directly as the addressed work; its CELEX identity is resolved for the national_transposition act match, which stands down when the work carries several CELEX numbers — address such a work by celex_number to name the act you mean. Provide exactly one of celex_number or work_uri.
celex_numberNoCELEX number of the work to traverse (e.g. 32016R0679). Provide exactly one of celex_number or work_uri.
relation_typesNoSubset of relation types to return; omit for all. Types: cites, amends, amended_by, repeals, repealed_by, implicitly_repeals, implicitly_repealed_by, legal_basis (treaty/article this act rests on), consolidated_version (consolidated texts of this act), national_transposition (member-state implementing measures).

Output Schema

TableJSON Schema
NameRequiredDescriptionDefault
capNoThe per-direction cap. It bounds each relation type and each direction independently, so it is not an upper bound on shown: a page spanning several types and both directions can return more relations than this number.
errorNoPresent when the call failed. Absent on success.
shownNoNumber of relations returned in this page, summed across every relation type and direction — not the count for any single type or direction.
totalNoNumber of relations returned in this page (not a corpus-wide count).
noticeNoGuidance for the next call: on an empty first page, how to widen the traversal; on a page with more rows, the offset to continue from.
offsetNoPagination offset applied to this response (per relation type and direction).
has_moreNoTrue only when at least one requested relation type/direction returned an additional valid row beyond this page.
work_uriNoCELLAR URI of the source work (the work_uri input, or resolved from the CELEX).
relationsNoDirect CDM relations for the requested work.
truncatedNoTrue when an additional valid row proves at least one relation type/direction has more related works — page with offset.
next_offsetNoOffset for the next page. Present only when has_more is true.
celex_numberNoCELEX number of the source work whose relations were traversed — the celex_number input, or the CELEX resolved from work_uri when the addressed work carries exactly one. Absent when the addressed work carries none, carries several, or its identity was not resolved because no requested relation type needs it.
empty_relation_typesNoRequested relation types that returned zero relations in THIS page. Page-scoped: a type can appear here because all its edges sit beyond the current offset/limit window, not only because the act genuinely has none of that relation — so absent-from-here does not prove absent-in-CELLAR. An empty page — a first page with no edges, or an exhausted later page — returns all requested types here.
requested_relation_typesNoThe relation types this request traversed — the explicit relation_types list, or all types when it was omitted. Diff against the types present in relations[], or read empty_relation_types, to confirm which requested types returned edges.

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed2 schema fields changed
    • addedOutput schema / properties / relations / items / properties / related_date
      Added value: +{
      +  "description": "Document date of the related work (YYYY-MM-DD), the date rows are ordered by within each relation type and direction. Absent when CELLAR records none; such rows sort last.",
      +  "type": "string"
      +}
    • addedOutput schema / properties / relations / items / properties / related_title
      Added value: +{
      +  "description": "The related work's English title, whole. Absent when the work has no English title — most national_transposition measures are titled only in their member state's language — with no other language substituted.",
      +  "type": "string"
      +}
  2. Changed1 schema field changed
    • changedInput schema / properties / work_uri / description
      Previous value: -"CELLAR work resource URI to traverse (e.g. http://publications.europa.eu/resource/cellar/3e485e15-11bd-11e6-ba9a-01aa75ed71a1). Used directly as the addressed work; its CELEX identity is resolved for relation-specific act matching, and act-matched relation types stand down when the work carries several CELEX numbers — address such a work by celex_number to name the act you mean. Provide exactly one of celex_number or work_uri."New value: +"CELLAR work resource URI to traverse (e.g. http://publications.europa.eu/resource/cellar/3e485e15-11bd-11e6-ba9a-01aa75ed71a1). Used directly as the addressed work; its CELEX identity is resolved for the national_transposition act match, which stands down when the work carries several CELEX numbers — address such a work by celex_number to name the act you mean. Provide exactly one of celex_number or work_uri."
  3. Changed4 schema fields changed
    • changedOutput schema / properties / empty_relation_types / description
      Previous value: -"Requested relation types that returned zero relations in THIS page. Page-scoped: a type can appear here because all its edges sit beyond the current offset/limit window, not only because the act genuinely has none of that relation — so absent-from-here does not prove absent-in-CELLAR. An empty first page throws no_relations; an exhausted non-zero page returns all requested types here."New value: +"Requested relation types that returned zero relations in THIS page. Page-scoped: a type can appear here because all its edges sit beyond the current offset/limit window, not only because the act genuinely has none of that relation — so absent-from-here does not prove absent-in-CELLAR. An empty page — a first page with no edges, or an exhausted later page — returns all requested types here."
    • changedOutput schema / properties / error / properties / data / properties / reason / description
      Previous value: -"Machine-readable failure mode. Declared by this tool: `invalid_identifier_args`: Neither celex_number nor work_uri was provided, or both were. `not_found`: CELEX number not found in CELLAR — resolve the identifier with eurlex_lookup_celex first. `no_relations`: The first page (offset 0) was empty — the work exists but has no CDM relations of the requested types. A later page that comes back empty returns an empty success instead. Other values are possible when a failure originates below the handler."New value: +"Machine-readable failure mode. Declared by this tool: `invalid_identifier_args`: Neither celex_number nor work_uri was provided, or both were. `not_found`: CELEX number not found in CELLAR — resolve the identifier with eurlex_lookup_celex first. Other values are possible when a failure originates below the handler."
    • changedOutput schema / properties / error / properties / data / properties / reason / examples
      Previous value: -[
      -  "invalid_identifier_args",
      -  "not_found",
      -  "no_relations"
      -]New value: +[
      +  "invalid_identifier_args",
      +  "not_found"
      +]
    • addedOutput schema / properties / notice
      Added value: +{
      +  "description": "Guidance for the next call: on an empty first page, how to widen the traversal; on a page with more rows, the offset to continue from.",
      +  "type": "string"
      +}
  4. Changed1 schema field changed
    • addedOutput schema / properties / relations / items / properties / related_member_state
      Added value: +{
      +  "description": "ISO 3166-1 alpha-3 code of the member state whose national measure this is (e.g. \"CZE\"), read from the three letters after the directive number in related_celex_number. Present on national_transposition rows only. The codes are the 27 member states plus \"GBR\" (the United Kingdom).",
      +  "type": "string"
      +}
  5. Changed17 schema fields changed
    • addedInput schema / properties / celex_number / anyOf
      Added value: +[
      +  {
      +    "const": "",
      +    "type": "string"
      +  },
      +  {
      +    "description": "CELEX number of the work (e.g. 32016R0679). Surrounding whitespace is trimmed and the value is uppercased before validation.",
      +    "pattern": "^[0-9A-Z][0-9A-Z()/_-]{5,}$",
      +    "type": "string"
      +  }
      +]
    • removedInput schema / properties / celex_number / type
      Removed value: -"string"
    • changedInput schema / properties / limit / description
      Previous value: -"Maximum related works per relation type and direction (1–100, default 100). Incoming edges are ordered newest-first, so the cap keeps the newest — page with offset for older ones. When truncated is true, at least one direction filled its cap."New value: +"Maximum related works per relation type and direction (1–100, default 100). Incoming edges are ordered newest-first, so the cap keeps the newest — page with offset for older ones."
    • changedInput schema / properties / relation_types / description
      Previous value: -"Subset of relation types to return; omit for all. Types: cites, amends, amended_by, repeals, repealed_by, implicitly_repeals, implicitly_repealed_by, legal_basis (treaty/article this act rests on), consolidated_version (consolidated texts of this act)."New value: +"Subset of relation types to return; omit for all. Types: cites, amends, amended_by, repeals, repealed_by, implicitly_repeals, implicitly_repealed_by, legal_basis (treaty/article this act rests on), consolidated_version (consolidated texts of this act), national_transposition (member-state implementing measures)."
    • changedInput schema / properties / relation_types / items / enum
      Previous value: -[
      -  "cites",
      -  "amends",
      -  "amended_by",
      -  "repeals",
      -  "repealed_by",
      -  "implicitly_repeals",
      -  "implicitly_repealed_by",
      -  "legal_basis",
      -  "consolidated_version"
      -]New value: +[
      +  "cites",
      +  "amends",
      +  "amended_by",
      +  "repeals",
      +  "repealed_by",
      +  "implicitly_repeals",
      +  "implicitly_repealed_by",
      +  "legal_basis",
      +  "consolidated_version",
      +  "national_transposition"
      +]
    • changedInput schema / properties / work_uri / description
      Previous value: -"CELLAR work resource URI to traverse (e.g. http://publications.europa.eu/resource/cellar/3e485e15-11bd-11e6-ba9a-01aa75ed71a1). Used directly without CELEX resolution. Provide exactly one of celex_number or work_uri."New value: +"CELLAR work resource URI to traverse (e.g. http://publications.europa.eu/resource/cellar/3e485e15-11bd-11e6-ba9a-01aa75ed71a1). Used directly as the addressed work; its CELEX identity is resolved for relation-specific act matching, and act-matched relation types stand down when the work carries several CELEX numbers — address such a work by celex_number to name the act you mean. Provide exactly one of celex_number or work_uri."
    • changedOutput schema / anyOf
      Previous value: -[
      -  {
      -    "not": {
      -      "required": [
      -        "error"
      -      ]
      -    },
      -    "required": [
      -      "work_uri",
      -      "relations",
      -      "total",
      -      "offset",
      -      "requested_relation_types",
      -      "empty_relation_types"
      -    ]
      -  },
      -  {
      -    "required": [
      -      "error"
      -    ]
      -  }
      -]New value: +[
      +  {
      +    "not": {
      +      "required": [
      +        "error"
      +      ]
      +    },
      +    "required": [
      +      "work_uri",
      +      "relations",
      +      "total",
      +      "offset",
      +      "has_more",
      +      "requested_relation_types",
      +      "empty_relation_types"
      +    ]
      +  },
      +  {
      +    "required": [
      +      "error"
      +    ]
      +  }
      +]
    • changedOutput schema / properties / cap / description
      Previous value: -"The per-direction cap applied to this page."New value: +"The per-direction cap. It bounds each relation type and each direction independently, so it is not an upper bound on shown: a page spanning several types and both directions can return more relations than this number."
    • changedOutput schema / properties / celex_number / description
      Previous value: -"CELEX number of the source work whose relations were traversed. Absent when addressed directly by work_uri."New value: +"CELEX number of the source work whose relations were traversed — the celex_number input, or the CELEX resolved from work_uri when the addressed work carries exactly one. Absent when the addressed work carries none, carries several, or its identity was not resolved because no requested relation type needs it."
    • changedOutput schema / properties / empty_relation_types / description
      Previous value: -"Requested relation types that returned zero relations in THIS page. Page-scoped: a type can appear here because all its edges sit beyond the current offset/limit window, not only because the act genuinely has none of that relation — so absent-from-here does not prove absent-in-CELLAR. When every requested type is empty the tool throws no_relations instead."New value: +"Requested relation types that returned zero relations in THIS page. Page-scoped: a type can appear here because all its edges sit beyond the current offset/limit window, not only because the act genuinely has none of that relation — so absent-from-here does not prove absent-in-CELLAR. An empty first page throws no_relations; an exhausted non-zero page returns all requested types here."
    • changedOutput schema / properties / error / properties / data / properties / reason / description
      Previous value: -"Machine-readable failure mode. Declared by this tool: `invalid_identifier_args`: Neither celex_number nor work_uri was provided, or both were. `not_found`: CELEX number not found in CELLAR — resolve the identifier with eurlex_lookup_celex first. `no_relations`: Work exists but has no CDM relations of the requested types. Other values are possible when a failure originates below the handler."New value: +"Machine-readable failure mode. Declared by this tool: `invalid_identifier_args`: Neither celex_number nor work_uri was provided, or both were. `not_found`: CELEX number not found in CELLAR — resolve the identifier with eurlex_lookup_celex first. `no_relations`: The first page (offset 0) was empty — the work exists but has no CDM relations of the requested types. A later page that comes back empty returns an empty success instead. Other values are possible when a failure originates below the handler."
    • addedOutput schema / properties / has_more
      Added value: +{
      +  "description": "True only when at least one requested relation type/direction returned an additional valid row beyond this page.",
      +  "type": "boolean"
      +}
    • addedOutput schema / properties / next_offset
      Added value: +{
      +  "description": "Offset for the next page. Present only when has_more is true.",
      +  "type": "number"
      +}
    • changedOutput schema / properties / relations / items / properties / relation_type / description
      Previous value: -"Type of relation: cites, amends, amended_by, repeals, repealed_by, implicitly_repeals, implicitly_repealed_by, legal_basis, consolidated_version."New value: +"Type of relation: cites, amends, amended_by, repeals, repealed_by, implicitly_repeals, implicitly_repealed_by, legal_basis, consolidated_version, national_transposition."
    • changedOutput schema / properties / shown / description
      Previous value: -"Number of relations returned in this page."New value: +"Number of relations returned in this page, summed across every relation type and direction — not the count for any single type or direction."
    • changedOutput schema / properties / total / description
      Previous value: -"Number of relations returned in this page (not a corpus-wide count). A direction that filled its cap sets truncated — page with offset for the rest."New value: +"Number of relations returned in this page (not a corpus-wide count)."
    • changedOutput schema / properties / truncated / description
      Previous value: -"True when at least one relation type/direction filled its per-direction cap and more related works may exist — page with offset."New value: +"True when an additional valid row proves at least one relation type/direction has more related works — page with offset."
  6. 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": [
      +      "work_uri",
      +      "relations",
      +      "total",
      +      "offset",
      +      "requested_relation_types",
      +      "empty_relation_types"
      +    ]
      +  },
      +  {
      +    "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: `invalid_identifier_args`: Neither celex_number nor work_uri was provided, or both were. `not_found`: CELEX number not found in CELLAR — resolve the identifier with eurlex_lookup_celex first. `no_relations`: Work exists but has no CDM relations of the requested types. Other values are possible when a failure originates below the handler.",
      +          "examples": [
      +            "invalid_identifier_args",
      +            "not_found",
      +            "no_relations"
      +          ],
      +          "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: -[
      -  "work_uri",
      -  "relations",
      -  "total",
      -  "offset",
      -  "requested_relation_types",
      -  "empty_relation_types"
      -]
  7. Changed3 schema fields changed
    • addedOutput schema / properties / empty_relation_types
      Added value: +{
      +  "description": "Requested relation types that returned zero relations in THIS page. Page-scoped: a type can appear here because all its edges sit beyond the current offset/limit window, not only because the act genuinely has none of that relation — so absent-from-here does not prove absent-in-CELLAR. When every requested type is empty the tool throws no_relations instead.",
      +  "items": {
      +    "type": "string"
      +  },
      +  "type": "array"
      +}
    • addedOutput schema / properties / requested_relation_types
      Added value: +{
      +  "description": "The relation types this request traversed — the explicit relation_types list, or all types when it was omitted. Diff against the types present in relations[], or read empty_relation_types, to confirm which requested types returned edges.",
      +  "items": {
      +    "type": "string"
      +  },
      +  "type": "array"
      +}
    • changedOutput schema / required
      Previous value: -[
      -  "work_uri",
      -  "relations",
      -  "total",
      -  "offset"
      -]New value: +[
      +  "work_uri",
      +  "relations",
      +  "total",
      +  "offset",
      +  "requested_relation_types",
      +  "empty_relation_types"
      +]
  8. Changed5 schema fields changed
    • changedInput schema / properties / limit / description
      Previous value: -"Maximum related works to return per relation type and per direction (1–100). Defaults to 100. Incoming edges (e.g. works that cite this act) are ordered by document date descending, so the cap keeps the newest — page with offset for older ones. For the symmetric cites relation, outgoing and incoming each get this budget independently. When truncated is true, at least one direction filled its cap and more may exist."New value: +"Maximum related works per relation type and direction (1–100, default 100). Incoming edges are ordered newest-first, so the cap keeps the newest — page with offset for older ones. When truncated is true, at least one direction filled its cap."
    • changedInput schema / properties / offset / description
      Previous value: -"Pagination offset applied per relation type and per direction — number of related works to skip. Defaults to 0. Page forward by adding limit each call; incoming edges are ordered newest-first, so higher offsets reach older works."New value: +"Pagination offset applied per relation type and direction — related works to skip (default 0). Page forward by adding limit; incoming edges are newest-first, so higher offsets reach older works."
    • changedInput schema / properties / relation_types / description
      Previous value: -"Subset of relation types to return. Omit to return all types: cites (citation graph), amends (what this work amends), amended_by (what amends this work), repeals (what this work explicitly repeals), repealed_by (what explicitly repealed this work), implicitly_repeals (what this work implicitly repeals), implicitly_repealed_by (what implicitly repealed this work), legal_basis (treaty/treaty article this act is based on), consolidated_version (consolidated versions of this act)."New value: +"Subset of relation types to return; omit for all. Types: cites, amends, amended_by, repeals, repealed_by, implicitly_repeals, implicitly_repealed_by, legal_basis (treaty/article this act rests on), consolidated_version (consolidated texts of this act)."
    • changedOutput schema / properties / celex_number / description
      Previous value: -"CELEX number of the source work whose relations were traversed. Absent when the work was addressed directly by work_uri."New value: +"CELEX number of the source work whose relations were traversed. Absent when addressed directly by work_uri."
    • changedOutput schema / properties / total / description
      Previous value: -"Number of relations returned in this page (not a corpus-wide count). A direction that filled its per-direction cap sets truncated — page with offset for the rest."New value: +"Number of relations returned in this page (not a corpus-wide count). A direction that filled its cap sets truncated — page with offset for the rest."
  9. Changed8 schema fields changed
    • addedInput schema / properties / limit
      Added value: +{
      +  "default": 100,
      +  "description": "Maximum related works to return per relation type and per direction (1–100). Defaults to 100. Incoming edges (e.g. works that cite this act) are ordered by document date descending, so the cap keeps the newest — page with offset for older ones. For the symmetric cites relation, outgoing and incoming each get this budget independently. When truncated is true, at least one direction filled its cap and more may exist.",
      +  "maximum": 100,
      +  "minimum": 1,
      +  "type": "integer"
      +}
    • addedInput schema / properties / offset
      Added value: +{
      +  "default": 0,
      +  "description": "Pagination offset applied per relation type and per direction — number of related works to skip. Defaults to 0. Page forward by adding limit each call; incoming edges are ordered newest-first, so higher offsets reach older works.",
      +  "maximum": 9007199254740991,
      +  "minimum": 0,
      +  "type": "integer"
      +}
    • addedOutput schema / properties / cap
      Added value: +{
      +  "description": "The per-direction cap applied to this page.",
      +  "type": "number"
      +}
    • addedOutput schema / properties / offset
      Added value: +{
      +  "description": "Pagination offset applied to this response (per relation type and direction).",
      +  "type": "number"
      +}
    • addedOutput schema / properties / shown
      Added value: +{
      +  "description": "Number of relations returned in this page.",
      +  "type": "number"
      +}
    • changedOutput schema / properties / total / description
      Previous value: -"Total number of direct CDM relations returned."New value: +"Number of relations returned in this page (not a corpus-wide count). A direction that filled its per-direction cap sets truncated — page with offset for the rest."
    • addedOutput schema / properties / truncated
      Added value: +{
      +  "description": "True when at least one relation type/direction filled its per-direction cap and more related works may exist — page with offset.",
      +  "type": "boolean"
      +}
    • changedOutput schema / required
      Previous value: -[
      -  "work_uri",
      -  "relations",
      -  "total"
      -]New value: +[
      +  "work_uri",
      +  "relations",
      +  "total",
      +  "offset"
      +]
  10. Changed3 schema fields changed
    • changedInput schema / properties / relation_types / description
      Previous value: -"Subset of relation types to return. Omit to return all types: cites (citation graph), amends (what this work amends), amended_by (what amends this work), legal_basis (treaty/treaty article this act is based on), consolidated_version (consolidated versions of this act)."New value: +"Subset of relation types to return. Omit to return all types: cites (citation graph), amends (what this work amends), amended_by (what amends this work), repeals (what this work explicitly repeals), repealed_by (what explicitly repealed this work), implicitly_repeals (what this work implicitly repeals), implicitly_repealed_by (what implicitly repealed this work), legal_basis (treaty/treaty article this act is based on), consolidated_version (consolidated versions of this act)."
    • changedInput schema / properties / relation_types / items / enum
      Previous value: -[
      -  "cites",
      -  "amends",
      -  "amended_by",
      -  "legal_basis",
      -  "consolidated_version"
      -]New value: +[
      +  "cites",
      +  "amends",
      +  "amended_by",
      +  "repeals",
      +  "repealed_by",
      +  "implicitly_repeals",
      +  "implicitly_repealed_by",
      +  "legal_basis",
      +  "consolidated_version"
      +]
    • changedOutput schema / properties / relations / items / properties / relation_type / description
      Previous value: -"Type of relation: cites, amends, amended_by, legal_basis, consolidated_version."New value: +"Type of relation: cites, amends, amended_by, repeals, repealed_by, implicitly_repeals, implicitly_repealed_by, legal_basis, consolidated_version."
  11. Changed1 schema field changed
    • changedInput schema / properties / relation_types / description
      Previous value: -"Subset of relation types to return. Omit to return all types: cites (citation graph), amends (what this work amends), amended_by (what amends this work), legal_basis (treaty/treaty article this act is based on), consolidated_version (current consolidated text)."New value: +"Subset of relation types to return. Omit to return all types: cites (citation graph), amends (what this work amends), amended_by (what amends this work), legal_basis (treaty/treaty article this act is based on), consolidated_version (consolidated versions of this act)."
  12. Changed7 schema fields changed
    • changedInput schema / properties / celex_number / description
      Previous value: -"CELEX number of the work to traverse (e.g. 32016R0679). Preferred identifier."New value: +"CELEX number of the work to traverse (e.g. 32016R0679). Provide exactly one of celex_number or work_uri."
    • removedInput schema / properties / celex_number / minLength
      Removed value: -1
    • changedInput schema / properties / work_uri / description
      Previous value: -"CELLAR work URI as alternative to celex_number. Used if celex_number resolves to no work."New value: +"CELLAR work resource URI to traverse (e.g. http://publications.europa.eu/resource/cellar/3e485e15-11bd-11e6-ba9a-01aa75ed71a1). Used directly without CELEX resolution. Provide exactly one of celex_number or work_uri."
    • removedInput schema / required
      Removed value: -[
      -  "celex_number"
      -]
    • changedOutput schema / properties / celex_number / description
      Previous value: -"CELEX number of the source work whose relations were traversed."New value: +"CELEX number of the source work whose relations were traversed. Absent when the work was addressed directly by work_uri."
    • changedOutput schema / properties / work_uri / description
      Previous value: -"CELLAR URI of the source work (resolved from the CELEX number)."New value: +"CELLAR URI of the source work (the work_uri input, or resolved from the CELEX)."
    • changedOutput schema / required
      Previous value: -[
      -  "celex_number",
      -  "relations",
      -  "total"
      -]New value: +[
      +  "work_uri",
      +  "relations",
      +  "total"
      +]
  13. First observed

TDQS

A4.3/5.0
Behavior4/5

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

Annotations already declare readOnlyHint, openWorldHint, and idempotentHint, so the safety profile is known. The description adds meaningful behavior beyond annotations: 'direct relations only,' pagination per relation type and direction, explicit vs implicit repeal handling, and the CELEX/URI requirement. There is no contradiction with the annotations.

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?

The description is compact and front-loaded: the first sentence states the core purpose and enumerates the relation types, while the second clarifies scope, pagination, and required inputs. Every sentence earns its place with no filler or repetition.

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?

Given the rich input schema, detailed enum descriptions, high schema coverage, output schema, and annotations, the description is complete for an agent to invoke the tool correctly. It explains the relationship graph concept, identifies required inputs, and clarifies direct-only behavior, leaving no critical gap.

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 coverage is 100%, with detailed parameter descriptions for limit, offset, work_uri, celex_number, and relation_types, including enum values and the exactly-one constraint. The description adds a readable high-level overview of the graph contents but does not provide essential parameter semantics beyond what the schema already covers.

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?

The description names a specific action ('Traverse') and a specific resource ('one-hop CDM relationship graph of an EU act'), and then enumerates exactly what relation types are returned: amendments, repeals, consolidations, transpositions, legal basis, and citations. It clearly distinguishes this tool from a simple document fetch or search by emphasizing direct graph relations.

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?

The description gives clear context for use: it requires a CELEX number or CELLAR work URI, returns only direct one-hop relations, and paginates per relation type and direction. It does not explicitly name alternative sibling tools or say when not to use this tool, but the usage conditions are specific enough for an agent to infer when this is the right choice.

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.