ris-mcp-ts 1.0.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.
Files changed (87) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +490 -0
  3. package/dist/client.d.ts +109 -0
  4. package/dist/client.d.ts.map +1 -0
  5. package/dist/client.js +371 -0
  6. package/dist/client.js.map +1 -0
  7. package/dist/constants.d.ts +67 -0
  8. package/dist/constants.d.ts.map +1 -0
  9. package/dist/constants.js +168 -0
  10. package/dist/constants.js.map +1 -0
  11. package/dist/formatting.d.ts +70 -0
  12. package/dist/formatting.d.ts.map +1 -0
  13. package/dist/formatting.js +366 -0
  14. package/dist/formatting.js.map +1 -0
  15. package/dist/helpers.d.ts +46 -0
  16. package/dist/helpers.d.ts.map +1 -0
  17. package/dist/helpers.js +92 -0
  18. package/dist/helpers.js.map +1 -0
  19. package/dist/index.d.ts +9 -0
  20. package/dist/index.d.ts.map +1 -0
  21. package/dist/index.js +21 -0
  22. package/dist/index.js.map +1 -0
  23. package/dist/parser.d.ts +48 -0
  24. package/dist/parser.d.ts.map +1 -0
  25. package/dist/parser.js +240 -0
  26. package/dist/parser.js.map +1 -0
  27. package/dist/server.d.ts +11 -0
  28. package/dist/server.d.ts.map +1 -0
  29. package/dist/server.js +16 -0
  30. package/dist/server.js.map +1 -0
  31. package/dist/tools/bezirke.d.ts +6 -0
  32. package/dist/tools/bezirke.d.ts.map +1 -0
  33. package/dist/tools/bezirke.js +68 -0
  34. package/dist/tools/bezirke.js.map +1 -0
  35. package/dist/tools/bundesgesetzblatt.d.ts +6 -0
  36. package/dist/tools/bundesgesetzblatt.d.ts.map +1 -0
  37. package/dist/tools/bundesgesetzblatt.js +55 -0
  38. package/dist/tools/bundesgesetzblatt.js.map +1 -0
  39. package/dist/tools/bundesrecht.d.ts +6 -0
  40. package/dist/tools/bundesrecht.d.ts.map +1 -0
  41. package/dist/tools/bundesrecht.js +63 -0
  42. package/dist/tools/bundesrecht.js.map +1 -0
  43. package/dist/tools/dokument.d.ts +6 -0
  44. package/dist/tools/dokument.d.ts.map +1 -0
  45. package/dist/tools/dokument.js +244 -0
  46. package/dist/tools/dokument.js.map +1 -0
  47. package/dist/tools/gemeinden.d.ts +6 -0
  48. package/dist/tools/gemeinden.d.ts.map +1 -0
  49. package/dist/tools/gemeinden.js +125 -0
  50. package/dist/tools/gemeinden.js.map +1 -0
  51. package/dist/tools/history.d.ts +6 -0
  52. package/dist/tools/history.d.ts.map +1 -0
  53. package/dist/tools/history.js +65 -0
  54. package/dist/tools/history.js.map +1 -0
  55. package/dist/tools/index.d.ts +12 -0
  56. package/dist/tools/index.d.ts.map +1 -0
  57. package/dist/tools/index.js +36 -0
  58. package/dist/tools/index.js.map +1 -0
  59. package/dist/tools/judikatur.d.ts +6 -0
  60. package/dist/tools/judikatur.d.ts.map +1 -0
  61. package/dist/tools/judikatur.js +46 -0
  62. package/dist/tools/judikatur.js.map +1 -0
  63. package/dist/tools/landesgesetzblatt.d.ts +6 -0
  64. package/dist/tools/landesgesetzblatt.d.ts.map +1 -0
  65. package/dist/tools/landesgesetzblatt.js +60 -0
  66. package/dist/tools/landesgesetzblatt.js.map +1 -0
  67. package/dist/tools/landesrecht.d.ts +6 -0
  68. package/dist/tools/landesrecht.d.ts.map +1 -0
  69. package/dist/tools/landesrecht.js +51 -0
  70. package/dist/tools/landesrecht.js.map +1 -0
  71. package/dist/tools/regierungsvorlagen.d.ts +6 -0
  72. package/dist/tools/regierungsvorlagen.d.ts.map +1 -0
  73. package/dist/tools/regierungsvorlagen.js +97 -0
  74. package/dist/tools/regierungsvorlagen.js.map +1 -0
  75. package/dist/tools/sonstige.d.ts +6 -0
  76. package/dist/tools/sonstige.d.ts.map +1 -0
  77. package/dist/tools/sonstige.js +271 -0
  78. package/dist/tools/sonstige.js.map +1 -0
  79. package/dist/tools/verordnungen.d.ts +6 -0
  80. package/dist/tools/verordnungen.d.ts.map +1 -0
  81. package/dist/tools/verordnungen.js +68 -0
  82. package/dist/tools/verordnungen.js.map +1 -0
  83. package/dist/types.d.ts +471 -0
  84. package/dist/types.d.ts.map +1 -0
  85. package/dist/types.js +151 -0
  86. package/dist/types.js.map +1 -0
  87. package/package.json +87 -0
