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 the works adopted under it, the proposal it adopts (or, for a proposal, the act that adopted it), the CJEU rulings interpreting it (or, for a ruling, the acts it interprets), and works that cite it. Amendment, repeal, interpretation, and adoption rows carry the provisions CELLAR records each edge as targeting, and article narrows interpreted_by to the rulings on one article. Returns direct relations only, paginated per relation type and direction. Requires a CELEX number or CELLAR work URI.

Input Schema

NameRequiredDescriptionDefault
limitNoMaximum related works per relation type and direction, served up to 100 per call (default 100); a larger value (up to 10,000) is served at 100 and reported in limit_clamp. A response-budget cut can lower the common depth further to fit each complete surface within 64,000 UTF-8 bytes, never below 1; the notice reports requested/applied limits and withheld rows. Incoming edges are newest-first. Continue at next_offset for older works; narrow relation_types or lower limit for a smaller response.
offsetNoPagination offset applied per relation type and direction — related works to skip (default 0). Continue at the returned next_offset, which adds the applied depth after any response-budget cut; incoming edges are newest-first, so higher offsets reach older works. Must be below 10,000: CELLAR sorts at most 10,000 related works per type and direction, so pages stop at row 10,000.
articleNoNarrow interpreted_by to the rulings with a recorded provision in this article of the act: an article number with at most one letter (17, 6a), optionally prefixed "Article", "Art." or "Art", in any case. The article matches at any depth (17 matches provisions recorded in Article 17(1)(c)), leading zeros are ignored, and a letter also matches its Latin ordinal (28c matches Article 28 quater). Rulings CELLAR records no provision for are left out. Paging, has_more, and next_offset then count matching rulings only; other relation types are unaffected. With an explicit relation_types, include interpreted_by. A blank value is the same as omitting it.
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.
member_statesNoNarrow national_transposition rows to the measures of these member states — the 27 member states plus the United Kingdom, by alpha-3 or two-letter code, in any case. Paging, has_more, and next_offset then count matching measures only; other relation types are unaffected. With an explicit relation_types, include national_transposition. An empty list is the same as omitting it.
relation_typesNoSubset of relation types to return; omit for all fifteen, equivalent to listing them explicitly. Types: cites, amends, amended_by, repeals, repealed_by, implicitly_repeals, implicitly_repealed_by, legal_basis (treaty/article this act rests on), basis_for (works naming this act among their legal bases — implementing and delegated acts, decisions, Parliament resolutions, drafts; the incoming side of legal_basis), interprets (for a ruling: the acts it interprets), interpreted_by (CJEU and General Court rulings interpreting this act; the incoming side of interprets), consolidated_version (consolidated texts of this act), national_transposition (member-state implementing measures), adopts (the works this act adopts — usually its Commission proposal, also an international agreement its concluding decision adopts or a joint-committee decision; tell them apart by CELEX), adopted_by (the act that adopted this work; the incoming side of adopts). Whole rows, titles, and provisions are kept within a 64,000 UTF-8 byte budget per complete response surface by lowering the common per-type/direction depth, never below 1; a depth-1 page still over it has the provisions of its rows withheld whole, largest first (counted in provisions_withheld), and is then returned whole with disclosure. Name only the types you need to reduce the response.

