@cyanheads/eur-lex-mcp-server 0.2.0 → 0.2.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/AGENTS.md +1 -1
- package/CLAUDE.md +1 -1
- package/README.md +1 -1
- package/changelog/0.2.x/0.2.1.md +16 -0
- package/dist/mcp-server/tools/definitions/eurlex-get-cases.tool.d.ts +6 -6
- package/dist/mcp-server/tools/definitions/eurlex-get-cases.tool.d.ts.map +1 -1
- package/dist/mcp-server/tools/definitions/eurlex-get-cases.tool.js +54 -20
- package/dist/mcp-server/tools/definitions/eurlex-get-cases.tool.js.map +1 -1
- package/dist/mcp-server/tools/definitions/eurlex-lookup-celex.tool.d.ts +1 -1
- package/dist/mcp-server/tools/definitions/eurlex-search-documents.tool.d.ts +5 -5
- package/dist/mcp-server/tools/definitions/eurlex-search-documents.tool.d.ts.map +1 -1
- package/dist/mcp-server/tools/definitions/eurlex-search-documents.tool.js +63 -24
- package/dist/mcp-server/tools/definitions/eurlex-search-documents.tool.js.map +1 -1
- package/dist/mcp-server/tools/definitions/index.d.ts +12 -12
- package/dist/services/cellar-sparql/cdm-labels.d.ts +9 -0
- package/dist/services/cellar-sparql/cdm-labels.d.ts.map +1 -1
- package/dist/services/cellar-sparql/cdm-labels.js +16 -0
- package/dist/services/cellar-sparql/cdm-labels.js.map +1 -1
- package/package.json +1 -1
- package/server.json +3 -3
package/AGENTS.md
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
# Developer Protocol
|
|
2
2
|
|
|
3
3
|
**Server:** eur-lex-mcp-server
|
|
4
|
-
**Version:** 0.2.
|
|
4
|
+
**Version:** 0.2.1
|
|
5
5
|
**Framework:** [@cyanheads/mcp-ts-core](https://www.npmjs.com/package/@cyanheads/mcp-ts-core) `^0.10.9`
|
|
6
6
|
**Engines:** Bun ≥1.3.0, Node ≥24.0.0
|
|
7
7
|
**MCP SDK:** `@modelcontextprotocol/sdk` ^1.29.0
|
package/CLAUDE.md
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
# Developer Protocol
|
|
2
2
|
|
|
3
3
|
**Server:** eur-lex-mcp-server
|
|
4
|
-
**Version:** 0.2.
|
|
4
|
+
**Version:** 0.2.1
|
|
5
5
|
**Framework:** [@cyanheads/mcp-ts-core](https://www.npmjs.com/package/@cyanheads/mcp-ts-core) `^0.10.9`
|
|
6
6
|
**Engines:** Bun ≥1.3.0, Node ≥24.0.0
|
|
7
7
|
**MCP SDK:** `@modelcontextprotocol/sdk` ^1.29.0
|
package/README.md
CHANGED
|
@@ -7,7 +7,7 @@
|
|
|
7
7
|
|
|
8
8
|
<div align="center">
|
|
9
9
|
|
|
10
|
-
[](./CHANGELOG.md) [](./LICENSE) [](https://github.com/users/cyanheads/packages/container/package/eur-lex-mcp-server) [](https://modelcontextprotocol.io/) [](https://www.npmjs.com/package/@cyanheads/eur-lex-mcp-server) [](https://www.typescriptlang.org/) [](https://bun.sh/)
|
|
11
11
|
|
|
12
12
|
</div>
|
|
13
13
|
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
---
|
|
2
|
+
summary: "eurlex_search_documents and eurlex_get_cases return one row per work, so multi-resource-type works (corrigenda) no longer duplicate or miscount LIMIT/total; constrained optional filters now accept empty string from form-based clients"
|
|
3
|
+
breaking: false
|
|
4
|
+
security: false
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
# 0.2.1 — 2026-06-30
|
|
8
|
+
|
|
9
|
+
## Changed
|
|
10
|
+
|
|
11
|
+
- **`resource_type` may be comma-joined** ([#14](https://github.com/cyanheads/eur-lex-mcp-server/issues/14)) — on `eurlex_search_documents` and `eurlex_get_cases`, a work classified under several CDM resource-types (e.g. corrigenda) now reports all of them as one de-duplicated, sorted, comma-separated label string instead of a single arbitrary type. The field stays a `string`. New `resolveResourceTypeLabels` helper in `services/cellar-sparql/cdm-labels.ts`.
|
|
12
|
+
|
|
13
|
+
## Fixed
|
|
14
|
+
|
|
15
|
+
- **Multi-resource-type works returned duplicate rows** ([#14](https://github.com/cyanheads/eur-lex-mcp-server/issues/14)) — the shared search query used `SELECT DISTINCT`, so a work carrying several `cdm:work_has_resource-type` values (corrigenda hold two or three) cross-produced into one row per type, which `DISTINCT` could not merge. The query now `GROUP BY ?work` with `GROUP_CONCAT(DISTINCT …)` for the resource-type and `SAMPLE` for the single-valued fields, returning one row per work. `LIMIT`/`OFFSET` and `total` now bound distinct works rather than raw rows. Affects `eurlex_search_documents` and `eurlex_get_cases`.
|
|
16
|
+
- **Optional filters rejected empty strings from form-based clients** ([#15](https://github.com/cyanheads/eur-lex-mcp-server/issues/15)) — form clients that send `""` for a blank optional field hit a `-32602` validation error on the constrained filters. `document_type`, `date_from`, `date_to`, and `eurovoc_concept` (`eurlex_search_documents`) plus `court`, `case_type`, `date_from`, and `date_to` (`eurlex_get_cases`) now accept `""` as "filter absent" via a `z.union` with a literal-empty variant; a non-empty value still must satisfy its original constraint.
|
|
@@ -7,17 +7,17 @@ import { JsonRpcErrorCode } from '@cyanheads/mcp-ts-core/errors';
|
|
|
7
7
|
export declare const eurlex_get_cases: import("@cyanheads/mcp-ts-core").ToolDefinition<z.ZodObject<{
|
|
8
8
|
case_number: z.ZodOptional<z.ZodString>;
|
|
9
9
|
keyword: z.ZodOptional<z.ZodString>;
|
|
10
|
-
court: z.ZodOptional<z.ZodEnum<{
|
|
10
|
+
court: z.ZodOptional<z.ZodUnion<readonly [z.ZodLiteral<"">, z.ZodEnum<{
|
|
11
11
|
CJEU: "CJEU";
|
|
12
12
|
GC: "GC";
|
|
13
|
-
}>>;
|
|
14
|
-
case_type: z.ZodOptional<z.ZodEnum<{
|
|
13
|
+
}>]>>;
|
|
14
|
+
case_type: z.ZodOptional<z.ZodUnion<readonly [z.ZodLiteral<"">, z.ZodEnum<{
|
|
15
15
|
judgment: "judgment";
|
|
16
16
|
order: "order";
|
|
17
17
|
ag_opinion: "ag_opinion";
|
|
18
|
-
}>>;
|
|
19
|
-
date_from: z.ZodOptional<z.ZodString
|
|
20
|
-
date_to: z.ZodOptional<z.ZodString
|
|
18
|
+
}>]>>;
|
|
19
|
+
date_from: z.ZodOptional<z.ZodUnion<readonly [z.ZodLiteral<"">, z.ZodString]>>;
|
|
20
|
+
date_to: z.ZodOptional<z.ZodUnion<readonly [z.ZodLiteral<"">, z.ZodString]>>;
|
|
21
21
|
offset: z.ZodDefault<z.ZodNumber>;
|
|
22
22
|
limit: z.ZodDefault<z.ZodNumber>;
|
|
23
23
|
}, z.core.$strip>, z.ZodObject<{
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"eurlex-get-cases.tool.d.ts","sourceRoot":"","sources":["../../../../src/mcp-server/tools/definitions/eurlex-get-cases.tool.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAQ,CAAC,EAAE,MAAM,wBAAwB,CAAC;AACjD,OAAO,EAAE,gBAAgB,EAAE,MAAM,+BAA+B,CAAC;
|
|
1
|
+
{"version":3,"file":"eurlex-get-cases.tool.d.ts","sourceRoot":"","sources":["../../../../src/mcp-server/tools/definitions/eurlex-get-cases.tool.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAQ,CAAC,EAAE,MAAM,wBAAwB,CAAC;AACjD,OAAO,EAAE,gBAAgB,EAAE,MAAM,+BAA+B,CAAC;AAqCjE,eAAO,MAAM,gBAAgB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;cAyS3B,CAAC"}
|
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
*/
|
|
5
5
|
import { tool, z } from '@cyanheads/mcp-ts-core';
|
|
6
6
|
import { JsonRpcErrorCode } from '@cyanheads/mcp-ts-core/errors';
|
|
7
|
-
import { ENG_LANGUAGE_URI,
|
|
7
|
+
import { ENG_LANGUAGE_URI, resolveResourceTypeLabels, } from '../../../services/cellar-sparql/cdm-labels.js';
|
|
8
8
|
import { CellarSparqlService, getCellarSparqlService, } from '../../../services/cellar-sparql/cellar-sparql-service.js';
|
|
9
9
|
/** Case type to CELEX type substring mapping. */
|
|
10
10
|
const CASE_TYPE_PATTERN = {
|
|
@@ -52,23 +52,43 @@ export const eurlex_get_cases = tool('eurlex_get_cases', {
|
|
|
52
52
|
.optional()
|
|
53
53
|
.describe('Keyword to match against case titles and CELEX strings.'),
|
|
54
54
|
court: z
|
|
55
|
-
.
|
|
55
|
+
.union([
|
|
56
|
+
z.literal(''),
|
|
57
|
+
z.enum(['CJEU', 'GC']).describe('CJEU = Court of Justice of the EU, GC = General Court.'),
|
|
58
|
+
])
|
|
56
59
|
.optional()
|
|
57
|
-
.describe('Court filter: CJEU = Court of Justice of the EU, GC = General Court.'
|
|
60
|
+
.describe('Court filter: CJEU = Court of Justice of the EU, GC = General Court. ' +
|
|
61
|
+
'Leave blank or omit to search both courts.'),
|
|
58
62
|
case_type: z
|
|
59
|
-
.
|
|
63
|
+
.union([
|
|
64
|
+
z.literal(''),
|
|
65
|
+
z
|
|
66
|
+
.enum(['judgment', 'order', 'ag_opinion'])
|
|
67
|
+
.describe('judgment, order (procedural decision), or ag_opinion (Advocate General opinion).'),
|
|
68
|
+
])
|
|
60
69
|
.optional()
|
|
61
|
-
.describe('Case type filter: judgment, order (procedural decision), or ag_opinion (Advocate General opinion).'
|
|
70
|
+
.describe('Case type filter: judgment, order (procedural decision), or ag_opinion (Advocate General opinion). ' +
|
|
71
|
+
'Leave blank or omit to search all case types.'),
|
|
62
72
|
date_from: z
|
|
63
|
-
.
|
|
64
|
-
.
|
|
73
|
+
.union([
|
|
74
|
+
z.literal(''),
|
|
75
|
+
z
|
|
76
|
+
.string()
|
|
77
|
+
.regex(/^\d{4}-\d{2}-\d{2}$/)
|
|
78
|
+
.describe('Start date in ISO 8601 format (YYYY-MM-DD).'),
|
|
79
|
+
])
|
|
65
80
|
.optional()
|
|
66
|
-
.describe('Start of date range in ISO 8601 format (YYYY-MM-DD).'),
|
|
81
|
+
.describe('Start of date range in ISO 8601 format (YYYY-MM-DD). Leave blank or omit for no lower bound.'),
|
|
67
82
|
date_to: z
|
|
68
|
-
.
|
|
69
|
-
.
|
|
83
|
+
.union([
|
|
84
|
+
z.literal(''),
|
|
85
|
+
z
|
|
86
|
+
.string()
|
|
87
|
+
.regex(/^\d{4}-\d{2}-\d{2}$/)
|
|
88
|
+
.describe('End date in ISO 8601 format (YYYY-MM-DD).'),
|
|
89
|
+
])
|
|
70
90
|
.optional()
|
|
71
|
-
.describe('End of date range in ISO 8601 format (YYYY-MM-DD).'),
|
|
91
|
+
.describe('End of date range in ISO 8601 format (YYYY-MM-DD). Leave blank or omit for no upper bound.'),
|
|
72
92
|
offset: z
|
|
73
93
|
.number()
|
|
74
94
|
.int()
|
|
@@ -92,7 +112,9 @@ export const eurlex_get_cases = tool('eurlex_get_cases', {
|
|
|
92
112
|
resource_type: z
|
|
93
113
|
.string()
|
|
94
114
|
.optional()
|
|
95
|
-
.describe('Human-readable case type label (e.g. "Judgment", "Order", "AG Opinion").
|
|
115
|
+
.describe('Human-readable case type label (e.g. "Judgment", "Order", "AG Opinion"). ' +
|
|
116
|
+
'Cases classified under several resource-types (e.g. corrigenda) list all labels, comma-separated. ' +
|
|
117
|
+
'Absent for some older cases.'),
|
|
96
118
|
date: z.string().optional().describe('Judgment/opinion date in ISO 8601 format.'),
|
|
97
119
|
title: z
|
|
98
120
|
.string()
|
|
@@ -176,8 +198,20 @@ export const eurlex_get_cases = tool('eurlex_get_cases', {
|
|
|
176
198
|
// ?expr cdm:expression_belongs_to_work ?work (inverse of cdm:work_has_expression)
|
|
177
199
|
// ?expr cdm:expression_uses_language <.../ENG>
|
|
178
200
|
// ?expr cdm:expression_title ?title
|
|
201
|
+
//
|
|
202
|
+
// GROUP BY ?work collapses each work to one row. A work can carry several
|
|
203
|
+
// cdm:work_has_resource-type values (corrigenda hold 2–3); without grouping these
|
|
204
|
+
// cross-product into duplicate rows that SELECT DISTINCT cannot merge (?type
|
|
205
|
+
// differs per row), and LIMIT/OFFSET would then page over raw rows rather than
|
|
206
|
+
// works. GROUP_CONCAT gathers every resource-type URI per work; SAMPLE picks the
|
|
207
|
+
// single-valued display fields. Aggregate aliases are renamed (?celex/?docDate/
|
|
208
|
+
// ?docTitle) because a projected AS-variable cannot reuse a name already in scope.
|
|
179
209
|
const sparql = `
|
|
180
|
-
SELECT
|
|
210
|
+
SELECT ?work
|
|
211
|
+
(SAMPLE(?celexNumber) AS ?celex)
|
|
212
|
+
(GROUP_CONCAT(DISTINCT STR(?type); SEPARATOR=" ") AS ?types)
|
|
213
|
+
(SAMPLE(?date) AS ?docDate)
|
|
214
|
+
(SAMPLE(?title) AS ?docTitle) WHERE {
|
|
181
215
|
?work cdm:resource_legal_id_celex ?celexNumber .
|
|
182
216
|
OPTIONAL { ?work cdm:work_has_resource-type ?type . }
|
|
183
217
|
OPTIONAL { ?work cdm:work_date_document ?date . }
|
|
@@ -187,7 +221,7 @@ SELECT DISTINCT ?work ?celexNumber ?type ?date ?title WHERE {
|
|
|
187
221
|
?expr cdm:expression_title ?title .
|
|
188
222
|
}
|
|
189
223
|
${filters.join('\n ')}
|
|
190
|
-
} ORDER BY DESC(?
|
|
224
|
+
} GROUP BY ?work ORDER BY DESC(?docDate) LIMIT ${input.limit} OFFSET ${input.offset}`;
|
|
191
225
|
const queryEcho = {
|
|
192
226
|
...(input.case_number ? { case_number: input.case_number } : {}),
|
|
193
227
|
...(celexFragment ? { celex_fragment: celexFragment } : {}),
|
|
@@ -215,15 +249,15 @@ SELECT DISTINCT ?work ?celexNumber ?type ?date ?title WHERE {
|
|
|
215
249
|
const cases = bindings.map((b) => {
|
|
216
250
|
const c = {
|
|
217
251
|
work_uri: CellarSparqlService.bindingValue(b, 'work') ?? '',
|
|
218
|
-
celex_number: CellarSparqlService.bindingValue(b, '
|
|
252
|
+
celex_number: CellarSparqlService.bindingValue(b, 'celex') ?? '',
|
|
219
253
|
};
|
|
220
|
-
const
|
|
221
|
-
if (
|
|
222
|
-
c.resource_type =
|
|
223
|
-
const date = CellarSparqlService.bindingValue(b, '
|
|
254
|
+
const resourceType = resolveResourceTypeLabels(CellarSparqlService.bindingValue(b, 'types'));
|
|
255
|
+
if (resourceType)
|
|
256
|
+
c.resource_type = resourceType;
|
|
257
|
+
const date = CellarSparqlService.bindingValue(b, 'docDate');
|
|
224
258
|
if (date)
|
|
225
259
|
c.date = date;
|
|
226
|
-
const title = CellarSparqlService.bindingValue(b, '
|
|
260
|
+
const title = CellarSparqlService.bindingValue(b, 'docTitle');
|
|
227
261
|
if (title)
|
|
228
262
|
c.title = title;
|
|
229
263
|
return c;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"eurlex-get-cases.tool.js","sourceRoot":"","sources":["../../../../src/mcp-server/tools/definitions/eurlex-get-cases.tool.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,IAAI,EAAE,CAAC,EAAE,MAAM,wBAAwB,CAAC;AACjD,OAAO,EAAE,gBAAgB,EAAE,MAAM,+BAA+B,CAAC;AACjE,OAAO,
|
|
1
|
+
{"version":3,"file":"eurlex-get-cases.tool.js","sourceRoot":"","sources":["../../../../src/mcp-server/tools/definitions/eurlex-get-cases.tool.ts"],"names":[],"mappings":"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"}
|
|
@@ -8,8 +8,8 @@ export declare const eurlex_lookup_celex: import("@cyanheads/mcp-ts-core").ToolD
|
|
|
8
8
|
identifier: z.ZodString;
|
|
9
9
|
identifier_type: z.ZodDefault<z.ZodEnum<{
|
|
10
10
|
auto: "auto";
|
|
11
|
-
eli: "eli";
|
|
12
11
|
celex: "celex";
|
|
12
|
+
eli: "eli";
|
|
13
13
|
}>>;
|
|
14
14
|
}, z.core.$strip>, z.ZodObject<{
|
|
15
15
|
found: z.ZodBoolean;
|
|
@@ -6,7 +6,7 @@ import { z } from '@cyanheads/mcp-ts-core';
|
|
|
6
6
|
import { JsonRpcErrorCode } from '@cyanheads/mcp-ts-core/errors';
|
|
7
7
|
export declare const eurlex_search_documents: import("@cyanheads/mcp-ts-core").ToolDefinition<z.ZodObject<{
|
|
8
8
|
keyword: z.ZodOptional<z.ZodString>;
|
|
9
|
-
document_type: z.ZodOptional<z.ZodEnum<{
|
|
9
|
+
document_type: z.ZodOptional<z.ZodUnion<readonly [z.ZodLiteral<"">, z.ZodEnum<{
|
|
10
10
|
REG: "REG";
|
|
11
11
|
DIR: "DIR";
|
|
12
12
|
DEC: "DEC";
|
|
@@ -15,10 +15,10 @@ export declare const eurlex_search_documents: import("@cyanheads/mcp-ts-core").T
|
|
|
15
15
|
OPIN_AG: "OPIN_AG";
|
|
16
16
|
PROP: "PROP";
|
|
17
17
|
REC: "REC";
|
|
18
|
-
}>>;
|
|
19
|
-
date_from: z.ZodOptional<z.ZodString
|
|
20
|
-
date_to: z.ZodOptional<z.ZodString
|
|
21
|
-
eurovoc_concept: z.ZodOptional<z.ZodString
|
|
18
|
+
}>]>>;
|
|
19
|
+
date_from: z.ZodOptional<z.ZodUnion<readonly [z.ZodLiteral<"">, z.ZodString]>>;
|
|
20
|
+
date_to: z.ZodOptional<z.ZodUnion<readonly [z.ZodLiteral<"">, z.ZodString]>>;
|
|
21
|
+
eurovoc_concept: z.ZodOptional<z.ZodUnion<readonly [z.ZodLiteral<"">, z.ZodString]>>;
|
|
22
22
|
author_institution: z.ZodOptional<z.ZodString>;
|
|
23
23
|
in_force: z.ZodOptional<z.ZodBoolean>;
|
|
24
24
|
offset: z.ZodDefault<z.ZodNumber>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"eurlex-search-documents.tool.d.ts","sourceRoot":"","sources":["../../../../src/mcp-server/tools/definitions/eurlex-search-documents.tool.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAQ,CAAC,EAAE,MAAM,wBAAwB,CAAC;AACjD,OAAO,EAAE,gBAAgB,EAAE,MAAM,+BAA+B,CAAC;
|
|
1
|
+
{"version":3,"file":"eurlex-search-documents.tool.d.ts","sourceRoot":"","sources":["../../../../src/mcp-server/tools/definitions/eurlex-search-documents.tool.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAQ,CAAC,EAAE,MAAM,wBAAwB,CAAC;AACjD,OAAO,EAAE,gBAAgB,EAAE,MAAM,+BAA+B,CAAC;AAsBjE,eAAO,MAAM,uBAAuB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;cAgVlC,CAAC"}
|
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
*/
|
|
5
5
|
import { tool, z } from '@cyanheads/mcp-ts-core';
|
|
6
6
|
import { JsonRpcErrorCode } from '@cyanheads/mcp-ts-core/errors';
|
|
7
|
-
import { ENG_LANGUAGE_URI,
|
|
7
|
+
import { ENG_LANGUAGE_URI, resolveResourceTypeLabels, } from '../../../services/cellar-sparql/cdm-labels.js';
|
|
8
8
|
import { CellarSparqlService, getCellarSparqlService, } from '../../../services/cellar-sparql/cellar-sparql-service.js';
|
|
9
9
|
/** CDM resource type URIs for common document categories. */
|
|
10
10
|
const DOCUMENT_TYPE_URIS = {
|
|
@@ -33,29 +33,54 @@ export const eurlex_search_documents = tool('eurlex_search_documents', {
|
|
|
33
33
|
.optional()
|
|
34
34
|
.describe('Keyword to match against document titles. Single dominant word recommended; multi-word phrase uses substring match.'),
|
|
35
35
|
document_type: z
|
|
36
|
-
.
|
|
36
|
+
.union([
|
|
37
|
+
z.literal(''),
|
|
38
|
+
z
|
|
39
|
+
.enum(['REG', 'DIR', 'DEC', 'TREATY', 'JUDG', 'OPIN_AG', 'PROP', 'REC'])
|
|
40
|
+
.describe('Document type: REG=Regulation, DIR=Directive, DEC=Decision, TREATY=Treaty, ' +
|
|
41
|
+
'JUDG=Judgment, OPIN_AG=AG Opinion, PROP=Proposal, REC=Recommendation.'),
|
|
42
|
+
])
|
|
37
43
|
.optional()
|
|
38
44
|
.describe('Document type filter: REG=Regulation, DIR=Directive, DEC=Decision, TREATY=Treaty, ' +
|
|
39
|
-
'JUDG=Judgment, OPIN_AG=AG Opinion, PROP=Proposal, REC=Recommendation.'
|
|
45
|
+
'JUDG=Judgment, OPIN_AG=AG Opinion, PROP=Proposal, REC=Recommendation. ' +
|
|
46
|
+
'Leave blank or omit to search all document types.'),
|
|
40
47
|
date_from: z
|
|
41
|
-
.
|
|
42
|
-
.
|
|
48
|
+
.union([
|
|
49
|
+
z.literal(''),
|
|
50
|
+
z
|
|
51
|
+
.string()
|
|
52
|
+
.regex(/^\d{4}-\d{2}-\d{2}$/)
|
|
53
|
+
.describe('Start date in ISO 8601 format (YYYY-MM-DD).'),
|
|
54
|
+
])
|
|
43
55
|
.optional()
|
|
44
|
-
.describe('Start of date range in ISO 8601 format (YYYY-MM-DD). Matches document date.'
|
|
56
|
+
.describe('Start of date range in ISO 8601 format (YYYY-MM-DD). Matches document date. ' +
|
|
57
|
+
'Leave blank or omit for no lower bound.'),
|
|
45
58
|
date_to: z
|
|
46
|
-
.
|
|
47
|
-
.
|
|
59
|
+
.union([
|
|
60
|
+
z.literal(''),
|
|
61
|
+
z
|
|
62
|
+
.string()
|
|
63
|
+
.regex(/^\d{4}-\d{2}-\d{2}$/)
|
|
64
|
+
.describe('End date in ISO 8601 format (YYYY-MM-DD).'),
|
|
65
|
+
])
|
|
48
66
|
.optional()
|
|
49
|
-
.describe('End of date range in ISO 8601 format (YYYY-MM-DD). Matches document date.'
|
|
67
|
+
.describe('End of date range in ISO 8601 format (YYYY-MM-DD). Matches document date. ' +
|
|
68
|
+
'Leave blank or omit for no upper bound.'),
|
|
50
69
|
eurovoc_concept: z
|
|
51
|
-
.
|
|
52
|
-
.
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
70
|
+
.union([
|
|
71
|
+
z.literal(''),
|
|
72
|
+
z
|
|
73
|
+
.string()
|
|
74
|
+
.startsWith('http')
|
|
75
|
+
.refine((v) => !v.includes('>') && !v.includes('"') && !v.includes(' '), {
|
|
76
|
+
message: 'EuroVoc URI must be a valid http URI with no angle brackets, quotes, or spaces.',
|
|
77
|
+
})
|
|
78
|
+
.describe('EuroVoc concept URI (e.g. http://eurovoc.europa.eu/2828).'),
|
|
79
|
+
])
|
|
56
80
|
.optional()
|
|
57
81
|
.describe('EuroVoc concept URI to filter by subject (e.g. http://eurovoc.europa.eu/2828). ' +
|
|
58
|
-
'Obtain concept URIs from eurlex_browse_subjects first.'
|
|
82
|
+
'Obtain concept URIs from eurlex_browse_subjects first. ' +
|
|
83
|
+
'Leave blank or omit for no subject filter.'),
|
|
59
84
|
author_institution: z
|
|
60
85
|
.string()
|
|
61
86
|
.optional()
|
|
@@ -88,7 +113,9 @@ export const eurlex_search_documents = tool('eurlex_search_documents', {
|
|
|
88
113
|
resource_type: z
|
|
89
114
|
.string()
|
|
90
115
|
.optional()
|
|
91
|
-
.describe('Human-readable document type label (e.g. "Regulation", "Directive").
|
|
116
|
+
.describe('Human-readable document type label (e.g. "Regulation", "Directive"). ' +
|
|
117
|
+
'Works classified under several resource-types (e.g. corrigenda) list all labels, comma-separated. ' +
|
|
118
|
+
'Absent for some older works.'),
|
|
92
119
|
date: z.string().optional().describe('Document date in ISO 8601 format (YYYY-MM-DD).'),
|
|
93
120
|
title: z
|
|
94
121
|
.string()
|
|
@@ -191,8 +218,20 @@ export const eurlex_search_documents = tool('eurlex_search_documents', {
|
|
|
191
218
|
// ?expr cdm:expression_belongs_to_work ?work (inverse of cdm:work_has_expression)
|
|
192
219
|
// ?expr cdm:expression_uses_language <.../ENG>
|
|
193
220
|
// ?expr cdm:expression_title ?title
|
|
221
|
+
//
|
|
222
|
+
// GROUP BY ?work collapses each work to one row. A work can carry several
|
|
223
|
+
// cdm:work_has_resource-type values (corrigenda hold 2–3); without grouping these
|
|
224
|
+
// cross-product into duplicate rows that SELECT DISTINCT cannot merge (?type
|
|
225
|
+
// differs per row), and LIMIT/OFFSET would then page over raw rows rather than
|
|
226
|
+
// works. GROUP_CONCAT gathers every resource-type URI per work; SAMPLE picks the
|
|
227
|
+
// single-valued display fields. Aggregate aliases are renamed (?celex/?docDate/
|
|
228
|
+
// ?docTitle) because a projected AS-variable cannot reuse a name already in scope.
|
|
194
229
|
const sparql = `
|
|
195
|
-
SELECT
|
|
230
|
+
SELECT ?work
|
|
231
|
+
(SAMPLE(?celexNumber) AS ?celex)
|
|
232
|
+
(GROUP_CONCAT(DISTINCT STR(?type); SEPARATOR=" ") AS ?types)
|
|
233
|
+
(SAMPLE(?date) AS ?docDate)
|
|
234
|
+
(SAMPLE(?title) AS ?docTitle) WHERE {
|
|
196
235
|
?work cdm:resource_legal_id_celex ?celexNumber .
|
|
197
236
|
OPTIONAL { ?work cdm:work_has_resource-type ?type . }
|
|
198
237
|
OPTIONAL { ?work cdm:work_date_document ?date . }
|
|
@@ -205,7 +244,7 @@ SELECT DISTINCT ?work ?celexNumber ?type ?date ?title WHERE {
|
|
|
205
244
|
${authorClause}
|
|
206
245
|
${inForceClause}
|
|
207
246
|
${filters.join('\n ')}
|
|
208
|
-
} ORDER BY DESC(?
|
|
247
|
+
} GROUP BY ?work ORDER BY DESC(?docDate) LIMIT ${input.limit} OFFSET ${input.offset}`;
|
|
209
248
|
const queryEcho = {
|
|
210
249
|
...(input.keyword ? { keyword: input.keyword } : {}),
|
|
211
250
|
...(input.document_type ? { document_type: input.document_type } : {}),
|
|
@@ -231,15 +270,15 @@ SELECT DISTINCT ?work ?celexNumber ?type ?date ?title WHERE {
|
|
|
231
270
|
const documents = bindings.map((b) => {
|
|
232
271
|
const doc = {
|
|
233
272
|
work_uri: CellarSparqlService.bindingValue(b, 'work') ?? '',
|
|
234
|
-
celex_number: CellarSparqlService.bindingValue(b, '
|
|
273
|
+
celex_number: CellarSparqlService.bindingValue(b, 'celex') ?? '',
|
|
235
274
|
};
|
|
236
|
-
const
|
|
237
|
-
if (
|
|
238
|
-
doc.resource_type =
|
|
239
|
-
const date = CellarSparqlService.bindingValue(b, '
|
|
275
|
+
const resourceType = resolveResourceTypeLabels(CellarSparqlService.bindingValue(b, 'types'));
|
|
276
|
+
if (resourceType)
|
|
277
|
+
doc.resource_type = resourceType;
|
|
278
|
+
const date = CellarSparqlService.bindingValue(b, 'docDate');
|
|
240
279
|
if (date)
|
|
241
280
|
doc.date = date;
|
|
242
|
-
const title = CellarSparqlService.bindingValue(b, '
|
|
281
|
+
const title = CellarSparqlService.bindingValue(b, 'docTitle');
|
|
243
282
|
if (title)
|
|
244
283
|
doc.title = title;
|
|
245
284
|
return doc;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"eurlex-search-documents.tool.js","sourceRoot":"","sources":["../../../../src/mcp-server/tools/definitions/eurlex-search-documents.tool.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,IAAI,EAAE,CAAC,EAAE,MAAM,wBAAwB,CAAC;AACjD,OAAO,EAAE,gBAAgB,EAAE,MAAM,+BAA+B,CAAC;AACjE,OAAO,
|
|
1
|
+
{"version":3,"file":"eurlex-search-documents.tool.js","sourceRoot":"","sources":["../../../../src/mcp-server/tools/definitions/eurlex-search-documents.tool.ts"],"names":[],"mappings":"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"}
|
|
@@ -22,17 +22,17 @@ export declare const allToolDefinitions: (import("@cyanheads/mcp-ts-core").ToolD
|
|
|
22
22
|
}], undefined> | import("@cyanheads/mcp-ts-core").ToolDefinition<import("zod").ZodObject<{
|
|
23
23
|
case_number: import("zod").ZodOptional<import("zod").ZodString>;
|
|
24
24
|
keyword: import("zod").ZodOptional<import("zod").ZodString>;
|
|
25
|
-
court: import("zod").ZodOptional<import("zod").ZodEnum<{
|
|
25
|
+
court: import("zod").ZodOptional<import("zod").ZodUnion<readonly [import("zod").ZodLiteral<"">, import("zod").ZodEnum<{
|
|
26
26
|
CJEU: "CJEU";
|
|
27
27
|
GC: "GC";
|
|
28
|
-
}>>;
|
|
29
|
-
case_type: import("zod").ZodOptional<import("zod").ZodEnum<{
|
|
28
|
+
}>]>>;
|
|
29
|
+
case_type: import("zod").ZodOptional<import("zod").ZodUnion<readonly [import("zod").ZodLiteral<"">, import("zod").ZodEnum<{
|
|
30
30
|
judgment: "judgment";
|
|
31
31
|
order: "order";
|
|
32
32
|
ag_opinion: "ag_opinion";
|
|
33
|
-
}>>;
|
|
34
|
-
date_from: import("zod").ZodOptional<import("zod").ZodString
|
|
35
|
-
date_to: import("zod").ZodOptional<import("zod").ZodString
|
|
33
|
+
}>]>>;
|
|
34
|
+
date_from: import("zod").ZodOptional<import("zod").ZodUnion<readonly [import("zod").ZodLiteral<"">, import("zod").ZodString]>>;
|
|
35
|
+
date_to: import("zod").ZodOptional<import("zod").ZodUnion<readonly [import("zod").ZodLiteral<"">, import("zod").ZodString]>>;
|
|
36
36
|
offset: import("zod").ZodDefault<import("zod").ZodNumber>;
|
|
37
37
|
limit: import("zod").ZodDefault<import("zod").ZodNumber>;
|
|
38
38
|
}, import("zod/v4/core").$strip>, import("zod").ZodObject<{
|
|
@@ -146,8 +146,8 @@ export declare const allToolDefinitions: (import("@cyanheads/mcp-ts-core").ToolD
|
|
|
146
146
|
identifier: import("zod").ZodString;
|
|
147
147
|
identifier_type: import("zod").ZodDefault<import("zod").ZodEnum<{
|
|
148
148
|
auto: "auto";
|
|
149
|
-
eli: "eli";
|
|
150
149
|
celex: "celex";
|
|
150
|
+
eli: "eli";
|
|
151
151
|
}>>;
|
|
152
152
|
}, import("zod/v4/core").$strip>, import("zod").ZodObject<{
|
|
153
153
|
found: import("zod").ZodBoolean;
|
|
@@ -189,7 +189,7 @@ export declare const allToolDefinitions: (import("@cyanheads/mcp-ts-core").ToolD
|
|
|
189
189
|
readonly recovery: "Add more specific FILTER conditions, reduce the scope, or use LIMIT with a smaller value.";
|
|
190
190
|
}], undefined> | import("@cyanheads/mcp-ts-core").ToolDefinition<import("zod").ZodObject<{
|
|
191
191
|
keyword: import("zod").ZodOptional<import("zod").ZodString>;
|
|
192
|
-
document_type: import("zod").ZodOptional<import("zod").ZodEnum<{
|
|
192
|
+
document_type: import("zod").ZodOptional<import("zod").ZodUnion<readonly [import("zod").ZodLiteral<"">, import("zod").ZodEnum<{
|
|
193
193
|
REG: "REG";
|
|
194
194
|
DIR: "DIR";
|
|
195
195
|
DEC: "DEC";
|
|
@@ -198,10 +198,10 @@ export declare const allToolDefinitions: (import("@cyanheads/mcp-ts-core").ToolD
|
|
|
198
198
|
OPIN_AG: "OPIN_AG";
|
|
199
199
|
PROP: "PROP";
|
|
200
200
|
REC: "REC";
|
|
201
|
-
}>>;
|
|
202
|
-
date_from: import("zod").ZodOptional<import("zod").ZodString
|
|
203
|
-
date_to: import("zod").ZodOptional<import("zod").ZodString
|
|
204
|
-
eurovoc_concept: import("zod").ZodOptional<import("zod").ZodString
|
|
201
|
+
}>]>>;
|
|
202
|
+
date_from: import("zod").ZodOptional<import("zod").ZodUnion<readonly [import("zod").ZodLiteral<"">, import("zod").ZodString]>>;
|
|
203
|
+
date_to: import("zod").ZodOptional<import("zod").ZodUnion<readonly [import("zod").ZodLiteral<"">, import("zod").ZodString]>>;
|
|
204
|
+
eurovoc_concept: import("zod").ZodOptional<import("zod").ZodUnion<readonly [import("zod").ZodLiteral<"">, import("zod").ZodString]>>;
|
|
205
205
|
author_institution: import("zod").ZodOptional<import("zod").ZodString>;
|
|
206
206
|
in_force: import("zod").ZodOptional<import("zod").ZodBoolean>;
|
|
207
207
|
offset: import("zod").ZodDefault<import("zod").ZodNumber>;
|
|
@@ -14,6 +14,15 @@ export declare const ENG_LANGUAGE_URI = "http://publications.europa.eu/resource/
|
|
|
14
14
|
export declare const RESOURCE_TYPE_LABELS: Record<string, string>;
|
|
15
15
|
/** Resolve a CDM resource-type URI to a human-readable label. Falls back to last path segment. */
|
|
16
16
|
export declare function resolveResourceTypeLabel(uri: string): string;
|
|
17
|
+
/**
|
|
18
|
+
* Resolve a whitespace-separated list of CDM resource-type URIs into a single
|
|
19
|
+
* human-readable label string. Search queries collapse each work's resource-types
|
|
20
|
+
* into one row via `GROUP_CONCAT(DISTINCT STR(?type))`, so a work carrying several
|
|
21
|
+
* types (e.g. a corrigendum classified as both CORRIGENDUM and a base type) arrives
|
|
22
|
+
* as space-separated URIs. Each URI is resolved, de-duplicated, sorted for stable
|
|
23
|
+
* output, and joined with ", ". Returns undefined when no type URI is present.
|
|
24
|
+
*/
|
|
25
|
+
export declare function resolveResourceTypeLabels(concatenated: string | undefined): string | undefined;
|
|
17
26
|
/**
|
|
18
27
|
* CDM corporate-body URI → human-readable institution name.
|
|
19
28
|
* Falls back to the last URI path segment when not in the map.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cdm-labels.d.ts","sourceRoot":"","sources":["../../../src/services/cellar-sparql/cdm-labels.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,mEAAmE;AACnE,eAAO,MAAM,gBAAgB,kEAAkE,CAAC;AAEhG;;;;GAIG;AACH,eAAO,MAAM,oBAAoB,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAmBvD,CAAC;AAEF,kGAAkG;AAClG,wBAAgB,wBAAwB,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAE5D;AAED;;;GAGG;AACH,eAAO,MAAM,qBAAqB,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAgDxD,CAAC;AAEF,8GAA8G;AAC9G,wBAAgB,yBAAyB,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAE7D"}
|
|
1
|
+
{"version":3,"file":"cdm-labels.d.ts","sourceRoot":"","sources":["../../../src/services/cellar-sparql/cdm-labels.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,mEAAmE;AACnE,eAAO,MAAM,gBAAgB,kEAAkE,CAAC;AAEhG;;;;GAIG;AACH,eAAO,MAAM,oBAAoB,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAmBvD,CAAC;AAEF,kGAAkG;AAClG,wBAAgB,wBAAwB,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAE5D;AAED;;;;;;;GAOG;AACH,wBAAgB,yBAAyB,CAAC,YAAY,EAAE,MAAM,GAAG,SAAS,GAAG,MAAM,GAAG,SAAS,CAM9F;AAED;;;GAGG;AACH,eAAO,MAAM,qBAAqB,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAgDxD,CAAC;AAEF,8GAA8G;AAC9G,wBAAgB,yBAAyB,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAE7D"}
|
|
@@ -33,6 +33,22 @@ export const RESOURCE_TYPE_LABELS = {
|
|
|
33
33
|
export function resolveResourceTypeLabel(uri) {
|
|
34
34
|
return RESOURCE_TYPE_LABELS[uri] ?? uri.split('/').pop() ?? uri;
|
|
35
35
|
}
|
|
36
|
+
/**
|
|
37
|
+
* Resolve a whitespace-separated list of CDM resource-type URIs into a single
|
|
38
|
+
* human-readable label string. Search queries collapse each work's resource-types
|
|
39
|
+
* into one row via `GROUP_CONCAT(DISTINCT STR(?type))`, so a work carrying several
|
|
40
|
+
* types (e.g. a corrigendum classified as both CORRIGENDUM and a base type) arrives
|
|
41
|
+
* as space-separated URIs. Each URI is resolved, de-duplicated, sorted for stable
|
|
42
|
+
* output, and joined with ", ". Returns undefined when no type URI is present.
|
|
43
|
+
*/
|
|
44
|
+
export function resolveResourceTypeLabels(concatenated) {
|
|
45
|
+
if (!concatenated)
|
|
46
|
+
return;
|
|
47
|
+
const labels = [
|
|
48
|
+
...new Set(concatenated.split(/\s+/).filter(Boolean).map(resolveResourceTypeLabel)),
|
|
49
|
+
].sort();
|
|
50
|
+
return labels.length > 0 ? labels.join(', ') : undefined;
|
|
51
|
+
}
|
|
36
52
|
/**
|
|
37
53
|
* CDM corporate-body URI → human-readable institution name.
|
|
38
54
|
* Falls back to the last URI path segment when not in the map.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cdm-labels.js","sourceRoot":"","sources":["../../../src/services/cellar-sparql/cdm-labels.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,mEAAmE;AACnE,MAAM,CAAC,MAAM,gBAAgB,GAAG,+DAA+D,CAAC;AAEhG;;;;GAIG;AACH,MAAM,CAAC,MAAM,oBAAoB,GAA2B;IAC1D,oEAAoE,EAAE,YAAY;IAClF,oEAAoE,EAAE,WAAW;IACjF,oEAAoE,EAAE,UAAU;IAChF,uEAAuE,EAAE,QAAQ;IACjF,qEAAqE,EAAE,UAAU;IACjF,sEAAsE,EAAE,OAAO;IAC/E,wEAAwE,EAAE,YAAY;IACtF,uEAAuE,EAAE,YAAY;IACrF,wEAAwE,EAAE,SAAS;IACnF,uEAAuE,EAAE,QAAQ;IACjF,yEAAyE,EAAE,UAAU;IACrF,yEAAyE,EAAE,gBAAgB;IAC3F,oEAAoE,EAAE,YAAY;IAClF,kFAAkF,EAChF,yBAAyB;IAC3B,yEAAyE,EACvE,yBAAyB;IAC3B,wEAAwE,EAAE,sBAAsB;CACjG,CAAC;AAEF,kGAAkG;AAClG,MAAM,UAAU,wBAAwB,CAAC,GAAW;IAClD,OAAO,oBAAoB,CAAC,GAAG,CAAC,IAAI,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,IAAI,GAAG,CAAC;AAClE,CAAC;AAED;;;GAGG;AACH,MAAM,CAAC,MAAM,qBAAqB,GAA2B;IAC3D,oEAAoE,EAAE,qBAAqB;IAC3F,wEAAwE,EAAE,mBAAmB;IAC7F,qEAAqE,EAAE,qBAAqB;IAC5F,uEAAuE,EACrE,4BAA4B;IAC9B,qEAAqE,EAAE,uBAAuB;IAC9F,qEAAqE,EAAE,0BAA0B;IACjG,qEAAqE,EACnE,4BAA4B;IAC9B,qEAAqE,EACnE,wCAAwC;IAC1C,qEAAqE,EAAE,0BAA0B;IACjG,yEAAyE,EAAE,SAAS;IACpF,qEAAqE,EAAE,yBAAyB;IAChG,sEAAsE,EACpE,2CAA2C;IAC7C,qEAAqE,EACnE,4BAA4B;IAC9B,uEAAuE,EACrE,wDAAwD;IAC1D,sEAAsE,EACpE,oDAAoD;IACtD,qEAAqE,EACnE,6BAA6B;IAC/B,sEAAsE,EACpE,uCAAuC;IACzC,sEAAsE,EACpE,gCAAgC;IAClC,qEAAqE,EACnE,2BAA2B;IAC7B,sEAAsE,EACpE,2BAA2B;IAC7B,yEAAyE,EAAE,SAAS;IACpF,uEAAuE,EACrE,6CAA6C;IAC/C,qEAAqE,EACnE,8BAA8B;IAChC,sEAAsE,EACpE,gCAAgC;IAClC,uEAAuE,EAAE,UAAU;IACnF,sEAAsE,EAAE,YAAY;IACpF,sEAAsE,EAAE,oBAAoB;IAC5F,uEAAuE,EACrE,2BAA2B;IAC7B,sEAAsE,EAAE,gBAAgB;IACxF,uEAAuE,EAAE,wBAAwB;IACjG,uEAAuE,EAAE,UAAU;CACpF,CAAC;AAEF,8GAA8G;AAC9G,MAAM,UAAU,yBAAyB,CAAC,GAAW;IACnD,OAAO,qBAAqB,CAAC,GAAG,CAAC,IAAI,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,IAAI,GAAG,CAAC;AACnE,CAAC"}
|
|
1
|
+
{"version":3,"file":"cdm-labels.js","sourceRoot":"","sources":["../../../src/services/cellar-sparql/cdm-labels.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@cyanheads/eur-lex-mcp-server",
|
|
3
|
-
"version": "0.2.
|
|
3
|
+
"version": "0.2.1",
|
|
4
4
|
"mcpName": "io.github.cyanheads/eur-lex-mcp-server",
|
|
5
5
|
"description": "Search EU legislation, CJEU case law, and treaties; traverse the CELLAR relationship graph; resolve EuroVoc concepts via MCP. STDIO or Streamable HTTP.",
|
|
6
6
|
"type": "module",
|
package/server.json
CHANGED
|
@@ -6,7 +6,7 @@
|
|
|
6
6
|
"url": "https://github.com/cyanheads/eur-lex-mcp-server",
|
|
7
7
|
"source": "github"
|
|
8
8
|
},
|
|
9
|
-
"version": "0.2.
|
|
9
|
+
"version": "0.2.1",
|
|
10
10
|
"remotes": [
|
|
11
11
|
{
|
|
12
12
|
"type": "streamable-http",
|
|
@@ -19,7 +19,7 @@
|
|
|
19
19
|
"registryBaseUrl": "https://registry.npmjs.org",
|
|
20
20
|
"identifier": "@cyanheads/eur-lex-mcp-server",
|
|
21
21
|
"runtimeHint": "bun",
|
|
22
|
-
"version": "0.2.
|
|
22
|
+
"version": "0.2.1",
|
|
23
23
|
"packageArguments": [
|
|
24
24
|
{
|
|
25
25
|
"type": "positional",
|
|
@@ -76,7 +76,7 @@
|
|
|
76
76
|
"registryBaseUrl": "https://registry.npmjs.org",
|
|
77
77
|
"identifier": "@cyanheads/eur-lex-mcp-server",
|
|
78
78
|
"runtimeHint": "bun",
|
|
79
|
-
"version": "0.2.
|
|
79
|
+
"version": "0.2.1",
|
|
80
80
|
"packageArguments": [
|
|
81
81
|
{
|
|
82
82
|
"type": "positional",
|