Skip to main content
Glama

Server Details

Search EU legislation, CJEU case law, and treaties; traverse CELLAR graph; browse EuroVoc concepts.

If you are the author of this connector, you can claim ownership with GitHub, an HTTP challenge, or a DNS record. Claimed connector authors can inspect health checks, view analytics, and manage their listing.
Status
Healthy
Last Tested
Transport
Streamable HTTP
URL
Repository
cyanheads/eur-lex-mcp-server
GitHub Stars
6
Server Listing
@cyanheads/eur-lex-mcp-server

Glama MCP Gateway

Connect through Glama MCP Gateway for full control over tool access and complete visibility into every call.

MCP client
Glama
MCP server

Full call logging

Every tool call is logged with complete inputs and outputs, so you can debug issues and audit what your agents are doing.

Tool access control

Enable or disable individual tools per connector, so you decide what your agents can and cannot do.

Managed credentials

Glama handles OAuth flows, token storage, and automatic rotation, so credentials never expire on your clients.

Usage analytics

See which tools your agents call, how often, and when, so you can understand usage patterns and catch anomalies.

100% free. Your data is private.
Tool DescriptionsA

Average 4.4/5 across 7 of 7 tools scored.

Server CoherenceA
Disambiguation5/5

Each tool targets a distinct resource or action: subject browsing, case search, document retrieval, relation traversal, identifier resolution, raw SPARQL, and legislation search. The few potentially similar tools (search_documents vs get_cases) are clearly separated by corpus and description.

Naming Consistency5/5

All tools follow the consistent eurlex_verb_noun pattern in lowercase snake_case, such as eurlex_get_document, eurlex_search_documents, and eurlex_lookup_celex. Verbs vary but the pattern is uniform and predictable.

Tool Count5/5

Seven tools is well-scoped for an EU legal research server covering search, retrieval, relationship traversal, and identifier resolution. Each tool has a clear role and none feel redundant or excessive.

Completeness4/5

The core research workflow is covered: browse subjects, search legislation, search cases, fetch documents, resolve identifiers, and traverse relations. Minor gaps exist such as no full-text body search and no explicit case-law full-text retrieval, but the raw SPARQL escape hatch partially mitigates these.

Available Tools

7 tools
eurlex_browse_subjectsBrowse EuroVoc SubjectsA
Read-onlyIdempotent
Inspect

Search the EuroVoc thesaurus, resolving a keyword into concept URIs usable in the eurovoc_concept subject filter of eurlex_search_documents. Returns each concept URI, its preferred label in the requested language, code, and broader (parent) label, ordered alphabetically by label.

ParametersJSON 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 to match against EuroVoc concept labels (e.g. "privacy", "agriculture", "trade").
languageNoLanguage code for concept labels (e.g. "en", "fr", "de"). Case-insensitive — "EN" and "en" behave identically. Defaults to English.en

Output Schema

ParametersJSON Schema
NameRequiredDescription
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.
offsetNoPagination offset used for this response.
conceptsNoMatching EuroVoc concepts ordered alphabetically by label.
truncatedNoTrue when the returned list was capped at the limit and more concepts may exist.
Behavior4/5

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