Output 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 first page where member_states matched no national_transposition measures, the codes it named; with article, that interpreted_by leaves out rulings CELLAR records no provision for, or on a first page with none, the article it named; on a page with more rows, the offset to continue from; on a page ending at row 10,000, the relation types and directions that reached it, each with a ready-to-run eurlex_query_sparql query listing its older works; the rows whose provisions were withheld to fit the response budget, and the relation types whose provisions CELLAR did not return.
offsetNoPagination offset applied to this response (per relation type and direction).
articleNoThe article interpreted_by rows were narrowed to, normalized from the article input: the number without a prefix or leading zeros, any letter in lower case (17, 28c). Absent when no article filter was given.
has_moreNoTrue when an additional valid row or a response-budget cut proves at least one requested relation type/direction has more rows. False on a retained page that ends at row 10,000, the last one CELLAR sorts; its notice names the types and directions that reached it.
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.
limit_clampNoPresent only when limit exceeded the per-call maximum: the value asked for and the value served. The response follows the applied value.
next_offsetNoOffset plus the applied per-type/direction depth after any response-budget cut. Present only when has_more is true; use this value to continue without skipping withheld rows.
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.
member_statesNoThe member states national_transposition rows were narrowed to, as ISO 3166-1 alpha-3 codes, normalized from member_states and de-duplicated. Absent when no member_states filter was given.
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. Changed10 schema fields changed
    • addedInput schema / properties / article
      Added value: +{
      +  "description": "Narrow interpreted_by to the rulings with a recorded provision in this article of the act: an article number with at most one letter (17, 6a), optionally prefixed \"Article\", \"Art.\" or \"Art\", in any case. The article matches at any depth (17 matches provisions recorded in Article 17(1)(c)), leading zeros are ignored, and a letter also matches its Latin ordinal (28c matches Article 28 quater). Rulings CELLAR records no provision for are left out. Paging, has_more, and next_offset then count matching rulings only; other relation types are unaffected. With an explicit relation_types, include interpreted_by. A blank value is the same as omitting it.",
      +  "pattern": "^\\s*(?:(?:[Aa][Rr][Tt][Ii][Cc][Ll][Ee]|[Aa][Rr][Tt]\\.?)\\s*)?\\d{1,4}[A-Za-z]?\\s*$|^\\s*$",
      +  "type": "string"
      +}
    • changedInput schema / properties / relation_types / description
      Previous value: -"Subset of relation types to return; omit for all thirteen, equivalent to listing them explicitly. Types: cites, amends, amended_by, repeals, repealed_by, implicitly_repeals, implicitly_repealed_by, legal_basis (treaty/article this act rests on), basis_for (works naming this act among their legal bases — implementing and delegated acts, decisions, Parliament resolutions, drafts; the incoming side of legal_basis), interprets (for a ruling: the acts it interprets), interpreted_by (CJEU and General Court rulings interpreting this act; the incoming side of interprets), consolidated_version (consolidated texts of this act), national_transposition (member-state implementing measures). Whole rows and titles are kept within a 64,000 UTF-8 byte budget per complete response surface by lowering the common per-type/direction depth, never below 1; an oversize depth-1 page is returned whole with disclosure. Name only the types you need to reduce the response."New value: +"Subset of relation types to return; omit for all fifteen, equivalent to listing them explicitly. Types: cites, amends, amended_by, repeals, repealed_by, implicitly_repeals, implicitly_repealed_by, legal_basis (treaty/article this act rests on), basis_for (works naming this act among their legal bases — implementing and delegated acts, decisions, Parliament resolutions, drafts; the incoming side of legal_basis), interprets (for a ruling: the acts it interprets), interpreted_by (CJEU and General Court rulings interpreting this act; the incoming side of interprets), consolidated_version (consolidated texts of this act), national_transposition (member-state implementing measures), adopts (the works this act adopts — usually its Commission proposal, also an international agreement its concluding decision adopts or a joint-committee decision; tell them apart by CELEX), adopted_by (the act that adopted this work; the incoming side of adopts). Whole rows, titles, and provisions are kept within a 64,000 UTF-8 byte budget per complete response surface by lowering the common per-type/direction depth, never below 1; a depth-1 page still over it has the provisions of its rows withheld whole, largest first (counted in provisions_withheld), and is then returned whole with disclosure. Name only the types you need to reduce the response."
    • changedInput schema / properties / relation_types / items / enum
      Previous value: -[
      -  "cites",
      -  "amends",
      -  "amended_by",
      -  "repeals",
      -  "repealed_by",
      -  "implicitly_repeals",
      -  "implicitly_repealed_by",
      -  "legal_basis",
      -  "basis_for",
      -  "interprets",
      -  "interpreted_by",
      -  "consolidated_version",
      -  "national_transposition"
      -]New value: +[
      +  "cites",
      +  "amends",
      +  "amended_by",
      +  "repeals",
      +  "repealed_by",
      +  "implicitly_repeals",
      +  "implicitly_repealed_by",
      +  "legal_basis",
      +  "basis_for",
      +  "interprets",
      +  "interpreted_by",
      +  "consolidated_version",
      +  "national_transposition",
      +  "adopts",
      +  "adopted_by"
      +]
    • addedOutput schema / properties / article
      Added value: +{
      +  "description": "The article interpreted_by rows were narrowed to, normalized from the article input: the number without a prefix or leading zeros, any letter in lower case (17, 28c). Absent when no article filter was given.",
      +  "type": "string"
      +}
    • changedOutput schema / properties / error / properties / data / properties / reason / description
      Previous value: -"Machine-readable failure mode. Declared by this tool: `offset_past_window`: offset is 10,000 or more, past the last row CELLAR sorts for one relation type and direction. `invalid_identifier_args`: Neither celex_number nor work_uri was provided, or both were. `member_states_not_applicable`: member_states was given with a relation_types list that does not include national_transposition, the only type it filters. `not_found`: The CELEX number, given directly or as a resource/celex/ work URI, is not found in CELLAR — resolve the identifier with eurlex_lookup_celex first. `sparql_error`: CELLAR rejected a query this traversal sent. The same call fails the same way again. `sparql_timeout`: A query this traversal sent 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: `offset_past_window`: offset is 10,000 or more, past the last row CELLAR sorts for one relation type and direction. `invalid_identifier_args`: Neither celex_number nor work_uri was provided, or both were. `member_states_not_applicable`: member_states was given with a relation_types list that does not include national_transposition, the only type it filters. `article_not_applicable`: article was given with a relation_types list that does not include interpreted_by, the only type it filters. `not_found`: The CELEX number, given directly or as a resource/celex/ work URI, is not found in CELLAR — resolve the identifier with eurlex_lookup_celex first. `sparql_error`: CELLAR rejected a query this traversal sent. The same call fails the same way again. `sparql_timeout`: A query this traversal sent 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: -[
      -  "offset_past_window",
      -  "invalid_identifier_args",
      -  "member_states_not_applicable",
      -  "not_found",
      -  "sparql_error",
      -  "sparql_timeout"
      -]New value: +[
      +  "offset_past_window",
      +  "invalid_identifier_args",
      +  "member_states_not_applicable",
      +  "article_not_applicable",
      +  "not_found",
      +  "sparql_error",
      +  "sparql_timeout"
      +]
    • changedOutput schema / properties / notice / description
      Previous value: -"Guidance for the next call: on an empty first page, how to widen the traversal; on a first page where member_states matched no national_transposition measures, the codes it named; on a page with more rows, the offset to continue from; on a page ending at row 10,000, the relation types and directions that reached it, each with a ready-to-run eurlex_query_sparql query listing its older works."New value: +"Guidance for the next call: on an empty first page, how to widen the traversal; on a first page where member_states matched no national_transposition measures, the codes it named; with article, that interpreted_by leaves out rulings CELLAR records no provision for, or on a first page with none, the article it named; on a page with more rows, the offset to continue from; on a page ending at row 10,000, the relation types and directions that reached it, each with a ready-to-run eurlex_query_sparql query listing its older works; the rows whose provisions were withheld to fit the response budget, and the relation types whose provisions CELLAR did not return."
    • addedOutput schema / properties / relations / items / properties / provisions
      Added value: +{
      +  "description": "The provisions CELLAR records this edge as targeting, distinct and sorted. They belong to the edge's object: this act on an incoming row (the articles a ruling interprets, the provisions an amending act changes), the related work on an outgoing one. Read for amends, amended_by, repeals, repealed_by, implicitly_repeals, implicitly_repealed_by, interprets, interpreted_by, adopts, and adopted_by; absent on other types and on an edge CELLAR records no provision for, which does not mean the edge reaches the whole act. Compact codes read A article, P paragraph, L point letter or subparagraph number, PT numbered point, T indent, and BIS/TER/QUATER… the Latin ordinal of a lettered article (A17P1LC is Article 17(1)(c), A28QUATER Article 28c). Authority codes precede numbers, each {CODE|URI} token written as its CODE: AR article, PA paragraph, PO or PTA point, AN annex, ALN unnumbered paragraph, TIRE indent, CHA chapter, TXT text (AR 43 PA 4 is Article 43(4)).",
      +  "items": {
      +    "type": "string"
      +  },
      +  "type": "array"
      +}
    • addedOutput schema / properties / relations / items / properties / provisions_withheld
      Added value: +{
      +  "description": "How many provisions this row has but does not carry: withheld whole, largest row first, to keep a one-row-per-direction page within 64,000 UTF-8 bytes per surface, and named in the notice. Name fewer relation_types to receive them. Absent when nothing was withheld.",
      +  "maximum": 9007199254740991,
      +  "minimum": -9007199254740991,
      +  "type": "integer"
      +}
    • 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, basis_for, interprets, interpreted_by, consolidated_version, national_transposition."New value: +"Type of relation: cites, amends, amended_by, repeals, repealed_by, implicitly_repeals, implicitly_repealed_by, legal_basis, basis_for, interprets, interpreted_by, consolidated_version, national_transposition, adopts, adopted_by."
  2. Changed5 schema fields changed
    • changedInput schema / properties / limit / description
      Previous value: -"Maximum related works per relation type and direction, served up to 100 per call (default 100); a larger value (up to 10,000) is served at 100 and reported in limit_clamp. Incoming edges are ordered newest-first, so the cap keeps the newest — page with offset for older ones. The cap applies to each type and direction separately, so on a heavily linked act a lower limit, with relation_types narrowed, keeps the response small."New value: +"Maximum related works per relation type and direction, served up to 100 per call (default 100); a larger value (up to 10,000) is served at 100 and reported in limit_clamp. A response-budget cut can lower the common depth further to fit each complete surface within 64,000 UTF-8 bytes, never below 1; the notice reports requested/applied limits and withheld rows. Incoming edges are newest-first. Continue at next_offset for older works; narrow relation_types or lower limit for a smaller response."
    • changedInput schema / properties / offset / description
      Previous 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. Must be below 10,000: CELLAR sorts at most 10,000 related works per type and direction, so pages stop at row 10,000."New value: +"Pagination offset applied per relation type and direction — related works to skip (default 0). Continue at the returned next_offset, which adds the applied depth after any response-budget cut; incoming edges are newest-first, so higher offsets reach older works. Must be below 10,000: CELLAR sorts at most 10,000 related works per type and direction, so pages stop at row 10,000."
    • 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), basis_for (works naming this act among their legal bases — implementing and delegated acts, decisions, Parliament resolutions, drafts; the incoming side of legal_basis), interprets (for a ruling: the acts it interprets), interpreted_by (CJEU and General Court rulings interpreting this act; the incoming side of interprets), consolidated_version (consolidated texts of this act), national_transposition (member-state implementing measures). Omitted on a heavily linked act (the GDPR, a framework regulation), the call returns hundreds of related works with whole titles — a response of well over 100 KB; name only the types you need."New value: +"Subset of relation types to return; omit for all thirteen, equivalent to listing them explicitly. Types: cites, amends, amended_by, repeals, repealed_by, implicitly_repeals, implicitly_repealed_by, legal_basis (treaty/article this act rests on), basis_for (works naming this act among their legal bases — implementing and delegated acts, decisions, Parliament resolutions, drafts; the incoming side of legal_basis), interprets (for a ruling: the acts it interprets), interpreted_by (CJEU and General Court rulings interpreting this act; the incoming side of interprets), consolidated_version (consolidated texts of this act), national_transposition (member-state implementing measures). Whole rows and titles are kept within a 64,000 UTF-8 byte budget per complete response surface by lowering the common per-type/direction depth, never below 1; an oversize depth-1 page is returned whole with disclosure. Name only the types you need to reduce the response."
    • changedOutput schema / properties / has_more / description
      Previous value: -"True only when at least one requested relation type/direction returned an additional valid row beyond this page. False on a page that ends at row 10,000, the last one CELLAR sorts; its notice names the types and directions that reached it."New value: +"True when an additional valid row or a response-budget cut proves at least one requested relation type/direction has more rows. False on a retained page that ends at row 10,000, the last one CELLAR sorts; its notice names the types and directions that reached it."
    • changedOutput schema / properties / next_offset / description
      Previous value: -"Offset for the next page. Present only when has_more is true."New value: +"Offset plus the applied per-type/direction depth after any response-budget cut. Present only when has_more is true; use this value to continue without skipping withheld rows."
  3. Changed13 schema fields changed
    • 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."New value: +"Maximum related works per relation type and direction, served up to 100 per call (default 100); a larger value (up to 10,000) is served at 100 and reported in limit_clamp. Incoming edges are ordered newest-first, so the cap keeps the newest — page with offset for older ones. The cap applies to each type and direction separately, so on a heavily linked act a lower limit, with relation_types narrowed, keeps the response small."
    • changedInput schema / properties / limit / maximum
      Previous value: -100New value: +10000
    • addedInput schema / properties / member_states
      Added value: +{
      +  "description": "Narrow national_transposition rows to the measures of these member states — the 27 member states plus the United Kingdom, by alpha-3 or two-letter code, in any case. Paging, has_more, and next_offset then count matching measures only; other relation types are unaffected. With an explicit relation_types, include national_transposition. An empty list is the same as omitting it.",
      +  "items": {
      +    "description": "A member state as its ISO 3166-1 alpha-3 code (DEU, GRC, GBR for the United Kingdom) or two-letter code (DE; EL or GR for Greece; UK or GB), in any case.",
      +    "type": "string"
      +  },
      +  "type": "array"
      +}
    • changedInput schema / properties / offset / description
      Previous 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."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. Must be below 10,000: CELLAR sorts at most 10,000 related works per type and direction, so pages stop at row 10,000."
    • 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), national_transposition (member-state implementing measures)."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), basis_for (works naming this act among their legal bases — implementing and delegated acts, decisions, Parliament resolutions, drafts; the incoming side of legal_basis), interprets (for a ruling: the acts it interprets), interpreted_by (CJEU and General Court rulings interpreting this act; the incoming side of interprets), consolidated_version (consolidated texts of this act), national_transposition (member-state implementing measures). Omitted on a heavily linked act (the GDPR, a framework regulation), the call returns hundreds of related works with whole titles — a response of well over 100 KB; name only the types you need."
    • 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",
      -  "national_transposition"
      -]New value: +[
      +  "cites",
      +  "amends",
      +  "amended_by",
      +  "repeals",
      +  "repealed_by",
      +  "implicitly_repeals",
      +  "implicitly_repealed_by",
      +  "legal_basis",
      +  "basis_for",
      +  "interprets",
      +  "interpreted_by",
      +  "consolidated_version",
      +  "national_transposition"
      +]
    • 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. Other values are possible when a failure originates below the handler."New value: +"Machine-readable failure mode. Declared by this tool: `offset_past_window`: offset is 10,000 or more, past the last row CELLAR sorts for one relation type and direction. `invalid_identifier_args`: Neither celex_number nor work_uri was provided, or both were. `member_states_not_applicable`: member_states was given with a relation_types list that does not include national_transposition, the only type it filters. `not_found`: The CELEX number, given directly or as a resource/celex/ work URI, is not found in CELLAR — resolve the identifier with eurlex_lookup_celex first. `sparql_error`: CELLAR rejected a query this traversal sent. The same call fails the same way again. `sparql_timeout`: A query this traversal sent 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: -[
      -  "invalid_identifier_args",
      -  "not_found"
      -]New value: +[
      +  "offset_past_window",
      +  "invalid_identifier_args",
      +  "member_states_not_applicable",
      +  "not_found",
      +  "sparql_error",
      +  "sparql_timeout"
      +]
    • changedOutput schema / properties / has_more / description
      Previous value: -"True only when at least one requested relation type/direction returned an additional valid row beyond this page."New value: +"True only when at least one requested relation type/direction returned an additional valid row beyond this page. False on a page that ends at row 10,000, the last one CELLAR sorts; its notice names the types and directions that reached it."
    • addedOutput schema / properties / limit_clamp
      Added value: +{
      +  "additionalProperties": false,
      +  "description": "Present only when limit exceeded the per-call maximum: the value asked for and the value served. The response follows the applied value.",
      +  "properties": {
      +    "applied": {
      +      "description": "The limit served: the per-call maximum.",
      +      "maximum": 9007199254740991,
      +      "minimum": -9007199254740991,
      +      "type": "integer"
      +    },
      +    "requested": {
      +      "description": "The limit the call asked for.",
      +      "maximum": 9007199254740991,
      +      "minimum": -9007199254740991,
      +      "type": "integer"
      +    }
      +  },
      +  "required": [
      +    "requested",
      +    "applied"
      +  ],
      +  "type": "object"
      +}
    • addedOutput schema / properties / member_states
      Added value: +{
      +  "description": "The member states national_transposition rows were narrowed to, as ISO 3166-1 alpha-3 codes, normalized from member_states and de-duplicated. Absent when no member_states filter was given.",
      +  "items": {
      +    "type": "string"
      +  },
      +  "type": "array"
      +}
    • changedOutput schema / properties / notice / description
      Previous value: -"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."New value: +"Guidance for the next call: on an empty first page, how to widen the traversal; on a first page where member_states matched no national_transposition measures, the codes it named; on a page with more rows, the offset to continue from; on a page ending at row 10,000, the relation types and directions that reached it, each with a ready-to-run eurlex_query_sparql query listing its older works."
    • 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, national_transposition."New value: +"Type of relation: cites, amends, amended_by, repeals, repealed_by, implicitly_repeals, implicitly_repealed_by, legal_basis, basis_for, interprets, interpreted_by, consolidated_version, national_transposition."
  4. 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"
      +}
  5. 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."
  6. 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"
      +}
  7. 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"
      +}
  8. 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."
  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": [
      +      "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"
      -]
  10. 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"
      +]
  11. 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."
  12. 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"
      +]
  13. 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."
  14. 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)."
  15. 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"
      +]
  16. First observed

