Skip to main content
Glama

Server Details

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

Status
Healthy
Last Tested
Transport
Streamable HTTP
URL
Repository
cyanheads/eur-lex-mcp-server
GitHub Stars
5
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.5/5 across 7 of 7 tools scored.

Server CoherenceA
Disambiguation5/5

Each tool targets a distinct function: thesaurus browsing, case law search, document fetching, relationship traversal, citation resolution, SPARQL escape hatch, and legislative search. No overlap in purposes.

Naming Consistency5/5

All tools follow a consistent 'eurlex_verb_noun' pattern (e.g., browse_subjects, get_document, search_documents). The pattern is uniform and predictable.

Tool Count5/5

7 tools is well-scoped for an EU legal domain, covering essential operations without unnecessary bloat. Each tool has a clear role.

Completeness4/5

Covers discovery, retrieval, and relationship exploration. Missing full-text body search and CRUD operations (but read-only is appropriate). The raw SPARQL escape hatch fills gaps.

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.
shownNoNumber of concepts returned in this response.
totalYesNumber of concepts returned in this response.
offsetYesPagination offset used for this response.
conceptsYesMatching 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 (readOnlyHint, openWorldHint, idempotentHint) are already present and consistent. The description adds useful behavioral details: returns concept URI, label, code, broader label, ordered alphabetically, and respects language. No contradictions.

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?

Single, well-structured sentence that packs purpose, usage, and output details without fluff. Front-loads key action and value.

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 simplicity (4 params, 1 required, output schema exists), the description fully covers what the agent needs: purpose, linkage to another tool, and output format.

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 descriptions cover all parameters (100% coverage). The description adds context for the keyword parameter ('resolving a keyword') but doesn't add significant 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 clearly states it searches the EuroVoc thesaurus and returns concept URIs for use in document searches. It distinguishes from siblings like eurlex_search_documents by focusing on subjects rather than documents.

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?

Explicitly states the output is usable in the eurovoc_concept subject filter of eurlex_search_documents, linking tools effectively. No explicit when-not-to-use or alternatives, but the context is clear enough for appropriate selection.

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.
casesYesMatching case law records ordered by date descending.
shownNoNumber of cases returned in this page.
totalYesNumber of cases returned in this page (not a corpus-wide count).
offsetYesPagination offset used for this response.
truncatedNoTrue when the returned page was capped at the limit and more cases may exist.
query_echoYesEcho 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?

Adds context beyond readOnlyHint and openWorldHint: describes search scope (no full-text body), default exclusions, and return fields (parsed from title). 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?

Concise, front-loaded with purpose, every sentence adds necessary information. No redundant or missing elements.

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 9 parameters and output schema, description covers search behavior, exclusions, keyword scope, and return fields. Complete for an AI agent to use effectively.

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 100%, but description adds value by explaining keyword behavior, include_derivative default logic, and that parties/subject are parsed from title. Goes beyond 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?

Description clearly states 'Search CJEU and General Court case law' with specific resources (judgments, orders, AG opinions) and search criteria. Distinct from sibling tools like eurlex_search_documents which likely cover broader legal documents.

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?

Explains default behavior (primary records only, derivative excluded), when to use include_derivative, and keyword matching scope. Lacks explicit comparison to siblings but context is clear.

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. Large bodies are paged by default (offset/limit with has_more) or returned whole with content_mode "full"; 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. For the entire body in one response, use content_mode "full".
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
languageNoLanguage code for document content (ISO 639-1 uppercase, e.g. EN, FR, DE). 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 a bounded character window (see offset/limit); "full" returns the entire body in one call (large acts can be hundreds of KB); "metadata_only" skips the content fetch. offset and limit apply only to "paged".paged

Output Schema

