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

TableJSON Schema
NameRequiredDescriptionDefault
limitNoMaximum number of EuroVoc concepts to return (1–50). Defaults to 20.
offsetNoPagination offset — number of concepts to skip. Defaults to 0.
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

TableJSON 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.
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.
truncatedNoTrue when an additional CELLAR row proves more concepts exist beyond this page.
next_offsetNoOffset for the next page. Present only when has_more is true.

Schema Changelog

Changes observed during successful MCP inspections.

  1. 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."
  2. 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"
      +}
  3. 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."
  4. 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"
      -]
  5. 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"
      +]
  6. 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}$"
  7. 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"
      +}
  8. First observed

TDQS

A4.6/5.0
Behavior5/5

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

Beyond the readOnlyHint/idempotentHint annotations, the description discloses meaningful behavior: it matches both preferred and alternative labels, explains how a synonym reaches the concept, and specifies the exact ranking order (exact matches first, then prefix-start matches, then substring matches). This gives an agent faithful expectations about result quality.

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?

Three sentences cover purpose, matching behavior, output content, and ordering without filler. It is slightly dense, and the return-field listing partially overlaps the output schema, but every sentence carries useful decision-relevant information and the core purpose is front-loaded.

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

Completeness5/5

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

For a read-only browse/lookup tool with annotations and an output schema, the description provides everything an agent needs: how to use the result, what matching behavior to expect, how results are ordered, and what each returned concept includes. No functionally important gap remains.

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?

The schema already documents all four parameters at 100% coverage, so the baseline is 3. The description adds extra semantic value by explaining how the keyword is matched (preferred/alternative labels, ordering) and that the requested language affects returned labels, going beyond mere parameter names.

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 specific verb ('Search') with a clear resource ('EuroVoc thesaurus') and states the concrete outcome: resolving a keyword into concept URIs. It also names the downstream use case (eurlex_search_documents' eurovoc_concept filter), which clearly distinguishes it from sibling tools like retrieval or 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 Guidelines4/5

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

The description makes the intended usage context explicit: this is the tool to resolve a keyword into subject-filter URIs before calling eurlex_search_documents. It does not enumerate when not to use it, but the linkage to the sibling search tool provides clear situational guidance with no exclusions.

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.