Skip to main content
Glama

Browse EuroVoc Subjects

eurlex_browse_subjects
Read-onlyIdempotent

Search the EuroVoc thesaurus, resolving a keyword into concept URIs usable in the eurovoc_concept subject filter of eurlex_search_documents. Matches both preferred and alternative (non-preferred) labels, so a common synonym reaches the concept it stands for. Returns each concept URI, its preferred label in the requested language, code, broader (parent) label, and the alternative label that matched when one did. Concepts with an exact label match come first, then those whose label or one of its words starts with the keyword, then other substring matches, each group ordered by preferred label.

Input Schema

NameRequiredDescriptionDefault
limitNoMaximum number of EuroVoc concepts to return, served up to 50 per call; a larger value (up to 10,000) is served at 50 and reported in limit_clamp. Defaults to 20.
offsetNoPagination offset — number of concepts to skip. Defaults to 0. Must be below 10,000: CELLAR sorts at most 10,000 matches for one search, so pages stop at row 10,000.
keywordYesSearch term matched against EuroVoc preferred and alternative concept labels (e.g. "privacy", "agriculture", "product liability").
languageNoLanguage code for concept labels (e.g. "en", "fr", "de"). Case-insensitive — "EN" and "en" behave identically. Defaults to English.en

Output Schema

NameRequiredDescriptionDefault
capNoThe limit that was applied to this response.
errorNoPresent when the call failed. Absent on success.
shownNoNumber of concepts returned in this response.
totalNoNumber of concepts returned in this response.
noticeNoGuidance for the next call: on an empty first page, the keyword and language that matched nothing and how to broaden them; on a page with more rows, the offset to continue from; on a page ending at row 10,000, that no later page can be read and how to narrow the keyword.
offsetNoPagination offset used for this response.
conceptsNoMatching EuroVoc concepts, exact label matches first, then word-start matches, then other substring matches, each group ordered by preferred label.
has_moreNoTrue only when CELLAR 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 says whether more may match.
truncatedNoTrue when an additional CELLAR row proves more concepts exist beyond this page.
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 for the next page. Present only when has_more is true.

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed8 schema fields changed
    • changedInput schema / properties / limit / description
      Previous value: -"Maximum number of EuroVoc concepts to return (1–50). Defaults to 20."New value: +"Maximum number of EuroVoc concepts to return, served up to 50 per call; a larger value (up to 10,000) is served at 50 and reported in limit_clamp. Defaults to 20."
    • changedInput schema / properties / limit / maximum
      Previous value: -50New value: +10000
    • changedInput schema / properties / offset / description
      Previous value: -"Pagination offset — number of concepts to skip. Defaults to 0."New value: +"Pagination offset — number of concepts to skip. Defaults to 0. Must be below 10,000: CELLAR sorts at most 10,000 matches for one search, so pages stop at row 10,000."
    • changedOutput schema / properties / error / properties / data / properties / reason / description
      Previous value: -"Machine-readable failure mode."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 search. `sparql_error`: CELLAR rejected the thesaurus search this call sent. The same call fails the same way again. `sparql_timeout`: The thesaurus search 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."
    • addedOutput schema / properties / error / properties / data / properties / reason / examples
      Added value: +[
      +  "offset_past_window",
      +  "sparql_error",
      +  "sparql_timeout"
      +]
    • changedOutput schema / properties / has_more / description
      Previous value: -"True only when CELLAR returned an additional valid row beyond this page."New value: +"True only when CELLAR 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 says whether more may match."
    • 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"
      +}
    • changedOutput schema / properties / notice / description
      Previous value: -"Guidance for the next call: on an empty first page, the keyword and language that matched nothing and how to broaden them; on a page with more rows, the offset to continue from."New value: +"Guidance for the next call: on an empty first page, the keyword and language that matched nothing and how to broaden them; on a page with more rows, the offset to continue from; on a page ending at row 10,000, that no later page can be read and how to narrow the keyword."
  2. Changed2 schema fields changed
    • changedOutput schema / properties / concepts / description
      Previous value: -"Matching EuroVoc concepts ordered alphabetically by label."New value: +"Matching EuroVoc concepts, exact label matches first, then word-start matches, then other substring matches, each group ordered by preferred label."
    • changedOutput schema / properties / concepts / items / properties / matched_label / description
      Previous value: -"Alternative (non-preferred) EuroVoc label that matched the keyword, when the concept was reached through one. Absent when the keyword matched the preferred label alone."New value: +"Alternative (non-preferred) EuroVoc label that matched the keyword, when one did — the closest match (exact, then word start, then substring), alphabetical among equals. Absent when the keyword matched the preferred label alone."
  3. Changed3 schema fields changed
    • changedOutput schema / properties / error / properties / data / properties / reason / description
      Previous value: -"Machine-readable failure mode. Declared by this tool: `no_concepts`: The first page (offset 0) was empty — no EuroVoc concepts matched the keyword in the requested language. 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."
    • removedOutput schema / properties / error / properties / data / properties / reason / examples
      Removed value: -[
      -  "no_concepts"
      -]
    • addedOutput schema / properties / notice
      Added value: +{
      +  "description": "Guidance for the next call: on an empty first page, the keyword and language that matched nothing and how to broaden them; on a page with more rows, the offset to continue from.",
      +  "type": "string"
      +}
  4. Changed7 schema fields changed
    • changedInput schema / properties / keyword / description
      Previous value: -"Search term to match against EuroVoc concept labels (e.g. \"privacy\", \"agriculture\", \"trade\")."New value: +"Search term matched against EuroVoc preferred and alternative concept labels (e.g. \"privacy\", \"agriculture\", \"product liability\")."
    • changedOutput schema / anyOf
      Previous value: -[
      -  {
      -    "not": {
      -      "required": [
      -        "error"
      -      ]
      -    },
      -    "required": [
      -      "concepts",
      -      "total",
      -      "offset"
      -    ]
      -  },
      -  {
      -    "required": [
      -      "error"
      -    ]
      -  }
      -]New value: +[
      +  {
      +    "not": {
      +      "required": [
      +        "error"
      +      ]
      +    },
      +    "required": [
      +      "concepts",
      +      "total",
      +      "offset",
      +      "has_more"
      +    ]
      +  },
      +  {
      +    "required": [
      +      "error"
      +    ]
      +  }
      +]
    • addedOutput schema / properties / concepts / items / properties / matched_label
      Added value: +{
      +  "description": "Alternative (non-preferred) EuroVoc label that matched the keyword, when the concept was reached through one. Absent when the keyword matched the preferred label alone.",
      +  "type": "string"
      +}
    • changedOutput schema / properties / error / properties / data / properties / reason / description
      Previous value: -"Machine-readable failure mode. Declared by this tool: `no_concepts`: No EuroVoc concepts matched the keyword in the requested language. Other values are possible when a failure originates below the handler."New value: +"Machine-readable failure mode. Declared by this tool: `no_concepts`: The first page (offset 0) was empty — no EuroVoc concepts matched the keyword in the requested language. 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 CELLAR 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 / truncated / description
      Previous value: -"True when the returned list was capped at the limit and more concepts may exist."New value: +"True when an additional CELLAR row proves more concepts exist beyond this page."
  5. 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": [
      +      "concepts",
      +      "total",
      +      "offset"
      +    ]
      +  },
      +  {
      +    "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: `no_concepts`: No EuroVoc concepts matched the keyword in the requested language. Other values are possible when a failure originates below the handler.",
      +          "examples": [
      +            "no_concepts"
      +          ],
      +          "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: -[
      -  "concepts",
      -  "total",
      -  "offset"
      -]
  6. Changed4 schema fields changed
    • addedInput schema / properties / offset
      Added value: +{
      +  "default": 0,
      +  "description": "Pagination offset — number of concepts to skip. Defaults to 0.",
      +  "maximum": 9007199254740991,
      +  "minimum": 0,
      +  "type": "integer"
      +}
    • changedOutput schema / properties / concepts / description
      Previous value: -"Matching EuroVoc concepts ordered by relevance of the label match."New value: +"Matching EuroVoc concepts ordered alphabetically by label."
    • addedOutput schema / properties / offset
      Added value: +{
      +  "description": "Pagination offset used for this response.",
      +  "type": "number"
      +}
    • changedOutput schema / required
      Previous value: -[
      -  "concepts",
      -  "total"
      -]New value: +[
      +  "concepts",
      +  "total",
      +  "offset"
      +]
  7. Changed2 schema fields changed
    • changedInput schema / properties / language / description
      Previous value: -"Language code for concept labels (e.g. \"en\", \"fr\", \"de\"). Defaults to English."New value: +"Language code for concept labels (e.g. \"en\", \"fr\", \"de\"). Case-insensitive — \"EN\" and \"en\" behave identically. Defaults to English."
    • changedInput schema / properties / language / pattern
      Previous value: -"^[a-z]{2,3}$"New value: +"^[A-Za-z]{2,3}$"
  8. Changed3 schema fields changed
    • addedOutput schema / properties / cap
      Added value: +{
      +  "description": "The limit that was applied to this response.",
      +  "type": "number"
      +}
    • addedOutput schema / properties / shown
      Added value: +{
      +  "description": "Number of concepts returned in this response.",
      +  "type": "number"
      +}
    • addedOutput schema / properties / truncated
      Added value: +{
      +  "description": "True when the returned list was capped at the limit and more concepts may exist.",
      +  "type": "boolean"
      +}
  9. First observed