ParametersJSON Schema
NameRequiredDescription
dateNoDocument date in ISO 8601 format (YYYY-MM-DD).
titleNoDocument title in the requested language (absent for some older works and judgments).
contentNoBody content of the act in the requested format and language. In "paged" mode a character window (see content_offset / content_chars_returned / has_more); in "full" mode the entire body; 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_moreYesTrue when body content exists beyond the returned window. Page forward with offset = content_offset + content_chars_returned, or request content_mode "full". Always false in "metadata_only" mode.
in_forceNoWhether the act is currently in force.
languageYesLanguage 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.
legal_basisNoLegal basis acts for this work.
celex_numberYesConfirmed CELEX number for the retrieved work.
content_modeYesContent 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_formatYesFormat 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.
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_availableYesWhether 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.
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.
Behavior4/5

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

Annotations already provide readOnlyHint, openWorldHint, and idempotentHint. The description adds valuable behavioral details: paging with format-specific offsets, language fallback, selection behavior with Roman/Arabic numbers, and outline offset handling. 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.

Conciseness4/5

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

The description is efficient, with each sentence adding value. It is front-loaded with the core purpose. However, it could be slightly more structured (e.g., using bullet points for different modes), but it remains clear and concise.

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 complexity (11 parameters, nested objects, output schema exists), the description is thorough. It covers all modes (paged, full, metadata_only), edge cases (format-specific offsets, missed selections), and parameter interactions. It is complete for an AI agent to use correctly.

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?

With 100% schema coverage, the description still adds significant meaning to each parameter. It explains how select works with Roman/Arabic numbers, how outline offsets are format-specific, and the interaction between content_mode, offset, limit. This is well beyond what the schema provides.

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 fetches metadata and full text of an EU act by CELEX, ELI, or work URI. It distinguishes from siblings by listing multiple identifier types and output formats.

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 explains when to use this tool (fetching a document by specific identifiers) and provides guidance on various parameters (content_mode, select, outline). It implicitly differentiates from sibling tools like eurlex_search_documents and eurlex_lookup_celex, but lacks explicit when-not-to-use scenarios.

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.
shownNoNumber of relations returned in this page.
totalYesNumber 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.
offsetYesPagination offset applied to this response (per relation type and direction).
work_uriYesCELLAR URI of the source work (the work_uri input, or resolved from the CELEX).
relationsYesDirect 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_typesYesRequested 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_typesYesThe 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 classify the tool as read-only, idempotent, and open-world. The description adds behavioral context: pagination with truncation when capacity is filled, ordering of incoming edges, and the need for offset to page for older works. This aligns with the annotations and provides extra detail.

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 only three sentences, each carrying necessary information: purpose, behavior (direct, paginated), and input requirement. No redundancy or filler; front-loaded with the most critical information.

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?

Given the tool's complexity (multiple relation types, pagination, idempotent) and the presence of an output schema (not shown), the description covers all essential aspects: what to expect, how to paginate, and required identifiers. It does not discuss error handling or status codes, but that is acceptable for a read-only tool.

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 description coverage is 100%, but the description adds value by explaining the mutual exclusivity of celex_number and work_uri, the pagination mechanics (ordering, offset behavior), and the meaning of the relation_types enum. This goes beyond the schema descriptions.

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 ('Traverse') and resource ('one-hop CDM relationship graph of an EU act'), listing concrete relation types. It clearly distinguishes this tool from siblings like eurlex_get_document (retrieves content) or eurlex_search_documents (searches), which have different purposes.

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 states the required input (CELEX number or CELLAR work URI) and notes that only direct relations are returned, paginated per type and direction. While it doesn't explicitly say when not to use it (e.g., for multi-hop traversal), the sibling context and specificity make the usage context clear.

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).
foundYesTrue 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, idempotentHint. The description adds behavioral context: it confirms existence before fetching/traversing and specifies the returned fields. No contradiction.

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 concise sentences: first states purpose and behavior, second lists output. No wasted words. Front-loaded with essential information.

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?