@@ -0,0 +1,48 @@
1
+ /**
2
+ * Parser for RIS API responses.
3
+ *
4
+ * This module provides functions to parse raw API responses into
5
+ * structured Document and SearchResult models.
6
+ */
7
+ import type { ContentUrl, Document, NormalizedSearchResults, RawContentReference, RawDocumentReference, SearchResult } from './types.js';
8
+ /**
9
+ * Extract text from various API response formats.
10
+ * Handles strings, objects with #text, and objects with item.
11
+ */
12
+ export declare function extractText(elem: unknown): string | null;
13
+ /**
14
+ * Extract content URLs from raw content reference.
15
+ */
16
+ export declare function extractContentUrls(contentRef: RawContentReference | undefined): ContentUrl;
17
+ /**
18
+ * Parse a document reference from the API response into a Document model.
19
+ */
20
+ export declare function parseDocumentFromApiResponse(docRef: RawDocumentReference): Document;
21
+ /**
22
+ * Result type for finding a document by dokumentnummer.
23
+ */
24
+ export type FindDocumentResult = {
25
+ success: true;
26
+ document: Document;
27
+ } | {
28
+ success: false;
29
+ error: 'no_documents' | 'not_found';
30
+ totalResults?: number;
31
+ };
32
+ /**
33
+ * Find a document by dokumentnummer from a list of raw API document references.
34
+ *
35
+ * This function parses all documents and finds the one matching the requested
36
+ * dokumentnummer rather than blindly taking the first result (which may not
37
+ * be the correct document when the API returns multiple results).
38
+ *
39
+ * @param rawDocuments - Raw document references from the API response
40
+ * @param dokumentnummer - The document number to find
41
+ * @returns Result object indicating success with the document, or failure with error type
42
+ */
43
+ export declare function findDocumentByDokumentnummer(rawDocuments: RawDocumentReference[], dokumentnummer: string): FindDocumentResult;
44
+ /**
45
+ * Parse API response into a SearchResult model.
46
+ */
47
+ export declare function parseSearchResults(apiResponse: NormalizedSearchResults): SearchResult;
48
+ //# sourceMappingURL=parser.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"parser.d.ts","sourceRoot":"","sources":["../src/parser.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EAEV,UAAU,EACV,QAAQ,EACR,uBAAuB,EACvB,mBAAmB,EAEnB,oBAAoB,EACpB,YAAY,EACb,MAAM,YAAY,CAAC;AAMpB;;;GAGG;AACH,wBAAgB,WAAW,CAAC,IAAI,EAAE,OAAO,GAAG,MAAM,GAAG,IAAI,CAmBxD;AAcD;;GAEG;AACH,wBAAgB,kBAAkB,CAAC,UAAU,EAAE,mBAAmB,GAAG,SAAS,GAAG,UAAU,CA0B1F;AAMD;;GAEG;AACH,wBAAgB,4BAA4B,CAAC,MAAM,EAAE,oBAAoB,GAAG,QAAQ,CA+HnF;AAMD;;GAEG;AACH,MAAM,MAAM,kBAAkB,GAC1B;IAAE,OAAO,EAAE,IAAI,CAAC;IAAC,QAAQ,EAAE,QAAQ,CAAA;CAAE,GACrC;IAAE,OAAO,EAAE,KAAK,CAAC;IAAC,KAAK,EAAE,cAAc,GAAG,WAAW,CAAC;IAAC,YAAY,CAAC,EAAE,MAAM,CAAA;CAAE,CAAC;AAEnF;;;;;;;;;;GAUG;AACH,wBAAgB,4BAA4B,CAC1C,YAAY,EAAE,oBAAoB,EAAE,EACpC,cAAc,EAAE,MAAM,GACrB,kBAAkB,CAapB;AAMD;;GAEG;AACH,wBAAgB,kBAAkB,CAAC,WAAW,EAAE,uBAAuB,GAAG,YAAY,CAgBrF"}
package/dist/parser.js ADDED
@@ -0,0 +1,240 @@
1
+ /**
2
+ * Parser for RIS API responses.
3
+ *
4
+ * This module provides functions to parse raw API responses into
5
+ * structured Document and SearchResult models.
6
+ */
7
+ // =============================================================================
8
+ // Helper Functions
9
+ // =============================================================================
10
+ /**
11
+ * Extract text from various API response formats.
12
+ * Handles strings, objects with #text, and objects with item.
13
+ */
14
+ export function extractText(elem) {
15
+ if (elem === null || elem === undefined) {
16
+ return null;
17
+ }
18
+ if (typeof elem === 'string') {
19
+ const trimmed = elem.trim();
20
+ return trimmed || null;
21
+ }
22
+ if (typeof elem === 'object') {
23
+ const obj = elem;
24
+ const text = obj['#text'] ?? obj['item'];
25
+ if (typeof text === 'string') {
26
+ return text.trim() || null;
27
+ }
28
+ if (Array.isArray(text)) {
29
+ return text.join(', ');
30
+ }
31
+ }
32
+ return null;
33
+ }
34
+ /**
35
+ * Extract URL by DataType from content URL list.
36
+ */
37
+ function getUrlByType(contentUrlList, dataType) {
38
+ for (const item of contentUrlList) {
39
+ if (item.DataType === dataType && item.Url) {
40
+ return item.Url;
41
+ }
42
+ }
43
+ return null;
44
+ }
45
+ /**
46
+ * Extract content URLs from raw content reference.
47
+ */
48
+ export function extractContentUrls(contentRef) {
49
+ if (!contentRef) {
50
+ return { html: null, xml: null, pdf: null, rtf: null };
51
+ }
52
+ const urls = contentRef.Urls;
53
+ if (!urls) {
54
+ return { html: null, xml: null, pdf: null, rtf: null };
55
+ }
56
+ let contentUrlList = urls.ContentUrl;
57
+ if (!contentUrlList) {
58
+ return { html: null, xml: null, pdf: null, rtf: null };
59
+ }
60
+ // Ensure it's an array
61
+ if (!Array.isArray(contentUrlList)) {
62
+ contentUrlList = [contentUrlList];
63
+ }
64
+ return {
65
+ html: getUrlByType(contentUrlList, 'Html'),
66
+ xml: getUrlByType(contentUrlList, 'Xml'),
67
+ pdf: getUrlByType(contentUrlList, 'Pdf'),
68
+ rtf: getUrlByType(contentUrlList, 'Rtf'),
69
+ };
70
+ }
71
+ // =============================================================================
72
+ // Document Parsing
73
+ // =============================================================================
74
+ /**
75
+ * Parse a document reference from the API response into a Document model.
76
+ */
77
+ export function parseDocumentFromApiResponse(docRef) {
78
+ const data = docRef.Data ?? {};
79
+ const metadaten = data.Metadaten ?? {};
80
+ const dokumentliste = data.Dokumentliste ?? {};
81
+ const technisch = metadaten.Technisch ?? {};
82
+ const allgemein = metadaten.Allgemein ?? {};
83
+ // Extract content reference - can be a dict or array of dicts
84
+ const contentRefRaw = dokumentliste.ContentReference;
85
+ let contentRef;
86
+ if (Array.isArray(contentRefRaw)) {
87
+ // Find MainDocument or use first entry
88
+ contentRef =
89
+ contentRefRaw.find((ref) => ref.ContentType === 'MainDocument') ?? contentRefRaw[0];
90
+ }
91
+ else {
92
+ contentRef = contentRefRaw;
93
+ }
94
+ // Extract content URLs
95
+ const contentUrls = extractContentUrls(contentRef);
96
+ // Extract metadata from Bundesrecht, Landesrecht, or Judikatur
97
+ const bundesrecht = metadaten.Bundesrecht;
98
+ const landesrecht = metadaten.Landesrecht;
99
+ const judikatur = metadaten.Judikatur;
100
+ // Initialize citation variables
101
+ let kurztitelElem = '';
102
+ let langtitelElem = '';
103
+ let kundmachungsorgan = '';
104
+ let paragraph = '';
105
+ let inkrafttreten = '';
106
+ let ausserkrafttreten = '';
107
+ let eli = '';
108
+ let gesamteRechtsvorschriftUrl = '';
109
+ let geschaeftszahl = '';
110
+ let entscheidungsdatum = '';
111
+ if (bundesrecht) {
112
+ // Handle Bundesrecht
113
+ const nested = bundesrecht.BrKons ?? {};
114
+ kurztitelElem = bundesrecht.Kurztitel ?? '';
115
+ langtitelElem = bundesrecht.Langtitel ?? bundesrecht.Titel ?? '';
116
+ kundmachungsorgan = nested.Kundmachungsorgan ?? '';
117
+ paragraph = nested.ArtikelParagraphAnlage ?? '';
118
+ inkrafttreten = nested.Inkrafttretensdatum ?? '';
119
+ ausserkrafttreten = nested.Ausserkrafttretensdatum ?? '';
120
+ eli = bundesrecht.Eli ?? '';
121
+ gesamteRechtsvorschriftUrl = nested.GesamteRechtsvorschriftUrl ?? '';
122
+ }
123
+ else if (landesrecht) {
124
+ // Handle Landesrecht
125
+ const nested = landesrecht.LrKons ?? {};
126
+ kurztitelElem = landesrecht.Kurztitel ?? '';
127
+ langtitelElem = landesrecht.Langtitel ?? landesrecht.Titel ?? '';
128
+ kundmachungsorgan = nested.Kundmachungsorgan ?? '';
129
+ paragraph = nested.ArtikelParagraphAnlage ?? '';
130
+ inkrafttreten = nested.Inkrafttretensdatum ?? '';
131
+ ausserkrafttreten = nested.Ausserkrafttretensdatum ?? '';
132
+ eli = landesrecht.Eli ?? '';
133
+ gesamteRechtsvorschriftUrl = nested.GesamteRechtsvorschriftUrl ?? '';
134
+ }
135
+ else if (judikatur) {
136
+ // Handle Judikatur (court decisions)
137
+ const geschaeftszahlElem = judikatur.Geschaeftszahl;
138
+ if (typeof geschaeftszahlElem === 'object' && geschaeftszahlElem !== null) {
139
+ const item = geschaeftszahlElem.item;
140
+ if (Array.isArray(item)) {
141
+ geschaeftszahl = item.join(', ');
142
+ }
143
+ else if (typeof item === 'string') {
144
+ geschaeftszahl = item;
145
+ }
146
+ }
147
+ else if (typeof geschaeftszahlElem === 'string') {
148
+ geschaeftszahl = geschaeftszahlElem;
149
+ }
150
+ entscheidungsdatum = judikatur.Entscheidungsdatum ?? '';
151
+ // Get court-specific nested data
152
+ const courtNested = judikatur.Vfgh ?? judikatur.Vwgh ?? judikatur.Justiz ?? judikatur.Bvwg;
153
+ const leitsatz = courtNested?.Leitsatz ?? '';
154
+ kurztitelElem = geschaeftszahl; // Use Geschaeftszahl as kurztitel
155
+ langtitelElem = leitsatz; // Use Leitsatz as langtitel
156
+ }
157
+ // Build Citation
158
+ const citation = {
159
+ kurztitel: extractText(kurztitelElem),
160
+ langtitel: extractText(langtitelElem),
161
+ kundmachungsorgan: extractText(kundmachungsorgan),
162
+ paragraph: extractText(paragraph),
163
+ eli: extractText(eli),
164
+ inkrafttreten: extractText(inkrafttreten) ?? extractText(entscheidungsdatum),
165
+ ausserkrafttreten: extractText(ausserkrafttreten),
166
+ };
167
+ // Extract document number and application from Technisch section
168
+ const dokumentnummer = technisch.ID ?? '';
169
+ const applikation = technisch.Applikation ?? '';
170
+ // Extract title
171
+ let titel = extractText(kurztitelElem) ?? '';
172
+ if (!titel && geschaeftszahl) {
173
+ titel = `GZ ${geschaeftszahl}`;
174
+ }
175
+ if (!titel && contentRef) {
176
+ const name = contentRef.Name;
177
+ if (typeof name === 'string') {
178
+ titel = name;
179
+ }
180
+ else if (typeof name === 'object' && name !== null) {
181
+ titel = name['#text'] ?? '';
182
+ }
183
+ }
184
+ // Build document URLs
185
+ const dokumentUrl = allgemein.DokumentUrl ?? null;
186
+ return {
187
+ dokumentnummer,
188
+ applikation,
189
+ titel,
190
+ kurztitel: extractText(kurztitelElem),
191
+ citation,
192
+ content_urls: contentUrls,
193
+ dokument_url: dokumentUrl,
194
+ gesamte_rechtsvorschrift_url: gesamteRechtsvorschriftUrl || null,
195
+ };
196
+ }
197
+ /**
198
+ * Find a document by dokumentnummer from a list of raw API document references.
199
+ *
200
+ * This function parses all documents and finds the one matching the requested
201
+ * dokumentnummer rather than blindly taking the first result (which may not
202
+ * be the correct document when the API returns multiple results).
203
+ *
204
+ * @param rawDocuments - Raw document references from the API response
205
+ * @param dokumentnummer - The document number to find
206
+ * @returns Result object indicating success with the document, or failure with error type
207
+ */
208
+ export function findDocumentByDokumentnummer(rawDocuments, dokumentnummer) {
209
+ if (!rawDocuments || rawDocuments.length === 0) {
210
+ return { success: false, error: 'no_documents' };
211
+ }
212
+ const parsedDocs = rawDocuments.map(parseDocumentFromApiResponse);
213
+ const doc = parsedDocs.find((d) => d.dokumentnummer === dokumentnummer);
214
+ if (!doc) {
215
+ return { success: false, error: 'not_found', totalResults: rawDocuments.length };
216
+ }
217
+ return { success: true, document: doc };
218
+ }
219
+ // =============================================================================
220
+ // Search Results Parsing
221
+ // =============================================================================
222
+ /**
223
+ * Parse API response into a SearchResult model.
224
+ */
225
+ export function parseSearchResults(apiResponse) {
226
+ const totalHits = apiResponse.hits;
227
+ const page = apiResponse.page_number;
228
+ const pageSize = apiResponse.page_size;
229
+ const rawDocuments = apiResponse.documents;
230
+ const documents = rawDocuments.map(parseDocumentFromApiResponse);
231
+ const hasMore = page * pageSize < totalHits;
232
+ return {
233
+ total_hits: totalHits,
234
+ page,
235
+ page_size: pageSize,
236
+ has_more: hasMore,
237
+ documents,
238
+ };
239
+ }
240
+ //# sourceMappingURL=parser.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"parser.js","sourceRoot":"","sources":["../src/parser.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,11 @@
1
+ /**
2
+ * MCP Server for the Austrian RIS (Rechtsinformationssystem).
3
+ *
4
+ * This module provides an MCP server with tools for searching and retrieving
5
+ * Austrian legal documents including federal laws, state laws, and court decisions.
6
+ *
7
+ * API Documentation: https://data.bka.gv.at/ris/api/v2.6/
8
+ */
9
+ import { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';
10
+ export declare const server: McpServer;
11
+ //# sourceMappingURL=server.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAIpE,eAAO,MAAM,MAAM,WAGjB,CAAC"}
package/dist/server.js ADDED
@@ -0,0 +1,16 @@
1
+ /**
2
+ * MCP Server for the Austrian RIS (Rechtsinformationssystem).
3
+ *
4
+ * This module provides an MCP server with tools for searching and retrieving
5
+ * Austrian legal documents including federal laws, state laws, and court decisions.
6
+ *
7
+ * API Documentation: https://data.bka.gv.at/ris/api/v2.6/
8
+ */
9
+ import { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';
10
+ import { registerAllTools } from './tools/index.js';
11
+ export const server = new McpServer({
12
+ name: 'ris-mcp',
13
+ version: '1.0.0',
14
+ });
15
+ registerAllTools(server);
16
+ //# sourceMappingURL=server.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"server.js","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAEpE,OAAO,EAAE,gBAAgB,EAAE,MAAM,kBAAkB,CAAC;AAEpD,MAAM,CAAC,MAAM,MAAM,GAAG,IAAI,SAAS,CAAC;IAClC,IAAI,EAAE,SAAS;IACf,OAAO,EAAE,OAAO;CACjB,CAAC,CAAC;AAEH,gBAAgB,CAAC,MAAM,CAAC,CAAC"}
@@ -0,0 +1,6 @@
1
+ /**
2
+ * Tool 8: ris_bezirke — Search district administrative authority announcements.
3
+ */
4
+ import type { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';
5
+ export declare function registerBezirkeTool(server: McpServer): void;
6
+ //# sourceMappingURL=bezirke.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"bezirke.d.ts","sourceRoot":"","sources":["../../src/tools/bezirke.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAczE,wBAAgB,mBAAmB,CAAC,MAAM,EAAE,SAAS,GAAG,IAAI,CAoF3D"}
@@ -0,0 +1,68 @@
1
+ /**
2
+ * Tool 8: ris_bezirke — Search district administrative authority announcements.
3
+ */
4
+ import { z } from 'zod';
5
+ import { searchBezirke } from '../client.js';
6
+ import { IM_RIS_SEIT_VALUES } from '../constants.js';
7
+ import { addOptionalParams, buildBaseParams, createValidationErrorResponse, executeSearchTool, hasAnyParam, } from '../helpers.js';
8
+ import { BundeslandSchema, DateSchema } from '../types.js';
9
+ export function registerBezirkeTool(server) {
10
+ server.tool('ris_bezirke', `Search Austrian district administrative authority announcements (Kundmachungen der Bezirksverwaltungsbehörden).
11
+
12
+ Use this tool to find announcements and ordinances from district administrative authorities.
13
+
14
+ Note: Only certain states publish here: Niederösterreich, Oberösterreich, Tirol, Vorarlberg, Burgenland, Steiermark.
15
+
16
+ Example queries:
17
+ - bundesland="Niederösterreich", suchworte="Bauordnung"
18
+ - bezirksverwaltungsbehoerde="Bezirkshauptmannschaft Innsbruck"`, {
19
+ suchworte: z.string().max(1000).optional().describe('Full-text search terms'),
20
+ titel: z.string().max(500).optional().describe('Search in titles'),
21
+ bundesland: BundeslandSchema.optional().describe('Filter by state - Burgenland, Kärnten, Niederösterreich, Oberösterreich, Salzburg, Steiermark, Tirol, Vorarlberg, Wien'),
22
+ bezirksverwaltungsbehoerde: z
23
+ .string()
24
+ .max(200)
25
+ .optional()
26
+ .describe('District authority name (e.g., "Bezirkshauptmannschaft Innsbruck", "Bezirkshauptmannschaft Amstetten")'),
27
+ kundmachungsnummer: z.string().max(100).optional().describe('Announcement number'),
28
+ kundmachungsdatum_von: DateSchema.optional().describe('Announcement date from (YYYY-MM-DD)'),
29
+ kundmachungsdatum_bis: DateSchema.optional().describe('Announcement date to (YYYY-MM-DD)'),
30
+ im_ris_seit: z.enum(IM_RIS_SEIT_VALUES).optional().describe('Filter by time in RIS'),
31
+ seite: z.number().default(1).describe('Page number (default: 1)'),
32
+ limit: z.number().default(20).describe('Results per page 10/20/50/100 (default: 20)'),
33
+ response_format: z
34
+ .enum(['markdown', 'json'])
35
+ .default('markdown')
36
+ .describe('"markdown" (default) or "json"'),
37
+ }, async (args) => {
38
+ const { suchworte, titel, bundesland, bezirksverwaltungsbehoerde, kundmachungsnummer, kundmachungsdatum_von, kundmachungsdatum_bis, im_ris_seit, seite, limit, response_format, } = args;
39
+ if (!hasAnyParam(args, [
40
+ 'suchworte',
41
+ 'titel',
42
+ 'bundesland',
43
+ 'bezirksverwaltungsbehoerde',
44
+ 'kundmachungsnummer',
45
+ ])) {
46
+ return createValidationErrorResponse([
47
+ 'suchworte` für Volltextsuche',
48
+ 'titel` für Titelsuche',
49
+ 'bundesland` für Bundesland',
50
+ 'bezirksverwaltungsbehoerde` für Bezirksverwaltungsbehörde',
51
+ 'kundmachungsnummer` für Kundmachungsnummer',
52
+ ]);
53
+ }
54
+ const params = buildBaseParams('Bvb', limit, seite);
55
+ addOptionalParams(params, [
56
+ [suchworte, 'Suchworte'],
57
+ [titel, 'Titel'],
58
+ [bundesland, 'Bundesland'],
59
+ [bezirksverwaltungsbehoerde, 'Bezirksverwaltungsbehoerde'],
60
+ [kundmachungsnummer, 'Kundmachungsnummer'],
61
+ [kundmachungsdatum_von, 'Kundmachungsdatum.Von'],
62
+ [kundmachungsdatum_bis, 'Kundmachungsdatum.Bis'],
63
+ [im_ris_seit, 'ImRisSeit'],
64
+ ]);
65
+ return executeSearchTool(searchBezirke, params, response_format);
66
+ });
67
+ }
68
+ //# sourceMappingURL=bezirke.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"bezirke.js","sourceRoot":"","sources":["../../src/tools/bezirke.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,6 @@
1
+ /**
2
+ * Tool: ris_bundesgesetzblatt — Search Austrian Federal Law Gazettes (Bundesgesetzblatt).
3
+ */
4
+ import type { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';
5
+ export declare function registerBundesgesetzblattTool(server: McpServer): void;
6
+ //# sourceMappingURL=bundesgesetzblatt.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"bundesgesetzblatt.d.ts","sourceRoot":"","sources":["../../src/tools/bundesgesetzblatt.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAYzE,wBAAgB,6BAA6B,CAAC,MAAM,EAAE,SAAS,GAAG,IAAI,CAiErE"}
@@ -0,0 +1,55 @@
1
+ /**
2
+ * Tool: ris_bundesgesetzblatt — Search Austrian Federal Law Gazettes (Bundesgesetzblatt).
3
+ */
4
+ import { z } from 'zod';
5
+ import { searchBundesrecht } from '../client.js';
6
+ import { addOptionalParams, buildBaseParams, createValidationErrorResponse, executeSearchTool, hasAnyParam, } from '../helpers.js';
7
+ export function registerBundesgesetzblattTool(server) {
8
+ server.tool('ris_bundesgesetzblatt', `Search Austrian Federal Law Gazettes (Bundesgesetzblatt).
9
+
10
+ Use this tool for historical research and tracking when laws were enacted.
11
+ Contains official publications of federal laws, ordinances, and treaties.
12
+
13
+ Example queries:
14
+ - bgblnummer="120", jahrgang="2023", teil="1" -> Find specific gazette
15
+ - suchworte="Klimaschutz" -> Full-text search in gazettes`, {
16
+ bgblnummer: z.string().max(100).optional().describe('Gazette number (e.g., "120")'),
17
+ teil: z
18
+ .enum(['1', '2', '3'])
19
+ .optional()
20
+ .describe('Part - "1" (I=Laws), "2" (II=Ordinances), "3" (III=Treaties)'),
21
+ jahrgang: z.string().max(10).optional().describe('Year (e.g., "2023")'),
22
+ suchworte: z.string().max(1000).optional().describe('Full-text search terms'),
23
+ titel: z.string().max(500).optional().describe('Search in gazette titles'),
24
+ applikation: z
25
+ .enum(['BgblAuth', 'BgblPdf', 'BgblAlt'])
26
+ .default('BgblAuth')
27
+ .describe('"BgblAuth" (authentic 2004+, default), "BgblPdf" (PDF), "BgblAlt" (1945-2003)'),
28
+ seite: z.number().default(1).describe('Page number (default: 1)'),
29
+ limit: z.number().default(20).describe('Results per page 10/20/50/100 (default: 20)'),
30
+ response_format: z
31
+ .enum(['markdown', 'json'])
32
+ .default('markdown')
33
+ .describe('"markdown" (default) or "json"'),
34
+ }, async (args) => {
35
+ const { bgblnummer, teil, jahrgang, suchworte, titel, applikation, seite, limit, response_format, } = args;
36
+ if (!hasAnyParam(args, ['bgblnummer', 'jahrgang', 'suchworte', 'titel'])) {
37
+ return createValidationErrorResponse([
38
+ 'bgblnummer` fuer Gesetzblatt-Nummer',
39
+ 'jahrgang` fuer Jahr',
40
+ 'suchworte` fuer Volltextsuche',
41
+ 'titel` fuer Suche in Titeln',
42
+ ]);
43
+ }
44
+ const params = buildBaseParams(applikation, limit, seite);
45
+ addOptionalParams(params, [
46
+ [bgblnummer, 'Bgblnummer'],
47
+ [teil, 'Teil'],
48
+ [jahrgang, 'Jahrgang'],
49
+ [suchworte, 'Suchworte'],
50
+ [titel, 'Titel'],
51
+ ]);
52
+ return executeSearchTool(searchBundesrecht, params, response_format);
53
+ });
54
+ }
55
+ //# sourceMappingURL=bundesgesetzblatt.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"bundesgesetzblatt.js","sourceRoot":"","sources":["../../src/tools/bundesgesetzblatt.ts"],"names":[],"mappings":"AAAA;;GAEG;AAGH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,OAAO,EAAE,iBAAiB,EAAE,MAAM,cAAc,CAAC;AACjD,OAAO,EACL,iBAAiB,EACjB,eAAe,EACf,6BAA6B,EAC7B,iBAAiB,EACjB,WAAW,GACZ,MAAM,eAAe,CAAC;AAEvB,MAAM,UAAU,6BAA6B,CAAC,MAAiB;IAC7D,MAAM,CAAC,IAAI,CACT,uBAAuB,EACvB;;;;;;;4DAOwD,EACxD;QACE,UAAU,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,8BAA8B,CAAC;QACnF,IAAI,EAAE,CAAC;aACJ,IAAI,CAAC,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC;aACrB,QAAQ,EAAE;aACV,QAAQ,CAAC,8DAA8D,CAAC;QAC3E,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,qBAAqB,CAAC;QACvE,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,wBAAwB,CAAC;QAC7E,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,0BAA0B,CAAC;QAC1E,WAAW,EAAE,CAAC;aACX,IAAI,CAAC,CAAC,UAAU,EAAE,SAAS,EAAE,SAAS,CAAC,CAAC;aACxC,OAAO,CAAC,UAAU,CAAC;aACnB,QAAQ,CAAC,+EAA+E,CAAC;QAC5F,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,0BAA0B,CAAC;QACjE,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC,QAAQ,CAAC,6CAA6C,CAAC;QACrF,eAAe,EAAE,CAAC;aACf,IAAI,CAAC,CAAC,UAAU,EAAE,MAAM,CAAC,CAAC;aAC1B,OAAO,CAAC,UAAU,CAAC;aACnB,QAAQ,CAAC,gCAAgC,CAAC;KAC9C,EACD,KAAK,EAAE,IAAI,EAAE,EAAE;QACb,MAAM,EACJ,UAAU,EACV,IAAI,EACJ,QAAQ,EACR,SAAS,EACT,KAAK,EACL,WAAW,EACX,KAAK,EACL,KAAK,EACL,eAAe,GAChB,GAAG,IAAI,CAAC;QAET,IAAI,CAAC,WAAW,CAAC,IAAI,EAAE,CAAC,YAAY,EAAE,UAAU,EAAE,WAAW,EAAE,OAAO,CAAC,CAAC,EAAE,CAAC;YACzE,OAAO,6BAA6B,CAAC;gBACnC,qCAAqC;gBACrC,qBAAqB;gBACrB,+BAA+B;gBAC/B,6BAA6B;aAC9B,CAAC,CAAC;QACL,CAAC;QAED,MAAM,MAAM,GAAG,eAAe,CAAC,WAAW,EAAE,KAAK,EAAE,KAAK,CAAC,CAAC;QAC1D,iBAAiB,CAAC,MAAM,EAAE;YACxB,CAAC,UAAU,EAAE,YAAY,CAAC;YAC1B,CAAC,IAAI,EAAE,MAAM,CAAC;YACd,CAAC,QAAQ,EAAE,UAAU,CAAC;YACtB,CAAC,SAAS,EAAE,WAAW,CAAC;YACxB,CAAC,KAAK,EAAE,OAAO,CAAC;SACjB,CAAC,CAAC;QAEH,OAAO,iBAAiB,CAAC,iBAAiB,EAAE,MAAM,EAAE,eAAe,CAAC,CAAC;IACvE,CAAC,CACF,CAAC;AACJ,CAAC"}
@@ -0,0 +1,6 @@
1
+ /**
2
+ * Tool: ris_bundesrecht — Search Austrian federal laws (Bundesrecht).
3
+ */
4
+ import type { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';
5
+ export declare function registerBundesrechtTool(server: McpServer): void;
6
+ //# sourceMappingURL=bundesrecht.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"bundesrecht.d.ts","sourceRoot":"","sources":["../../src/tools/bundesrecht.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAazE,wBAAgB,uBAAuB,CAAC,MAAM,EAAE,SAAS,GAAG,IAAI,CA0E/D"}
@@ -0,0 +1,63 @@
1
+ /**
2
+ * Tool: ris_bundesrecht — Search Austrian federal laws (Bundesrecht).
3
+ */
4
+ import { z } from 'zod';
5
+ import { searchBundesrecht } from '../client.js';
6
+ import { addOptionalParams, buildBaseParams, createValidationErrorResponse, executeSearchTool, hasAnyParam, } from '../helpers.js';
7
+ import { BundesrechtApplikationSchema, DateSchema } from '../types.js';
8
+ export function registerBundesrechtTool(server) {
9
+ server.tool('ris_bundesrecht', `Search Austrian federal laws (Bundesrecht).
10
+
11
+ Use this tool to find Austrian federal legislation like ABGB, StGB, UGB, etc.
12
+
13
+ Example queries:
14
+ - suchworte="Mietrecht" -> Find laws mentioning rent law
15
+ - titel="ABGB", paragraph="1319a" -> Find specific ABGB section
16
+ - applikation="Begut" -> Search draft legislation`, {
17
+ suchworte: z
18
+ .string()
19
+ .max(1000)
20
+ .optional()
21
+ .describe('Full-text search terms (e.g., "Mietrecht", "Schadenersatz")'),
22
+ titel: z
23
+ .string()
24
+ .max(500)
25
+ .optional()
26
+ .describe('Search in law titles (e.g., "ABGB", "Strafgesetzbuch")'),
27
+ paragraph: z
28
+ .string()
29
+ .max(100)
30
+ .optional()
31
+ .describe('Paragraph number to search for (e.g., "1295" for §1295)'),
32
+ applikation: BundesrechtApplikationSchema.default('BrKons').describe('Data source - "BrKons" (consolidated, default), "Begut" (drafts), "BgblAuth" (gazette), "Erv" (English)'),
33
+ fassung_vom: DateSchema.optional().describe('Date for historical version (YYYY-MM-DD)'),
34
+ seite: z.number().default(1).describe('Page number (default: 1)'),
35
+ limit: z.number().default(20).describe('Results per page 10/20/50/100 (default: 20)'),
36
+ response_format: z
37
+ .enum(['markdown', 'json'])
38
+ .default('markdown')
39
+ .describe('"markdown" (default) or "json"'),
40
+ }, async (args) => {
41
+ const { suchworte, titel, paragraph, applikation, fassung_vom, seite, limit, response_format, } = args;
42
+ if (!hasAnyParam(args, ['suchworte', 'titel', 'paragraph'])) {
43
+ return createValidationErrorResponse([
44
+ 'suchworte` fuer Volltextsuche',
45
+ 'titel` fuer Suche in Gesetzesnamen',
46
+ 'paragraph` fuer Suche nach Paragraphen',
47
+ ]);
48
+ }
49
+ const params = buildBaseParams(applikation, limit, seite);
50
+ addOptionalParams(params, [
51
+ [suchworte, 'Suchworte'],
52
+ [titel, 'Titel'],
53
+ [fassung_vom, 'FassungVom'],
54
+ ]);
55
+ if (paragraph) {
56
+ params['Abschnitt.Von'] = paragraph;
57
+ params['Abschnitt.Bis'] = paragraph;
58
+ params['Abschnitt.Typ'] = 'Paragraph';
59
+ }
60
+ return executeSearchTool(searchBundesrecht, params, response_format);
61
+ });
62
+ }
63
+ //# sourceMappingURL=bundesrecht.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"bundesrecht.js","sourceRoot":"","sources":["../../src/tools/bundesrecht.ts"],"names":[],"mappings":"AAAA;;GAEG;AAGH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,OAAO,EAAE,iBAAiB,EAAE,MAAM,cAAc,CAAC;AACjD,OAAO,EACL,iBAAiB,EACjB,eAAe,EACf,6BAA6B,EAC7B,iBAAiB,EACjB,WAAW,GACZ,MAAM,eAAe,CAAC;AACvB,OAAO,EAAE,4BAA4B,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAEvE,MAAM,UAAU,uBAAuB,CAAC,MAAiB;IACvD,MAAM,CAAC,IAAI,CACT,iBAAiB,EACjB;;;;;;;oDAOgD,EAChD;QACE,SAAS,EAAE,CAAC;aACT,MAAM,EAAE;aACR,GAAG,CAAC,IAAI,CAAC;aACT,QAAQ,EAAE;aACV,QAAQ,CAAC,6DAA6D,CAAC;QAC1E,KAAK,EAAE,CAAC;aACL,MAAM,EAAE;aACR,GAAG,CAAC,GAAG,CAAC;aACR,QAAQ,EAAE;aACV,QAAQ,CAAC,wDAAwD,CAAC;QACrE,SAAS,EAAE,CAAC;aACT,MAAM,EAAE;aACR,GAAG,CAAC,GAAG,CAAC;aACR,QAAQ,EAAE;aACV,QAAQ,CAAC,yDAAyD,CAAC;QACtE,WAAW,EAAE,4BAA4B,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,QAAQ,CAClE,yGAAyG,CAC1G;QACD,WAAW,EAAE,UAAU,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,0CAA0C,CAAC;QACvF,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,0BAA0B,CAAC;QACjE,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC,QAAQ,CAAC,6CAA6C,CAAC;QACrF,eAAe,EAAE,CAAC;aACf,IAAI,CAAC,CAAC,UAAU,EAAE,MAAM,CAAC,CAAC;aAC1B,OAAO,CAAC,UAAU,CAAC;aACnB,QAAQ,CAAC,gCAAgC,CAAC;KAC9C,EACD,KAAK,EAAE,IAAI,EAAE,EAAE;QACb,MAAM,EACJ,SAAS,EACT,KAAK,EACL,SAAS,EACT,WAAW,EACX,WAAW,EACX,KAAK,EACL,KAAK,EACL,eAAe,GAChB,GAAG,IAAI,CAAC;QAET,IAAI,CAAC,WAAW,CAAC,IAAI,EAAE,CAAC,WAAW,EAAE,OAAO,EAAE,WAAW,CAAC,CAAC,EAAE,CAAC;YAC5D,OAAO,6BAA6B,CAAC;gBACnC,+BAA+B;gBAC/B,oCAAoC;gBACpC,wCAAwC;aACzC,CAAC,CAAC;QACL,CAAC;QAED,MAAM,MAAM,GAAG,eAAe,CAAC,WAAW,EAAE,KAAK,EAAE,KAAK,CAAC,CAAC;QAC1D,iBAAiB,CAAC,MAAM,EAAE;YACxB,CAAC,SAAS,EAAE,WAAW,CAAC;YACxB,CAAC,KAAK,EAAE,OAAO,CAAC;YAChB,CAAC,WAAW,EAAE,YAAY,CAAC;SAC5B,CAAC,CAAC;QAEH,IAAI,SAAS,EAAE,CAAC;YACd,MAAM,CAAC,eAAe,CAAC,GAAG,SAAS,CAAC;YACpC,MAAM,CAAC,eAAe,CAAC,GAAG,SAAS,CAAC;YACpC,MAAM,CAAC,eAAe,CAAC,GAAG,WAAW,CAAC;QACxC,CAAC;QAED,OAAO,iBAAiB,CAAC,iBAAiB,EAAE,MAAM,EAAE,eAAe,CAAC,CAAC;IACvE,CAAC,CACF,CAAC;AACJ,CAAC"}
@@ -0,0 +1,6 @@
1
+ /**
2
+ * Tool 7: ris_dokument — Retrieve full text of a legal document.
3
+ */
4
+ import type { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';
5
+ export declare function registerDokumentTool(server: McpServer): void;
6
+ //# sourceMappingURL=dokument.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"dokument.d.ts","sourceRoot":"","sources":["../../src/tools/dokument.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAgBzE,wBAAgB,oBAAoB,CAAC,MAAM,EAAE,SAAS,GAAG,IAAI,CAyP5D"}