@matematicsolutions/mcp-eu-sparql 1.1.1 → 1.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/README.md +62 -40
- package/dist/format.d.ts +52 -0
- package/dist/format.d.ts.map +1 -0
- package/dist/format.js +109 -0
- package/dist/format.js.map +1 -0
- package/dist/index.js +180 -179
- package/dist/index.js.map +1 -1
- package/dist/queries.d.ts +9 -0
- package/dist/queries.d.ts.map +1 -0
- package/dist/queries.js +147 -0
- package/dist/queries.js.map +1 -0
- package/package.json +13 -3
package/README.md
CHANGED
|
@@ -1,41 +1,71 @@
|
|
|
1
1
|
# mcp-eu-sparql
|
|
2
|
+
|
|
3
|
+
## Installation (one command)
|
|
4
|
+
|
|
5
|
+
Published on npm + the MCP Registry (`io.github.matematicsolutions/mcp-eu-sparql`). Run without cloning:
|
|
6
|
+
|
|
7
|
+
```bash
|
|
8
|
+
npx -y @matematicsolutions/mcp-eu-sparql
|
|
9
|
+
```
|
|
10
|
+
|
|
11
|
+
MCP client configuration (stdio):
|
|
12
|
+
|
|
13
|
+
```json
|
|
14
|
+
{ "mcpServers": { "mcp-eu-sparql": { "command": "npx", "args": ["-y", "@matematicsolutions/mcp-eu-sparql"] } } }
|
|
15
|
+
```
|
|
16
|
+
|
|
17
|
+
(Building from source - below.)
|
|
18
|
+
|
|
2
19
|
[](https://modelcontextprotocol.io) [](./LICENSE) [](https://nodejs.org)
|
|
3
20
|
|
|
4
|
-
MCP server
|
|
5
|
-
(Cellar / EUR-Lex).
|
|
21
|
+
MCP server for EU law and CJEU case law via the Publications Office SPARQL
|
|
22
|
+
endpoint (Cellar / EUR-Lex), plus national data-protection authority decisions via GDPRhub.
|
|
6
23
|
|
|
7
|
-
|
|
24
|
+
CJEU corpus in Cellar (SPARQL COUNT, 2026-07-08): **34,261 judgments (JUDG),
|
|
25
|
+
8,362 orders (ORDER), 14,480 Advocate-General opinions (OPIN_AG)** -
|
|
26
|
+
57,103 judgments and opinions in total, each with CELEX + ECLI.
|
|
8
27
|
|
|
9
|
-
|
|
10
|
-
(np. `32016R0679` = RODO).
|
|
11
|
-
- **`search_by_date_range(date_from, date_to, document_type?, lang?, limit?)`**
|
|
12
|
-
— akty z zakresu dat, opcjonalnie zawęzone do typu (REG / DIR / DEC / RECO / OPIN).
|
|
13
|
-
- **`search_cjeu(date_from?, date_to?, lang?, limit?)`** — wyroki (JUDG)
|
|
14
|
-
i postanowienia (ORDER) Trybunału Sprawiedliwości UE.
|
|
28
|
+
## Tools
|
|
15
29
|
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
30
|
+
- **`search_by_celex(celex, lang?)`** - act or judgment by CELEX number
|
|
31
|
+
(e.g. `32016R0679` = GDPR, `62018CJ0311` = Schrems II).
|
|
32
|
+
- **`search_by_date_range(date_from, date_to, document_type?, lang?, limit?)`**
|
|
33
|
+
- acts within a date range, optionally narrowed to a type (REG / DIR / DEC / RECO / OPIN).
|
|
34
|
+
- **`search_cjeu(query?, date_from?, date_to?, document_type?, lang?, limit?)`** -
|
|
35
|
+
judgments (JUDG), orders (ORDER) and Advocate-General opinions (OPIN_AG)
|
|
36
|
+
of the Court of Justice of the EU; optional keyword in the title (parties to the case,
|
|
37
|
+
case number, keywords of the judgment).
|
|
38
|
+
- **`search_cjeu_by_ecli(ecli, lang?)`** - CJEU judgment by ECLI
|
|
39
|
+
identifier (e.g. `ECLI:EU:C:2020:559` = Schrems II).
|
|
40
|
+
- **`search_gdprhub(query, limit?)`** - full-text search in
|
|
41
|
+
[GDPRhub](https://gdprhub.eu) (the noyb project wiki): decisions of national
|
|
42
|
+
data-protection authorities across the EU + commentary on GDPR articles. **Content license:
|
|
43
|
+
CC BY-NC-SA 4.0** - flagged in the `license` field of every citation.
|
|
44
|
+
|
|
45
|
+
Every response includes `structuredContent.citations` with the fields `title`, `url`,
|
|
46
|
+
`celex?`, `ecli?`, `publication_date?`, `document_type?`, `snippet?`, `license?` -
|
|
47
|
+
Patron reads this field and renders it in the UI panel as the "EU legal acts (EUR-Lex / CJEU)" section.
|
|
19
48
|
|
|
20
49
|
## Stack
|
|
21
50
|
|
|
22
51
|
- Node 18+
|
|
23
52
|
- `@modelcontextprotocol/sdk`
|
|
24
|
-
- Stdio transport (
|
|
25
|
-
- Backend: HTTP POST
|
|
26
|
-
|
|
53
|
+
- Stdio transport (like `mcp-saos`)
|
|
54
|
+
- Backend: HTTP POST to `https://publications.europa.eu/webapi/rdf/sparql`
|
|
55
|
+
with `format=application/sparql-results+json`; GET to `https://gdprhub.eu/api.php`
|
|
56
|
+
(MediaWiki API)
|
|
27
57
|
|
|
28
|
-
## Build +
|
|
58
|
+
## Build + run
|
|
29
59
|
|
|
30
60
|
```bash
|
|
31
61
|
npm install
|
|
32
62
|
npm run build
|
|
33
|
-
node dist/index.js #
|
|
63
|
+
node dist/index.js # starts the server on stdio
|
|
34
64
|
```
|
|
35
65
|
|
|
36
|
-
##
|
|
66
|
+
## Wiring into Patron
|
|
37
67
|
|
|
38
|
-
|
|
68
|
+
In `patron/backend/mcp-servers.json`:
|
|
39
69
|
|
|
40
70
|
```json
|
|
41
71
|
[
|
|
@@ -43,46 +73,38 @@ W `patron/backend/mcp-servers.json`:
|
|
|
43
73
|
"name": "saos",
|
|
44
74
|
"transport": "stdio",
|
|
45
75
|
"command": "node",
|
|
46
|
-
"args": ["C:/Users/<
|
|
76
|
+
"args": ["C:/Users/<YOUR-USER>/mcp-saos/dist/index.js"]
|
|
47
77
|
},
|
|
48
78
|
{
|
|
49
79
|
"name": "eu-sparql",
|
|
50
80
|
"transport": "stdio",
|
|
51
81
|
"command": "node",
|
|
52
|
-
"args": ["C:/Users/<
|
|
82
|
+
"args": ["C:/Users/<YOUR-USER>/mcp-eu-sparql/dist/index.js"]
|
|
53
83
|
}
|
|
54
84
|
]
|
|
55
85
|
```
|
|
56
86
|
|
|
57
|
-
##
|
|
87
|
+
## Tests
|
|
58
88
|
|
|
59
89
|
```bash
|
|
60
|
-
#
|
|
61
|
-
|
|
62
|
-
|
|
90
|
+
npm run drift # offline: INSTRUCTIONS consistent with TOOLS and ErrorCode
|
|
91
|
+
npm run test:offline # offline: query builders + parsers on fixtures (no network)
|
|
92
|
+
npm run smoke # live: all 5 tools against Cellar + GDPRhub
|
|
63
93
|
```
|
|
64
94
|
|
|
65
|
-
|
|
66
|
-
i URL EUR-Lex.
|
|
67
|
-
|
|
68
|
-
## Licencja
|
|
95
|
+
## License
|
|
69
96
|
|
|
70
97
|
MIT.
|
|
71
98
|
|
|
72
|
-
## Part of
|
|
73
|
-
|
|
74
|
-
This server is one of five MCP connectors covering Polish jurisdiction +
|
|
75
|
-
EU law, used by [Patron](https://github.com/matematicsolutions/patron)
|
|
76
|
-
(AGPL-3.0) and any other MCP-aware legal AI agent.
|
|
99
|
+
## Part of MateMatic
|
|
77
100
|
|
|
78
|
-
|
|
79
|
-
- [mcp-saos](https://github.com/matematicsolutions/mcp-saos) — common courts, SN, TK, KIO
|
|
80
|
-
- [mcp-nsa](https://github.com/matematicsolutions/mcp-nsa) — NSA + 16 WSA administrative courts
|
|
81
|
-
- [mcp-isap](https://github.com/matematicsolutions/mcp-isap) — Polish legislation (Dz.U. + M.P.)
|
|
82
|
-
- [mcp-krs](https://github.com/matematicsolutions/mcp-krs) — Polish company registry (KRS)
|
|
101
|
+
This connector queries its source live. It is one of the Polish and EU source connectors bundled in [PATRON](https://github.com/matematicsolutions/patron) and works with any MCP client.
|
|
83
102
|
|
|
103
|
+
- Poland, one server for all sources: [prawo-pl-mcp](https://github.com/matematicsolutions/prawo-pl-mcp) · each source on its own: [mcp-saos](https://github.com/matematicsolutions/mcp-saos) · [mcp-nsa](https://github.com/matematicsolutions/mcp-nsa) · [mcp-isap](https://github.com/matematicsolutions/mcp-isap) · [mcp-krs](https://github.com/matematicsolutions/mcp-krs) · [mcp-eureka](https://github.com/matematicsolutions/mcp-eureka) · [kio-orzeczenia-mcp](https://github.com/matematicsolutions/kio-orzeczenia-mcp)
|
|
104
|
+
- European Union: **mcp-eu-sparql** (this repo) (live) · [mcp-eu-compliance](https://github.com/matematicsolutions/mcp-eu-compliance) (offline corpus)
|
|
105
|
+
- A prepared corpus of Polish and EU law with a citation graph: [Repertorium](https://github.com/matematicsolutions/repertorium)
|
|
84
106
|
|
|
85
|
-
|
|
107
|
+
`mcp-saos`, `mcp-nsa`, `mcp-isap`, `mcp-krs` and `mcp-eu-sparql` share one `structuredContent.citations`
|
|
86
108
|
contract: each tool returns an array of `{title, url, snippet?, ...metadata}`
|
|
87
109
|
that legal agents can render directly in their citation panel.
|
|
88
110
|
|
package/dist/format.d.ts
ADDED
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
export interface SparqlBinding {
|
|
2
|
+
[key: string]: {
|
|
3
|
+
type: string;
|
|
4
|
+
value: string;
|
|
5
|
+
} | undefined;
|
|
6
|
+
}
|
|
7
|
+
export interface SparqlResponse {
|
|
8
|
+
head: {
|
|
9
|
+
vars: string[];
|
|
10
|
+
};
|
|
11
|
+
results: {
|
|
12
|
+
bindings: SparqlBinding[];
|
|
13
|
+
};
|
|
14
|
+
}
|
|
15
|
+
export interface EuCitation {
|
|
16
|
+
title: string;
|
|
17
|
+
url: string;
|
|
18
|
+
snippet?: string;
|
|
19
|
+
celex?: string;
|
|
20
|
+
ecli?: string;
|
|
21
|
+
publication_date?: string;
|
|
22
|
+
document_type?: string;
|
|
23
|
+
license?: string;
|
|
24
|
+
}
|
|
25
|
+
export declare function eurLexUrl(celex: string, lang?: string): string;
|
|
26
|
+
export declare function shortTypeFromUri(uri: string): string;
|
|
27
|
+
export declare function buildCitations(rows: SparqlBinding[], lang: string): EuCitation[];
|
|
28
|
+
export declare function formatRows(rows: SparqlBinding[], header: string): string;
|
|
29
|
+
export declare const GDPRHUB_LICENSE = "CC BY-NC-SA 4.0";
|
|
30
|
+
export interface GdprhubSearchResult {
|
|
31
|
+
ns: number;
|
|
32
|
+
title: string;
|
|
33
|
+
pageid: number;
|
|
34
|
+
snippet: string;
|
|
35
|
+
timestamp?: string;
|
|
36
|
+
}
|
|
37
|
+
export interface GdprhubSearchResponse {
|
|
38
|
+
query?: {
|
|
39
|
+
searchinfo?: {
|
|
40
|
+
totalhits?: number;
|
|
41
|
+
};
|
|
42
|
+
search?: GdprhubSearchResult[];
|
|
43
|
+
};
|
|
44
|
+
}
|
|
45
|
+
export declare function gdprhubPageUrl(title: string): string;
|
|
46
|
+
export declare function stripHtml(s: string): string;
|
|
47
|
+
export declare function buildGdprhubCitations(data: GdprhubSearchResponse): {
|
|
48
|
+
citations: EuCitation[];
|
|
49
|
+
totalHits: number;
|
|
50
|
+
};
|
|
51
|
+
export declare function formatGdprhubRows(data: GdprhubSearchResponse, header: string): string;
|
|
52
|
+
//# sourceMappingURL=format.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"format.d.ts","sourceRoot":"","sources":["../src/format.ts"],"names":[],"mappings":"AAGA,MAAM,WAAW,aAAa;IAC1B,CAAC,GAAG,EAAE,MAAM,GAAG;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,GAAG,SAAS,CAAC;CAC9D;AAED,MAAM,WAAW,cAAc;IAC3B,IAAI,EAAE;QAAE,IAAI,EAAE,MAAM,EAAE,CAAA;KAAE,CAAC;IACzB,OAAO,EAAE;QAAE,QAAQ,EAAE,aAAa,EAAE,CAAA;KAAE,CAAC;CAC1C;AAED,MAAM,WAAW,UAAU;IACvB,KAAK,EAAE,MAAM,CAAC;IACd,GAAG,EAAE,MAAM,CAAC;IACZ,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,OAAO,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,wBAAgB,SAAS,CAAC,KAAK,EAAE,MAAM,EAAE,IAAI,GAAE,MAAa,GAAG,MAAM,CAEpE;AAED,wBAAgB,gBAAgB,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAIpD;AAED,wBAAgB,cAAc,CAC1B,IAAI,EAAE,aAAa,EAAE,EACrB,IAAI,EAAE,MAAM,GACb,UAAU,EAAE,CAmBd;AAED,wBAAgB,UAAU,CAAC,IAAI,EAAE,aAAa,EAAE,EAAE,MAAM,EAAE,MAAM,GAAG,MAAM,CAuBxE;AAOD,eAAO,MAAM,eAAe,oBAAoB,CAAC;AAEjD,MAAM,WAAW,mBAAmB;IAChC,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,CAAC,EAAE,MAAM,CAAC;CACtB;AAED,MAAM,WAAW,qBAAqB;IAClC,KAAK,CAAC,EAAE;QACJ,UAAU,CAAC,EAAE;YAAE,SAAS,CAAC,EAAE,MAAM,CAAA;SAAE,CAAC;QACpC,MAAM,CAAC,EAAE,mBAAmB,EAAE,CAAC;KAClC,CAAC;CACL;AAED,wBAAgB,cAAc,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAEpD;AAED,wBAAgB,SAAS,CAAC,CAAC,EAAE,MAAM,GAAG,MAAM,CAE3C;AAED,wBAAgB,qBAAqB,CACjC,IAAI,EAAE,qBAAqB,GAC5B;IAAE,SAAS,EAAE,UAAU,EAAE,CAAC;IAAC,SAAS,EAAE,MAAM,CAAA;CAAE,CAUhD;AAED,wBAAgB,iBAAiB,CAC7B,IAAI,EAAE,qBAAqB,EAC3B,MAAM,EAAE,MAAM,GACf,MAAM,CAmBR"}
|
package/dist/format.js
ADDED
|
@@ -0,0 +1,109 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
// Parsowanie odpowiedzi + budowanie citations i tekstu dla czlowieka.
|
|
3
|
+
// Czyste funkcje (bez I/O) - testowane offline w test/offline.mjs.
|
|
4
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
5
|
+
exports.GDPRHUB_LICENSE = void 0;
|
|
6
|
+
exports.eurLexUrl = eurLexUrl;
|
|
7
|
+
exports.shortTypeFromUri = shortTypeFromUri;
|
|
8
|
+
exports.buildCitations = buildCitations;
|
|
9
|
+
exports.formatRows = formatRows;
|
|
10
|
+
exports.gdprhubPageUrl = gdprhubPageUrl;
|
|
11
|
+
exports.stripHtml = stripHtml;
|
|
12
|
+
exports.buildGdprhubCitations = buildGdprhubCitations;
|
|
13
|
+
exports.formatGdprhubRows = formatGdprhubRows;
|
|
14
|
+
function eurLexUrl(celex, lang = "PL") {
|
|
15
|
+
return `https://eur-lex.europa.eu/legal-content/${lang}/TXT/?uri=CELEX:${encodeURIComponent(celex)}`;
|
|
16
|
+
}
|
|
17
|
+
function shortTypeFromUri(uri) {
|
|
18
|
+
// URI: http://publications.europa.eu/resource/authority/resource-type/REG
|
|
19
|
+
const m = uri.match(/\/resource-type\/([A-Z_]+)$/);
|
|
20
|
+
return m ? m[1] : uri;
|
|
21
|
+
}
|
|
22
|
+
function buildCitations(rows, lang) {
|
|
23
|
+
const out = [];
|
|
24
|
+
for (const row of rows) {
|
|
25
|
+
const celex = row.celex?.value;
|
|
26
|
+
if (!celex)
|
|
27
|
+
continue;
|
|
28
|
+
const title = row.title?.value;
|
|
29
|
+
const date = row.date?.value;
|
|
30
|
+
const typeUri = row.type?.value;
|
|
31
|
+
const ecli = row.ecli?.value;
|
|
32
|
+
out.push({
|
|
33
|
+
title: title ?? celex,
|
|
34
|
+
url: eurLexUrl(celex, lang === "POL" ? "PL" : "EN"),
|
|
35
|
+
...(date && { publication_date: date }),
|
|
36
|
+
...(celex && { celex }),
|
|
37
|
+
...(ecli && { ecli }),
|
|
38
|
+
...(typeUri && { document_type: shortTypeFromUri(typeUri) }),
|
|
39
|
+
});
|
|
40
|
+
}
|
|
41
|
+
return out;
|
|
42
|
+
}
|
|
43
|
+
function formatRows(rows, header) {
|
|
44
|
+
if (rows.length === 0) {
|
|
45
|
+
return (header +
|
|
46
|
+
"\n\nBrak wynikow. Sprobuj szerszego zakresu dat lub innego CELEX-a.");
|
|
47
|
+
}
|
|
48
|
+
const lines = [header, ""];
|
|
49
|
+
for (const row of rows) {
|
|
50
|
+
const celex = row.celex?.value ?? "brak_celex";
|
|
51
|
+
const date = row.date?.value ?? "?";
|
|
52
|
+
const typeUri = row.type?.value;
|
|
53
|
+
const type = typeUri ? shortTypeFromUri(typeUri) : "?";
|
|
54
|
+
const title = row.title?.value;
|
|
55
|
+
const ecli = row.ecli?.value;
|
|
56
|
+
lines.push(`CELEX: ${celex}`);
|
|
57
|
+
lines.push(` Data : ${date} | Typ: ${type}`);
|
|
58
|
+
if (ecli)
|
|
59
|
+
lines.push(` ECLI : ${ecli}`);
|
|
60
|
+
if (title)
|
|
61
|
+
lines.push(` Tytul: ${title}`);
|
|
62
|
+
lines.push(` URL : ${eurLexUrl(celex)}`);
|
|
63
|
+
lines.push("");
|
|
64
|
+
}
|
|
65
|
+
return lines.join("\n");
|
|
66
|
+
}
|
|
67
|
+
// ---------------------------------------------------------------------------
|
|
68
|
+
// GDPRhub (MediaWiki API) - agregator decyzji krajowych organow ochrony danych.
|
|
69
|
+
// Tresc na licencji CC BY-NC-SA 4.0 - kazda citation niesie pole license.
|
|
70
|
+
// ---------------------------------------------------------------------------
|
|
71
|
+
exports.GDPRHUB_LICENSE = "CC BY-NC-SA 4.0";
|
|
72
|
+
function gdprhubPageUrl(title) {
|
|
73
|
+
return `https://gdprhub.eu/index.php?title=${encodeURIComponent(title.replace(/ /g, "_"))}`;
|
|
74
|
+
}
|
|
75
|
+
function stripHtml(s) {
|
|
76
|
+
return s.replace(/<[^>]*>/g, "");
|
|
77
|
+
}
|
|
78
|
+
function buildGdprhubCitations(data) {
|
|
79
|
+
const results = data.query?.search ?? [];
|
|
80
|
+
const totalHits = data.query?.searchinfo?.totalhits ?? results.length;
|
|
81
|
+
const citations = results.map((r) => ({
|
|
82
|
+
title: r.title,
|
|
83
|
+
url: gdprhubPageUrl(r.title),
|
|
84
|
+
snippet: stripHtml(r.snippet),
|
|
85
|
+
license: exports.GDPRHUB_LICENSE,
|
|
86
|
+
}));
|
|
87
|
+
return { citations, totalHits };
|
|
88
|
+
}
|
|
89
|
+
function formatGdprhubRows(data, header) {
|
|
90
|
+
const results = data.query?.search ?? [];
|
|
91
|
+
if (results.length === 0) {
|
|
92
|
+
return header + "\n\nBrak wynikow. Sprobuj innego zapytania.";
|
|
93
|
+
}
|
|
94
|
+
const totalHits = data.query?.searchinfo?.totalhits;
|
|
95
|
+
const lines = [header];
|
|
96
|
+
if (typeof totalHits === "number") {
|
|
97
|
+
lines.push(`Trafien lacznie: ${totalHits}`);
|
|
98
|
+
}
|
|
99
|
+
lines.push("");
|
|
100
|
+
for (const r of results) {
|
|
101
|
+
lines.push(`Tytul : ${r.title}`);
|
|
102
|
+
lines.push(` Snippet: ${stripHtml(r.snippet)}`);
|
|
103
|
+
lines.push(` URL : ${gdprhubPageUrl(r.title)}`);
|
|
104
|
+
lines.push(` Licencja tresci: ${exports.GDPRHUB_LICENSE}`);
|
|
105
|
+
lines.push("");
|
|
106
|
+
}
|
|
107
|
+
return lines.join("\n");
|
|
108
|
+
}
|
|
109
|
+
//# sourceMappingURL=format.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"format.js","sourceRoot":"","sources":["../src/format.ts"],"names":[],"mappings":";AAAA,sEAAsE;AACtE,mEAAmE;;;AAsBnE,8BAEC;AAED,4CAIC;AAED,wCAsBC;AAED,gCAuBC;AAwBD,wCAEC;AAED,8BAEC;AAED,sDAYC;AAED,8CAsBC;AA7HD,SAAgB,SAAS,CAAC,KAAa,EAAE,OAAe,IAAI;IACxD,OAAO,2CAA2C,IAAI,mBAAmB,kBAAkB,CAAC,KAAK,CAAC,EAAE,CAAC;AACzG,CAAC;AAED,SAAgB,gBAAgB,CAAC,GAAW;IACxC,0EAA0E;IAC1E,MAAM,CAAC,GAAG,GAAG,CAAC,KAAK,CAAC,6BAA6B,CAAC,CAAC;IACnD,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC;AAC1B,CAAC;AAED,SAAgB,cAAc,CAC1B,IAAqB,EACrB,IAAY;IAEZ,MAAM,GAAG,GAAiB,EAAE,CAAC;IAC7B,KAAK,MAAM,GAAG,IAAI,IAAI,EAAE,CAAC;QACrB,MAAM,KAAK,GAAG,GAAG,CAAC,KAAK,EAAE,KAAK,CAAC;QAC/B,IAAI,CAAC,KAAK;YAAE,SAAS;QACrB,MAAM,KAAK,GAAG,GAAG,CAAC,KAAK,EAAE,KAAK,CAAC;QAC/B,MAAM,IAAI,GAAG,GAAG,CAAC,IAAI,EAAE,KAAK,CAAC;QAC7B,MAAM,OAAO,GAAG,GAAG,CAAC,IAAI,EAAE,KAAK,CAAC;QAChC,MAAM,IAAI,GAAG,GAAG,CAAC,IAAI,EAAE,KAAK,CAAC;QAC7B,GAAG,CAAC,IAAI,CAAC;YACL,KAAK,EAAE,KAAK,IAAI,KAAK;YACrB,GAAG,EAAE,SAAS,CAAC,KAAK,EAAE,IAAI,KAAK,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC;YACnD,GAAG,CAAC,IAAI,IAAI,EAAE,gBAAgB,EAAE,IAAI,EAAE,CAAC;YACvC,GAAG,CAAC,KAAK,IAAI,EAAE,KAAK,EAAE,CAAC;YACvB,GAAG,CAAC,IAAI,IAAI,EAAE,IAAI,EAAE,CAAC;YACrB,GAAG,CAAC,OAAO,IAAI,EAAE,aAAa,EAAE,gBAAgB,CAAC,OAAO,CAAC,EAAE,CAAC;SAC/D,CAAC,CAAC;IACP,CAAC;IACD,OAAO,GAAG,CAAC;AACf,CAAC;AAED,SAAgB,UAAU,CAAC,IAAqB,EAAE,MAAc;IAC5D,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACpB,OAAO,CACH,MAAM;YACN,qEAAqE,CACxE,CAAC;IACN,CAAC;IACD,MAAM,KAAK,GAAG,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;IAC3B,KAAK,MAAM,GAAG,IAAI,IAAI,EAAE,CAAC;QACrB,MAAM,KAAK,GAAG,GAAG,CAAC,KAAK,EAAE,KAAK,IAAI,YAAY,CAAC;QAC/C,MAAM,IAAI,GAAG,GAAG,CAAC,IAAI,EAAE,KAAK,IAAI,GAAG,CAAC;QACpC,MAAM,OAAO,GAAG,GAAG,CAAC,IAAI,EAAE,KAAK,CAAC;QAChC,MAAM,IAAI,GAAG,OAAO,CAAC,CAAC,CAAC,gBAAgB,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC;QACvD,MAAM,KAAK,GAAG,GAAG,CAAC,KAAK,EAAE,KAAK,CAAC;QAC/B,MAAM,IAAI,GAAG,GAAG,CAAC,IAAI,EAAE,KAAK,CAAC;QAC7B,KAAK,CAAC,IAAI,CAAC,UAAU,KAAK,EAAE,CAAC,CAAC;QAC9B,KAAK,CAAC,IAAI,CAAC,YAAY,IAAI,WAAW,IAAI,EAAE,CAAC,CAAC;QAC9C,IAAI,IAAI;YAAE,KAAK,CAAC,IAAI,CAAC,YAAY,IAAI,EAAE,CAAC,CAAC;QACzC,IAAI,KAAK;YAAE,KAAK,CAAC,IAAI,CAAC,YAAY,KAAK,EAAE,CAAC,CAAC;QAC3C,KAAK,CAAC,IAAI,CAAC,YAAY,SAAS,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;QAC3C,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACnB,CAAC;IACD,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAC5B,CAAC;AAED,8EAA8E;AAC9E,gFAAgF;AAChF,0EAA0E;AAC1E,8EAA8E;AAEjE,QAAA,eAAe,GAAG,iBAAiB,CAAC;AAiBjD,SAAgB,cAAc,CAAC,KAAa;IACxC,OAAO,sCAAsC,kBAAkB,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC,EAAE,CAAC;AAChG,CAAC;AAED,SAAgB,SAAS,CAAC,CAAS;IAC/B,OAAO,CAAC,CAAC,OAAO,CAAC,UAAU,EAAE,EAAE,CAAC,CAAC;AACrC,CAAC;AAED,SAAgB,qBAAqB,CACjC,IAA2B;IAE3B,MAAM,OAAO,GAAG,IAAI,CAAC,KAAK,EAAE,MAAM,IAAI,EAAE,CAAC;IACzC,MAAM,SAAS,GAAG,IAAI,CAAC,KAAK,EAAE,UAAU,EAAE,SAAS,IAAI,OAAO,CAAC,MAAM,CAAC;IACtE,MAAM,SAAS,GAAiB,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;QAChD,KAAK,EAAE,CAAC,CAAC,KAAK;QACd,GAAG,EAAE,cAAc,CAAC,CAAC,CAAC,KAAK,CAAC;QAC5B,OAAO,EAAE,SAAS,CAAC,CAAC,CAAC,OAAO,CAAC;QAC7B,OAAO,EAAE,uBAAe;KAC3B,CAAC,CAAC,CAAC;IACJ,OAAO,EAAE,SAAS,EAAE,SAAS,EAAE,CAAC;AACpC,CAAC;AAED,SAAgB,iBAAiB,CAC7B,IAA2B,EAC3B,MAAc;IAEd,MAAM,OAAO,GAAG,IAAI,CAAC,KAAK,EAAE,MAAM,IAAI,EAAE,CAAC;IACzC,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACvB,OAAO,MAAM,GAAG,6CAA6C,CAAC;IAClE,CAAC;IACD,MAAM,SAAS,GAAG,IAAI,CAAC,KAAK,EAAE,UAAU,EAAE,SAAS,CAAC;IACpD,MAAM,KAAK,GAAG,CAAC,MAAM,CAAC,CAAC;IACvB,IAAI,OAAO,SAAS,KAAK,QAAQ,EAAE,CAAC;QAChC,KAAK,CAAC,IAAI,CAAC,oBAAoB,SAAS,EAAE,CAAC,CAAC;IAChD,CAAC;IACD,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACf,KAAK,MAAM,CAAC,IAAI,OAAO,EAAE,CAAC;QACtB,KAAK,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC;QAClC,KAAK,CAAC,IAAI,CAAC,cAAc,SAAS,CAAC,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;QACjD,KAAK,CAAC,IAAI,CAAC,cAAc,cAAc,CAAC,CAAC,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;QACpD,KAAK,CAAC,IAAI,CAAC,sBAAsB,uBAAe,EAAE,CAAC,CAAC;QACpD,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACnB,CAAC;IACD,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAC5B,CAAC"}
|
package/dist/index.js
CHANGED
|
@@ -1,26 +1,34 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
2
|
"use strict";
|
|
3
3
|
// MCP server - EU legislation + CJEU case law via Publications Office SPARQL
|
|
4
|
-
// (Cellar / EUR-Lex)
|
|
4
|
+
// (Cellar / EUR-Lex) + GDPRhub (MediaWiki API, decyzje krajowych DPA).
|
|
5
|
+
// Stdio transport - wpinany do Patrona przez mcp-servers.json.
|
|
5
6
|
//
|
|
6
|
-
//
|
|
7
|
+
// Endpointy:
|
|
8
|
+
// - https://publications.europa.eu/webapi/rdf/sparql (Cellar)
|
|
9
|
+
// - https://gdprhub.eu/api.php (MediaWiki, CC BY-NC-SA 4.0)
|
|
7
10
|
//
|
|
8
11
|
// Tooly:
|
|
9
|
-
// - search_by_celex
|
|
12
|
+
// - search_by_celex - znajdz akt / orzeczenie po sygnaturze CELEX
|
|
10
13
|
// - search_by_date_range - akty z zakresu dat (REG/DIR/DEC + opcjonalnie typ)
|
|
11
|
-
// - search_cjeu - orzecznictwo CJEU
|
|
14
|
+
// - search_cjeu - orzecznictwo CJEU (JUDG/ORDER/OPIN_AG, keyword, daty)
|
|
15
|
+
// - search_cjeu_by_ecli - orzeczenie CJEU po identyfikatorze ECLI
|
|
16
|
+
// - search_gdprhub - decyzje krajowych DPA + komentarze RODO (GDPRhub)
|
|
12
17
|
//
|
|
13
18
|
// Kazda zwrotka zawiera structuredContent.citations - lista obiektow
|
|
14
|
-
// { title, url, snippet?, celex
|
|
19
|
+
// { title, url, snippet?, celex?, ecli?, publication_date?, document_type?, license? }.
|
|
15
20
|
// Patron czyta to pole automatycznie i wystawia w panelu UI.
|
|
16
21
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
17
22
|
const index_js_1 = require("@modelcontextprotocol/sdk/server/index.js");
|
|
18
23
|
const stdio_js_1 = require("@modelcontextprotocol/sdk/server/stdio.js");
|
|
19
24
|
const types_js_1 = require("@modelcontextprotocol/sdk/types.js");
|
|
25
|
+
const queries_js_1 = require("./queries.js");
|
|
26
|
+
const format_js_1 = require("./format.js");
|
|
20
27
|
// ---------------------------------------------------------------------------
|
|
21
|
-
//
|
|
28
|
+
// HTTP clients
|
|
22
29
|
// ---------------------------------------------------------------------------
|
|
23
30
|
const SPARQL_ENDPOINT = "https://publications.europa.eu/webapi/rdf/sparql";
|
|
31
|
+
const GDPRHUB_API = "https://gdprhub.eu/api.php";
|
|
24
32
|
const HTTP_TIMEOUT_MS = 30000;
|
|
25
33
|
async function runSparql(query) {
|
|
26
34
|
const params = new URLSearchParams();
|
|
@@ -48,188 +56,77 @@ async function runSparql(query) {
|
|
|
48
56
|
clearTimeout(timer);
|
|
49
57
|
}
|
|
50
58
|
}
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
const
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
};
|
|
69
|
-
function searchByCelexQuery(celex, lang) {
|
|
70
|
-
// Eskapuj cudzyslowy w SPARQL - tylko " i \ wymagaja escape'u.
|
|
71
|
-
const safeCelex = celex.replace(/["\\]/g, "\\$&");
|
|
72
|
-
const safeLang = lang.replace(/["\\]/g, "\\$&");
|
|
73
|
-
return `${PREFIXES}
|
|
74
|
-
SELECT DISTINCT ?work ?celex ?date ?type ?title
|
|
75
|
-
WHERE {
|
|
76
|
-
?work cdm:resource_legal_id_celex ?celex .
|
|
77
|
-
FILTER(STR(?celex) = "${safeCelex}")
|
|
78
|
-
OPTIONAL { ?work cdm:work_date_document ?date }
|
|
79
|
-
OPTIONAL { ?work cdm:work_has_resource-type ?type }
|
|
80
|
-
OPTIONAL {
|
|
81
|
-
?expr cdm:expression_belongs_to_work ?work ;
|
|
82
|
-
cdm:expression_uses_language ?lang ;
|
|
83
|
-
cdm:expression_title ?title .
|
|
84
|
-
?lang dc:identifier "${safeLang}" .
|
|
85
|
-
}
|
|
86
|
-
}
|
|
87
|
-
LIMIT 1
|
|
88
|
-
`;
|
|
89
|
-
}
|
|
90
|
-
function searchByDateRangeQuery(dateFrom, dateTo, typeUri, lang, limit) {
|
|
91
|
-
const safeFrom = dateFrom.replace(/["\\]/g, "\\$&");
|
|
92
|
-
const safeTo = dateTo.replace(/["\\]/g, "\\$&");
|
|
93
|
-
const safeLang = lang.replace(/["\\]/g, "\\$&");
|
|
94
|
-
const typeFilter = typeUri
|
|
95
|
-
? `?work cdm:work_has_resource-type <${typeUri}> .`
|
|
96
|
-
: "";
|
|
97
|
-
return `${PREFIXES}
|
|
98
|
-
SELECT DISTINCT ?work ?celex ?date ?type ?title
|
|
99
|
-
WHERE {
|
|
100
|
-
${typeFilter}
|
|
101
|
-
?work cdm:work_date_document ?date .
|
|
102
|
-
OPTIONAL { ?work cdm:resource_legal_id_celex ?celex }
|
|
103
|
-
OPTIONAL { ?work cdm:work_has_resource-type ?type }
|
|
104
|
-
OPTIONAL {
|
|
105
|
-
?expr cdm:expression_belongs_to_work ?work ;
|
|
106
|
-
cdm:expression_uses_language ?lang ;
|
|
107
|
-
cdm:expression_title ?title .
|
|
108
|
-
?lang dc:identifier "${safeLang}" .
|
|
109
|
-
}
|
|
110
|
-
FILTER (?date >= "${safeFrom}"^^xsd:date && ?date <= "${safeTo}"^^xsd:date)
|
|
111
|
-
FILTER NOT EXISTS { ?work cdm:do_not_index "true"^^xsd:boolean }
|
|
112
|
-
}
|
|
113
|
-
ORDER BY DESC(?date)
|
|
114
|
-
LIMIT ${limit}
|
|
115
|
-
`;
|
|
116
|
-
}
|
|
117
|
-
function searchCjeuQuery(dateFrom, dateTo, lang, limit) {
|
|
118
|
-
const safeLang = lang.replace(/["\\]/g, "\\$&");
|
|
119
|
-
const dateFilter = dateFrom && dateTo
|
|
120
|
-
? `FILTER (?date >= "${dateFrom.replace(/["\\]/g, "\\$&")}"^^xsd:date && ?date <= "${dateTo.replace(/["\\]/g, "\\$&")}"^^xsd:date)`
|
|
121
|
-
: "";
|
|
122
|
-
return `${PREFIXES}
|
|
123
|
-
SELECT DISTINCT ?work ?celex ?date ?title
|
|
124
|
-
WHERE {
|
|
125
|
-
{ ?work cdm:work_has_resource-type <${RESOURCE_TYPES.JUDG}> }
|
|
126
|
-
UNION
|
|
127
|
-
{ ?work cdm:work_has_resource-type <${RESOURCE_TYPES.ORDER}> }
|
|
128
|
-
?work cdm:work_date_document ?date .
|
|
129
|
-
OPTIONAL { ?work cdm:resource_legal_id_celex ?celex }
|
|
130
|
-
OPTIONAL {
|
|
131
|
-
?expr cdm:expression_belongs_to_work ?work ;
|
|
132
|
-
cdm:expression_uses_language ?lang ;
|
|
133
|
-
cdm:expression_title ?title .
|
|
134
|
-
?lang dc:identifier "${safeLang}" .
|
|
135
|
-
}
|
|
136
|
-
${dateFilter}
|
|
137
|
-
FILTER NOT EXISTS { ?work cdm:do_not_index "true"^^xsd:boolean }
|
|
138
|
-
}
|
|
139
|
-
ORDER BY DESC(?date)
|
|
140
|
-
LIMIT ${limit}
|
|
141
|
-
`;
|
|
142
|
-
}
|
|
143
|
-
function eurLexUrl(celex, lang = "PL") {
|
|
144
|
-
return `https://eur-lex.europa.eu/legal-content/${lang}/TXT/?uri=CELEX:${encodeURIComponent(celex)}`;
|
|
145
|
-
}
|
|
146
|
-
function shortTypeFromUri(uri) {
|
|
147
|
-
// URI: http://publications.europa.eu/resource/authority/resource-type/REG
|
|
148
|
-
const m = uri.match(/\/resource-type\/([A-Z_]+)$/);
|
|
149
|
-
return m ? m[1] : uri;
|
|
150
|
-
}
|
|
151
|
-
function buildCitations(rows, lang) {
|
|
152
|
-
const out = [];
|
|
153
|
-
for (const row of rows) {
|
|
154
|
-
const celex = row.celex?.value;
|
|
155
|
-
if (!celex)
|
|
156
|
-
continue;
|
|
157
|
-
const title = row.title?.value;
|
|
158
|
-
const date = row.date?.value;
|
|
159
|
-
const typeUri = row.type?.value;
|
|
160
|
-
out.push({
|
|
161
|
-
title: title ?? celex,
|
|
162
|
-
url: eurLexUrl(celex, lang === "POL" ? "PL" : "EN"),
|
|
163
|
-
...(date && { publication_date: date }),
|
|
164
|
-
...(celex && { celex }),
|
|
165
|
-
...(typeUri && { document_type: shortTypeFromUri(typeUri) }),
|
|
59
|
+
async function runGdprhubSearch(query, limit) {
|
|
60
|
+
const params = new URLSearchParams({
|
|
61
|
+
action: "query",
|
|
62
|
+
list: "search",
|
|
63
|
+
srsearch: query,
|
|
64
|
+
srlimit: String(limit),
|
|
65
|
+
format: "json",
|
|
66
|
+
});
|
|
67
|
+
const controller = new AbortController();
|
|
68
|
+
const timer = setTimeout(() => controller.abort(), HTTP_TIMEOUT_MS + 5000);
|
|
69
|
+
try {
|
|
70
|
+
const res = await fetch(`${GDPRHUB_API}?${params.toString()}`, {
|
|
71
|
+
headers: {
|
|
72
|
+
Accept: "application/json",
|
|
73
|
+
"User-Agent": "mcp-eu-sparql (https://github.com/matematicsolutions/mcp-eu-sparql)",
|
|
74
|
+
},
|
|
75
|
+
signal: controller.signal,
|
|
166
76
|
});
|
|
77
|
+
if (!res.ok) {
|
|
78
|
+
throw new Error(`GDPRhub API returned HTTP ${res.status} ${res.statusText}`);
|
|
79
|
+
}
|
|
80
|
+
return (await res.json());
|
|
167
81
|
}
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
// ---------------------------------------------------------------------------
|
|
171
|
-
// Human-readable text formatter
|
|
172
|
-
// ---------------------------------------------------------------------------
|
|
173
|
-
function formatRows(rows, header) {
|
|
174
|
-
if (rows.length === 0) {
|
|
175
|
-
return (header +
|
|
176
|
-
"\n\nBrak wynikow. Sprobuj szerszego zakresu dat lub innego CELEX-a.");
|
|
177
|
-
}
|
|
178
|
-
const lines = [header, ""];
|
|
179
|
-
for (const row of rows) {
|
|
180
|
-
const celex = row.celex?.value ?? "brak_celex";
|
|
181
|
-
const date = row.date?.value ?? "?";
|
|
182
|
-
const typeUri = row.type?.value;
|
|
183
|
-
const type = typeUri ? shortTypeFromUri(typeUri) : "?";
|
|
184
|
-
const title = row.title?.value;
|
|
185
|
-
lines.push(`CELEX: ${celex}`);
|
|
186
|
-
lines.push(` Data : ${date} | Typ: ${type}`);
|
|
187
|
-
if (title)
|
|
188
|
-
lines.push(` Tytul: ${title}`);
|
|
189
|
-
lines.push(` URL : ${eurLexUrl(celex)}`);
|
|
190
|
-
lines.push("");
|
|
82
|
+
finally {
|
|
83
|
+
clearTimeout(timer);
|
|
191
84
|
}
|
|
192
|
-
return lines.join("\n");
|
|
193
85
|
}
|
|
194
86
|
// ---------------------------------------------------------------------------
|
|
195
87
|
// Instructions (procedural orchestration) - wstrzykiwane przez Server.
|
|
196
88
|
// Drift test (test/drift.mjs) sprawdza spojnosc z TOOLS i ErrorCode.
|
|
197
89
|
// Pattern z dograh-hq/dograh v1.31.0 (BSD-2) via mcp-eu-compliance v0.2.0.
|
|
198
90
|
// ---------------------------------------------------------------------------
|
|
199
|
-
const INSTRUCTIONS = `Ten serwer MCP odpytuje oficjalny endpoint SPARQL Publications Office (publications.europa.eu/webapi/rdf/sparql) i graf wiedzy Cellar (ontologia CDM). Zwraca akty prawne UE
|
|
91
|
+
const INSTRUCTIONS = `Ten serwer MCP odpytuje oficjalny endpoint SPARQL Publications Office (publications.europa.eu/webapi/rdf/sparql) i graf wiedzy Cellar (ontologia CDM) oraz API MediaWiki GDPRhub (gdprhub.eu). Zwraca akty prawne UE, orzeczenia CJEU (z CELEX i ECLI) oraz decyzje krajowych organow ochrony danych.
|
|
200
92
|
|
|
201
93
|
## Kolejnosc wywolan
|
|
202
94
|
|
|
203
|
-
### Konkretny akt prawny
|
|
204
|
-
1. \`search_by_celex\` - jesli znasz CELEX (np. RODO=32016R0679, AI Act=32024R1689, DORA=32022R2554). Najszybciej i najpewniej.
|
|
95
|
+
### Konkretny akt prawny lub orzeczenie
|
|
96
|
+
1. \`search_by_celex\` - jesli znasz CELEX (np. RODO=32016R0679, AI Act=32024R1689, DORA=32022R2554, wyrok Schrems II=62018CJ0311). Najszybciej i najpewniej.
|
|
97
|
+
2. \`search_cjeu_by_ecli\` - jesli znasz ECLI orzeczenia CJEU (np. ECLI:EU:C:2020:559 = Schrems II). Zwraca CELEX, date, tytul (strony + sygnatura + slowa kluczowe).
|
|
205
98
|
|
|
206
99
|
### Przeglad legislacji w okresie
|
|
207
|
-
|
|
100
|
+
3. \`search_by_date_range\` - akty UE z zakresu dat. Opcjonalnie filtruj typ (REG/DIR/DEC/RECO/OPIN). Maks 50 wynikow.
|
|
208
101
|
|
|
209
102
|
### Orzecznictwo CJEU
|
|
210
|
-
|
|
103
|
+
4. \`search_cjeu\` - orzeczenia Trybunalu Sprawiedliwosci UE: wyroki (JUDG, 34 tys.), postanowienia (ORDER, 8 tys.), opinie rzecznikow generalnych (OPIN_AG, 14 tys.). Opcjonalny zakres dat, typ dokumentu i \`query\` (keyword w tytule - tytul CJEU zawiera strony, sygnature i slowa kluczowe wyroku). Format CELEX dla CJEU: 6 + rok + kod (CJ=wyrok C, CO=postanowienie, CC=opinia AG) + nr sprawy (np. 62018CJ0311).
|
|
104
|
+
|
|
105
|
+
### Decyzje krajowych DPA (RODO w praktyce panstw czlonkowskich)
|
|
106
|
+
5. \`search_gdprhub\` - pelnotekstowe wyszukiwanie w GDPRhub (gdprhub.eu, projekt noyb) - decyzje krajowych organow ochrony danych z calej UE + komentarze do artykulow RODO. UWAGA licencja tresci: CC BY-NC-SA 4.0 (niekomercyjna, share-alike) - kazda citation niesie pole \`license\` - przy wykorzystaniu tresci (nie samego linku) uprzedz uzytkownika o ograniczeniu NC.
|
|
211
107
|
|
|
212
108
|
## Twarde ograniczenia
|
|
213
109
|
|
|
214
|
-
- **CELEX
|
|
110
|
+
- **CELEX/ECLI kluczowe dla cytowalnosci** - odpowiedzi Cellar zawieraja CELEX (i ECLI dla case-law) w \`structuredContent.citations\`. Bez identyfikatora brak cytowalnosci.
|
|
215
111
|
- **Wielojezycznosc 24 jezyki UE** - default jezyk POL. Parametr \`lang\` (POL/ENG/FRA/DEU). Polskie tytuly nie zawsze sa - fallback na ENG dla CJEU jesli brak.
|
|
216
|
-
- **Stateless** - kazde wywolanie idzie do
|
|
217
|
-
- **Bez scrapingu
|
|
218
|
-
- **\`structuredContent.citations\`**: title, url
|
|
112
|
+
- **Stateless** - kazde wywolanie idzie do zrodla live. NIE cachuj wynikow (akty konsoliduja sie / status sie zmienia).
|
|
113
|
+
- **Bez scrapingu** - Cellar przez oficjalny SPARQL endpoint, GDPRhub przez oficjalne API MediaWiki.
|
|
114
|
+
- **\`structuredContent.citations\`**: title, url, celex?, ecli?, publication_date?, document_type?, snippet?, license?. Cytuj te citations w odpowiedzi koncowej.
|
|
219
115
|
|
|
220
116
|
## Iteracja po bledach
|
|
221
117
|
|
|
222
118
|
Tool zwraca \`isError: true\` + tekst z prefixem \`[code]\`. Typowe kody:
|
|
223
|
-
- \`missing_arg\` - brakujacy wymagany parametr (celex w search_by_celex; date_from/date_to w search_by_date_range). Przeczytaj inputSchema.
|
|
119
|
+
- \`missing_arg\` - brakujacy wymagany parametr (celex w search_by_celex; ecli w search_cjeu_by_ecli; query w search_gdprhub; date_from/date_to w search_by_date_range). Przeczytaj inputSchema.
|
|
224
120
|
- \`invalid_date\` - data nie w formacie YYYY-MM-DD lub date_to przed date_from.
|
|
225
|
-
- \`upstream_error\` - blad
|
|
226
|
-
- \`empty_result\` - brak wynikow dla danego CELEX/zakresu. Zwery zewnetrznym katalogiem (eur-lex.europa.eu).
|
|
121
|
+
- \`upstream_error\` - blad endpointu (HTTP, timeout, malformed response). Retry raz przed surface do uzytkownika.
|
|
122
|
+
- \`empty_result\` - brak wynikow dla danego CELEX/ECLI/zakresu. Zwery zewnetrznym katalogiem (eur-lex.europa.eu / curia.europa.eu / gdprhub.eu).
|
|
227
123
|
|
|
228
124
|
## Styl odpowiedzi
|
|
229
125
|
|
|
230
126
|
- Cytuj akty w formacie "AI Act (32024R1689)" lub "RODO (32016R0679)" - skrocony tytul + CELEX.
|
|
231
|
-
- Dla CJEU: "Wyrok C-
|
|
232
|
-
-
|
|
127
|
+
- Dla CJEU: "Wyrok C-311/18 Schrems II (62018CJ0311, ECLI:EU:C:2020:559) z dnia 16.07.2020".
|
|
128
|
+
- Dla GDPRhub: tytul strony + URL + adnotacja o licencji CC BY-NC-SA 4.0.
|
|
129
|
+
- NIE wymyslaj CELEX-ow, ECLI ani dat - wszystko z \`structuredContent.citations\`.
|
|
233
130
|
- Disclaimer wielojezycznosci: jesli zwracasz angielskie tytuly dla aktow ktore powinny miec PL, oznacz to.`;
|
|
234
131
|
// ---------------------------------------------------------------------------
|
|
235
132
|
// Tool definitions
|
|
@@ -238,16 +135,16 @@ const READ_ONLY_ANNOTATIONS = {
|
|
|
238
135
|
readOnlyHint: true,
|
|
239
136
|
idempotentHint: true,
|
|
240
137
|
destructiveHint: false,
|
|
241
|
-
openWorldHint: true, // upstream
|
|
138
|
+
openWorldHint: true, // upstream endpoints live
|
|
242
139
|
};
|
|
243
140
|
const TOOLS = [
|
|
244
141
|
{
|
|
245
142
|
name: "search_by_celex",
|
|
246
143
|
annotations: READ_ONLY_ANNOTATIONS,
|
|
247
|
-
description: "Znajdz akt prawny UE po numerze CELEX. " +
|
|
248
|
-
"Numer CELEX jest unikalny i identyfikuje
|
|
249
|
-
"Przyklady: 32016R0679 (RODO), 31995L0046 (
|
|
250
|
-
"
|
|
144
|
+
description: "Znajdz akt prawny UE lub orzeczenie CJEU po numerze CELEX. " +
|
|
145
|
+
"Numer CELEX jest unikalny i identyfikuje dokument niezaleznie od jezyka. " +
|
|
146
|
+
"Przyklady: 32016R0679 (RODO), 31995L0046 (uchylona dyrektywa o ochronie danych), " +
|
|
147
|
+
"62018CJ0311 (wyrok Schrems II). Zwraca tytul w wybranym jezyku, ECLI (dla case-law) i EUR-Lex URL.",
|
|
251
148
|
inputSchema: {
|
|
252
149
|
type: "object",
|
|
253
150
|
properties: {
|
|
@@ -305,12 +202,18 @@ const TOOLS = [
|
|
|
305
202
|
{
|
|
306
203
|
name: "search_cjeu",
|
|
307
204
|
annotations: READ_ONLY_ANNOTATIONS,
|
|
308
|
-
description: "Wyszukaj
|
|
309
|
-
"
|
|
310
|
-
"
|
|
205
|
+
description: "Wyszukaj orzecznictwo Trybunalu Sprawiedliwosci UE (CJEU): wyroki (JUDG), " +
|
|
206
|
+
"postanowienia (ORDER) i opinie rzecznikow generalnych (OPIN_AG). " +
|
|
207
|
+
"Opcjonalnie zawez do zakresu dat, typu dokumentu i keyworda w tytule " +
|
|
208
|
+
"(tytul CJEU zawiera strony sprawy, sygnature i slowa kluczowe wyroku). " +
|
|
209
|
+
"Zwraca CELEX (np. 62018CJ0311), ECLI, date wydania, tytul (jezyk wg lang) i EUR-Lex URL.",
|
|
311
210
|
inputSchema: {
|
|
312
211
|
type: "object",
|
|
313
212
|
properties: {
|
|
213
|
+
query: {
|
|
214
|
+
type: "string",
|
|
215
|
+
description: "Keyword wyszukiwany w tytule orzeczenia (case-insensitive), np. 'personal data' albo 'Schrems'. Opcjonalny.",
|
|
216
|
+
},
|
|
314
217
|
date_from: {
|
|
315
218
|
type: "string",
|
|
316
219
|
description: "Data od (YYYY-MM-DD). Opcjonalna.",
|
|
@@ -319,6 +222,11 @@ const TOOLS = [
|
|
|
319
222
|
type: "string",
|
|
320
223
|
description: "Data do (YYYY-MM-DD). Opcjonalna.",
|
|
321
224
|
},
|
|
225
|
+
document_type: {
|
|
226
|
+
type: "string",
|
|
227
|
+
description: "Typ dokumentu: JUDG=wyrok, ORDER=postanowienie, OPIN_AG=opinia rzecznika generalnego. Pomin zeby objac wszystkie trzy.",
|
|
228
|
+
enum: ["JUDG", "ORDER", "OPIN_AG"],
|
|
229
|
+
},
|
|
322
230
|
lang: {
|
|
323
231
|
type: "string",
|
|
324
232
|
description: "ISO 639-3 jezyka tytulow. Domyslnie POL.",
|
|
@@ -334,6 +242,52 @@ const TOOLS = [
|
|
|
334
242
|
required: [],
|
|
335
243
|
},
|
|
336
244
|
},
|
|
245
|
+
{
|
|
246
|
+
name: "search_cjeu_by_ecli",
|
|
247
|
+
annotations: READ_ONLY_ANNOTATIONS,
|
|
248
|
+
description: "Znajdz orzeczenie CJEU po identyfikatorze ECLI (European Case Law Identifier), " +
|
|
249
|
+
"np. 'ECLI:EU:C:2020:559' (Schrems II). Zwraca CELEX, date wydania, tytul " +
|
|
250
|
+
"(strony + sygnatura + slowa kluczowe) i EUR-Lex URL.",
|
|
251
|
+
inputSchema: {
|
|
252
|
+
type: "object",
|
|
253
|
+
properties: {
|
|
254
|
+
ecli: {
|
|
255
|
+
type: "string",
|
|
256
|
+
description: "Identyfikator ECLI orzeczenia CJEU, np. 'ECLI:EU:C:2020:559'.",
|
|
257
|
+
},
|
|
258
|
+
lang: {
|
|
259
|
+
type: "string",
|
|
260
|
+
description: "ISO 639-3 jezyka tytulu. Domyslnie POL.",
|
|
261
|
+
enum: ["POL", "ENG", "FRA", "DEU"],
|
|
262
|
+
},
|
|
263
|
+
},
|
|
264
|
+
required: ["ecli"],
|
|
265
|
+
},
|
|
266
|
+
},
|
|
267
|
+
{
|
|
268
|
+
name: "search_gdprhub",
|
|
269
|
+
annotations: READ_ONLY_ANNOTATIONS,
|
|
270
|
+
description: "Pelnotekstowe wyszukiwanie w GDPRhub (gdprhub.eu) - wiki projektu noyb " +
|
|
271
|
+
"agregujaca decyzje krajowych organow ochrony danych (DPA) z calej UE " +
|
|
272
|
+
"oraz komentarze do artykulow RODO. Zwraca tytul, snippet i URL strony. " +
|
|
273
|
+
"Licencja tresci: CC BY-NC-SA 4.0 (pole license w kazdej citation).",
|
|
274
|
+
inputSchema: {
|
|
275
|
+
type: "object",
|
|
276
|
+
properties: {
|
|
277
|
+
query: {
|
|
278
|
+
type: "string",
|
|
279
|
+
description: "Zapytanie pelnotekstowe, np. 'Schrems', 'UODO fine', 'Article 33 notification'.",
|
|
280
|
+
},
|
|
281
|
+
limit: {
|
|
282
|
+
type: "number",
|
|
283
|
+
description: "Maks. liczba wynikow (1-50). Domyslnie 10.",
|
|
284
|
+
minimum: 1,
|
|
285
|
+
maximum: 50,
|
|
286
|
+
},
|
|
287
|
+
},
|
|
288
|
+
required: ["query"],
|
|
289
|
+
},
|
|
290
|
+
},
|
|
337
291
|
];
|
|
338
292
|
function errorResult(text, code) {
|
|
339
293
|
return {
|
|
@@ -343,7 +297,7 @@ function errorResult(text, code) {
|
|
|
343
297
|
};
|
|
344
298
|
}
|
|
345
299
|
const DATE_RE = /^\d{4}-\d{2}-\d{2}$/;
|
|
346
|
-
const server = new index_js_1.Server({ name: "mcp-eu-sparql", version: "1.1
|
|
300
|
+
const server = new index_js_1.Server({ name: "mcp-eu-sparql", version: "1.2.1" }, { capabilities: { tools: {} }, instructions: INSTRUCTIONS });
|
|
347
301
|
server.setRequestHandler(types_js_1.ListToolsRequestSchema, async () => ({
|
|
348
302
|
tools: TOOLS.map((t) => ({
|
|
349
303
|
name: t.name,
|
|
@@ -362,14 +316,14 @@ server.setRequestHandler(types_js_1.CallToolRequestSchema, async (request) => {
|
|
|
362
316
|
if (!a.celex || typeof a.celex !== "string") {
|
|
363
317
|
return errorResult("parametr 'celex' jest wymagany (string).", "missing_arg");
|
|
364
318
|
}
|
|
365
|
-
const sparql = searchByCelexQuery(a.celex, lang);
|
|
319
|
+
const sparql = (0, queries_js_1.searchByCelexQuery)(a.celex, lang);
|
|
366
320
|
const data = await runSparql(sparql);
|
|
367
321
|
const rows = data.results.bindings;
|
|
368
|
-
const text = formatRows(rows, `Wynik search_by_celex(celex="${a.celex}", lang=${lang}):`);
|
|
322
|
+
const text = (0, format_js_1.formatRows)(rows, `Wynik search_by_celex(celex="${a.celex}", lang=${lang}):`);
|
|
369
323
|
return {
|
|
370
324
|
content: [{ type: "text", text }],
|
|
371
325
|
structuredContent: {
|
|
372
|
-
citations: buildCitations(rows, lang),
|
|
326
|
+
citations: (0, format_js_1.buildCitations)(rows, lang),
|
|
373
327
|
},
|
|
374
328
|
};
|
|
375
329
|
}
|
|
@@ -387,46 +341,93 @@ server.setRequestHandler(types_js_1.CallToolRequestSchema, async (request) => {
|
|
|
387
341
|
}
|
|
388
342
|
const typeShort = typeof a.document_type === "string" ? a.document_type : null;
|
|
389
343
|
const typeUri = typeShort
|
|
390
|
-
? (RESOURCE_TYPES[typeShort] ?? null)
|
|
344
|
+
? (queries_js_1.RESOURCE_TYPES[typeShort] ?? null)
|
|
391
345
|
: null;
|
|
392
346
|
const limit = typeof a.limit === "number"
|
|
393
347
|
? Math.min(50, Math.max(1, Math.floor(a.limit)))
|
|
394
348
|
: 20;
|
|
395
|
-
const sparql = searchByDateRangeQuery(dateFrom, dateTo, typeUri, lang, limit);
|
|
349
|
+
const sparql = (0, queries_js_1.searchByDateRangeQuery)(dateFrom, dateTo, typeUri, lang, limit);
|
|
396
350
|
const data = await runSparql(sparql);
|
|
397
351
|
const rows = data.results.bindings;
|
|
398
|
-
const text = formatRows(rows, `Wynik search_by_date_range(${dateFrom}..${dateTo}, type=${typeShort ?? "ALL"}, lang=${lang}):`);
|
|
352
|
+
const text = (0, format_js_1.formatRows)(rows, `Wynik search_by_date_range(${dateFrom}..${dateTo}, type=${typeShort ?? "ALL"}, lang=${lang}):`);
|
|
399
353
|
return {
|
|
400
354
|
content: [{ type: "text", text }],
|
|
401
355
|
structuredContent: {
|
|
402
|
-
citations: buildCitations(rows, lang),
|
|
356
|
+
citations: (0, format_js_1.buildCitations)(rows, lang),
|
|
403
357
|
},
|
|
404
358
|
};
|
|
405
359
|
}
|
|
406
360
|
case "search_cjeu": {
|
|
407
361
|
const dateFrom = typeof a.date_from === "string" ? a.date_from : null;
|
|
408
362
|
const dateTo = typeof a.date_to === "string" ? a.date_to : null;
|
|
363
|
+
if ((dateFrom && !DATE_RE.test(dateFrom)) ||
|
|
364
|
+
(dateTo && !DATE_RE.test(dateTo))) {
|
|
365
|
+
return errorResult(`daty musza byc w formacie YYYY-MM-DD. Otrzymano: from='${dateFrom}', to='${dateTo}'.`, "invalid_date");
|
|
366
|
+
}
|
|
367
|
+
if (dateFrom && dateTo && dateTo < dateFrom) {
|
|
368
|
+
return errorResult(`date_to ('${dateTo}') wczesniejsza niz date_from ('${dateFrom}').`, "invalid_date");
|
|
369
|
+
}
|
|
370
|
+
const docType = typeof a.document_type === "string" &&
|
|
371
|
+
["JUDG", "ORDER", "OPIN_AG"].includes(a.document_type)
|
|
372
|
+
? a.document_type
|
|
373
|
+
: null;
|
|
374
|
+
const keyword = typeof a.query === "string" && a.query.trim().length > 0
|
|
375
|
+
? a.query.trim()
|
|
376
|
+
: null;
|
|
409
377
|
const limit = typeof a.limit === "number"
|
|
410
378
|
? Math.min(50, Math.max(1, Math.floor(a.limit)))
|
|
411
379
|
: 20;
|
|
412
|
-
const sparql = searchCjeuQuery(dateFrom, dateTo, lang, limit);
|
|
380
|
+
const sparql = (0, queries_js_1.searchCjeuQuery)(dateFrom, dateTo, docType, keyword, lang, limit);
|
|
413
381
|
const data = await runSparql(sparql);
|
|
414
382
|
const rows = data.results.bindings;
|
|
415
|
-
const text = formatRows(rows, `Wynik search_cjeu(${dateFrom ?? "*"}..${dateTo ?? "*"}, lang=${lang}):`);
|
|
383
|
+
const text = (0, format_js_1.formatRows)(rows, `Wynik search_cjeu(${dateFrom ?? "*"}..${dateTo ?? "*"}, type=${docType ?? "ALL"}, query=${keyword ?? "-"}, lang=${lang}):`);
|
|
416
384
|
return {
|
|
417
385
|
content: [{ type: "text", text }],
|
|
418
386
|
structuredContent: {
|
|
419
|
-
citations: buildCitations(rows, lang),
|
|
387
|
+
citations: (0, format_js_1.buildCitations)(rows, lang),
|
|
420
388
|
},
|
|
421
389
|
};
|
|
422
390
|
}
|
|
391
|
+
case "search_cjeu_by_ecli": {
|
|
392
|
+
if (!a.ecli || typeof a.ecli !== "string") {
|
|
393
|
+
return errorResult("parametr 'ecli' jest wymagany (string), np. 'ECLI:EU:C:2020:559'.", "missing_arg");
|
|
394
|
+
}
|
|
395
|
+
const sparql = (0, queries_js_1.searchCjeuByEcliQuery)(a.ecli, lang);
|
|
396
|
+
const data = await runSparql(sparql);
|
|
397
|
+
const rows = data.results.bindings;
|
|
398
|
+
if (rows.length === 0) {
|
|
399
|
+
return errorResult(`brak orzeczenia CJEU o ECLI '${a.ecli}'. Sprawdz format (ECLI:EU:C:YYYY:NNN) lub zweryfikuj na curia.europa.eu.`, "empty_result");
|
|
400
|
+
}
|
|
401
|
+
const text = (0, format_js_1.formatRows)(rows, `Wynik search_cjeu_by_ecli(ecli="${a.ecli}", lang=${lang}):`);
|
|
402
|
+
return {
|
|
403
|
+
content: [{ type: "text", text }],
|
|
404
|
+
structuredContent: {
|
|
405
|
+
citations: (0, format_js_1.buildCitations)(rows, lang),
|
|
406
|
+
},
|
|
407
|
+
};
|
|
408
|
+
}
|
|
409
|
+
case "search_gdprhub": {
|
|
410
|
+
if (!a.query || typeof a.query !== "string") {
|
|
411
|
+
return errorResult("parametr 'query' jest wymagany (string).", "missing_arg");
|
|
412
|
+
}
|
|
413
|
+
const limit = typeof a.limit === "number"
|
|
414
|
+
? Math.min(50, Math.max(1, Math.floor(a.limit)))
|
|
415
|
+
: 10;
|
|
416
|
+
const data = await runGdprhubSearch(a.query, limit);
|
|
417
|
+
const { citations } = (0, format_js_1.buildGdprhubCitations)(data);
|
|
418
|
+
const text = (0, format_js_1.formatGdprhubRows)(data, `Wynik search_gdprhub(query="${a.query}", limit=${limit}):`);
|
|
419
|
+
return {
|
|
420
|
+
content: [{ type: "text", text }],
|
|
421
|
+
structuredContent: { citations },
|
|
422
|
+
};
|
|
423
|
+
}
|
|
423
424
|
default:
|
|
424
425
|
return errorResult(`Nieznane narzedzie: ${name}`, "missing_arg");
|
|
425
426
|
}
|
|
426
427
|
}
|
|
427
428
|
catch (err) {
|
|
428
429
|
const msg = err instanceof Error ? err.message : String(err);
|
|
429
|
-
return errorResult(`Blad komunikacji
|
|
430
|
+
return errorResult(`Blad komunikacji ze zrodlem upstream: ${msg}. Sprobuj ponownie za chwile lub zawez zakres dat / dodaj typ dokumentu.`, "upstream_error");
|
|
430
431
|
}
|
|
431
432
|
});
|
|
432
433
|
// ---------------------------------------------------------------------------
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;AACA,6EAA6E;AAC7E,mFAAmF;AACnF,EAAE;AACF,6DAA6D;AAC7D,EAAE;AACF,SAAS;AACT,2DAA2D;AAC3D,gFAAgF;AAChF,6DAA6D;AAC7D,EAAE;AACF,qEAAqE;AACrE,qEAAqE;AACrE,6DAA6D;;AAE7D,wEAAmE;AACnE,wEAAiF;AACjF,iEAG4C;AAE5C,8EAA8E;AAC9E,gBAAgB;AAChB,8EAA8E;AAE9E,MAAM,eAAe,GAAG,kDAAkD,CAAC;AAC3E,MAAM,eAAe,GAAG,KAAK,CAAC;AAW9B,KAAK,UAAU,SAAS,CAAC,KAAa;IAClC,MAAM,MAAM,GAAG,IAAI,eAAe,EAAE,CAAC;IACrC,MAAM,CAAC,GAAG,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC;IAC3B,MAAM,CAAC,GAAG,CAAC,QAAQ,EAAE,iCAAiC,CAAC,CAAC;IACxD,MAAM,CAAC,GAAG,CAAC,SAAS,EAAE,MAAM,CAAC,eAAe,CAAC,CAAC,CAAC;IAE/C,MAAM,UAAU,GAAG,IAAI,eAAe,EAAE,CAAC;IACzC,MAAM,KAAK,GAAG,UAAU,CAAC,GAAG,EAAE,CAAC,UAAU,CAAC,KAAK,EAAE,EAAE,eAAe,GAAG,IAAI,CAAC,CAAC;IAC3E,IAAI,CAAC;QACD,MAAM,GAAG,GAAG,MAAM,KAAK,CAAC,eAAe,EAAE;YACrC,MAAM,EAAE,MAAM;YACd,OAAO,EAAE;gBACL,cAAc,EAAE,mCAAmC;gBACnD,MAAM,EAAE,iCAAiC;aAC5C;YACD,IAAI,EAAE,MAAM,CAAC,QAAQ,EAAE;YACvB,MAAM,EAAE,UAAU,CAAC,MAAM;SAC5B,CAAC,CAAC;QACH,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,CAAC;YACV,MAAM,IAAI,KAAK,CACX,iCAAiC,GAAG,CAAC,MAAM,IAAI,GAAG,CAAC,UAAU,EAAE,CAClE,CAAC;QACN,CAAC;QACD,OAAO,CAAC,MAAM,GAAG,CAAC,IAAI,EAAE,CAAmB,CAAC;IAChD,CAAC;YAAS,CAAC;QACP,YAAY,CAAC,KAAK,CAAC,CAAC;IACxB,CAAC;AACL,CAAC;AAED,8EAA8E;AAC9E,iBAAiB;AACjB,8EAA8E;AAE9E,MAAM,QAAQ,GAAG;;;;CAIhB,CAAC;AAEF,gEAAgE;AAChE,MAAM,cAAc,GAA2B;IAC3C,GAAG,EAAE,oEAAoE;IACzE,GAAG,EAAE,oEAAoE;IACzE,GAAG,EAAE,oEAAoE;IACzE,IAAI,EAAE,qEAAqE;IAC3E,IAAI,EAAE,qEAAqE;IAC3E,IAAI,EAAE,qEAAqE;IAC3E,KAAK,EACD,yEAAyE;CAChF,CAAC;AAEF,SAAS,kBAAkB,CAAC,KAAa,EAAE,IAAY;IACnD,+DAA+D;IAC/D,MAAM,SAAS,GAAG,KAAK,CAAC,OAAO,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;IAClD,MAAM,QAAQ,GAAG,IAAI,CAAC,OAAO,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;IAChD,OAAO,GAAG,QAAQ;;;;0BAII,SAAS;;;;;;;2BAOR,QAAQ;;;;CAIlC,CAAC;AACF,CAAC;AAED,SAAS,sBAAsB,CAC3B,QAAgB,EAChB,MAAc,EACd,OAAsB,EACtB,IAAY,EACZ,KAAa;IAEb,MAAM,QAAQ,GAAG,QAAQ,CAAC,OAAO,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;IACpD,MAAM,MAAM,GAAG,MAAM,CAAC,OAAO,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;IAChD,MAAM,QAAQ,GAAG,IAAI,CAAC,OAAO,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;IAChD,MAAM,UAAU,GAAG,OAAO;QACtB,CAAC,CAAC,qCAAqC,OAAO,KAAK;QACnD,CAAC,CAAC,EAAE,CAAC;IACT,OAAO,GAAG,QAAQ;;;IAGlB,UAAU;;;;;;;;2BAQa,QAAQ;;sBAEb,QAAQ,4BAA4B,MAAM;;;;QAIxD,KAAK;CACZ,CAAC;AACF,CAAC;AAED,SAAS,eAAe,CACpB,QAAuB,EACvB,MAAqB,EACrB,IAAY,EACZ,KAAa;IAEb,MAAM,QAAQ,GAAG,IAAI,CAAC,OAAO,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;IAChD,MAAM,UAAU,GACZ,QAAQ,IAAI,MAAM;QACd,CAAC,CAAC,qBAAqB,QAAQ,CAAC,OAAO,CAAC,QAAQ,EAAE,MAAM,CAAC,4BAA4B,MAAM,CAAC,OAAO,CAAC,QAAQ,EAAE,MAAM,CAAC,cAAc;QACnI,CAAC,CAAC,EAAE,CAAC;IACb,OAAO,GAAG,QAAQ;;;wCAGkB,cAAc,CAAC,IAAI;;wCAEnB,cAAc,CAAC,KAAK;;;;;;;2BAOjC,QAAQ;;IAE/B,UAAU;;;;QAIN,KAAK;CACZ,CAAC;AACF,CAAC;AAeD,SAAS,SAAS,CAAC,KAAa,EAAE,OAAe,IAAI;IACjD,OAAO,2CAA2C,IAAI,mBAAmB,kBAAkB,CAAC,KAAK,CAAC,EAAE,CAAC;AACzG,CAAC;AAED,SAAS,gBAAgB,CAAC,GAAW;IACjC,0EAA0E;IAC1E,MAAM,CAAC,GAAG,GAAG,CAAC,KAAK,CAAC,6BAA6B,CAAC,CAAC;IACnD,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC;AAC1B,CAAC;AAED,SAAS,cAAc,CAAC,IAAqB,EAAE,IAAY;IACvD,MAAM,GAAG,GAAiB,EAAE,CAAC;IAC7B,KAAK,MAAM,GAAG,IAAI,IAAI,EAAE,CAAC;QACrB,MAAM,KAAK,GAAG,GAAG,CAAC,KAAK,EAAE,KAAK,CAAC;QAC/B,IAAI,CAAC,KAAK;YAAE,SAAS;QACrB,MAAM,KAAK,GAAG,GAAG,CAAC,KAAK,EAAE,KAAK,CAAC;QAC/B,MAAM,IAAI,GAAG,GAAG,CAAC,IAAI,EAAE,KAAK,CAAC;QAC7B,MAAM,OAAO,GAAG,GAAG,CAAC,IAAI,EAAE,KAAK,CAAC;QAChC,GAAG,CAAC,IAAI,CAAC;YACL,KAAK,EAAE,KAAK,IAAI,KAAK;YACrB,GAAG,EAAE,SAAS,CAAC,KAAK,EAAE,IAAI,KAAK,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC;YACnD,GAAG,CAAC,IAAI,IAAI,EAAE,gBAAgB,EAAE,IAAI,EAAE,CAAC;YACvC,GAAG,CAAC,KAAK,IAAI,EAAE,KAAK,EAAE,CAAC;YACvB,GAAG,CAAC,OAAO,IAAI,EAAE,aAAa,EAAE,gBAAgB,CAAC,OAAO,CAAC,EAAE,CAAC;SAC/D,CAAC,CAAC;IACP,CAAC;IACD,OAAO,GAAG,CAAC;AACf,CAAC;AAED,8EAA8E;AAC9E,gCAAgC;AAChC,8EAA8E;AAE9E,SAAS,UAAU,CAAC,IAAqB,EAAE,MAAc;IACrD,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACpB,OAAO,CACH,MAAM;YACN,qEAAqE,CACxE,CAAC;IACN,CAAC;IACD,MAAM,KAAK,GAAG,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;IAC3B,KAAK,MAAM,GAAG,IAAI,IAAI,EAAE,CAAC;QACrB,MAAM,KAAK,GAAG,GAAG,CAAC,KAAK,EAAE,KAAK,IAAI,YAAY,CAAC;QAC/C,MAAM,IAAI,GAAG,GAAG,CAAC,IAAI,EAAE,KAAK,IAAI,GAAG,CAAC;QACpC,MAAM,OAAO,GAAG,GAAG,CAAC,IAAI,EAAE,KAAK,CAAC;QAChC,MAAM,IAAI,GAAG,OAAO,CAAC,CAAC,CAAC,gBAAgB,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC;QACvD,MAAM,KAAK,GAAG,GAAG,CAAC,KAAK,EAAE,KAAK,CAAC;QAC/B,KAAK,CAAC,IAAI,CAAC,UAAU,KAAK,EAAE,CAAC,CAAC;QAC9B,KAAK,CAAC,IAAI,CAAC,YAAY,IAAI,WAAW,IAAI,EAAE,CAAC,CAAC;QAC9C,IAAI,KAAK;YAAE,KAAK,CAAC,IAAI,CAAC,YAAY,KAAK,EAAE,CAAC,CAAC;QAC3C,KAAK,CAAC,IAAI,CAAC,YAAY,SAAS,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;QAC3C,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACnB,CAAC;IACD,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAC5B,CAAC;AAED,8EAA8E;AAC9E,uEAAuE;AACvE,qEAAqE;AACrE,2EAA2E;AAC3E,8EAA8E;AAE9E,MAAM,YAAY,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4GAkCuF,CAAC;AAE7G,8EAA8E;AAC9E,mBAAmB;AACnB,8EAA8E;AAE9E,MAAM,qBAAqB,GAAG;IAC1B,YAAY,EAAE,IAAI;IAClB,cAAc,EAAE,IAAI;IACpB,eAAe,EAAE,KAAK;IACtB,aAAa,EAAE,IAAI,EAAE,gCAAgC;CAC/C,CAAC;AAEX,MAAM,KAAK,GAAG;IACV;QACI,IAAI,EAAE,iBAAiB;QACvB,WAAW,EAAE,qBAAqB;QAClC,WAAW,EACP,yCAAyC;YACzC,sEAAsE;YACtE,mFAAmF;YACnF,8EAA8E;QAClF,WAAW,EAAE;YACT,IAAI,EAAE,QAAQ;YACd,UAAU,EAAE;gBACR,KAAK,EAAE;oBACH,IAAI,EAAE,QAAQ;oBACd,WAAW,EAAE,uCAAuC;iBACvD;gBACD,IAAI,EAAE;oBACF,IAAI,EAAE,QAAQ;oBACd,WAAW,EACP,2DAA2D;oBAC/D,IAAI,EAAE,CAAC,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,CAAC;iBACrC;aACJ;YACD,QAAQ,EAAE,CAAC,OAAO,CAAC;SACtB;KACJ;IACD;QACI,IAAI,EAAE,sBAAsB;QAC5B,WAAW,EAAE,qBAAqB;QAClC,WAAW,EACP,4DAA4D;YAC5D,mEAAmE;YACnE,4EAA4E;YAC5E,mEAAmE;QACvE,WAAW,EAAE;YACT,IAAI,EAAE,QAAQ;YACd,UAAU,EAAE;gBACR,SAAS,EAAE;oBACP,IAAI,EAAE,QAAQ;oBACd,WAAW,EAAE,uBAAuB;iBACvC;gBACD,OAAO,EAAE;oBACL,IAAI,EAAE,QAAQ;oBACd,WAAW,EAAE,uBAAuB;iBACvC;gBACD,aAAa,EAAE;oBACX,IAAI,EAAE,QAAQ;oBACd,WAAW,EACP,yEAAyE;oBAC7E,IAAI,EAAE,CAAC,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,CAAC;iBAC9C;gBACD,IAAI,EAAE;oBACF,IAAI,EAAE,QAAQ;oBACd,WAAW,EACP,0CAA0C;oBAC9C,IAAI,EAAE,CAAC,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,CAAC;iBACrC;gBACD,KAAK,EAAE;oBACH,IAAI,EAAE,QAAQ;oBACd,WAAW,EACP,4CAA4C;oBAChD,OAAO,EAAE,CAAC;oBACV,OAAO,EAAE,EAAE;iBACd;aACJ;YACD,QAAQ,EAAE,CAAC,WAAW,EAAE,SAAS,CAAC;SACrC;KACJ;IACD;QACI,IAAI,EAAE,aAAa;QACnB,WAAW,EAAE,qBAAqB;QAClC,WAAW,EACP,0EAA0E;YAC1E,6DAA6D;YAC7D,oFAAoF;QACxF,WAAW,EAAE;YACT,IAAI,EAAE,QAAQ;YACd,UAAU,EAAE;gBACR,SAAS,EAAE;oBACP,IAAI,EAAE,QAAQ;oBACd,WAAW,EAAE,mCAAmC;iBACnD;gBACD,OAAO,EAAE;oBACL,IAAI,EAAE,QAAQ;oBACd,WAAW,EAAE,mCAAmC;iBACnD;gBACD,IAAI,EAAE;oBACF,IAAI,EAAE,QAAQ;oBACd,WAAW,EAAE,0CAA0C;oBACvD,IAAI,EAAE,CAAC,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,CAAC;iBACrC;gBACD,KAAK,EAAE;oBACH,IAAI,EAAE,QAAQ;oBACd,WAAW,EACP,4CAA4C;oBAChD,OAAO,EAAE,CAAC;oBACV,OAAO,EAAE,EAAE;iBACd;aACJ;YACD,QAAQ,EAAE,EAAE;SACf;KACJ;CACK,CAAC;AASX,SAAS,WAAW,CAAC,IAAY,EAAE,IAAe;IAC9C,OAAO;QACH,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAe,EAAE,IAAI,EAAE,IAAI,IAAI,KAAK,IAAI,EAAE,EAAE,CAAC;QAC/D,iBAAiB,EAAE,EAAE,UAAU,EAAE,IAAI,EAAE;QACvC,OAAO,EAAE,IAAI;KAChB,CAAC;AACN,CAAC;AAED,MAAM,OAAO,GAAG,qBAAqB,CAAC;AAEtC,MAAM,MAAM,GAAG,IAAI,iBAAM,CACrB,EAAE,IAAI,EAAE,eAAe,EAAE,OAAO,EAAE,OAAO,EAAE,EAC3C,EAAE,YAAY,EAAE,EAAE,KAAK,EAAE,EAAE,EAAE,EAAE,YAAY,EAAE,YAAY,EAAE,CAC9D,CAAC;AAEF,MAAM,CAAC,iBAAiB,CAAC,iCAAsB,EAAE,KAAK,IAAI,EAAE,CAAC,CAAC;IAC1D,KAAK,EAAE,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;QACrB,IAAI,EAAE,CAAC,CAAC,IAAI;QACZ,WAAW,EAAE,CAAC,CAAC,WAAW;QAC1B,WAAW,EAAE,CAAC,CAAC,WAAW;QAC1B,WAAW,EAAE,CAAC,CAAC,WAAW;KAC7B,CAAC,CAAC;CACN,CAAC,CAAC,CAAC;AAEJ,MAAM,CAAC,iBAAiB,CAAC,gCAAqB,EAAE,KAAK,EAAE,OAAO,EAAE,EAAE;IAC9D,MAAM,EAAE,IAAI,EAAE,SAAS,EAAE,IAAI,EAAE,GAAG,OAAO,CAAC,MAAM,CAAC;IACjD,MAAM,CAAC,GAAG,CAAC,IAAI,IAAI,EAAE,CAA4B,CAAC;IAClD,MAAM,IAAI,GAAG,OAAO,CAAC,CAAC,IAAI,KAAK,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC;IAEzD,IAAI,CAAC;QACD,QAAQ,IAAI,EAAE,CAAC;YACX,KAAK,iBAAiB,CAAC,CAAC,CAAC;gBACrB,IAAI,CAAC,CAAC,CAAC,KAAK,IAAI,OAAO,CAAC,CAAC,KAAK,KAAK,QAAQ,EAAE,CAAC;oBAC1C,OAAO,WAAW,CAAC,0CAA0C,EAAE,aAAa,CAAC,CAAC;gBAClF,CAAC;gBACD,MAAM,MAAM,GAAG,kBAAkB,CAAC,CAAC,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;gBACjD,MAAM,IAAI,GAAG,MAAM,SAAS,CAAC,MAAM,CAAC,CAAC;gBACrC,MAAM,IAAI,GAAG,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC;gBACnC,MAAM,IAAI,GAAG,UAAU,CACnB,IAAI,EACJ,gCAAgC,CAAC,CAAC,KAAK,WAAW,IAAI,IAAI,CAC7D,CAAC;gBACF,OAAO;oBACH,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC;oBACjC,iBAAiB,EAAE;wBACf,SAAS,EAAE,cAAc,CAAC,IAAI,EAAE,IAAI,CAAC;qBACxC;iBACJ,CAAC;YACN,CAAC;YAED,KAAK,sBAAsB,CAAC,CAAC,CAAC;gBAC1B,MAAM,QAAQ,GAAG,CAAC,CAAC,SAAS,CAAC;gBAC7B,MAAM,MAAM,GAAG,CAAC,CAAC,OAAO,CAAC;gBACzB,IAAI,OAAO,QAAQ,KAAK,QAAQ,IAAI,OAAO,MAAM,KAAK,QAAQ,EAAE,CAAC;oBAC7D,OAAO,WAAW,CACd,0DAA0D,EAC1D,aAAa,CAChB,CAAC;gBACN,CAAC;gBACD,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC;oBACnD,OAAO,WAAW,CACd,0DAA0D,QAAQ,UAAU,MAAM,IAAI,EACtF,cAAc,CACjB,CAAC;gBACN,CAAC;gBACD,IAAI,MAAM,GAAG,QAAQ,EAAE,CAAC;oBACpB,OAAO,WAAW,CACd,aAAa,MAAM,mCAAmC,QAAQ,KAAK,EACnE,cAAc,CACjB,CAAC;gBACN,CAAC;gBACD,MAAM,SAAS,GACX,OAAO,CAAC,CAAC,aAAa,KAAK,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,IAAI,CAAC;gBACjE,MAAM,OAAO,GAAG,SAAS;oBACrB,CAAC,CAAC,CAAC,cAAc,CAAC,SAAS,CAAC,IAAI,IAAI,CAAC;oBACrC,CAAC,CAAC,IAAI,CAAC;gBACX,MAAM,KAAK,GACP,OAAO,CAAC,CAAC,KAAK,KAAK,QAAQ;oBACvB,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC;oBAChD,CAAC,CAAC,EAAE,CAAC;gBACb,MAAM,MAAM,GAAG,sBAAsB,CACjC,QAAQ,EACR,MAAM,EACN,OAAO,EACP,IAAI,EACJ,KAAK,CACR,CAAC;gBACF,MAAM,IAAI,GAAG,MAAM,SAAS,CAAC,MAAM,CAAC,CAAC;gBACrC,MAAM,IAAI,GAAG,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC;gBACnC,MAAM,IAAI,GAAG,UAAU,CACnB,IAAI,EACJ,8BAA8B,QAAQ,KAAK,MAAM,UAAU,SAAS,IAAI,KAAK,UAAU,IAAI,IAAI,CAClG,CAAC;gBACF,OAAO;oBACH,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC;oBACjC,iBAAiB,EAAE;wBACf,SAAS,EAAE,cAAc,CAAC,IAAI,EAAE,IAAI,CAAC;qBACxC;iBACJ,CAAC;YACN,CAAC;YAED,KAAK,aAAa,CAAC,CAAC,CAAC;gBACjB,MAAM,QAAQ,GACV,OAAO,CAAC,CAAC,SAAS,KAAK,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC;gBACzD,MAAM,MAAM,GACR,OAAO,CAAC,CAAC,OAAO,KAAK,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC;gBACrD,MAAM,KAAK,GACP,OAAO,CAAC,CAAC,KAAK,KAAK,QAAQ;oBACvB,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC;oBAChD,CAAC,CAAC,EAAE,CAAC;gBACb,MAAM,MAAM,GAAG,eAAe,CAAC,QAAQ,EAAE,MAAM,EAAE,IAAI,EAAE,KAAK,CAAC,CAAC;gBAC9D,MAAM,IAAI,GAAG,MAAM,SAAS,CAAC,MAAM,CAAC,CAAC;gBACrC,MAAM,IAAI,GAAG,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC;gBACnC,MAAM,IAAI,GAAG,UAAU,CACnB,IAAI,EACJ,qBAAqB,QAAQ,IAAI,GAAG,KAAK,MAAM,IAAI,GAAG,UAAU,IAAI,IAAI,CAC3E,CAAC;gBACF,OAAO;oBACH,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC;oBACjC,iBAAiB,EAAE;wBACf,SAAS,EAAE,cAAc,CAAC,IAAI,EAAE,IAAI,CAAC;qBACxC;iBACJ,CAAC;YACN,CAAC;YAED;gBACI,OAAO,WAAW,CAAC,uBAAuB,IAAI,EAAE,EAAE,aAAa,CAAC,CAAC;QACzE,CAAC;IACL,CAAC;IAAC,OAAO,GAAY,EAAE,CAAC;QACpB,MAAM,GAAG,GAAG,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;QAC7D,OAAO,WAAW,CACd,kDAAkD,GAAG,0EAA0E,EAC/H,gBAAgB,CACnB,CAAC;IACN,CAAC;AACL,CAAC,CAAC,CAAC;AAEH,8EAA8E;AAC9E,QAAQ;AACR,8EAA8E;AAE9E,KAAK,UAAU,IAAI;IACf,MAAM,SAAS,GAAG,IAAI,+BAAoB,EAAE,CAAC;IAC7C,MAAM,MAAM,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;IAChC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,kDAAkD,CAAC,CAAC;AAC7E,CAAC;AAED,IAAI,EAAE,CAAC,KAAK,CAAC,CAAC,GAAG,EAAE,EAAE;IACjB,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,gBAAgB,GAAG,IAAI,CAAC,CAAC;IAC9C,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AACpB,CAAC,CAAC,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
export declare const PREFIXES = "\nPREFIX cdm: <http://publications.europa.eu/ontology/cdm#>\nPREFIX dc: <http://purl.org/dc/elements/1.1/>\nPREFIX xsd: <http://www.w3.org/2001/XMLSchema#>\n";
|
|
2
|
+
export declare const RESOURCE_TYPES: Record<string, string>;
|
|
3
|
+
export declare const CJEU_TYPES: readonly ["JUDG", "ORDER", "OPIN_AG"];
|
|
4
|
+
export declare function sparqlEscape(value: string): string;
|
|
5
|
+
export declare function searchByCelexQuery(celex: string, lang: string): string;
|
|
6
|
+
export declare function searchByDateRangeQuery(dateFrom: string, dateTo: string, typeUri: string | null, lang: string, limit: number): string;
|
|
7
|
+
export declare function searchCjeuQuery(dateFrom: string | null, dateTo: string | null, documentType: string | null, keyword: string | null, lang: string, limit: number): string;
|
|
8
|
+
export declare function searchCjeuByEcliQuery(ecli: string, lang: string): string;
|
|
9
|
+
//# sourceMappingURL=queries.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"queries.d.ts","sourceRoot":"","sources":["../src/queries.ts"],"names":[],"mappings":"AAGA,eAAO,MAAM,QAAQ,mKAIpB,CAAC;AAKF,eAAO,MAAM,cAAc,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAUjD,CAAC;AAGF,eAAO,MAAM,UAAU,uCAAwC,CAAC;AAEhE,wBAAgB,YAAY,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAGlD;AAED,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,MAAM,CAoBtE;AAED,wBAAgB,sBAAsB,CAClC,QAAQ,EAAE,MAAM,EAChB,MAAM,EAAE,MAAM,EACd,OAAO,EAAE,MAAM,GAAG,IAAI,EACtB,IAAI,EAAE,MAAM,EACZ,KAAK,EAAE,MAAM,GACd,MAAM,CA0BR;AAED,wBAAgB,eAAe,CAC3B,QAAQ,EAAE,MAAM,GAAG,IAAI,EACvB,MAAM,EAAE,MAAM,GAAG,IAAI,EACrB,YAAY,EAAE,MAAM,GAAG,IAAI,EAC3B,OAAO,EAAE,MAAM,GAAG,IAAI,EACtB,IAAI,EAAE,MAAM,EACZ,KAAK,EAAE,MAAM,GACd,MAAM,CAuCR;AAED,wBAAgB,qBAAqB,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,MAAM,CAwBxE"}
|
package/dist/queries.js
ADDED
|
@@ -0,0 +1,147 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
// SPARQL query builders - Publications Office Cellar (ontologia CDM).
|
|
3
|
+
// Czyste funkcje (bez I/O) - testowane offline w test/offline.mjs.
|
|
4
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
5
|
+
exports.CJEU_TYPES = exports.RESOURCE_TYPES = exports.PREFIXES = void 0;
|
|
6
|
+
exports.sparqlEscape = sparqlEscape;
|
|
7
|
+
exports.searchByCelexQuery = searchByCelexQuery;
|
|
8
|
+
exports.searchByDateRangeQuery = searchByDateRangeQuery;
|
|
9
|
+
exports.searchCjeuQuery = searchCjeuQuery;
|
|
10
|
+
exports.searchCjeuByEcliQuery = searchCjeuByEcliQuery;
|
|
11
|
+
exports.PREFIXES = `
|
|
12
|
+
PREFIX cdm: <http://publications.europa.eu/ontology/cdm#>
|
|
13
|
+
PREFIX dc: <http://purl.org/dc/elements/1.1/>
|
|
14
|
+
PREFIX xsd: <http://www.w3.org/2001/XMLSchema#>
|
|
15
|
+
`;
|
|
16
|
+
// Mapowanie typu aktu (skrot uzytkownika) -> URI Resource-Type.
|
|
17
|
+
// UWAGA feature-002: postanowienia CJEU maja w Cellar typ .../ORDER (8 362 works),
|
|
18
|
+
// NIE .../ORDER_CJ (0 works) - stary URI byl cichym no-opem (zero wynikow, zero bledu).
|
|
19
|
+
exports.RESOURCE_TYPES = {
|
|
20
|
+
REG: "http://publications.europa.eu/resource/authority/resource-type/REG",
|
|
21
|
+
DIR: "http://publications.europa.eu/resource/authority/resource-type/DIR",
|
|
22
|
+
DEC: "http://publications.europa.eu/resource/authority/resource-type/DEC",
|
|
23
|
+
RECO: "http://publications.europa.eu/resource/authority/resource-type/RECO",
|
|
24
|
+
OPIN: "http://publications.europa.eu/resource/authority/resource-type/OPIN",
|
|
25
|
+
JUDG: "http://publications.europa.eu/resource/authority/resource-type/JUDG",
|
|
26
|
+
ORDER: "http://publications.europa.eu/resource/authority/resource-type/ORDER",
|
|
27
|
+
OPIN_AG: "http://publications.europa.eu/resource/authority/resource-type/OPIN_AG",
|
|
28
|
+
};
|
|
29
|
+
// Typy case-law CJEU dostepne w search_cjeu (wyrok / postanowienie / opinia AG).
|
|
30
|
+
exports.CJEU_TYPES = ["JUDG", "ORDER", "OPIN_AG"];
|
|
31
|
+
function sparqlEscape(value) {
|
|
32
|
+
// Eskapuj cudzyslowy w SPARQL - tylko " i \ wymagaja escape'u.
|
|
33
|
+
return value.replace(/["\\]/g, "\\$&");
|
|
34
|
+
}
|
|
35
|
+
function searchByCelexQuery(celex, lang) {
|
|
36
|
+
const safeCelex = sparqlEscape(celex);
|
|
37
|
+
const safeLang = sparqlEscape(lang);
|
|
38
|
+
return `${exports.PREFIXES}
|
|
39
|
+
SELECT DISTINCT ?work ?celex ?ecli ?date ?type ?title
|
|
40
|
+
WHERE {
|
|
41
|
+
?work cdm:resource_legal_id_celex ?celex .
|
|
42
|
+
FILTER(STR(?celex) = "${safeCelex}")
|
|
43
|
+
OPTIONAL { ?work cdm:case-law_ecli ?ecli }
|
|
44
|
+
OPTIONAL { ?work cdm:work_date_document ?date }
|
|
45
|
+
OPTIONAL { ?work cdm:work_has_resource-type ?type }
|
|
46
|
+
OPTIONAL {
|
|
47
|
+
?expr cdm:expression_belongs_to_work ?work ;
|
|
48
|
+
cdm:expression_uses_language ?lang ;
|
|
49
|
+
cdm:expression_title ?title .
|
|
50
|
+
?lang dc:identifier "${safeLang}" .
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
LIMIT 1
|
|
54
|
+
`;
|
|
55
|
+
}
|
|
56
|
+
function searchByDateRangeQuery(dateFrom, dateTo, typeUri, lang, limit) {
|
|
57
|
+
const safeFrom = sparqlEscape(dateFrom);
|
|
58
|
+
const safeTo = sparqlEscape(dateTo);
|
|
59
|
+
const safeLang = sparqlEscape(lang);
|
|
60
|
+
const typeFilter = typeUri
|
|
61
|
+
? `?work cdm:work_has_resource-type <${typeUri}> .`
|
|
62
|
+
: "";
|
|
63
|
+
return `${exports.PREFIXES}
|
|
64
|
+
SELECT DISTINCT ?work ?celex ?date ?type ?title
|
|
65
|
+
WHERE {
|
|
66
|
+
${typeFilter}
|
|
67
|
+
?work cdm:work_date_document ?date .
|
|
68
|
+
OPTIONAL { ?work cdm:resource_legal_id_celex ?celex }
|
|
69
|
+
OPTIONAL { ?work cdm:work_has_resource-type ?type }
|
|
70
|
+
OPTIONAL {
|
|
71
|
+
?expr cdm:expression_belongs_to_work ?work ;
|
|
72
|
+
cdm:expression_uses_language ?lang ;
|
|
73
|
+
cdm:expression_title ?title .
|
|
74
|
+
?lang dc:identifier "${safeLang}" .
|
|
75
|
+
}
|
|
76
|
+
FILTER (?date >= "${safeFrom}"^^xsd:date && ?date <= "${safeTo}"^^xsd:date)
|
|
77
|
+
FILTER NOT EXISTS { ?work cdm:do_not_index "true"^^xsd:boolean }
|
|
78
|
+
}
|
|
79
|
+
ORDER BY DESC(?date)
|
|
80
|
+
LIMIT ${limit}
|
|
81
|
+
`;
|
|
82
|
+
}
|
|
83
|
+
function searchCjeuQuery(dateFrom, dateTo, documentType, keyword, lang, limit) {
|
|
84
|
+
const safeLang = sparqlEscape(lang);
|
|
85
|
+
const dateFilter = dateFrom && dateTo
|
|
86
|
+
? `FILTER (?date >= "${sparqlEscape(dateFrom)}"^^xsd:date && ?date <= "${sparqlEscape(dateTo)}"^^xsd:date)`
|
|
87
|
+
: "";
|
|
88
|
+
// Bez document_type: wszystkie 3 typy case-law (JUDG + ORDER + OPIN_AG).
|
|
89
|
+
const typeUris = (documentType ? [documentType] : [...exports.CJEU_TYPES])
|
|
90
|
+
.map((t) => `<${exports.RESOURCE_TYPES[t]}>`)
|
|
91
|
+
.join(", ");
|
|
92
|
+
// Keyword przeszukuje tytul ekspresji (tytul CJEU zawiera strony, sygnature
|
|
93
|
+
// sprawy i slowa kluczowe wyroku) - tytul przestaje byc OPTIONAL.
|
|
94
|
+
const titleBlock = keyword
|
|
95
|
+
? `?expr cdm:expression_belongs_to_work ?work ;
|
|
96
|
+
cdm:expression_uses_language ?lang ;
|
|
97
|
+
cdm:expression_title ?title .
|
|
98
|
+
?lang dc:identifier "${safeLang}" .
|
|
99
|
+
FILTER(CONTAINS(LCASE(STR(?title)), "${sparqlEscape(keyword.toLowerCase())}"))`
|
|
100
|
+
: `OPTIONAL {
|
|
101
|
+
?expr cdm:expression_belongs_to_work ?work ;
|
|
102
|
+
cdm:expression_uses_language ?lang ;
|
|
103
|
+
cdm:expression_title ?title .
|
|
104
|
+
?lang dc:identifier "${safeLang}" .
|
|
105
|
+
}`;
|
|
106
|
+
return `${exports.PREFIXES}
|
|
107
|
+
SELECT DISTINCT ?work ?celex ?ecli ?date ?type ?title
|
|
108
|
+
WHERE {
|
|
109
|
+
?work cdm:work_has_resource-type ?type .
|
|
110
|
+
FILTER(?type IN (${typeUris}))
|
|
111
|
+
?work cdm:work_date_document ?date .
|
|
112
|
+
OPTIONAL { ?work cdm:resource_legal_id_celex ?celex }
|
|
113
|
+
OPTIONAL { ?work cdm:case-law_ecli ?ecli }
|
|
114
|
+
${titleBlock}
|
|
115
|
+
${dateFilter}
|
|
116
|
+
FILTER NOT EXISTS { ?work cdm:do_not_index "true"^^xsd:boolean }
|
|
117
|
+
}
|
|
118
|
+
ORDER BY DESC(?date)
|
|
119
|
+
LIMIT ${limit}
|
|
120
|
+
`;
|
|
121
|
+
}
|
|
122
|
+
function searchCjeuByEcliQuery(ecli, lang) {
|
|
123
|
+
// ECLI w Cellar to literal typu xsd:string - rowanie przez STR(),
|
|
124
|
+
// golym literalem "..." nie zmatchuje (zweryfikowane live 2026-07-08).
|
|
125
|
+
const safeEcli = sparqlEscape(ecli);
|
|
126
|
+
const safeLang = sparqlEscape(lang);
|
|
127
|
+
const typeUris = exports.CJEU_TYPES.map((t) => `<${exports.RESOURCE_TYPES[t]}>`).join(", ");
|
|
128
|
+
return `${exports.PREFIXES}
|
|
129
|
+
SELECT DISTINCT ?work ?celex ?ecli ?date ?type ?title
|
|
130
|
+
WHERE {
|
|
131
|
+
?work cdm:case-law_ecli ?ecli .
|
|
132
|
+
FILTER(STR(?ecli) = "${safeEcli}")
|
|
133
|
+
?work cdm:work_has_resource-type ?type .
|
|
134
|
+
FILTER(?type IN (${typeUris}))
|
|
135
|
+
OPTIONAL { ?work cdm:resource_legal_id_celex ?celex }
|
|
136
|
+
OPTIONAL { ?work cdm:work_date_document ?date }
|
|
137
|
+
OPTIONAL {
|
|
138
|
+
?expr cdm:expression_belongs_to_work ?work ;
|
|
139
|
+
cdm:expression_uses_language ?lang ;
|
|
140
|
+
cdm:expression_title ?title .
|
|
141
|
+
?lang dc:identifier "${safeLang}" .
|
|
142
|
+
}
|
|
143
|
+
}
|
|
144
|
+
LIMIT 5
|
|
145
|
+
`;
|
|
146
|
+
}
|
|
147
|
+
//# sourceMappingURL=queries.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"queries.js","sourceRoot":"","sources":["../src/queries.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,13 +1,20 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@matematicsolutions/mcp-eu-sparql",
|
|
3
|
-
"version": "1.
|
|
3
|
+
"version": "1.2.1",
|
|
4
4
|
"description": "MCP server - EU legislation and CJEU case law via Publications Office SPARQL (Cellar / EUR-Lex)",
|
|
5
5
|
"main": "dist/index.js",
|
|
6
6
|
"scripts": {
|
|
7
|
+
"test:descriptors": "node test/descriptor-lock.mjs",
|
|
7
8
|
"build": "tsc",
|
|
9
|
+
"prepare": "tsc",
|
|
8
10
|
"start": "node dist/index.js",
|
|
9
11
|
"dev": "tsx src/index.ts",
|
|
10
|
-
"drift": "node test/drift.mjs"
|
|
12
|
+
"drift": "node test/drift.mjs",
|
|
13
|
+
"test:offline": "node test/offline.mjs",
|
|
14
|
+
"smoke": "node test/smoke.mjs",
|
|
15
|
+
"test": "npm run drift && npm run test:offline",
|
|
16
|
+
"test:package": "node test/package-gate.mjs",
|
|
17
|
+
"test:package-gate": "node --test test/package-gate.test.mjs"
|
|
11
18
|
},
|
|
12
19
|
"keywords": [
|
|
13
20
|
"mcp",
|
|
@@ -16,7 +23,10 @@
|
|
|
16
23
|
"cellar",
|
|
17
24
|
"sparql",
|
|
18
25
|
"cjeu",
|
|
19
|
-
"legal"
|
|
26
|
+
"legal",
|
|
27
|
+
"gdpr",
|
|
28
|
+
"ecli",
|
|
29
|
+
"case-law"
|
|
20
30
|
],
|
|
21
31
|
"author": "MateMatic / Wieslaw Mazur",
|
|
22
32
|
"license": "MIT",
|