# Reported issues for eur-lex-mcp-server

Pod holds 10 of 10 GitHub reports that passed its relevance review. This can include external user reports, maintainer-confirmed bugs, and concrete feature gaps. Treat them as evidence to inspect, not a count of distinct defects.

Back to [eur-lex-mcp-server](/mcp/eur-lex-mcp-server).

## Most discussed

### bug(cellar-sparql): a timed-out query is retried four times, so a call runs far past its timeout bound

### Server version

0.11.0

### mcp-ts-core version

^0.12.8

### Runtime

Node via built `dist/index.js`

### Runtime version

Node >=24

### Transport

Streamable HTTP

### Description

`CellarSparqlService.execute` bounds each HTTP attempt with `AbortSignal.timeout(effectiveTimeoutMs)` but wraps the attempt in `withRetry`, and a client-side abort is not classified as non-retryable. Only HTTP 400 and Virtuoso syntax errors carry `retryable: false`; a timeout falls through to the default…

[Read the thread](https://github.com/cyanheads/eur-lex-mcp-server/issues/78) · 2026-09-10 · closed · 2 comments

### bug(search): reject impossible and inverted date ranges

### Server version

0.9.10

### mcp-ts-core version

^0.12.3

### Runtime

Bun

### Runtime version

Bun 1.4.0

### Transport

HTTP (Streamable HTTP)

### OS

macOS 26.1 arm64

### Description

The `date_from`/`date_to` filters on `eurlex_search_documents` and `eurlex_get_cases` validate only the `YYYY-MM-DD` string shape (`z.string().regex(/^\d{4}-\d{2}-\d{2}$/)`, declared identically in both tools). Neither tool checks that the value is a real calendar date, and neither checks that `date_from…

[Read the thread](https://github.com/cyanheads/eur-lex-mcp-server/issues/77) · 2026-08-31 · closed · 2 comments

### bug(eurlex_get_relations): filter cross-act consolidations on the work-URI path

### Server version

0.10.0

### mcp-ts-core version

^0.12.3

### Runtime

Bun

### Runtime version

Bun 1.4.0

### Transport

HTTP (Streamable HTTP)

### OS

macOS 26.1 arm64

### Description

`eurlex_get_relations` returns different `consolidated_version` results for the same CELLAR work depending on whether it is addressed by CELEX or `work_uri`. The CELEX path filters cross-act consolidations using the source act core, while the first-class `work_uri` path passes no source CELEX to the…

[Read the thread](https://github.com/cyanheads/eur-lex-mcp-server/issues/73) · 2026-08-31 · closed · 2 comments

### feat(eurlex_browse_subjects): match EuroVoc alternative labels, not prefLabel alone

### Server version

0.9.8

### mcp-ts-core version

0.10.14

### Runtime

Bun

### Runtime version

Bun 1.3.x

### Transport

HTTP (Streamable HTTP)

### Description

`eurlex_browse_subjects` matches the keyword against `skos:prefLabel` only (`eurlex-browse-subjects.tool.ts`, the `?concept skos:prefLabel ?label` + `CONTAINS(LCASE(STR(?label)), …)` pattern). EuroVoc's non-preferred terms — the exact phrases people actually type — are carried as SKOS alternative labels and are never searched, so…

[Read the thread](https://github.com/cyanheads/eur-lex-mcp-server/issues/70) · 2026-08-21 · closed · 2 comments

### feat(eurlex_get_document): validate the CELEX shape before the CELLAR roundtrip

### Use case

A CELEX identifier that can never be valid (`"0"`, a stray word, a whitespace fragment) passed to `eurlex_get_document`, `eurlex_get_relations`, or the `eurlex://document/{celexNumber}` resources currently pays a live CELLAR SPARQL round-trip (measured 3.7 to 4.6 s) only to get a generic `not_found` whose recovery hint sends the caller to `eurlex_lookup_celex`. Rejecting the shape before the round-trip saves the latency and gives immediate, specific guidance.

## Proposal…

[Read the thread](https://github.com/cyanheads/eur-lex-mcp-server/issues/69) · 2026-08-21 · closed · 2 comments

### feat(eurlex_get_document): eurovoc_subjects and legal_basis are opaque URIs with no resolution path

### Use case

`eurlex_get_document` returns a document's subject classification and legal basis as bare URIs. Fetching the GDPR gives:

```json
"eurovoc_subjects": [
  "http://eurovoc.europa.eu/2338", "http://eurovoc.europa.eu/2828",
  "http://eurovoc.europa.eu/453",  "http://eurovoc.europa.eu/5181", …
],
"legal_basis": ["http://publications.europa.eu/resource/cellar/fc797fa2-af0e-4cbd-8e74-5ed41139e4dc"]
```

Nine numeric EuroVoc URIs and one CELLAR UUID. Neither is interpretable, and the…

[Read the thread](https://github.com/cyanheads/eur-lex-mcp-server/issues/67) · 2026-07-26 · closed · 2 comments

### feat(eurlex_lookup_celex): return a human-readable resource type

### Use case

`eurlex_lookup_celex` still returns the raw CDM authority URI in `resource_type`, while `eurlex_search_documents`, `eurlex_get_cases`, `eurlex_get_document`, and `eurlex://document/{celexNumber}` all resolve the same field to a human-readable label. The tool's own description says it returns "document type", and its text formatter prints the same raw URI as `**Type:**`, so both the structured and text-rendered output are equally opaque.

Related: #4, #35

### Proposed behavior…

[Read the thread](https://github.com/cyanheads/eur-lex-mcp-server/issues/58) · 2026-07-13 · closed · 2 comments

### feat(eurlex_get_relations): expose national transposition measures

### Use case

EU-law researchers need to trace a directive to the member-state measures that implement it without constructing CELLAR CDM queries themselves. `eurlex_get_relations` and `eurlex://document/{celexNumber}/relations` already advertise national transposition as a first-class relationship, but neither currently exposes it.

### Proposed behavior

Add `national_transposition` as an incoming relation type over `cdm:measure_national_implementing_implements_resource_legal`: the related…

[Read the thread](https://github.com/cyanheads/eur-lex-mcp-server/issues/56) · 2026-07-13 · closed · 2 comments

## Most recent

### bug(pagination): prove continuation and return exhausted pages

### Server version

0.10.0

### mcp-ts-core version

^0.12.3

### Runtime

Bun

### Runtime version

Bun 1.4.0

### Transport

stdio

### OS

Any (handler-level behavior)

### Description

`eurlex_search_documents`, `eurlex_get_cases`, `eurlex_browse_subjects`, and `eurlex_get_relations` currently mark a page as truncated whenever its returned row count reaches `limit`. That is not proof of another row. They also use their initial empty-result errors for an offset past an otherwise valid result…

[Read the thread](https://github.com/cyanheads/eur-lex-mcp-server/issues/72) · 2026-08-31 · closed · 1 comment

### feat(document-relations): add actionable relation-traversal guidance

### Use case

`eurlex://document/{celexNumber}/relations` is a summary resource with a per-type, per-direction cap of 25. When the summary omits additional relation rows, callers need a concrete route to the pageable `eurlex_get_relations` tool without treating the resource as a directly resumable page.

Related: #72

### Proposed behavior

After #72 makes the shared relation traversal prove whether another row exists, add a `continuation` object only when this resource's summary has more valid…

[Read the thread](https://github.com/cyanheads/eur-lex-mcp-server/issues/71) · 2026-08-22 · closed · 1 comment

The remaining reports are on [the project's issue tracker](https://github.com/cyanheads/eur-lex-mcp-server/issues).
