@cyanheads/eur-lex-mcp-server 0.1.4 → 0.1.6
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 +2 -2
- package/CLAUDE.md +2 -2
- package/README.md +1 -1
- package/changelog/0.1.x/0.1.5.md +24 -0
- package/changelog/0.1.x/0.1.6.md +21 -0
- package/dist/mcp-server/tools/definitions/eurlex-query-sparql.tool.d.ts +5 -0
- package/dist/mcp-server/tools/definitions/eurlex-query-sparql.tool.d.ts.map +1 -1
- package/dist/mcp-server/tools/definitions/eurlex-query-sparql.tool.js +54 -5
- package/dist/mcp-server/tools/definitions/eurlex-query-sparql.tool.js.map +1 -1
- package/dist/mcp-server/tools/definitions/index.d.ts +5 -0
- package/dist/mcp-server/tools/definitions/index.d.ts.map +1 -1
- package/dist/services/cellar-sparql/cellar-sparql-service.d.ts +4 -1
- package/dist/services/cellar-sparql/cellar-sparql-service.d.ts.map +1 -1
- package/dist/services/cellar-sparql/cellar-sparql-service.js +6 -2
- package/dist/services/cellar-sparql/cellar-sparql-service.js.map +1 -1
- package/package.json +5 -5
- package/server.json +3 -3
package/AGENTS.md
CHANGED
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
# Developer Protocol
|
|
2
2
|
|
|
3
3
|
**Server:** eur-lex-mcp-server
|
|
4
|
-
**Version:** 0.1.
|
|
5
|
-
**Framework:** [@cyanheads/mcp-ts-core](https://www.npmjs.com/package/@cyanheads/mcp-ts-core) `^0.10.
|
|
4
|
+
**Version:** 0.1.6
|
|
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
|
|
8
8
|
**Zod:** ^4.4.3
|
package/CLAUDE.md
CHANGED
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
# Developer Protocol
|
|
2
2
|
|
|
3
3
|
**Server:** eur-lex-mcp-server
|
|
4
|
-
**Version:** 0.1.
|
|
5
|
-
**Framework:** [@cyanheads/mcp-ts-core](https://www.npmjs.com/package/@cyanheads/mcp-ts-core) `^0.10.
|
|
4
|
+
**Version:** 0.1.6
|
|
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
|
|
8
8
|
**Zod:** ^4.4.3
|
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,24 @@
|
|
|
1
|
+
---
|
|
2
|
+
summary: "Framework upgrade to mcp-ts-core ^0.10.9 (ctx.content media collector, sharper Canvas SQL-gate errors, fresh-scaffold devcheck guards), new dependency-specifier devcheck step, plugin-manifest lint, re-synced skills + scripts"
|
|
3
|
+
breaking: false
|
|
4
|
+
security: false
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
# 0.1.5 — 2026-06-20
|
|
8
|
+
|
|
9
|
+
## Added
|
|
10
|
+
|
|
11
|
+
- **`Dependency Specifiers` devcheck step** (`scripts/check-dependency-specifiers.ts`) — rejects floating specifiers (`latest`, `*`, pre-release dist-tags) in `package.json` dependency sections and `bun.lock`'s `workspaces` map, catching the case where `bun update --latest` writes a literal `latest` dist-tag into the lock and silently re-resolves a held dependency on the next install.
|
|
12
|
+
- **Plugin marketplace manifest checks** in `lint:packaging` — validates `.claude-plugin/plugin.json` and `.codex-plugin/plugin.json` (non-empty descriptions, unscoped machine name in display fields, full scoped name in the install arg), gated by the new `devcheck.config.json` `packaging.pluginManifests` flag.
|
|
13
|
+
|
|
14
|
+
## Changed
|
|
15
|
+
|
|
16
|
+
- **`@cyanheads/mcp-ts-core` `^0.10.6` → `^0.10.9`** — adopts the upstream delta: `ctx.content` collector for image/audio blocks (bytes ride `content[]` only, never `structuredContent`); the Canvas SQL gate now classifies `SELECT`-shaped prepare failures as `invalid_sql` with the DuckDB binder detail instead of `non_select_statement`; `DuckdbProvider.describe({ tableName })` qualifies its `WHERE` filters to fix an ambiguous-column Binder Error; fresh-scaffold devcheck guards (changelog-sync and git-dependent checks skip cleanly when `.git` is absent); `check-skill-versions` skips a `SKILL.md` deleted from the worktree; biome `2.4.16` → `2.5.0`.
|
|
17
|
+
- **Project skills re-synced** to the mcp-ts-core 0.10.x baseline (14 `skills/<name>/SKILL.md`, mirrored into `.claude/skills/` and `.agents/skills/`); framework devcheck scripts refreshed (`build-changelog.ts`, `check-framework-antipatterns.ts`, `check-skill-versions.ts`, `devcheck.ts`, `lint-packaging.ts`).
|
|
18
|
+
|
|
19
|
+
### Dependency bumps
|
|
20
|
+
|
|
21
|
+
- `@cyanheads/mcp-ts-core` `^0.10.6` → `^0.10.9`
|
|
22
|
+
- `@biomejs/biome` `^2.4.16` → `^2.5.0`
|
|
23
|
+
- `@types/node` `^25.9.3` → `^26.0.0`
|
|
24
|
+
- `vitest` `^4.1.8` → `^4.1.9`
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
---
|
|
2
|
+
summary: "eurlex_query_sparql enforces its read-only contract (non-SELECT queries rejected locally) and honors the previously-ignored timeout_hint parameter"
|
|
3
|
+
breaking: false
|
|
4
|
+
security: false
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
# 0.1.6 — 2026-06-30
|
|
8
|
+
|
|
9
|
+
## Fixed
|
|
10
|
+
|
|
11
|
+
- **`eurlex_query_sparql` read-only enforcement** ([#9](https://github.com/cyanheads/eur-lex-mcp-server/issues/9)) — non-SELECT queries are now rejected locally, before any request reaches CELLAR. A new `leadingSparqlKeyword()` helper skips the query prologue (whitespace, `#` comments, `PREFIX`/`BASE` declarations) to find the first keyword; update forms (`DELETE`, `INSERT`, `LOAD`, `CLEAR`, `CREATE`, `DROP`, `COPY`, `MOVE`, `ADD`) and other query forms (`ASK`, `CONSTRUCT`, `DESCRIBE`) fail with the new `not_read_only` `ValidationError`.
|
|
12
|
+
- **`timeout_hint` now honored** ([#10](https://github.com/cyanheads/eur-lex-mcp-server/issues/10)) — the parameter was advertised but ignored. It is now threaded through `CellarSparqlService.query()` as an optional per-call timeout, falling back to the server-configured `SPARQL_QUERY_TIMEOUT_MS` (55000) default when omitted.
|
|
13
|
+
|
|
14
|
+
## Changed
|
|
15
|
+
|
|
16
|
+
- **`eurlex_query_sparql` schema descriptions** — the tool description and the `sparql_query` / `timeout_hint` field descriptions now document the read-only SELECT-only contract and the per-call timeout semantics.
|
|
17
|
+
|
|
18
|
+
### Dependency bumps
|
|
19
|
+
|
|
20
|
+
- `@biomejs/biome` `^2.5.0` → `^2.5.1`
|
|
21
|
+
- `@types/node` `^26.0.0` → `^26.0.1`
|
|
@@ -12,6 +12,11 @@ export declare const eurlex_query_sparql: import("@cyanheads/mcp-ts-core").ToolD
|
|
|
12
12
|
variables: z.ZodArray<z.ZodString>;
|
|
13
13
|
total: z.ZodNumber;
|
|
14
14
|
}, z.core.$strip>, readonly [{
|
|
15
|
+
readonly reason: "not_read_only";
|
|
16
|
+
readonly code: JsonRpcErrorCode.ValidationError;
|
|
17
|
+
readonly when: "The query is not a read-only SELECT — an update or non-SELECT query form was supplied.";
|
|
18
|
+
readonly recovery: "Rewrite the request as a SPARQL SELECT query; this tool is read-only and does not run updates (DELETE/INSERT) or other query forms (ASK/CONSTRUCT/DESCRIBE).";
|
|
19
|
+
}, {
|
|
15
20
|
readonly reason: "sparql_error";
|
|
16
21
|
readonly code: JsonRpcErrorCode.ValidationError;
|
|
17
22
|
readonly when: "Virtuoso returned a syntax or semantic error — the query is malformed.";
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"eurlex-query-sparql.tool.d.ts","sourceRoot":"","sources":["../../../../src/mcp-server/tools/definitions/eurlex-query-sparql.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-query-sparql.tool.d.ts","sourceRoot":"","sources":["../../../../src/mcp-server/tools/definitions/eurlex-query-sparql.tool.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAQ,CAAC,EAAE,MAAM,wBAAwB,CAAC;AACjD,OAAO,EAAE,gBAAgB,EAAE,MAAM,+BAA+B,CAAC;AAsCjE,eAAO,MAAM,mBAAmB;;;;;;;;;;;;;;;;;;;;;;cAqI9B,CAAC"}
|
|
@@ -5,9 +5,45 @@
|
|
|
5
5
|
import { tool, z } from '@cyanheads/mcp-ts-core';
|
|
6
6
|
import { JsonRpcErrorCode } from '@cyanheads/mcp-ts-core/errors';
|
|
7
7
|
import { getCellarSparqlService } from '../../../services/cellar-sparql/cellar-sparql-service.js';
|
|
8
|
+
/**
|
|
9
|
+
* Returns the first significant SPARQL keyword (uppercased) after skipping the
|
|
10
|
+
* query prologue — leading whitespace, `#` line comments, and `BASE`/`PREFIX`
|
|
11
|
+
* declarations. Returns `undefined` for an empty or prologue-only query.
|
|
12
|
+
*
|
|
13
|
+
* Enforces the tool's read-only contract: only a leading `SELECT` is accepted;
|
|
14
|
+
* update forms (DELETE/INSERT/…) and other query forms (ASK/CONSTRUCT/DESCRIBE)
|
|
15
|
+
* are rejected before any request reaches CELLAR. IRIs in PREFIX/BASE (which
|
|
16
|
+
* routinely contain `#`, e.g. the cdm: namespace) are consumed whole, so their
|
|
17
|
+
* `#` is never mistaken for the start of a comment.
|
|
18
|
+
*/
|
|
19
|
+
function leadingSparqlKeyword(query) {
|
|
20
|
+
let rest = query;
|
|
21
|
+
for (;;) {
|
|
22
|
+
const trimmed = rest.replace(/^\s+/, '');
|
|
23
|
+
if (trimmed.length === 0)
|
|
24
|
+
return;
|
|
25
|
+
if (trimmed.startsWith('#')) {
|
|
26
|
+
const newline = trimmed.indexOf('\n');
|
|
27
|
+
rest = newline === -1 ? '' : trimmed.slice(newline + 1);
|
|
28
|
+
continue;
|
|
29
|
+
}
|
|
30
|
+
const base = /^BASE\s*<[^>]*>/i.exec(trimmed);
|
|
31
|
+
if (base) {
|
|
32
|
+
rest = trimmed.slice(base[0].length);
|
|
33
|
+
continue;
|
|
34
|
+
}
|
|
35
|
+
const prefix = /^PREFIX\s+[^\s:]*:\s*<[^>]*>/i.exec(trimmed);
|
|
36
|
+
if (prefix) {
|
|
37
|
+
rest = trimmed.slice(prefix[0].length);
|
|
38
|
+
continue;
|
|
39
|
+
}
|
|
40
|
+
return /^[A-Za-z]+/.exec(trimmed)?.[0]?.toUpperCase();
|
|
41
|
+
}
|
|
42
|
+
}
|
|
8
43
|
export const eurlex_query_sparql = tool('eurlex_query_sparql', {
|
|
9
44
|
title: 'Raw CELLAR SPARQL Query',
|
|
10
|
-
description: 'Execute a raw SPARQL SELECT query against the CELLAR Virtuoso endpoint. ' +
|
|
45
|
+
description: 'Execute a raw, read-only SPARQL SELECT query against the CELLAR Virtuoso endpoint. ' +
|
|
46
|
+
'Only SELECT is accepted: update forms (DELETE, INSERT, LOAD, CLEAR, CREATE, DROP, COPY, MOVE, ADD) and other query forms (ASK, CONSTRUCT, DESCRIBE) are rejected locally before any request is sent. ' +
|
|
11
47
|
'Use only when the curated tools (eurlex_search_documents, eurlex_get_relations, etc.) do not cover the needed traversal. ' +
|
|
12
48
|
'The server caps all queries at 100 results — include an explicit LIMIT in your query to control the count; ' +
|
|
13
49
|
'if omitted or above 100 it will be injected or capped automatically. ' +
|
|
@@ -23,7 +59,8 @@ export const eurlex_query_sparql = tool('eurlex_query_sparql', {
|
|
|
23
59
|
sparql_query: z
|
|
24
60
|
.string()
|
|
25
61
|
.min(10)
|
|
26
|
-
.describe('A SPARQL SELECT query to execute against CELLAR.
|
|
62
|
+
.describe('A read-only SPARQL SELECT query to execute against CELLAR. Non-SELECT queries (updates such as DELETE/INSERT, or ASK/CONSTRUCT/DESCRIBE) are rejected before execution. ' +
|
|
63
|
+
'Leading comments and PREFIX/BASE declarations are allowed before the SELECT keyword. The cdm:, skos:, and xsd: prefixes are auto-injected. ' +
|
|
27
64
|
'LIMIT is injected at 100 if absent or capped to 100 if above that threshold.'),
|
|
28
65
|
timeout_hint: z
|
|
29
66
|
.number()
|
|
@@ -31,8 +68,8 @@ export const eurlex_query_sparql = tool('eurlex_query_sparql', {
|
|
|
31
68
|
.min(1000)
|
|
32
69
|
.max(55000)
|
|
33
70
|
.optional()
|
|
34
|
-
.describe('Optional client-side timeout
|
|
35
|
-
'
|
|
71
|
+
.describe('Optional client-side timeout for this request, in milliseconds (1000–55000). ' +
|
|
72
|
+
'When omitted, the server-configured default (SPARQL_QUERY_TIMEOUT_MS, 55000) applies. Virtuoso hard limit is 60 seconds.'),
|
|
36
73
|
}),
|
|
37
74
|
output: z.object({
|
|
38
75
|
bindings: z
|
|
@@ -47,6 +84,12 @@ export const eurlex_query_sparql = tool('eurlex_query_sparql', {
|
|
|
47
84
|
total: z.number().describe('Number of binding rows returned (capped at 100 by the server).'),
|
|
48
85
|
}),
|
|
49
86
|
errors: [
|
|
87
|
+
{
|
|
88
|
+
reason: 'not_read_only',
|
|
89
|
+
code: JsonRpcErrorCode.ValidationError,
|
|
90
|
+
when: 'The query is not a read-only SELECT — an update or non-SELECT query form was supplied.',
|
|
91
|
+
recovery: 'Rewrite the request as a SPARQL SELECT query; this tool is read-only and does not run updates (DELETE/INSERT) or other query forms (ASK/CONSTRUCT/DESCRIBE).',
|
|
92
|
+
},
|
|
50
93
|
{
|
|
51
94
|
reason: 'sparql_error',
|
|
52
95
|
code: JsonRpcErrorCode.ValidationError,
|
|
@@ -61,8 +104,14 @@ export const eurlex_query_sparql = tool('eurlex_query_sparql', {
|
|
|
61
104
|
},
|
|
62
105
|
],
|
|
63
106
|
async handler(input, ctx) {
|
|
107
|
+
const keyword = leadingSparqlKeyword(input.sparql_query);
|
|
108
|
+
if (keyword !== 'SELECT') {
|
|
109
|
+
throw ctx.fail('not_read_only', keyword
|
|
110
|
+
? `Only read-only SELECT queries are accepted; received a ${keyword} query.`
|
|
111
|
+
: 'Only read-only SELECT queries are accepted; no SELECT keyword was found.', { ...ctx.recoveryFor('not_read_only') });
|
|
112
|
+
}
|
|
64
113
|
const svc = getCellarSparqlService();
|
|
65
|
-
const bindings = await svc.query(input.sparql_query, ctx);
|
|
114
|
+
const bindings = await svc.query(input.sparql_query, ctx, input.timeout_hint);
|
|
66
115
|
ctx.log.info('Raw SPARQL query executed', { resultCount: bindings.length });
|
|
67
116
|
// Extract variable names from first binding or return empty
|
|
68
117
|
const variables = bindings.length > 0 ? Object.keys(bindings[0]) : [];
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"eurlex-query-sparql.tool.js","sourceRoot":"","sources":["../../../../src/mcp-server/tools/definitions/eurlex-query-sparql.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,EAAE,sBAAsB,EAAE,MAAM,mDAAmD,CAAC;AAE3F,MAAM,CAAC,MAAM,mBAAmB,GAAG,IAAI,CAAC,qBAAqB,EAAE;IAC7D,KAAK,EAAE,yBAAyB;IAChC,WAAW,EACT,
|
|
1
|
+
{"version":3,"file":"eurlex-query-sparql.tool.js","sourceRoot":"","sources":["../../../../src/mcp-server/tools/definitions/eurlex-query-sparql.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,EAAE,sBAAsB,EAAE,MAAM,mDAAmD,CAAC;AAE3F;;;;;;;;;;GAUG;AACH,SAAS,oBAAoB,CAAC,KAAa;IACzC,IAAI,IAAI,GAAG,KAAK,CAAC;IACjB,SAAS,CAAC;QACR,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;QACzC,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC;YAAE,OAAO;QACjC,IAAI,OAAO,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;YAC5B,MAAM,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;YACtC,IAAI,GAAG,OAAO,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC,OAAO,GAAG,CAAC,CAAC,CAAC;YACxD,SAAS;QACX,CAAC;QACD,MAAM,IAAI,GAAG,kBAAkB,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QAC9C,IAAI,IAAI,EAAE,CAAC;YACT,IAAI,GAAG,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC;YACrC,SAAS;QACX,CAAC;QACD,MAAM,MAAM,GAAG,+BAA+B,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QAC7D,IAAI,MAAM,EAAE,CAAC;YACX,IAAI,GAAG,OAAO,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC;YACvC,SAAS;QACX,CAAC;QACD,OAAO,YAAY,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,WAAW,EAAE,CAAC;IACxD,CAAC;AACH,CAAC;AAED,MAAM,CAAC,MAAM,mBAAmB,GAAG,IAAI,CAAC,qBAAqB,EAAE;IAC7D,KAAK,EAAE,yBAAyB;IAChC,WAAW,EACT,qFAAqF;QACrF,uMAAuM;QACvM,2HAA2H;QAC3H,6GAA6G;QAC7G,uEAAuE;QACvE,0GAA0G;QAC1G,8CAA8C;QAC9C,qDAAqD;QACrD,6FAA6F;QAC7F,mGAAmG;QACnG,kCAAkC;QAClC,gHAAgH;IAClH,WAAW,EAAE,EAAE,YAAY,EAAE,IAAI,EAAE,aAAa,EAAE,IAAI,EAAE;IACxD,KAAK,EAAE,CAAC,CAAC,MAAM,CAAC;QACd,YAAY,EAAE,CAAC;aACZ,MAAM,EAAE;aACR,GAAG,CAAC,EAAE,CAAC;aACP,QAAQ,CACP,0KAA0K;YACxK,6IAA6I;YAC7I,8EAA8E,CACjF;QACH,YAAY,EAAE,CAAC;aACZ,MAAM,EAAE;aACR,GAAG,EAAE;aACL,GAAG,CAAC,IAAI,CAAC;aACT,GAAG,CAAC,KAAK,CAAC;aACV,QAAQ,EAAE;aACV,QAAQ,CACP,+EAA+E;YAC7E,0HAA0H,CAC7H;KACJ,CAAC;IACF,MAAM,EAAE,CAAC,CAAC,MAAM,CAAC;QACf,QAAQ,EAAE,CAAC;aACR,KAAK,CACJ,CAAC;aACE,MAAM,CAAC,EAAE,CAAC;aACV,WAAW,EAAE;aACb,QAAQ,CACP,+KAA+K,CAChL,CACJ;aACA,QAAQ,CACP,mIAAmI,CACpI;QACH,SAAS,EAAE,CAAC;aACT,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,6DAA6D,CAAC,CAAC;aACzF,QAAQ,CAAC,sDAAsD,CAAC;QACnE,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,gEAAgE,CAAC;KAC7F,CAAC;IAEF,MAAM,EAAE;QACN;YACE,MAAM,EAAE,eAAe;YACvB,IAAI,EAAE,gBAAgB,CAAC,eAAe;YACtC,IAAI,EAAE,wFAAwF;YAC9F,QAAQ,EACN,8JAA8J;SACjK;QACD;YACE,MAAM,EAAE,cAAc;YACtB,IAAI,EAAE,gBAAgB,CAAC,eAAe;YACtC,IAAI,EAAE,wEAAwE;YAC9E,QAAQ,EACN,gGAAgG;SACnG;QACD;YACE,MAAM,EAAE,gBAAgB;YACxB,IAAI,EAAE,gBAAgB,CAAC,kBAAkB;YACzC,IAAI,EAAE,mDAAmD;YACzD,QAAQ,EACN,2FAA2F;SAC9F;KACF;IAED,KAAK,CAAC,OAAO,CAAC,KAAK,EAAE,GAAG;QACtB,MAAM,OAAO,GAAG,oBAAoB,CAAC,KAAK,CAAC,YAAY,CAAC,CAAC;QACzD,IAAI,OAAO,KAAK,QAAQ,EAAE,CAAC;YACzB,MAAM,GAAG,CAAC,IAAI,CACZ,eAAe,EACf,OAAO;gBACL,CAAC,CAAC,0DAA0D,OAAO,SAAS;gBAC5E,CAAC,CAAC,0EAA0E,EAC9E,EAAE,GAAG,GAAG,CAAC,WAAW,CAAC,eAAe,CAAC,EAAE,CACxC,CAAC;QACJ,CAAC;QAED,MAAM,GAAG,GAAG,sBAAsB,EAAE,CAAC;QAErC,MAAM,QAAQ,GAAG,MAAM,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,YAAY,EAAE,GAAG,EAAE,KAAK,CAAC,YAAY,CAAC,CAAC;QAC9E,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,2BAA2B,EAAE,EAAE,WAAW,EAAE,QAAQ,CAAC,MAAM,EAAE,CAAC,CAAC;QAE5E,4DAA4D;QAC5D,MAAM,SAAS,GAAG,QAAQ,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;QAEvE,OAAO;YACL,QAAQ;YACR,SAAS;YACT,KAAK,EAAE,QAAQ,CAAC,MAAM;SACvB,CAAC;IACJ,CAAC;IAED,MAAM,EAAE,CAAC,MAAM,EAAE,EAAE;QACjB,MAAM,KAAK,GAAa,CAAC,sBAAsB,MAAM,CAAC,KAAK,UAAU,CAAC,CAAC;QACvE,IAAI,MAAM,CAAC,SAAS,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAChC,KAAK,CAAC,IAAI,CAAC,kBAAkB,MAAM,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAChE,CAAC;QACD,IAAI,MAAM,CAAC,KAAK,KAAK,CAAC,EAAE,CAAC;YACvB,KAAK,CAAC,IAAI,CAAC,yBAAyB,CAAC,CAAC;QACxC,CAAC;aAAM,CAAC;YACN,kCAAkC;YAClC,MAAM,WAAW,GAAG,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;YACjD,MAAM,MAAM,GAAG,KAAK,MAAM,CAAC,SAAS,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC;YACrD,MAAM,GAAG,GAAG,KAAK,MAAM,CAAC,SAAS,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC;YACnE,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;YACnB,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;YAChB,KAAK,MAAM,GAAG,IAAI,WAAW,EAAE,CAAC;gBAC9B,MAAM,KAAK,GAAG,MAAM,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE;oBACvC,MAAM,IAAI,GAAI,GAA0C,CAAC,CAAC,CAAC,CAAC;oBAC5D,OAAO,IAAI,EAAE,KAAK,IAAI,EAAE,CAAC;gBAC3B,CAAC,CAAC,CAAC;gBACH,KAAK,CAAC,IAAI,CAAC,KAAK,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;YACzC,CAAC;YACD,IAAI,MAAM,CAAC,KAAK,GAAG,EAAE,EAAE,CAAC;gBACtB,KAAK,CAAC,IAAI,CAAC,0BAA0B,MAAM,CAAC,KAAK,SAAS,CAAC,CAAC;YAC9D,CAAC;QACH,CAAC;QACD,OAAO,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACpD,CAAC;CACF,CAAC,CAAC"}
|
|
@@ -164,6 +164,11 @@ export declare const allToolDefinitions: (import("@cyanheads/mcp-ts-core").ToolD
|
|
|
164
164
|
variables: import("zod").ZodArray<import("zod").ZodString>;
|
|
165
165
|
total: import("zod").ZodNumber;
|
|
166
166
|
}, import("zod/v4/core").$strip>, readonly [{
|
|
167
|
+
readonly reason: "not_read_only";
|
|
168
|
+
readonly code: import("@cyanheads/mcp-ts-core/errors").JsonRpcErrorCode.ValidationError;
|
|
169
|
+
readonly when: "The query is not a read-only SELECT — an update or non-SELECT query form was supplied.";
|
|
170
|
+
readonly recovery: "Rewrite the request as a SPARQL SELECT query; this tool is read-only and does not run updates (DELETE/INSERT) or other query forms (ASK/CONSTRUCT/DESCRIBE).";
|
|
171
|
+
}, {
|
|
167
172
|
readonly reason: "sparql_error";
|
|
168
173
|
readonly code: import("@cyanheads/mcp-ts-core/errors").JsonRpcErrorCode.ValidationError;
|
|
169
174
|
readonly when: "Virtuoso returned a syntax or semantic error — the query is malformed.";
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/mcp-server/tools/definitions/index.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAUH,eAAO,MAAM,kBAAkB
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/mcp-server/tools/definitions/index.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAUH,eAAO,MAAM,kBAAkB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;iBAQ9B,CAAC"}
|
|
@@ -17,8 +17,11 @@ export declare class CellarSparqlService {
|
|
|
17
17
|
/**
|
|
18
18
|
* Execute a raw SPARQL SELECT query. Prefixes are prepended automatically
|
|
19
19
|
* if not already present. LIMIT is injected/capped at `maxResults`.
|
|
20
|
+
*
|
|
21
|
+
* @param timeoutMs - Optional per-call client-side timeout in milliseconds.
|
|
22
|
+
* Falls back to the server-configured `sparqlQueryTimeoutMs` when omitted.
|
|
20
23
|
*/
|
|
21
|
-
query(rawQuery: string, ctx: Context): Promise<SparqlBinding[]>;
|
|
24
|
+
query(rawQuery: string, ctx: Context, timeoutMs?: number): Promise<SparqlBinding[]>;
|
|
22
25
|
/** Extract a string value from a binding field, returning undefined if absent. */
|
|
23
26
|
static bindingValue(binding: SparqlBinding | undefined, field: string): string | undefined;
|
|
24
27
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cellar-sparql-service.d.ts","sourceRoot":"","sources":["../../../src/services/cellar-sparql/cellar-sparql-service.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,wBAAwB,CAAC;AACtD,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,+BAA+B,CAAC;AAE/D,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,gCAAgC,CAAC;AAErE,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,2BAA2B,CAAC;AAC9D,OAAO,KAAK,EAAE,aAAa,EAAqB,MAAM,YAAY,CAAC;AA8BnE,qBAAa,mBAAmB;IAC9B,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAS;IAClC,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAS;IACnC,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAS;gBAExB,OAAO,EAAE,SAAS,EAAE,QAAQ,EAAE,cAAc,EAAE,YAAY,EAAE,YAAY;IAMpF
|
|
1
|
+
{"version":3,"file":"cellar-sparql-service.d.ts","sourceRoot":"","sources":["../../../src/services/cellar-sparql/cellar-sparql-service.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,wBAAwB,CAAC;AACtD,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,+BAA+B,CAAC;AAE/D,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,gCAAgC,CAAC;AAErE,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,2BAA2B,CAAC;AAC9D,OAAO,KAAK,EAAE,aAAa,EAAqB,MAAM,YAAY,CAAC;AA8BnE,qBAAa,mBAAmB;IAC9B,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAS;IAClC,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAS;IACnC,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAS;gBAExB,OAAO,EAAE,SAAS,EAAE,QAAQ,EAAE,cAAc,EAAE,YAAY,EAAE,YAAY;IAMpF;;;;;;OAMG;IACG,KAAK,CAAC,QAAQ,EAAE,MAAM,EAAE,GAAG,EAAE,OAAO,EAAE,SAAS,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,aAAa,EAAE,CAAC;IAwEzF,kFAAkF;IAClF,MAAM,CAAC,YAAY,CAAC,OAAO,EAAE,aAAa,GAAG,SAAS,EAAE,KAAK,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS;CAG3F;AAMD,wBAAgB,uBAAuB,CACrC,MAAM,EAAE,SAAS,EACjB,OAAO,EAAE,cAAc,EACvB,YAAY,EAAE,YAAY,GACzB,IAAI,CAEN;AAED,wBAAgB,sBAAsB,IAAI,mBAAmB,CAO5D"}
|
|
@@ -43,8 +43,12 @@ export class CellarSparqlService {
|
|
|
43
43
|
/**
|
|
44
44
|
* Execute a raw SPARQL SELECT query. Prefixes are prepended automatically
|
|
45
45
|
* if not already present. LIMIT is injected/capped at `maxResults`.
|
|
46
|
+
*
|
|
47
|
+
* @param timeoutMs - Optional per-call client-side timeout in milliseconds.
|
|
48
|
+
* Falls back to the server-configured `sparqlQueryTimeoutMs` when omitted.
|
|
46
49
|
*/
|
|
47
|
-
async query(rawQuery, ctx) {
|
|
50
|
+
async query(rawQuery, ctx, timeoutMs) {
|
|
51
|
+
const effectiveTimeoutMs = timeoutMs ?? this.timeoutMs;
|
|
48
52
|
const withPrefixes = rawQuery.includes('PREFIX cdm:') ? rawQuery : SPARQL_PREFIXES + rawQuery;
|
|
49
53
|
const cappedQuery = enforceLimitInQuery(withPrefixes, this.maxResults);
|
|
50
54
|
return withRetry(async () => {
|
|
@@ -59,7 +63,7 @@ export class CellarSparqlService {
|
|
|
59
63
|
Accept: 'application/sparql-results+json',
|
|
60
64
|
},
|
|
61
65
|
body: body.toString(),
|
|
62
|
-
signal: AbortSignal.timeout(
|
|
66
|
+
signal: AbortSignal.timeout(effectiveTimeoutMs),
|
|
63
67
|
});
|
|
64
68
|
const text = await response.text();
|
|
65
69
|
if (!response.ok) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cellar-sparql-service.js","sourceRoot":"","sources":["../../../src/services/cellar-sparql/cellar-sparql-service.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAIH,OAAO,EAAE,kBAAkB,EAAE,eAAe,EAAE,MAAM,+BAA+B,CAAC;AAEpF,OAAO,EAAE,SAAS,EAAE,MAAM,8BAA8B,CAAC;AAIzD,oEAAoE;AACpE,MAAM,eAAe,GAAG;;;CAGvB,CAAC;AAEF,qFAAqF;AACrF,MAAM,iBAAiB,GAAG,yBAAyB,CAAC;AACpD,qDAAqD;AACrD,MAAM,mBAAmB,GAAG,kCAAkC,CAAC;AAE/D;;;GAGG;AACH,SAAS,mBAAmB,CAAC,KAAa,EAAE,GAAW;IACrD,MAAM,OAAO,GAAG,kBAAkB,CAAC;IACnC,MAAM,KAAK,GAAG,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IAClC,IAAI,CAAC,KAAK,EAAE,CAAC;QACX,OAAO,GAAG,KAAK,CAAC,OAAO,EAAE,WAAW,GAAG,EAAE,CAAC;IAC5C,CAAC;IACD,MAAM,QAAQ,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAE,EAAE,EAAE,CAAC,CAAC;IACzC,IAAI,QAAQ,GAAG,GAAG,EAAE,CAAC;QACnB,OAAO,KAAK,CAAC,OAAO,CAAC,OAAO,EAAE,SAAS,GAAG,EAAE,CAAC,CAAC;IAChD,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC;AAED,MAAM,OAAO,mBAAmB;IACb,QAAQ,CAAS;IACjB,SAAS,CAAS;IAClB,UAAU,CAAS;IAEpC,YAAY,OAAkB,EAAE,QAAwB,EAAE,YAA0B;QAClF,IAAI,CAAC,QAAQ,GAAG,YAAY,CAAC,oBAAoB,CAAC;QAClD,IAAI,CAAC,SAAS,GAAG,YAAY,CAAC,oBAAoB,CAAC;QACnD,IAAI,CAAC,UAAU,GAAG,YAAY,CAAC,gBAAgB,CAAC;IAClD,CAAC;IAED
|
|
1
|
+
{"version":3,"file":"cellar-sparql-service.js","sourceRoot":"","sources":["../../../src/services/cellar-sparql/cellar-sparql-service.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.1.
|
|
3
|
+
"version": "0.1.6",
|
|
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",
|
|
@@ -89,17 +89,17 @@
|
|
|
89
89
|
"access": "public"
|
|
90
90
|
},
|
|
91
91
|
"dependencies": {
|
|
92
|
-
"@cyanheads/mcp-ts-core": "^0.10.
|
|
92
|
+
"@cyanheads/mcp-ts-core": "^0.10.9",
|
|
93
93
|
"pino-pretty": "^13.1.3",
|
|
94
94
|
"zod": "^4.4.3"
|
|
95
95
|
},
|
|
96
96
|
"devDependencies": {
|
|
97
|
-
"@biomejs/biome": "^2.
|
|
98
|
-
"@types/node": "^
|
|
97
|
+
"@biomejs/biome": "^2.5.1",
|
|
98
|
+
"@types/node": "^26.0.1",
|
|
99
99
|
"depcheck": "^1.4.7",
|
|
100
100
|
"ignore": "^7.0.5",
|
|
101
101
|
"tsc-alias": "^1.8.17",
|
|
102
102
|
"typescript": "^6.0.3",
|
|
103
|
-
"vitest": "^4.1.
|
|
103
|
+
"vitest": "^4.1.9"
|
|
104
104
|
}
|
|
105
105
|
}
|
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.1.
|
|
9
|
+
"version": "0.1.6",
|
|
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.1.
|
|
22
|
+
"version": "0.1.6",
|
|
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.1.
|
|
79
|
+
"version": "0.1.6",
|
|
80
80
|
"packageArguments": [
|
|
81
81
|
{
|
|
82
82
|
"type": "positional",
|