TDQS

A4.1/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 covered. The description adds useful behavioral context: one-hop traversal only, pagination per relation type and direction, provision targets on certain edge types, and article-level narrowing of interpreted_by. It does not describe rate limits or response-budget clamping, which appear only in the parameter schema.

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 description is front-loaded with the core purpose and relation graph scope immediately after the opening clause. It is dense and somewhat run-on because it enumerates many edge types, but that enumeration is relevant for a complex graph-traversal tool and most sentences earn their place.

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 high complexity, seven parameters, full schema description coverage, and an output schema, so the description need not repeat every parameter detail. It covers the essential identity, required addressing input, one-hop limitation, relation categories, and article scoping. Minor omissions such as member_states narrowing and pagination limit details are adequately covered by the schema.

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 detailed parameter semantics. The description reinforces the CELEX/URI requirement and explains the article filter and relation edge meaning, but it adds little beyond the schema's own parameter documentation. Baseline 3 is appropriate when the schema does the heavy lifting.

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 uses a precise verb and resource: 'Traverse the one-hop CDM relationship graph of an EU act.' It enumerates the relation categories (amendment, repeal, consolidation, transposition, legal basis, CJEU interpretation, citation), making the tool clearly distinct from sibling search, document, and SPARQL tools.

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 clearly states the required input ('Requires a CELEX number or CELLAR work URI') and the output scope ('Returns direct relations only, paginated per relation type and direction'). It does not explicitly compare when to use this tool instead of eurlex_get_document, eurlex_query_sparql, or eurlex_search_documents, so the alternative-selection guidance is implicit rather than explicit.

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.