Output schema exists (mentioned but not shown), description lists returned fields. Parameters fully documented in schema. Annotations cover safety. Complete for a lookup/resolution tool.

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% (both parameters have descriptions). The description only mentions 'CELEX number or ELI URI' and enum values, adding minimal extra meaning beyond the 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 specifies resolving an EU legal citation (CELEX or ELI) to canonical metadata, with clear verb ('resolve') and resource ('EU legal citation'). It distinguishes from siblings like eurlex_get_document (which fetches content) and eurlex_search_documents (which searches).

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 says 'confirming it exists before you fetch or traverse it', giving clear context for when to use (as a prerequisite). It implies alternatives but does not explicitly exclude or name them, though sibling tools are listed separately.

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.
shownNoNumber of binding rows returned in this response.
totalYesNumber of binding rows returned (capped at 100 by the server).
bindingsYesRaw 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.
variablesYesVariable 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 and openWorldHint. The description adds that only SELECT is accepted, results are capped at 100, and prefixes are auto-injected. No contradiction 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 wasted words. Front-loaded with purpose, immediately followed by constraints. Every sentence adds value.

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 full schema coverage, annotations, and presence of an output schema, the description sufficiently discloses behavioral traits (query type, result limit, prefix injection) without needing to explain return values.

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%. The description adds significant detail: for sparql_query, it explains allowed prefixes, LIMIT handling, and gives examples of CDM predicates and bif:contains syntax. For timeout_hint, it clarifies defaults and endpoint hard limit.

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 it runs a read-only SPARQL SELECT against CELLAR Virtuoso, serving as an escape hatch for CDM ontology traversals not covered by curated tools. This distinguishes it from siblings like eurlex_search_documents and eurlex_lookup_celex.

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?

Explicitly states when to use (curated tools do not cover) and what is accepted/rejected (only SELECT, no update forms or other SPARQL forms). Mentions result cap at 100, though does not explicitly name alternative tools for comparison.

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 type: REG=Regulation, DIR=Directive, DEC=Decision, TREATY=Treaty, JUDG=Judgment, OPIN_AG=AG Opinion, PROP=Proposal, REC=Recommendation. Omit to search all types. A type filter excludes consolidated texts (CONS_TEXT) — set include_consolidated to fold them back in.
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 (CONS_TEXT) of that type — point-in-time versions that a plain type filter omits. 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.
shownNoNumber of documents returned in this page.
totalYesNumber of documents returned in this page (not a corpus-wide count).
offsetYesPagination offset used for this response.
documentsYesMatching EU documents ordered by date descending.
truncatedNoTrue when the returned page was capped at the limit and more documents may exist.
query_echoYesEcho 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 description discloses key behaviors: no full-text body search, results sorted newest first, each result flagged with is_consolidated, and consolidated texts omitted by default when document_type is set unless include_consolidated is true. These details complement the readOnlyHint and openWorldHint annotations 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.

Conciseness5/5

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

The description is a single focused paragraph that front-loads the core purpose and key limitations. Every sentence adds unique information—search scope, keyword behavior, return format, required filters—without redundancy or fluff.

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?

Despite 10 parameters and no output schema visible, the description covers retrieval fields (CELEX numbers, URIs, dates, titles, is_consolidated flag), ordering (newest first), pagination (a page), and required filters. It addresses the key constraints and return structure sufficiently for agent 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?

All 10 parameters have descriptions in the input schema, achieving 100% coverage (baseline 3). The description adds value by explaining the interaction between document_type and include_consolidated, and specifying the keyword behavior (phrase matching, CELEX substring). This extra context elevates the score above baseline.

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 searches EU legislation, treaties, and preparatory acts across the CELLAR corpus by multiple criteria. It specifies the search scope and return fields, and the name and title align with the purpose. It distinguishes from sibling tools like eurlex_get_document (retrieval) and eurlex_browse_subjects (subject browsing).

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 notes that at least one filter is required and clarifies that keyword search is limited to English titles and CELEX substrings—no full-text search. It provides context for when to use EuroVoc concepts from eurlex_browse_subjects. However, it does not compare directly to alternatives like eurlex_lookup_celex or eurlex_get_document for single-document retrieval.

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

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.