Annotations already declare readOnlyHint, openWorldHint, and idempotentHint, so the description need not repeat those. It adds value by specifying the returned fields (URI, label, code, broader label) and the alphabetical ordering, which are not in the schema. No contradictions with annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two sentences with no filler; the purpose and output are front-loaded. Every word earns its place.

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 tool with annotations covering safety and an output schema present, the description covers purpose, output details, and usage context. An agent receives everything needed to invoke it correctly, including how the results integrate with the search tool. No significant gaps.

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 fully documents each parameter. The description adds a small amount of context (e.g., 'resolving a keyword' clarifies the keyword's purpose, and 'usable in filter' suggests how the output is consumed), but does not meaningfully enrich individual parameter meaning beyond the schema. Baseline 3 is appropriate.

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 states a specific verb ('Search'), resource ('EuroVoc thesaurus'), and the intended use (resolving keywords to concept URIs for the eurovoc_concept filter). It clearly distinguishes this from sibling search tools by explaining the output's role in eurlex_search_documents. No ambiguity about the tool's function.

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 explicitly ties the output to the eurovoc_concept filter of eurlex_search_documents, implying this is the tool to use when you need subject concepts for a search filter. It does not explicitly list when not to use it or alternatives, but the use case is clear enough for an agent. It stops short of naming sibling tools or conditions, but provides sufficient context.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

eurlex_get_casesSearch CJEU/GC Case LawA
Read-only
Inspect

Search CJEU and General Court case law — judgments, orders, and Advocate General opinions — by case number, court, case type, keyword, and date range. By default only these primary records are returned; derivative judicial information notices, case abstracts, summaries, and corrigenda are excluded so distinct cases fill the page (set include_derivative to include them). Keyword matches English case titles (which carry party names) and CELEX strings; there is no full-text body search. Returns each case with its court, date, and type, plus — parsed from the title where present — the parties, subject matter, and case reference.

ParametersJSON Schema
NameRequiredDescriptionDefault
courtNoCourt filter: CJEU = Court of Justice of the EU, GC = General Court. Omit to search both.
limitNoMaximum number of results to return (1–100). Defaults to 20.
offsetNoPagination offset — number of results to skip. Defaults to 0.
date_toNoEnd of date range in ISO 8601 format (YYYY-MM-DD). Leave blank or omit for no upper bound.
keywordNoKeyword to match against case titles and CELEX strings.
case_typeNoCase type: judgment, order (procedural decision), or ag_opinion (Advocate General opinion). Omit to search all.
date_fromNoStart of date range in ISO 8601 format (YYYY-MM-DD). Leave blank or omit for no lower bound.
case_numberNoCase number in standard format: C-{num}/{year} for CJEU or T-{num}/{year} for General Court (e.g. C-131/12).
include_derivativeNoInclude derivative sector-6 records — judicial information notices, case abstracts, case summaries, and corrigenda — alongside primary judgments, orders, and AG opinions. Default false: these are excluded so distinct primary cases fill the page. Ignored when case_type is set (that path already returns a single primary type).

Output Schema

ParametersJSON Schema
NameRequiredDescription
capNoThe limit that was applied to this page.
casesNoMatching case law records ordered by date descending.
errorNoPresent when the call failed. Absent on success.
shownNoNumber of cases returned in this page.
totalNoNumber of cases returned in this page (not a corpus-wide count).
offsetNoPagination offset used for this response.
truncatedNoTrue when the returned page was capped at the limit and more cases may exist.
query_echoNoEcho of filters applied to this search. Useful for diagnosing empty results.
Behavior4/5

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

The description transparently discloses the default behavior (excluding derivative records) and the scope of keyword matching (no full-text search). It also describes the return structure. Since annotations already indicate read-only and open-world, no side effects are expected, and the description adds useful behavioral context without contradiction.

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 a single paragraph that efficiently covers purpose, behavior, and output, but it is somewhat dense and could benefit from bullet points for readability. It is not overly verbose and stays focused on essential facts.

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

Completeness5/5

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

Given that the schema fully documents all parameters and an output schema exists, the description is complete. It adds valuable context about the default derivative exclusion, keyword matching scope, and the parsed fields in results, ensuring an agent has all necessary information to use the tool correctly.

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?

The input schema already provides comprehensive descriptions for all 9 parameters with 100% coverage. The description does not add significant new information about parameters beyond reinforcing what is in the schema, such as the include_derivative flag's effect. Therefore, it meets the baseline but does not exceed it.

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 clearly states the tool's purpose: searching CJEU and General Court case law with specific filters (case number, court, case type, keyword, date range). It is specific and distinguishes it from other sibling tools by focusing on case law, not documents or relations.

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

Usage Guidelines3/5

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

The description explains the tool's behavior (e.g., default exclusion of derivative records, keyword matching only on titles and CELEX strings) but does not explicitly mention when to use this tool instead of siblings like eurlex_search_documents or eurlex_lookup_celex. This leaves some ambiguity for an agent deciding between similar search tools.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

eurlex_get_documentGet EU DocumentA
Read-onlyIdempotent
Inspect

Fetch the metadata and full text of an EU act by CELEX number, ELI URI, or work URI. Returns structured metadata (title, date, type, author institution, legal basis, EuroVoc subjects, in-force status) plus the act body as HTML, Markdown, or Formex4 XML, defaulting to English with automatic fallback. Ordinary offset-based paged windows and full-mode windows are capped at 100,000 characters; page with offset/limit to reconstruct larger acts, or use outline: true for a heading map and select to pull specific articles, chapters, recitals, or annexes.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNoMaximum characters to return in this window ("paged" mode only). Default 25000, max 100000. Follow has_more and the returned offsets until false to reconstruct the complete body.
formatNoContent format: "html" for the act text as served by EUR-Lex (default), "markdown" for that HTML converted to clean Markdown server-side, or "xml" for Formex4 structured XML.html
offsetNoCharacter offset into the body where the returned window starts ("paged" mode only). Page forward by setting offset = content_offset + content_chars_returned from the previous call. Offsets are format-specific: an offset is only valid against the same format it was measured in — keep format constant when paging.
selectNoReturn only the text of specific sections by type and number, instead of a raw character window (Roman and Arabic numbers are equivalent). Sections are located in the body of the requested format, so pair select with the same format used for any outline. A section that cannot be located is reported in selection.missed with no wrong text returned. Ignored when outline is true or in content_mode "metadata_only".
eli_uriNoWork-level ELI URI of the act to fetch (e.g. http://data.europa.eu/eli/reg/2016/679, with or without the /oj suffix). Provide exactly one of celex_number, eli_uri, or work_uri.
outlineNoReturn a structural outline of the act — chapters, sections, articles, annexes, and recitals as a heading list, each with its character offset — instead of body text. Read a section by paging with its offset, keeping the same format: outline offsets are measured in the requested format's body and land in the wrong place under any other format. Ignores offset/limit and select; no detectable structure returns an empty outline. Not applied in content_mode "metadata_only".
resolveNoWhich version to serve for a base act with newer consolidated versions. "as_requested" (default) returns the exact CELEX requested; "current_consolidated" serves the newest consolidated version instead (echoing the request in requested_celex), a no-op when none exists. Either way, is_superseded / current_consolidated_celex / consolidated_as_of flag a stale base act.as_requested
languageNoOne of the 24 supported two-letter EUR-Lex language codes (e.g. EN, FR, DE), accepted case-insensitively and normalized to uppercase. Defaults to EN, and falls back to EN if the requested language is unavailable.EN
work_uriNoCELLAR work resource URI to fetch (e.g. http://publications.europa.eu/resource/cellar/3e485e15-11bd-11e6-ba9a-01aa75ed71a1) — the form returned by eurlex_lookup_celex, eurlex_get_relations, and eurlex_search_documents. Provide exactly one of celex_number, eli_uri, or work_uri.
celex_numberNoCELEX number of the act to fetch (e.g. 32016R0679 for GDPR). Provide exactly one of celex_number, eli_uri, or work_uri.
content_modeNoHow much of the body to return. "paged" (default) returns an offset/limit window; "full" requests from the start and returns at most 100000 characters with continuation metadata when more exists; "metadata_only" skips the content fetch. offset and limit apply only to "paged".paged

Output Schema

ParametersJSON Schema
NameRequiredDescription
capNoMaximum body characters allowed in the window.
dateNoDocument date in ISO 8601 format (YYYY-MM-DD).
errorNoPresent when the call failed. Absent on success.
shownNoNumber of body characters returned.
titleNoDocument title in the requested language (absent for some older works and judgments).
noticeNoHow to retrieve the remaining document content.
contentNoBody content of the act in the requested format and language. In "paged" mode this is the requested window; in "full" mode it starts at zero and is capped at 100000 characters. Omitted in "metadata_only" mode, when the window is empty, or when content is unavailable.
outlineNoStructural outline of the act. Present only when outline is true; an empty array means no structure was detected.
has_moreNoTrue when body content exists beyond the returned window. Continue in "paged" mode with offset = content_offset + content_chars_returned until false. Always false in "metadata_only" mode.
in_forceNoWhether the act is currently in force.
languageNoLanguage code of the returned content.
work_uriNoCELLAR work URI.
selectionNoOutcome of a structural selection. Present only when select was used; content holds the matched sections joined in document order.
truncatedNoTrue when the returned body window was capped.
legal_basisNoLegal basis acts for this work.
celex_numberNoConfirmed CELEX number for the retrieved work.
content_modeNoContent mode applied to this response: "metadata_only", "paged", or "full".
is_supersededNoTrue when a newer consolidated version of the requested base act exists (an unofficial reading aid merging later amendments), so the returned text may not include those amendments. Not a repeal/replacement signal — the base act remains the law and may still be in force (see in_force). Absent when the act has no consolidated version, or is itself one.
resource_typeNoHuman-readable document type label (e.g. "Regulation", "Directive"). Absent for some older works.
content_formatNoFormat of the returned content: "html", "markdown", or "xml".
content_offsetNoCharacter offset where the returned content window begins. Present when a body was fetched and available.
content_statusNoBody resolution status: "not_requested" for metadata-only calls, "available" when a body was resolved, or "unavailable" after ordinary resolution attempts returned no usable body.
requested_celexNoThe originally requested CELEX, echoed when resolve "current_consolidated" served a different (consolidated) work. celex_number holds the CELEX actually served. Absent when the served work is the one requested.
eurovoc_subjectsNoEuroVoc subject classifications.
content_availableNoWhether body content was fetched from EUR-Lex. False in "metadata_only" mode (no fetch attempted) — use content_mode to distinguish "not requested" from "unavailable upstream".
language_fallbackNoHuman-readable note explaining the fallback that occurred (e.g. "Requested FR content unavailable; returned EN"). Present only when a fallback happened.
author_institutionNoHuman-readable name of the primary (first) originating EU institution (e.g. "European Parliament", "Council of the EU"). For co-legislated acts, prefer author_institutions for the complete set. Absent when not recorded.
consolidated_as_ofNoConsolidation date of current_consolidated_celex in ISO 8601 (YYYY-MM-DD). Present only when is_superseded is true.
requested_languageNoOriginally requested language code when English fallback changed the effective language reported in language.
structure_detectedNoWhether any act structure was parsed from the body. Present when outline or select was used; false means no detectable chapter/article/annex structure — read it via offset/limit or content_mode "full".
author_institutionsNoAll originating EU institutions, for co-legislated acts adopted by more than one body (e.g. ["European Parliament", "Council of the EU"]). Absent when none recorded.
content_chars_totalNoTotal character length of the full document body. Present when content was fetched and available; use with content_offset to page through the entire act.
content_chars_returnedNoNumber of body characters returned in this response (equals content length). Present when a body was fetched and available.
current_consolidated_celexNoCELEX of the newest consolidated version of the requested base act (e.g. 02014R0833-20260424) — fetch it with eurlex_get_document, or pass resolve "current_consolidated". Present only when is_superseded is true.
content_unavailability_reasonNoWhy content_status is "unavailable": no representation exists, the upstream request failed, or a multipart Formex body could not be assembled completely.
Behavior5/5

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

The description exceeds the annotations by disclosing the 100,000-character window cap, format-specific offsets, outline/select behavior, resolve/consolidation semantics, and automatic language fallback. The readOnlyHint, openWorldHint, and idempotentHint annotations are fully consistent with the described behavior.

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?

Every sentence is informative and there is no fluff, but the main description is a dense single paragraph covering many interacting behaviors. A bulleted or more sectioned structure would aid scanning; however, the length is justified by the tool's complexity.

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?

The description covers identifier selection, formats, language, content modes, pagination, section selection, consolidation behavior, and edge cases such as selection misses and empty outlines. With an output schema also present, no call-relevant 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 covers all 11 parameters with rich descriptions (100% coverage), so the baseline is 3. The prose still adds cross-parameter workflow guidance — page/offset/limit reconstruction, the outline-then-select pattern, and the need to keep format constant when paging — which helps an agent select and combine parameters correctly.

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 opens with a specific verb ('Fetch') and resource ('metadata and full text of an EU act'), names three exact identifier types (CELEX number, ELI URI, work URI), and enumerates the returned metadata plus content formats. This clearly distinguishes it from sibling search/lookup/relations tools by identifying the precise input and output.

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?

Clear context is provided for direct retrieval by known identifier, and the description explains how to handle large acts via paging, outline, and select. It does not explicitly name sibling alternatives or exclusion conditions (e.g., 'use search when you do not have an identifier'), so it stops short of a 5.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

eurlex_get_relationsGet CELLAR Relationship GraphA
Read-onlyIdempotent
Inspect

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, its legal basis, and works that cite it. Returns direct relations only, paginated per relation type and direction. Requires a CELEX number or CELLAR work URI.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNoMaximum related works per relation type and direction (1–100, default 100). Incoming edges are ordered newest-first, so the cap keeps the newest — page with offset for older ones. When truncated is true, at least one direction filled its cap.
offsetNoPagination offset applied per relation type and direction — related works to skip (default 0). Page forward by adding limit; incoming edges are newest-first, so higher offsets reach older works.
work_uriNoCELLAR work resource URI to traverse (e.g. http://publications.europa.eu/resource/cellar/3e485e15-11bd-11e6-ba9a-01aa75ed71a1). Used directly without CELEX resolution. Provide exactly one of celex_number or work_uri.
celex_numberNoCELEX number of the work to traverse (e.g. 32016R0679). Provide exactly one of celex_number or work_uri.
relation_typesNoSubset of relation types to return; omit for all. Types: cites, amends, amended_by, repeals, repealed_by, implicitly_repeals, implicitly_repealed_by, legal_basis (treaty/article this act rests on), consolidated_version (consolidated texts of this act).

Output Schema

ParametersJSON Schema
NameRequiredDescription
capNoThe per-direction cap applied to this page.
errorNoPresent when the call failed. Absent on success.
shownNoNumber of relations returned in this page.
totalNoNumber 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.
offsetNoPagination offset applied to this response (per relation type and direction).
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 at least one relation type/direction filled its per-direction cap and more related works may exist — page with offset.
celex_numberNoCELEX number of the source work whose relations were traversed. Absent when addressed directly by work_uri.
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. When every requested type is empty the tool throws no_relations instead.
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.
Behavior4/5

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

Annotations already declare readOnlyHint=true, openWorldHint=true, and idempotentHint=true. The description adds meaningful behavioral context beyond these: it clarifies that only one-hop direct relations are returned, that pagination is applied per relation type and direction, and that a CELEX or work URI is required for traversal. This adds value without contradicting any annotation.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is two sentences, front-loaded with the core purpose, then the scope constraint. Every clause contributes: it states what relations are covered, that only direct relations are returned, the pagination model, and the identification requirement. No wasted words.

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

Completeness5/5

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

Given the 5 parameters (all documented in schema) and the existence of an output schema, the description is complete. It states the exact scope (one-hop, direct relations), the relation types available, pagination behavior, and the required input form. An agent has everything needed to call this tool correctly.

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 baseline is 3. The description itself does not add parameter details beyond what the schema already provides; it only reinforces the mutual exclusivity of celex_number and work_uri, which is also stated in each parameter's description. The schema carries the heavy lifting, so no bonus is warranted.

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 opens with a specific verb and resource: 'Traverse the one-hop CDM relationship graph of an EU act' and enumerates the exact relation types (amends, repeals, consolidated versions, legal basis, citations). This is unambiguous and clearly differentiates from sibling tools like eurlex_get_document (fetch full document) or eurlex_search_documents (text search).

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

Usage Guidelines4/5

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

The description gives clear context: it returns direct relations only, is paginated per type/direction, and requires a CELEX number or CELLAR URI. It does not explicitly name alternatives or state when NOT to use it, but the scope statement effectively distinguishes it from siblings. No explicit exclusion is provided, so a 4 is appropriate rather than 5.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

eurlex_lookup_celexResolve EU Legal CitationA
Read-onlyIdempotent
Inspect

Resolve an EU legal citation — a CELEX number or ELI URI — to its canonical CELLAR work, confirming it exists before you fetch or traverse it. Returns the work URI, confirmed CELEX number, document type, and date.

ParametersJSON Schema
NameRequiredDescriptionDefault
identifierYesThe EU legal citation to resolve: a CELEX number (e.g. 32016R0679) or a work-level ELI URI (e.g. http://data.europa.eu/eli/reg/2016/679, with or without the /oj suffix).
identifier_typeNoFormat of the identifier. "auto" detects it automatically; supply "celex" or "eli" explicitly if detection fails.auto

Output Schema

ParametersJSON Schema
NameRequiredDescription
dateNoDocument date in ISO 8601 format (YYYY-MM-DD).
errorNoPresent when the call failed. Absent on success.
foundNoTrue when the identifier resolves to a CELLAR work; false when a well-formed CELEX/ELI matches no work in the corpus. A malformed or undetectable identifier raises ambiguous_identifier instead.
work_uriNoCELLAR work URI (stable resource identifier).
celex_numberNoConfirmed CELEX number for the resolved work.
resource_typeNoCDM resource type URI indicating the document category (e.g. .../resource-type/REG for Regulation). Absent for some works.
Behavior4/5

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

Annotations already declare readOnlyHint, openWorldHint, and idempotentHint. The description adds valuable behavioral context: it confirms existence, returns a canonical/confirmed resolution, and lists the specific return fields. It does not contradict annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is compact and front-loaded: the first sentence states the core purpose and usage, and the second lists the key return values. Every clause earns its place with no redundant filler.

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

Completeness5/5

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

For a simple two-parameter resolution tool with rich annotations and an output schema, the description fully covers what an agent needs: what to pass, why to call it, when to call it, and what to expect back. No critical contextual gap remains.

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 fully documents both parameters. The description's mention of CELEX/ELI inputs mirrors the schema rather than adding new meaning. A baseline score of 3 is appropriate since the schema carries the semantic load.

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 clearly identifies the action ('Resolve'), the input (CELEX number or ELI URI), and the output (canonical CELLAR work URI, confirmed CELEX, document type, date). It also distinguishes the tool from siblings by framing it as a pre-flight confirmation step before fetching or traversing.

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

Usage Guidelines4/5

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

The description gives clear usage context: use this tool when you need to confirm an EU legal citation exists and resolve it before fetching or traversing. It does not explicitly name sibling alternatives or state when not to use it, but the intended placement in a workflow is evident.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

eurlex_query_sparqlRaw CELLAR SPARQL QueryA
Read-only
Inspect

Run a raw, read-only SPARQL SELECT against the CELLAR Virtuoso endpoint — an escape hatch for CDM ontology traversals the curated tools do not cover. Only SELECT is accepted; update forms and ASK/CONSTRUCT/DESCRIBE are rejected before execution, and results are capped at 100. The cdm:, skos:, and xsd: prefixes are auto-injected.

ParametersJSON Schema
NameRequiredDescriptionDefault
sparql_queryYesA read-only SPARQL SELECT query. Leading comments and PREFIX/BASE declarations are allowed; the cdm:, skos:, and xsd: prefixes are auto-injected. LIMIT is injected at 100 if absent, or capped to 100. Key CDM predicates: cdm:resource_legal_id_celex (CELEX), cdm:work_date_document (date), cdm:work_has_resource-type (type), cdm:work_is_about_concept_eurovoc (EuroVoc subject), cdm:work_cites_work (citation). CELEX is an xsd:string literal — match it with FILTER(STR(?celex) = "…"). For text, use bif:contains with a single-quoted phrase.
timeout_hintNoOptional client-side timeout in milliseconds (1000–55000). Defaults apply when omitted; the endpoint hard limit is 60 seconds.

Output Schema

ParametersJSON Schema
NameRequiredDescription
capNoThe server-enforced result ceiling that was applied.
errorNoPresent when the call failed. Absent on success.
shownNoNumber of binding rows returned in this response.
totalNoNumber of binding rows returned (capped at 100 by the server).
bindingsNoRaw SPARQL binding rows. To extract a value from a row: row["varName"]?.value. Use the variables array to iterate in query order.
truncatedNoTrue when the server-enforced result ceiling capped the rows and more may exist upstream — narrow the query with FILTERs to see the rest.
variablesNoVariable names from the SELECT head, in query order.
Behavior4/5

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

Annotations already declare readOnlyHint=true and openWorldHint=true. The description adds concrete behavioral details beyond that: only SELECT is accepted, results are capped at 100, prefixes are auto-injected, and a timeout_hint parameter is described. It does not contradict annotations and provides useful operational context.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is well-structured and front-loaded with purpose and constraints. Every sentence adds value—constraints, behavioral details, parameter guidance—without redundancy. Length is appropriate for the complexity of a raw SPARQL tool.

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

Completeness5/5

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

Given the output schema exists (so return values need no explanation), the description covers everything an agent needs: accepted query forms, result caps, endpoint limits, timeout options, and practical query-writing guidance. It is complete for safe and effective invocation.

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

Parameters5/5

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

Schema coverage is 100%, but the description significantly enriches the sparql_query parameter with syntax rules (leading comments, PREFIX/BASE allowed), LIMIT behavior, auto-injected prefixes, and a list of key CDM predicates with matching tips (e.g., CELEX matching, bif:contains). This goes well beyond the schema description.

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 clearly states a specific action (run a raw, read-only SPARQL SELECT) against a specific resource (CELLAR Virtuoso endpoint), and frames it as an 'escape hatch' for traversals the curated tools do not cover, distinguishing it from siblings.

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

Usage Guidelines4/5

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

The description gives an explicit when-to-use condition: 'an escape hatch for CDM ontology traversals the curated tools do not cover.' It also imposes constraints (only SELECT, rejection of other forms) that inform usage. However, it does not explicitly name alternative tools or provide when-not-to-use guidance beyond the curated-tools-cover case, leaving some inference required.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

eurlex_search_documentsSearch EU DocumentsA
Read-only
Inspect

Search EU legislation, treaties, and preparatory acts across the CELLAR corpus by document type, date range, EuroVoc subject, author institution, and in-force status. Keyword matches English titles and CELEX strings only — there is no full-text body search. Returns a page of CELEX numbers, work URIs, type labels, dates, and titles, newest first, each flagged with is_consolidated. At least one filter is required.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNoMaximum number of results to return (1–100). Defaults to 20.
offsetNoPagination offset — number of results to skip. Defaults to 0.
date_toNoEnd of date range (YYYY-MM-DD), matched against document date. Omit for no upper bound.
keywordNoKeyword matched against English document titles via the full-text index (multi-word input is treated as a phrase), or against CELEX substrings.
in_forceNoIf true, restrict to acts currently in force. Omit to return all regardless of in-force status.
date_fromNoStart of date range (YYYY-MM-DD), matched against document date. Omit for no lower bound.
document_typeNoDocument category: REG=Regulations, DIR=Directives, DEC=Decisions, TREATY=Treaties, JUDG=Judgments, OPIN_AG=AG Opinions, PROP=Proposals, REC=Recommendations. Each category includes its explicit CELLAR authority variants (for example, delegated and implementing regulations). Omit to search all types. Consolidated texts are excluded unless include_consolidated is true.
eurovoc_conceptNoEuroVoc concept URI to filter by subject (e.g. http://eurovoc.europa.eu/2828), obtained from eurlex_browse_subjects. Omit for no subject filter.
author_institutionNoAuthor institution name (e.g. "European Parliament", "Council", "European Commission"), matched against the English names of EU corporate bodies.
include_consolidatedNoWhen true and document_type is set, also match consolidated texts whose basic act belongs to that document category. No effect when document_type is omitted. Consolidated rows are always tagged is_consolidated: true.

Output Schema

ParametersJSON Schema
NameRequiredDescription
capNoThe limit that was applied to this page.
errorNoPresent when the call failed. Absent on success.
shownNoNumber of documents returned in this page.
totalNoNumber of documents returned in this page (not a corpus-wide count).
offsetNoPagination offset used for this response.
documentsNoMatching EU documents ordered by date descending.
truncatedNoTrue when the returned page was capped at the limit and more documents may exist.
query_echoNoEcho of filters applied to this search. Useful for diagnosing empty results.
Behavior5/5

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

The annotations already provide readOnlyHint and openWorldHint, so no contradiction exists. The description adds valuable behavioral detail beyond those annotations: keyword matching is limited to English titles and CELEX strings with no full-text body search, results are returned newest first with a page of CELEX numbers, work URIs, type labels, dates, titles, and an is_consolidated flag, and a filter must be supplied.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is four sentences with no filler. It front-loads the tool's purpose, follows with the key search limitation, then the return shape and ordering, and ends with the essential usage requirement. Every sentence earns its place.

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

Completeness5/5

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

Given the tool's 10 optional parameters, high schema coverage, and presence of an output schema, the description is sufficiently complete. It provides the central search workflow, the mandatory-filter rule, the crucial absence of full-text body search, and an accurate summary of the result payload, leaving no critical gap for correct invocation.

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 non-obvious parameter semantics: it specifies that keyword matching is limited to English titles and CELEX strings, explicitly rules out full-text body search, and imposes the global constraint that at least one filter is required. These details meaningfully augment the already rich schema.

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

Purpose5/5

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

The description opens with a specific verb and resource: 'Search EU legislation, treaties, and preparatory acts across the CELLAR corpus.' It also distinguishes itself from sibling retrieval/search tools by stating that keyword matches target titles and CELEX strings only, and that there is no full-text body search, making its role as a structured search endpoint clear.

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

Usage Guidelines4/5

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

The description gives clear invocation context: searching by document type, date range, EuroVoc subject, author institution, and in-force status, plus the explicit constraint that at least one filter is required. However, it does not name sibling tools or explicitly state when to prefer alternatives such as eurlex_get_document or eurlex_query_sparql.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

Frequently Asked Questions

Discussions

No comments yet. Be the first to start the discussion!

Related MCP Servers

View all MCP Servers

Try in Browser

Your Connectors

Sign in to create a connector for this server.