ris-mcp-ts 1.0.2 → 1.1.0
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 +1 -0
- package/dist/http.d.ts +11 -0
- package/dist/http.d.ts.map +1 -0
- package/dist/http.js +94 -0
- package/dist/http.js.map +1 -0
- package/dist/types.d.ts +60 -237
- package/dist/types.d.ts.map +1 -1
- package/package.json +20 -8
package/README.md
CHANGED
|
@@ -5,6 +5,7 @@
|
|
|
5
5
|
[](LICENSE)
|
|
6
6
|
[](https://nodejs.org/)
|
|
7
7
|
[](https://modelcontextprotocol.io/)
|
|
8
|
+
[](https://registry.modelcontextprotocol.io)
|
|
8
9
|
|
|
9
10
|
An [MCP (Model Context Protocol)](https://modelcontextprotocol.io/) server that gives AI assistants access to Austria's official legal database — the **Rechtsinformationssystem (RIS)**.
|
|
10
11
|
|
package/dist/http.d.ts
ADDED
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* HTTP transport entry point for the RIS MCP Server.
|
|
3
|
+
*
|
|
4
|
+
* Provides an Express-based HTTP server with Streamable HTTP transport
|
|
5
|
+
* for deployment on cloud platforms (e.g., AWS Lightsail).
|
|
6
|
+
*/
|
|
7
|
+
import { StreamableHTTPServerTransport } from '@modelcontextprotocol/sdk/server/streamableHttp.js';
|
|
8
|
+
export declare const app: import("express-serve-static-core").Express;
|
|
9
|
+
export declare const sessions: Map<string, StreamableHTTPServerTransport>;
|
|
10
|
+
export declare const mcpLimiter: import("express-rate-limit").RateLimitRequestHandler;
|
|
11
|
+
//# sourceMappingURL=http.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"http.d.ts","sourceRoot":"","sources":["../src/http.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAKH,OAAO,EAAE,6BAA6B,EAAE,MAAM,oDAAoD,CAAC;AAOnG,eAAO,MAAM,GAAG,6CAAY,CAAC;AAC7B,eAAO,MAAM,QAAQ,4CAAmD,CAAC;AAKzE,eAAO,MAAM,UAAU,sDAQrB,CAAC"}
|
package/dist/http.js
ADDED
|
@@ -0,0 +1,94 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* HTTP transport entry point for the RIS MCP Server.
|
|
3
|
+
*
|
|
4
|
+
* Provides an Express-based HTTP server with Streamable HTTP transport
|
|
5
|
+
* for deployment on cloud platforms (e.g., AWS Lightsail).
|
|
6
|
+
*/
|
|
7
|
+
import crypto from 'node:crypto';
|
|
8
|
+
import { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';
|
|
9
|
+
import { StreamableHTTPServerTransport } from '@modelcontextprotocol/sdk/server/streamableHttp.js';
|
|
10
|
+
import express from 'express';
|
|
11
|
+
import rateLimit from 'express-rate-limit';
|
|
12
|
+
import { registerAllTools } from './tools/index.js';
|
|
13
|
+
export const app = express();
|
|
14
|
+
export const sessions = new Map();
|
|
15
|
+
app.use(express.json());
|
|
16
|
+
// Rate limiting: MCP-specific (each request triggers upstream RIS API calls)
|
|
17
|
+
export const mcpLimiter = rateLimit({
|
|
18
|
+
windowMs: 60_000,
|
|
19
|
+
max: 60,
|
|
20
|
+
standardHeaders: 'draft-7',
|
|
21
|
+
legacyHeaders: false,
|
|
22
|
+
keyGenerator: (req) => req.headers['mcp-session-id'] || req.ip || 'unknown',
|
|
23
|
+
message: { error: 'Zu viele Anfragen. Bitte später erneut versuchen.' },
|
|
24
|
+
validate: { keyGeneratorIpFallback: false },
|
|
25
|
+
});
|
|
26
|
+
app.use('/mcp', mcpLimiter);
|
|
27
|
+
// Health check endpoint
|
|
28
|
+
app.get('/health', (_req, res) => {
|
|
29
|
+
res.json({
|
|
30
|
+
status: 'ok',
|
|
31
|
+
service: 'ris-mcp',
|
|
32
|
+
activeSessions: sessions.size,
|
|
33
|
+
});
|
|
34
|
+
});
|
|
35
|
+
// MCP endpoint — POST creates or reuses sessions, GET/DELETE require existing session
|
|
36
|
+
app.post('/mcp', async (req, res) => {
|
|
37
|
+
const sessionId = req.headers['mcp-session-id'];
|
|
38
|
+
// Reuse existing session
|
|
39
|
+
if (sessionId) {
|
|
40
|
+
const existing = sessions.get(sessionId);
|
|
41
|
+
if (existing) {
|
|
42
|
+
await existing.handleRequest(req, res, req.body);
|
|
43
|
+
return;
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
// Create new session
|
|
47
|
+
const transport = new StreamableHTTPServerTransport({
|
|
48
|
+
sessionIdGenerator: () => crypto.randomUUID(),
|
|
49
|
+
});
|
|
50
|
+
const server = new McpServer({ name: 'ris-mcp', version: '1.0.0' });
|
|
51
|
+
registerAllTools(server);
|
|
52
|
+
transport.onclose = () => {
|
|
53
|
+
if (transport.sessionId) {
|
|
54
|
+
sessions.delete(transport.sessionId);
|
|
55
|
+
}
|
|
56
|
+
};
|
|
57
|
+
await server.connect(transport);
|
|
58
|
+
await transport.handleRequest(req, res, req.body);
|
|
59
|
+
// Store session AFTER handleRequest so the sessionId is available
|
|
60
|
+
// (the SDK generates the sessionId during initialize handling)
|
|
61
|
+
if (transport.sessionId && !sessions.has(transport.sessionId)) {
|
|
62
|
+
sessions.set(transport.sessionId, transport);
|
|
63
|
+
}
|
|
64
|
+
});
|
|
65
|
+
app.get('/mcp', (req, res) => {
|
|
66
|
+
const sessionId = req.headers['mcp-session-id'];
|
|
67
|
+
if (sessionId) {
|
|
68
|
+
const transport = sessions.get(sessionId);
|
|
69
|
+
if (transport) {
|
|
70
|
+
transport.handleRequest(req, res, req.body);
|
|
71
|
+
return;
|
|
72
|
+
}
|
|
73
|
+
}
|
|
74
|
+
res.status(400).json({ error: 'Keine gültige Session. Starte mit POST /mcp.' });
|
|
75
|
+
});
|
|
76
|
+
app.delete('/mcp', (req, res) => {
|
|
77
|
+
const sessionId = req.headers['mcp-session-id'];
|
|
78
|
+
if (sessionId) {
|
|
79
|
+
const transport = sessions.get(sessionId);
|
|
80
|
+
if (transport) {
|
|
81
|
+
transport.handleRequest(req, res, req.body);
|
|
82
|
+
return;
|
|
83
|
+
}
|
|
84
|
+
}
|
|
85
|
+
res.status(400).json({ error: 'Keine gültige Session. Starte mit POST /mcp.' });
|
|
86
|
+
});
|
|
87
|
+
// Start server only when not in test mode
|
|
88
|
+
const PORT = process.env.PORT ?? 3000;
|
|
89
|
+
if (process.env.NODE_ENV !== 'test') {
|
|
90
|
+
app.listen(PORT, () => {
|
|
91
|
+
console.log(`RIS MCP HTTP server listening on port ${PORT}`);
|
|
92
|
+
});
|
|
93
|
+
}
|
|
94
|
+
//# sourceMappingURL=http.js.map
|
package/dist/http.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"http.js","sourceRoot":"","sources":["../src/http.ts"],"names":[],"mappings":"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"}
|
package/dist/types.d.ts
CHANGED
|
@@ -9,25 +9,62 @@ import { z } from 'zod';
|
|
|
9
9
|
/**
|
|
10
10
|
* Application types for federal law searches in RIS.
|
|
11
11
|
*/
|
|
12
|
-
export declare const BundesrechtApplikationSchema: z.ZodEnum<
|
|
12
|
+
export declare const BundesrechtApplikationSchema: z.ZodEnum<{
|
|
13
|
+
BrKons: "BrKons";
|
|
14
|
+
Begut: "Begut";
|
|
15
|
+
BgblAuth: "BgblAuth";
|
|
16
|
+
Erv: "Erv";
|
|
17
|
+
}>;
|
|
13
18
|
export type BundesrechtApplikation = z.infer<typeof BundesrechtApplikationSchema>;
|
|
14
19
|
/**
|
|
15
20
|
* Court types for case law searches in RIS.
|
|
16
21
|
*/
|
|
17
|
-
export declare const JudikaturGerichtSchema: z.ZodEnum<
|
|
22
|
+
export declare const JudikaturGerichtSchema: z.ZodEnum<{
|
|
23
|
+
Justiz: "Justiz";
|
|
24
|
+
Vfgh: "Vfgh";
|
|
25
|
+
Vwgh: "Vwgh";
|
|
26
|
+
Bvwg: "Bvwg";
|
|
27
|
+
Lvwg: "Lvwg";
|
|
28
|
+
Dsk: "Dsk";
|
|
29
|
+
AsylGH: "AsylGH";
|
|
30
|
+
Normenliste: "Normenliste";
|
|
31
|
+
Pvak: "Pvak";
|
|
32
|
+
Gbk: "Gbk";
|
|
33
|
+
Dok: "Dok";
|
|
34
|
+
}>;
|
|
18
35
|
export type JudikaturGericht = z.infer<typeof JudikaturGerichtSchema>;
|
|
19
36
|
/**
|
|
20
37
|
* Austrian federal states (Bundesländer).
|
|
21
38
|
* Note: Uses Umlauts (ö, ä) for display purposes.
|
|
22
39
|
*/
|
|
23
|
-
export declare const BundeslandSchema: z.ZodEnum<
|
|
40
|
+
export declare const BundeslandSchema: z.ZodEnum<{
|
|
41
|
+
Wien: "Wien";
|
|
42
|
+
Niederösterreich: "Niederösterreich";
|
|
43
|
+
Oberösterreich: "Oberösterreich";
|
|
44
|
+
Steiermark: "Steiermark";
|
|
45
|
+
Tirol: "Tirol";
|
|
46
|
+
Kärnten: "Kärnten";
|
|
47
|
+
Salzburg: "Salzburg";
|
|
48
|
+
Vorarlberg: "Vorarlberg";
|
|
49
|
+
Burgenland: "Burgenland";
|
|
50
|
+
}>;
|
|
24
51
|
export type Bundesland = z.infer<typeof BundeslandSchema>;
|
|
25
52
|
/**
|
|
26
53
|
* Austrian federal states for Landesrecht API (ASCII versions without Umlauts).
|
|
27
54
|
* The RIS API uses the SucheIn format (e.g., Bundesland.SucheInWien=true).
|
|
28
55
|
*/
|
|
29
56
|
export declare const LANDESRECHT_BUNDESLAENDER: readonly ["Wien", "Niederoesterreich", "Oberoesterreich", "Salzburg", "Tirol", "Vorarlberg", "Kaernten", "Steiermark", "Burgenland"];
|
|
30
|
-
export declare const LandesrechtBundeslandSchema: z.ZodEnum<
|
|
57
|
+
export declare const LandesrechtBundeslandSchema: z.ZodEnum<{
|
|
58
|
+
Wien: "Wien";
|
|
59
|
+
Steiermark: "Steiermark";
|
|
60
|
+
Tirol: "Tirol";
|
|
61
|
+
Salzburg: "Salzburg";
|
|
62
|
+
Vorarlberg: "Vorarlberg";
|
|
63
|
+
Burgenland: "Burgenland";
|
|
64
|
+
Niederoesterreich: "Niederoesterreich";
|
|
65
|
+
Oberoesterreich: "Oberoesterreich";
|
|
66
|
+
Kaernten: "Kaernten";
|
|
67
|
+
}>;
|
|
31
68
|
export type LandesrechtBundesland = z.infer<typeof LandesrechtBundeslandSchema>;
|
|
32
69
|
/**
|
|
33
70
|
* Date format validation schema (YYYY-MM-DD).
|
|
@@ -38,12 +75,20 @@ export declare const OptionalDateSchema: z.ZodOptional<z.ZodString>;
|
|
|
38
75
|
/**
|
|
39
76
|
* Number of documents per page for paginated API responses.
|
|
40
77
|
*/
|
|
41
|
-
export declare const DokumenteProSeiteSchema: z.ZodEnum<
|
|
78
|
+
export declare const DokumenteProSeiteSchema: z.ZodEnum<{
|
|
79
|
+
Ten: "Ten";
|
|
80
|
+
Twenty: "Twenty";
|
|
81
|
+
Fifty: "Fifty";
|
|
82
|
+
OneHundred: "OneHundred";
|
|
83
|
+
}>;
|
|
42
84
|
export type DokumenteProSeite = z.infer<typeof DokumenteProSeiteSchema>;
|
|
43
85
|
/**
|
|
44
86
|
* Output format for MCP tool responses.
|
|
45
87
|
*/
|
|
46
|
-
export declare const ResponseFormatSchema: z.ZodEnum<
|
|
88
|
+
export declare const ResponseFormatSchema: z.ZodEnum<{
|
|
89
|
+
markdown: "markdown";
|
|
90
|
+
json: "json";
|
|
91
|
+
}>;
|
|
47
92
|
export type ResponseFormat = z.infer<typeof ResponseFormatSchema>;
|
|
48
93
|
/**
|
|
49
94
|
* URLs for accessing document content in different formats.
|
|
@@ -53,17 +98,7 @@ export declare const ContentUrlSchema: z.ZodObject<{
|
|
|
53
98
|
html: z.ZodOptional<z.ZodNullable<z.ZodString>>;
|
|
54
99
|
rtf: z.ZodOptional<z.ZodNullable<z.ZodString>>;
|
|
55
100
|
pdf: z.ZodOptional<z.ZodNullable<z.ZodString>>;
|
|
56
|
-
},
|
|
57
|
-
xml?: string | null | undefined;
|
|
58
|
-
html?: string | null | undefined;
|
|
59
|
-
rtf?: string | null | undefined;
|
|
60
|
-
pdf?: string | null | undefined;
|
|
61
|
-
}, {
|
|
62
|
-
xml?: string | null | undefined;
|
|
63
|
-
html?: string | null | undefined;
|
|
64
|
-
rtf?: string | null | undefined;
|
|
65
|
-
pdf?: string | null | undefined;
|
|
66
|
-
}>;
|
|
101
|
+
}, z.core.$strip>;
|
|
67
102
|
export type ContentUrl = z.infer<typeof ContentUrlSchema>;
|
|
68
103
|
/**
|
|
69
104
|
* Citation information for a legal document.
|
|
@@ -76,23 +111,7 @@ export declare const CitationSchema: z.ZodObject<{
|
|
|
76
111
|
eli: z.ZodOptional<z.ZodNullable<z.ZodString>>;
|
|
77
112
|
inkrafttreten: z.ZodOptional<z.ZodNullable<z.ZodString>>;
|
|
78
113
|
ausserkrafttreten: z.ZodOptional<z.ZodNullable<z.ZodString>>;
|
|
79
|
-
},
|
|
80
|
-
kurztitel?: string | null | undefined;
|
|
81
|
-
langtitel?: string | null | undefined;
|
|
82
|
-
kundmachungsorgan?: string | null | undefined;
|
|
83
|
-
paragraph?: string | null | undefined;
|
|
84
|
-
eli?: string | null | undefined;
|
|
85
|
-
inkrafttreten?: string | null | undefined;
|
|
86
|
-
ausserkrafttreten?: string | null | undefined;
|
|
87
|
-
}, {
|
|
88
|
-
kurztitel?: string | null | undefined;
|
|
89
|
-
langtitel?: string | null | undefined;
|
|
90
|
-
kundmachungsorgan?: string | null | undefined;
|
|
91
|
-
paragraph?: string | null | undefined;
|
|
92
|
-
eli?: string | null | undefined;
|
|
93
|
-
inkrafttreten?: string | null | undefined;
|
|
94
|
-
ausserkrafttreten?: string | null | undefined;
|
|
95
|
-
}>;
|
|
114
|
+
}, z.core.$strip>;
|
|
96
115
|
export type Citation = z.infer<typeof CitationSchema>;
|
|
97
116
|
/**
|
|
98
117
|
* A single legal document from the RIS database.
|
|
@@ -110,86 +129,16 @@ export declare const DocumentSchema: z.ZodObject<{
|
|
|
110
129
|
eli: z.ZodOptional<z.ZodNullable<z.ZodString>>;
|
|
111
130
|
inkrafttreten: z.ZodOptional<z.ZodNullable<z.ZodString>>;
|
|
112
131
|
ausserkrafttreten: z.ZodOptional<z.ZodNullable<z.ZodString>>;
|
|
113
|
-
},
|
|
114
|
-
kurztitel?: string | null | undefined;
|
|
115
|
-
langtitel?: string | null | undefined;
|
|
116
|
-
kundmachungsorgan?: string | null | undefined;
|
|
117
|
-
paragraph?: string | null | undefined;
|
|
118
|
-
eli?: string | null | undefined;
|
|
119
|
-
inkrafttreten?: string | null | undefined;
|
|
120
|
-
ausserkrafttreten?: string | null | undefined;
|
|
121
|
-
}, {
|
|
122
|
-
kurztitel?: string | null | undefined;
|
|
123
|
-
langtitel?: string | null | undefined;
|
|
124
|
-
kundmachungsorgan?: string | null | undefined;
|
|
125
|
-
paragraph?: string | null | undefined;
|
|
126
|
-
eli?: string | null | undefined;
|
|
127
|
-
inkrafttreten?: string | null | undefined;
|
|
128
|
-
ausserkrafttreten?: string | null | undefined;
|
|
129
|
-
}>;
|
|
132
|
+
}, z.core.$strip>;
|
|
130
133
|
content_urls: z.ZodObject<{
|
|
131
134
|
xml: z.ZodOptional<z.ZodNullable<z.ZodString>>;
|
|
132
135
|
html: z.ZodOptional<z.ZodNullable<z.ZodString>>;
|
|
133
136
|
rtf: z.ZodOptional<z.ZodNullable<z.ZodString>>;
|
|
134
137
|
pdf: z.ZodOptional<z.ZodNullable<z.ZodString>>;
|
|
135
|
-
},
|
|
136
|
-
xml?: string | null | undefined;
|
|
137
|
-
html?: string | null | undefined;
|
|
138
|
-
rtf?: string | null | undefined;
|
|
139
|
-
pdf?: string | null | undefined;
|
|
140
|
-
}, {
|
|
141
|
-
xml?: string | null | undefined;
|
|
142
|
-
html?: string | null | undefined;
|
|
143
|
-
rtf?: string | null | undefined;
|
|
144
|
-
pdf?: string | null | undefined;
|
|
145
|
-
}>;
|
|
138
|
+
}, z.core.$strip>;
|
|
146
139
|
dokument_url: z.ZodOptional<z.ZodNullable<z.ZodString>>;
|
|
147
140
|
gesamte_rechtsvorschrift_url: z.ZodOptional<z.ZodNullable<z.ZodString>>;
|
|
148
|
-
},
|
|
149
|
-
dokumentnummer: string;
|
|
150
|
-
applikation: string;
|
|
151
|
-
titel: string;
|
|
152
|
-
citation: {
|
|
153
|
-
kurztitel?: string | null | undefined;
|
|
154
|
-
langtitel?: string | null | undefined;
|
|
155
|
-
kundmachungsorgan?: string | null | undefined;
|
|
156
|
-
paragraph?: string | null | undefined;
|
|
157
|
-
eli?: string | null | undefined;
|
|
158
|
-
inkrafttreten?: string | null | undefined;
|
|
159
|
-
ausserkrafttreten?: string | null | undefined;
|
|
160
|
-
};
|
|
161
|
-
content_urls: {
|
|
162
|
-
xml?: string | null | undefined;
|
|
163
|
-
html?: string | null | undefined;
|
|
164
|
-
rtf?: string | null | undefined;
|
|
165
|
-
pdf?: string | null | undefined;
|
|
166
|
-
};
|
|
167
|
-
kurztitel?: string | null | undefined;
|
|
168
|
-
dokument_url?: string | null | undefined;
|
|
169
|
-
gesamte_rechtsvorschrift_url?: string | null | undefined;
|
|
170
|
-
}, {
|
|
171
|
-
dokumentnummer: string;
|
|
172
|
-
applikation: string;
|
|
173
|
-
titel: string;
|
|
174
|
-
citation: {
|
|
175
|
-
kurztitel?: string | null | undefined;
|
|
176
|
-
langtitel?: string | null | undefined;
|
|
177
|
-
kundmachungsorgan?: string | null | undefined;
|
|
178
|
-
paragraph?: string | null | undefined;
|
|
179
|
-
eli?: string | null | undefined;
|
|
180
|
-
inkrafttreten?: string | null | undefined;
|
|
181
|
-
ausserkrafttreten?: string | null | undefined;
|
|
182
|
-
};
|
|
183
|
-
content_urls: {
|
|
184
|
-
xml?: string | null | undefined;
|
|
185
|
-
html?: string | null | undefined;
|
|
186
|
-
rtf?: string | null | undefined;
|
|
187
|
-
pdf?: string | null | undefined;
|
|
188
|
-
};
|
|
189
|
-
kurztitel?: string | null | undefined;
|
|
190
|
-
dokument_url?: string | null | undefined;
|
|
191
|
-
gesamte_rechtsvorschrift_url?: string | null | undefined;
|
|
192
|
-
}>;
|
|
141
|
+
}, z.core.$strip>;
|
|
193
142
|
export type Document = z.infer<typeof DocumentSchema>;
|
|
194
143
|
/**
|
|
195
144
|
* Paginated search results from the RIS API.
|
|
@@ -212,143 +161,17 @@ export declare const SearchResultSchema: z.ZodObject<{
|
|
|
212
161
|
eli: z.ZodOptional<z.ZodNullable<z.ZodString>>;
|
|
213
162
|
inkrafttreten: z.ZodOptional<z.ZodNullable<z.ZodString>>;
|
|
214
163
|
ausserkrafttreten: z.ZodOptional<z.ZodNullable<z.ZodString>>;
|
|
215
|
-
},
|
|
216
|
-
kurztitel?: string | null | undefined;
|
|
217
|
-
langtitel?: string | null | undefined;
|
|
218
|
-
kundmachungsorgan?: string | null | undefined;
|
|
219
|
-
paragraph?: string | null | undefined;
|
|
220
|
-
eli?: string | null | undefined;
|
|
221
|
-
inkrafttreten?: string | null | undefined;
|
|
222
|
-
ausserkrafttreten?: string | null | undefined;
|
|
223
|
-
}, {
|
|
224
|
-
kurztitel?: string | null | undefined;
|
|
225
|
-
langtitel?: string | null | undefined;
|
|
226
|
-
kundmachungsorgan?: string | null | undefined;
|
|
227
|
-
paragraph?: string | null | undefined;
|
|
228
|
-
eli?: string | null | undefined;
|
|
229
|
-
inkrafttreten?: string | null | undefined;
|
|
230
|
-
ausserkrafttreten?: string | null | undefined;
|
|
231
|
-
}>;
|
|
164
|
+
}, z.core.$strip>;
|
|
232
165
|
content_urls: z.ZodObject<{
|
|
233
166
|
xml: z.ZodOptional<z.ZodNullable<z.ZodString>>;
|
|
234
167
|
html: z.ZodOptional<z.ZodNullable<z.ZodString>>;
|
|
235
168
|
rtf: z.ZodOptional<z.ZodNullable<z.ZodString>>;
|
|
236
169
|
pdf: z.ZodOptional<z.ZodNullable<z.ZodString>>;
|
|
237
|
-
},
|
|
238
|
-
xml?: string | null | undefined;
|
|
239
|
-
html?: string | null | undefined;
|
|
240
|
-
rtf?: string | null | undefined;
|
|
241
|
-
pdf?: string | null | undefined;
|
|
242
|
-
}, {
|
|
243
|
-
xml?: string | null | undefined;
|
|
244
|
-
html?: string | null | undefined;
|
|
245
|
-
rtf?: string | null | undefined;
|
|
246
|
-
pdf?: string | null | undefined;
|
|
247
|
-
}>;
|
|
170
|
+
}, z.core.$strip>;
|
|
248
171
|
dokument_url: z.ZodOptional<z.ZodNullable<z.ZodString>>;
|
|
249
172
|
gesamte_rechtsvorschrift_url: z.ZodOptional<z.ZodNullable<z.ZodString>>;
|
|
250
|
-
},
|
|
251
|
-
|
|
252
|
-
applikation: string;
|
|
253
|
-
titel: string;
|
|
254
|
-
citation: {
|
|
255
|
-
kurztitel?: string | null | undefined;
|
|
256
|
-
langtitel?: string | null | undefined;
|
|
257
|
-
kundmachungsorgan?: string | null | undefined;
|
|
258
|
-
paragraph?: string | null | undefined;
|
|
259
|
-
eli?: string | null | undefined;
|
|
260
|
-
inkrafttreten?: string | null | undefined;
|
|
261
|
-
ausserkrafttreten?: string | null | undefined;
|
|
262
|
-
};
|
|
263
|
-
content_urls: {
|
|
264
|
-
xml?: string | null | undefined;
|
|
265
|
-
html?: string | null | undefined;
|
|
266
|
-
rtf?: string | null | undefined;
|
|
267
|
-
pdf?: string | null | undefined;
|
|
268
|
-
};
|
|
269
|
-
kurztitel?: string | null | undefined;
|
|
270
|
-
dokument_url?: string | null | undefined;
|
|
271
|
-
gesamte_rechtsvorschrift_url?: string | null | undefined;
|
|
272
|
-
}, {
|
|
273
|
-
dokumentnummer: string;
|
|
274
|
-
applikation: string;
|
|
275
|
-
titel: string;
|
|
276
|
-
citation: {
|
|
277
|
-
kurztitel?: string | null | undefined;
|
|
278
|
-
langtitel?: string | null | undefined;
|
|
279
|
-
kundmachungsorgan?: string | null | undefined;
|
|
280
|
-
paragraph?: string | null | undefined;
|
|
281
|
-
eli?: string | null | undefined;
|
|
282
|
-
inkrafttreten?: string | null | undefined;
|
|
283
|
-
ausserkrafttreten?: string | null | undefined;
|
|
284
|
-
};
|
|
285
|
-
content_urls: {
|
|
286
|
-
xml?: string | null | undefined;
|
|
287
|
-
html?: string | null | undefined;
|
|
288
|
-
rtf?: string | null | undefined;
|
|
289
|
-
pdf?: string | null | undefined;
|
|
290
|
-
};
|
|
291
|
-
kurztitel?: string | null | undefined;
|
|
292
|
-
dokument_url?: string | null | undefined;
|
|
293
|
-
gesamte_rechtsvorschrift_url?: string | null | undefined;
|
|
294
|
-
}>, "many">;
|
|
295
|
-
}, "strip", z.ZodTypeAny, {
|
|
296
|
-
total_hits: number;
|
|
297
|
-
page: number;
|
|
298
|
-
page_size: number;
|
|
299
|
-
has_more: boolean;
|
|
300
|
-
documents: {
|
|
301
|
-
dokumentnummer: string;
|
|
302
|
-
applikation: string;
|
|
303
|
-
titel: string;
|
|
304
|
-
citation: {
|
|
305
|
-
kurztitel?: string | null | undefined;
|
|
306
|
-
langtitel?: string | null | undefined;
|
|
307
|
-
kundmachungsorgan?: string | null | undefined;
|
|
308
|
-
paragraph?: string | null | undefined;
|
|
309
|
-
eli?: string | null | undefined;
|
|
310
|
-
inkrafttreten?: string | null | undefined;
|
|
311
|
-
ausserkrafttreten?: string | null | undefined;
|
|
312
|
-
};
|
|
313
|
-
content_urls: {
|
|
314
|
-
xml?: string | null | undefined;
|
|
315
|
-
html?: string | null | undefined;
|
|
316
|
-
rtf?: string | null | undefined;
|
|
317
|
-
pdf?: string | null | undefined;
|
|
318
|
-
};
|
|
319
|
-
kurztitel?: string | null | undefined;
|
|
320
|
-
dokument_url?: string | null | undefined;
|
|
321
|
-
gesamte_rechtsvorschrift_url?: string | null | undefined;
|
|
322
|
-
}[];
|
|
323
|
-
}, {
|
|
324
|
-
total_hits: number;
|
|
325
|
-
page: number;
|
|
326
|
-
page_size: number;
|
|
327
|
-
has_more: boolean;
|
|
328
|
-
documents: {
|
|
329
|
-
dokumentnummer: string;
|
|
330
|
-
applikation: string;
|
|
331
|
-
titel: string;
|
|
332
|
-
citation: {
|
|
333
|
-
kurztitel?: string | null | undefined;
|
|
334
|
-
langtitel?: string | null | undefined;
|
|
335
|
-
kundmachungsorgan?: string | null | undefined;
|
|
336
|
-
paragraph?: string | null | undefined;
|
|
337
|
-
eli?: string | null | undefined;
|
|
338
|
-
inkrafttreten?: string | null | undefined;
|
|
339
|
-
ausserkrafttreten?: string | null | undefined;
|
|
340
|
-
};
|
|
341
|
-
content_urls: {
|
|
342
|
-
xml?: string | null | undefined;
|
|
343
|
-
html?: string | null | undefined;
|
|
344
|
-
rtf?: string | null | undefined;
|
|
345
|
-
pdf?: string | null | undefined;
|
|
346
|
-
};
|
|
347
|
-
kurztitel?: string | null | undefined;
|
|
348
|
-
dokument_url?: string | null | undefined;
|
|
349
|
-
gesamte_rechtsvorschrift_url?: string | null | undefined;
|
|
350
|
-
}[];
|
|
351
|
-
}>;
|
|
173
|
+
}, z.core.$strip>>;
|
|
174
|
+
}, z.core.$strip>;
|
|
352
175
|
export type SearchResult = z.infer<typeof SearchResultSchema>;
|
|
353
176
|
/**
|
|
354
177
|
* Raw content URL from API response.
|
package/dist/types.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAMxB;;GAEG;AACH,eAAO,MAAM,4BAA4B,
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAMxB;;GAEG;AACH,eAAO,MAAM,4BAA4B;;;;;EAKvC,CAAC;AACH,MAAM,MAAM,sBAAsB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,4BAA4B,CAAC,CAAC;AAElF;;GAEG;AACH,eAAO,MAAM,sBAAsB;;;;;;;;;;;;EAYjC,CAAC;AACH,MAAM,MAAM,gBAAgB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,sBAAsB,CAAC,CAAC;AAEtE;;;GAGG;AACH,eAAO,MAAM,gBAAgB;;;;;;;;;;EAU3B,CAAC;AACH,MAAM,MAAM,UAAU,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,gBAAgB,CAAC,CAAC;AAE1D;;;GAGG;AACH,eAAO,MAAM,yBAAyB,sIAU5B,CAAC;AAEX,eAAO,MAAM,2BAA2B;;;;;;;;;;EAAoC,CAAC;AAC7E,MAAM,MAAM,qBAAqB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,2BAA2B,CAAC,CAAC;AAEhF;;;GAGG;AACH,eAAO,MAAM,UAAU,aAErB,CAAC;AAEH,eAAO,MAAM,kBAAkB,4BAAwB,CAAC;AAExD;;GAEG;AACH,eAAO,MAAM,uBAAuB;;;;;EAKlC,CAAC;AACH,MAAM,MAAM,iBAAiB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,uBAAuB,CAAC,CAAC;AAExE;;GAEG;AACH,eAAO,MAAM,oBAAoB;;;EAA+B,CAAC;AACjE,MAAM,MAAM,cAAc,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,oBAAoB,CAAC,CAAC;AAMlE;;GAEG;AACH,eAAO,MAAM,gBAAgB;;;;;iBAK3B,CAAC;AACH,MAAM,MAAM,UAAU,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,gBAAgB,CAAC,CAAC;AAE1D;;GAEG;AACH,eAAO,MAAM,cAAc;;;;;;;;iBAQzB,CAAC;AACH,MAAM,MAAM,QAAQ,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,cAAc,CAAC,CAAC;AAEtD;;GAEG;AACH,eAAO,MAAM,cAAc;;;;;;;;;;;;;;;;;;;;;;iBASzB,CAAC;AACH,MAAM,MAAM,QAAQ,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,cAAc,CAAC,CAAC;AAEtD;;GAEG;AACH,eAAO,MAAM,kBAAkB;;;;;;;;;;;;;;;;;;;;;;;;;;;;iBAM7B,CAAC;AACH,MAAM,MAAM,YAAY,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,kBAAkB,CAAC,CAAC;AAM9D;;GAEG;AACH,MAAM,WAAW,aAAa;IAC5B,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,GAAG,CAAC,EAAE,MAAM,CAAC;CACd;AAED;;GAEG;AACH,MAAM,WAAW,OAAO;IACtB,UAAU,CAAC,EAAE,aAAa,GAAG,aAAa,EAAE,CAAC;CAC9C;AAED;;GAEG;AACH,MAAM,WAAW,mBAAmB;IAClC,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,IAAI,CAAC,EAAE,MAAM,GAAG;QAAE,OAAO,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;IACrC,IAAI,CAAC,EAAE,OAAO,CAAC;CAChB;AAED;;GAEG;AACH,MAAM,WAAW,WAAW;IAC1B,OAAO,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;IAC1B,aAAa,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;IAChC,WAAW,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;CAC/B;AAED;;GAEG;AACH,MAAM,WAAW,oBAAoB;IACnC,IAAI,CAAC,EAAE;QACL,SAAS,CAAC,EAAE;YACV,SAAS,CAAC,EAAE;gBACV,EAAE,CAAC,EAAE,MAAM,CAAC;gBACZ,WAAW,CAAC,EAAE,MAAM,CAAC;aACtB,CAAC;YACF,SAAS,CAAC,EAAE;gBACV,WAAW,CAAC,EAAE,MAAM,CAAC;aACtB,CAAC;YACF,WAAW,CAAC,EAAE;gBACZ,SAAS,CAAC,EAAE,MAAM,CAAC;gBACnB,SAAS,CAAC,EAAE,MAAM,CAAC;gBACnB,KAAK,CAAC,EAAE,MAAM,CAAC;gBACf,GAAG,CAAC,EAAE,MAAM,CAAC;gBACb,MAAM,CAAC,EAAE;oBACP,iBAAiB,CAAC,EAAE,MAAM,CAAC;oBAC3B,sBAAsB,CAAC,EAAE,MAAM,CAAC;oBAChC,mBAAmB,CAAC,EAAE,MAAM,CAAC;oBAC7B,uBAAuB,CAAC,EAAE,MAAM,CAAC;oBACjC,0BAA0B,CAAC,EAAE,MAAM,CAAC;iBACrC,CAAC;aACH,CAAC;YACF,WAAW,CAAC,EAAE;gBACZ,SAAS,CAAC,EAAE,MAAM,CAAC;gBACnB,SAAS,CAAC,EAAE,MAAM,CAAC;gBACnB,KAAK,CAAC,EAAE,MAAM,CAAC;gBACf,GAAG,CAAC,EAAE,MAAM,CAAC;gBACb,MAAM,CAAC,EAAE;oBACP,iBAAiB,CAAC,EAAE,MAAM,CAAC;oBAC3B,sBAAsB,CAAC,EAAE,MAAM,CAAC;oBAChC,mBAAmB,CAAC,EAAE,MAAM,CAAC;oBAC7B,uBAAuB,CAAC,EAAE,MAAM,CAAC;oBACjC,0BAA0B,CAAC,EAAE,MAAM,CAAC;iBACrC,CAAC;aACH,CAAC;YACF,SAAS,CAAC,EAAE;gBACV,cAAc,CAAC,EAAE;oBAAE,IAAI,CAAC,EAAE,MAAM,GAAG,MAAM,EAAE,CAAA;iBAAE,GAAG,MAAM,CAAC;gBACvD,kBAAkB,CAAC,EAAE,MAAM,CAAC;gBAC5B,IAAI,CAAC,EAAE;oBAAE,QAAQ,CAAC,EAAE,MAAM,CAAA;iBAAE,CAAC;gBAC7B,IAAI,CAAC,EAAE;oBAAE,QAAQ,CAAC,EAAE,MAAM,CAAA;iBAAE,CAAC;gBAC7B,MAAM,CAAC,EAAE;oBAAE,QAAQ,CAAC,EAAE,MAAM,CAAA;iBAAE,CAAC;gBAC/B,IAAI,CAAC,EAAE;oBAAE,QAAQ,CAAC,EAAE,MAAM,CAAA;iBAAE,CAAC;aAC9B,CAAC;SACH,CAAC;QACF,aAAa,CAAC,EAAE;YACd,gBAAgB,CAAC,EAAE,mBAAmB,GAAG,mBAAmB,EAAE,CAAC;SAChE,CAAC;KACH,CAAC;CACH;AAED;;GAEG;AACH,MAAM,WAAW,cAAc;IAC7B,eAAe,CAAC,EAAE;QAChB,kBAAkB,CAAC,EAAE;YACnB,IAAI,CAAC,EAAE,WAAW,GAAG,MAAM,GAAG,MAAM,CAAC;YACrC,oBAAoB,CAAC,EAAE,oBAAoB,GAAG,oBAAoB,EAAE,CAAC;SACtE,CAAC;KACH,CAAC;CACH;AAED;;GAEG;AACH,MAAM,WAAW,uBAAuB;IACtC,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,oBAAoB,EAAE,CAAC;CACnC;AAMD;;GAEG;AACH,wBAAgB,wBAAwB,CAAC,KAAK,EAAE,MAAM,GAAG,iBAAiB,CAQzE"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "ris-mcp-ts",
|
|
3
|
-
"version": "1.0
|
|
3
|
+
"version": "1.1.0",
|
|
4
4
|
"mcpName": "io.github.philrox/ris",
|
|
5
5
|
"description": "MCP Server for Austrian Legal Information System (RIS) - TypeScript",
|
|
6
6
|
"type": "module",
|
|
@@ -12,6 +12,8 @@
|
|
|
12
12
|
"build": "tsc",
|
|
13
13
|
"dev": "tsx src/index.ts",
|
|
14
14
|
"start": "node dist/index.js",
|
|
15
|
+
"start:http": "node dist/http.js",
|
|
16
|
+
"dev:http": "tsx src/http.ts",
|
|
15
17
|
"inspect": "npx @modelcontextprotocol/inspector node dist/index.js",
|
|
16
18
|
"test": "vitest run",
|
|
17
19
|
"test:coverage": "vitest run --coverage",
|
|
@@ -36,27 +38,37 @@
|
|
|
36
38
|
"dependencies": {
|
|
37
39
|
"@modelcontextprotocol/sdk": "^1.0.0",
|
|
38
40
|
"cheerio": "^1.0.0",
|
|
39
|
-
"
|
|
41
|
+
"express": "^5.2.1",
|
|
42
|
+
"express-rate-limit": "^8.2.1",
|
|
43
|
+
"zod": "^4.3.6"
|
|
40
44
|
},
|
|
41
45
|
"devDependencies": {
|
|
42
46
|
"@commitlint/cli": "^20.4.1",
|
|
43
47
|
"@commitlint/config-conventional": "^20.4.1",
|
|
44
|
-
"@eslint/js": "^
|
|
45
|
-
"@types/
|
|
46
|
-
"@
|
|
47
|
-
"@
|
|
48
|
+
"@eslint/js": "^10.0.1",
|
|
49
|
+
"@types/express": "^5.0.6",
|
|
50
|
+
"@types/node": "^25.3.3",
|
|
51
|
+
"@types/supertest": "^7.2.0",
|
|
52
|
+
"@typescript-eslint/eslint-plugin": "^8.56.1",
|
|
53
|
+
"@typescript-eslint/parser": "^8.56.1",
|
|
48
54
|
"@vitest/coverage-v8": "^4.0.18",
|
|
49
|
-
"eslint": "^
|
|
55
|
+
"eslint": "^10.0.2",
|
|
50
56
|
"eslint-config-prettier": "^10.1.8",
|
|
51
57
|
"eslint-plugin-import-x": "^4.16.1",
|
|
52
58
|
"husky": "^9.1.7",
|
|
53
59
|
"lint-staged": "^16.2.7",
|
|
54
60
|
"prettier": "^3.8.1",
|
|
61
|
+
"supertest": "^7.2.2",
|
|
55
62
|
"tsx": "^4.7.0",
|
|
56
63
|
"typescript": "^5.4.0",
|
|
57
|
-
"typescript-eslint": "^8.
|
|
64
|
+
"typescript-eslint": "^8.56.1",
|
|
58
65
|
"vitest": "^4.0.18"
|
|
59
66
|
},
|
|
67
|
+
"overrides": {
|
|
68
|
+
"eslint-plugin-import-x": {
|
|
69
|
+
"eslint": "$eslint"
|
|
70
|
+
}
|
|
71
|
+
},
|
|
60
72
|
"engines": {
|
|
61
73
|
"node": ">=20.0.0"
|
|
62
74
|
},
|