TDQS

A4.9/5.0
Behavior5/5

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

Annotations already declare readOnly/idempotent/openWorld, and the description goes further by disclosing match semantics (preferred and alternative labels), result ranking (exact match, then prefix, then substring, each ordered by preferred label), and which fields are returned — none of which the annotations cover.

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?

Front-loads purpose and downstream routing in the first sentence, then layers matching behavior and ordering; dense but every sentence carries distinct information with no filler.

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

Completeness5/5

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

An output schema exists, yet the description still summarizes returned fields and, more importantly, explains result ordering — filling the gap the output schema cannot express. Nothing an agent needs to invoke or interpret this tool is missing.

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

Parameters4/5

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

Schema coverage is 100%, so the baseline is 3, but the description adds real semantic value about the keyword parameter's matching behavior (synonym resolution, exact/prefix/substring ranking) and confirms language applies to returned labels.

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

Purpose5/5

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

States a specific verb and resource ('Search the EuroVoc thesaurus, resolving a keyword into concept URIs') and explicitly ties the output to the eurovoc_concept filter of eurlex_search_documents, distinguishing it from the sibling lookup/search tools.

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

Usage Guidelines5/5

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

Names the downstream use case and the condition that selects it: resolve a keyword to concept URIs for use in eurlex_search_documents' subject filter. An agent knows both why and when to call this before searching.

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.