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.
- package/LICENSE +21 -0
- package/README.md +490 -0
- package/dist/client.d.ts +109 -0
- package/dist/client.d.ts.map +1 -0
- package/dist/client.js +371 -0
- package/dist/client.js.map +1 -0
- package/dist/constants.d.ts +67 -0
- package/dist/constants.d.ts.map +1 -0
- package/dist/constants.js +168 -0
- package/dist/constants.js.map +1 -0
- package/dist/formatting.d.ts +70 -0
- package/dist/formatting.d.ts.map +1 -0
- package/dist/formatting.js +366 -0
- package/dist/formatting.js.map +1 -0
- package/dist/helpers.d.ts +46 -0
- package/dist/helpers.d.ts.map +1 -0
- package/dist/helpers.js +92 -0
- package/dist/helpers.js.map +1 -0
- package/dist/index.d.ts +9 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +21 -0
- package/dist/index.js.map +1 -0
- package/dist/parser.d.ts +48 -0
- package/dist/parser.d.ts.map +1 -0
- package/dist/parser.js +240 -0
- package/dist/parser.js.map +1 -0
- package/dist/server.d.ts +11 -0
- package/dist/server.d.ts.map +1 -0
- package/dist/server.js +16 -0
- package/dist/server.js.map +1 -0
- package/dist/tools/bezirke.d.ts +6 -0
- package/dist/tools/bezirke.d.ts.map +1 -0
- package/dist/tools/bezirke.js +68 -0
- package/dist/tools/bezirke.js.map +1 -0
- package/dist/tools/bundesgesetzblatt.d.ts +6 -0
- package/dist/tools/bundesgesetzblatt.d.ts.map +1 -0
- package/dist/tools/bundesgesetzblatt.js +55 -0
- package/dist/tools/bundesgesetzblatt.js.map +1 -0
- package/dist/tools/bundesrecht.d.ts +6 -0
- package/dist/tools/bundesrecht.d.ts.map +1 -0
- package/dist/tools/bundesrecht.js +63 -0
- package/dist/tools/bundesrecht.js.map +1 -0
- package/dist/tools/dokument.d.ts +6 -0
- package/dist/tools/dokument.d.ts.map +1 -0
- package/dist/tools/dokument.js +244 -0
- package/dist/tools/dokument.js.map +1 -0
- package/dist/tools/gemeinden.d.ts +6 -0
- package/dist/tools/gemeinden.d.ts.map +1 -0
- package/dist/tools/gemeinden.js +125 -0
- package/dist/tools/gemeinden.js.map +1 -0
- package/dist/tools/history.d.ts +6 -0
- package/dist/tools/history.d.ts.map +1 -0
- package/dist/tools/history.js +65 -0
- package/dist/tools/history.js.map +1 -0
- package/dist/tools/index.d.ts +12 -0
- package/dist/tools/index.d.ts.map +1 -0
- package/dist/tools/index.js +36 -0
- package/dist/tools/index.js.map +1 -0
- package/dist/tools/judikatur.d.ts +6 -0
- package/dist/tools/judikatur.d.ts.map +1 -0
- package/dist/tools/judikatur.js +46 -0
- package/dist/tools/judikatur.js.map +1 -0
- package/dist/tools/landesgesetzblatt.d.ts +6 -0
- package/dist/tools/landesgesetzblatt.d.ts.map +1 -0
- package/dist/tools/landesgesetzblatt.js +60 -0
- package/dist/tools/landesgesetzblatt.js.map +1 -0
- package/dist/tools/landesrecht.d.ts +6 -0
- package/dist/tools/landesrecht.d.ts.map +1 -0
- package/dist/tools/landesrecht.js +51 -0
- package/dist/tools/landesrecht.js.map +1 -0
- package/dist/tools/regierungsvorlagen.d.ts +6 -0
- package/dist/tools/regierungsvorlagen.d.ts.map +1 -0
- package/dist/tools/regierungsvorlagen.js +97 -0
- package/dist/tools/regierungsvorlagen.js.map +1 -0
- package/dist/tools/sonstige.d.ts +6 -0
- package/dist/tools/sonstige.d.ts.map +1 -0
- package/dist/tools/sonstige.js +271 -0
- package/dist/tools/sonstige.js.map +1 -0
- package/dist/tools/verordnungen.d.ts +6 -0
- package/dist/tools/verordnungen.d.ts.map +1 -0
- package/dist/tools/verordnungen.js +68 -0
- package/dist/tools/verordnungen.js.map +1 -0
- package/dist/types.d.ts +471 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +151 -0
- package/dist/types.js.map +1 -0
- package/package.json +87 -0
|
@@ -0,0 +1,70 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Formatting utilities for RIS MCP Server responses.
|
|
3
|
+
*
|
|
4
|
+
* This module provides functions to format RIS API responses for optimal
|
|
5
|
+
* LLM consumption, including proper Austrian legal citations, search results
|
|
6
|
+
* formatting, and document content preparation.
|
|
7
|
+
*/
|
|
8
|
+
import type { Document, SearchResult } from './types.js';
|
|
9
|
+
/**
|
|
10
|
+
* Convert API date format to readable German format.
|
|
11
|
+
*/
|
|
12
|
+
export declare function formatDate(dateStr: string | null | undefined): string;
|
|
13
|
+
/**
|
|
14
|
+
* Convert HTML to clean readable text using cheerio.
|
|
15
|
+
*/
|
|
16
|
+
export declare function htmlToText(htmlContent: string): string;
|
|
17
|
+
/**
|
|
18
|
+
* Document data for citation formatting.
|
|
19
|
+
*/
|
|
20
|
+
interface CitationData {
|
|
21
|
+
applikation?: string;
|
|
22
|
+
titel?: string;
|
|
23
|
+
kurztitel?: string | null;
|
|
24
|
+
dokumentnummer?: string;
|
|
25
|
+
citation?: {
|
|
26
|
+
kurztitel?: string | null;
|
|
27
|
+
langtitel?: string | null;
|
|
28
|
+
kundmachungsorgan?: string | null;
|
|
29
|
+
paragraph?: string | null;
|
|
30
|
+
inkrafttreten?: string | null;
|
|
31
|
+
};
|
|
32
|
+
}
|
|
33
|
+
/**
|
|
34
|
+
* Format a proper Austrian legal citation.
|
|
35
|
+
*/
|
|
36
|
+
export declare function formatCitation(doc: Document | CitationData): string;
|
|
37
|
+
/**
|
|
38
|
+
* Format search results for display.
|
|
39
|
+
*/
|
|
40
|
+
export declare function formatSearchResults(results: SearchResult | Record<string, unknown>, format?: 'markdown' | 'json'): string;
|
|
41
|
+
/**
|
|
42
|
+
* Metadata for document formatting.
|
|
43
|
+
*/
|
|
44
|
+
export interface DocumentMetadata {
|
|
45
|
+
dokumentnummer?: string;
|
|
46
|
+
applikation?: string;
|
|
47
|
+
titel?: string;
|
|
48
|
+
kurztitel?: string | null;
|
|
49
|
+
citation?: {
|
|
50
|
+
kurztitel?: string | null;
|
|
51
|
+
langtitel?: string | null;
|
|
52
|
+
kundmachungsorgan?: string | null;
|
|
53
|
+
paragraph?: string | null;
|
|
54
|
+
eli?: string | null;
|
|
55
|
+
inkrafttreten?: string | null;
|
|
56
|
+
ausserkrafttreten?: string | null;
|
|
57
|
+
};
|
|
58
|
+
dokument_url?: string | null;
|
|
59
|
+
gesamte_rechtsvorschrift_url?: string | null;
|
|
60
|
+
}
|
|
61
|
+
/**
|
|
62
|
+
* Format a full document for LLM context.
|
|
63
|
+
*/
|
|
64
|
+
export declare function formatDocument(content: string, metadata: DocumentMetadata, format?: 'markdown' | 'json'): string;
|
|
65
|
+
/**
|
|
66
|
+
* Truncate response if too long.
|
|
67
|
+
*/
|
|
68
|
+
export declare function truncateResponse(text: string, limit?: number): string;
|
|
69
|
+
export {};
|
|
70
|
+
//# sourceMappingURL=formatting.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"formatting.d.ts","sourceRoot":"","sources":["../src/formatting.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAIH,OAAO,KAAK,EAAE,QAAQ,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAYzD;;GAEG;AACH,wBAAgB,UAAU,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,GAAG,MAAM,CAiBrE;AAMD;;GAEG;AACH,wBAAgB,UAAU,CAAC,WAAW,EAAE,MAAM,GAAG,MAAM,CAuBtD;AAMD;;GAEG;AACH,UAAU,YAAY;IACpB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,SAAS,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1B,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,EAAE;QACT,SAAS,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;QAC1B,SAAS,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;QAC1B,iBAAiB,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;QAClC,SAAS,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;QAC1B,aAAa,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;KAC/B,CAAC;CACH;AAED;;GAEG;AACH,wBAAgB,cAAc,CAAC,GAAG,EAAE,QAAQ,GAAG,YAAY,GAAG,MAAM,CAcnE;AA6GD;;GAEG;AACH,wBAAgB,mBAAmB,CACjC,OAAO,EAAE,YAAY,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC/C,MAAM,GAAE,UAAU,GAAG,MAAmB,GACvC,MAAM,CAsBR;AA6FD;;GAEG;AACH,MAAM,WAAW,gBAAgB;IAC/B,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,SAAS,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1B,QAAQ,CAAC,EAAE;QACT,SAAS,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;QAC1B,SAAS,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;QAC1B,iBAAiB,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;QAClC,SAAS,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;QAC1B,GAAG,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;QACpB,aAAa,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;QAC9B,iBAAiB,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;KACnC,CAAC;IACF,YAAY,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC7B,4BAA4B,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;CAC9C;AAED;;GAEG;AACH,wBAAgB,cAAc,CAC5B,OAAO,EAAE,MAAM,EACf,QAAQ,EAAE,gBAAgB,EAC1B,MAAM,GAAE,UAAU,GAAG,MAAmB,GACvC,MAAM,CAaR;AAuFD;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,SAAkB,GAAG,MAAM,CAsC9E"}
|
|
@@ -0,0 +1,366 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Formatting utilities for RIS MCP Server responses.
|
|
3
|
+
*
|
|
4
|
+
* This module provides functions to format RIS API responses for optimal
|
|
5
|
+
* LLM consumption, including proper Austrian legal citations, search results
|
|
6
|
+
* formatting, and document content preparation.
|
|
7
|
+
*/
|
|
8
|
+
import * as cheerio from 'cheerio';
|
|
9
|
+
// =============================================================================
|
|
10
|
+
// Constants
|
|
11
|
+
// =============================================================================
|
|
12
|
+
const CHARACTER_LIMIT = 25000;
|
|
13
|
+
// =============================================================================
|
|
14
|
+
// Date Formatting
|
|
15
|
+
// =============================================================================
|
|
16
|
+
/**
|
|
17
|
+
* Convert API date format to readable German format.
|
|
18
|
+
*/
|
|
19
|
+
export function formatDate(dateStr) {
|
|
20
|
+
if (!dateStr) {
|
|
21
|
+
return '';
|
|
22
|
+
}
|
|
23
|
+
try {
|
|
24
|
+
// Handle ISO format (YYYY-MM-DD)
|
|
25
|
+
const datePart = dateStr.slice(0, 10);
|
|
26
|
+
const parts = datePart.split('-');
|
|
27
|
+
if (parts.length === 3) {
|
|
28
|
+
const [year, month, day] = parts;
|
|
29
|
+
return `${day}.${month}.${year}`;
|
|
30
|
+
}
|
|
31
|
+
return dateStr;
|
|
32
|
+
}
|
|
33
|
+
catch {
|
|
34
|
+
return dateStr;
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
// =============================================================================
|
|
38
|
+
// HTML Processing
|
|
39
|
+
// =============================================================================
|
|
40
|
+
/**
|
|
41
|
+
* Convert HTML to clean readable text using cheerio.
|
|
42
|
+
*/
|
|
43
|
+
export function htmlToText(htmlContent) {
|
|
44
|
+
if (!htmlContent) {
|
|
45
|
+
return '';
|
|
46
|
+
}
|
|
47
|
+
const $ = cheerio.load(htmlContent);
|
|
48
|
+
// Remove script, style, and head elements
|
|
49
|
+
$('script, style, head').remove();
|
|
50
|
+
// Process the body or entire document
|
|
51
|
+
let text = $('body').length > 0 ? $('body').text() : $.text();
|
|
52
|
+
// Clean up whitespace
|
|
53
|
+
text = text
|
|
54
|
+
.replace(/\n{3,}/g, '\n\n') // Normalize multiple newlines
|
|
55
|
+
.replace(/[ \t]+/g, ' ') // Normalize multiple spaces
|
|
56
|
+
.split('\n')
|
|
57
|
+
.map((line) => line.trim())
|
|
58
|
+
.join('\n')
|
|
59
|
+
.trim();
|
|
60
|
+
return text;
|
|
61
|
+
}
|
|
62
|
+
/**
|
|
63
|
+
* Format a proper Austrian legal citation.
|
|
64
|
+
*/
|
|
65
|
+
export function formatCitation(doc) {
|
|
66
|
+
const data = doc;
|
|
67
|
+
const applikation = data.applikation ?? '';
|
|
68
|
+
const citationData = data.citation ?? {};
|
|
69
|
+
const titel = data.titel ?? '';
|
|
70
|
+
const kurztitel = data.kurztitel ?? citationData.kurztitel ?? '';
|
|
71
|
+
// Handle court decisions (Judikatur)
|
|
72
|
+
if (['Justiz', 'Vfgh', 'Vwgh', 'Bvwg', 'Lvwg', 'Dsk'].includes(applikation)) {
|
|
73
|
+
return formatCourtCitation(data, applikation, titel);
|
|
74
|
+
}
|
|
75
|
+
// Handle federal law (Bundesrecht)
|
|
76
|
+
return formatLawCitation(data, kurztitel, citationData);
|
|
77
|
+
}
|
|
78
|
+
/**
|
|
79
|
+
* Format citation for court decisions.
|
|
80
|
+
*/
|
|
81
|
+
function formatCourtCitation(data, applikation, titel) {
|
|
82
|
+
const courtPrefixes = {
|
|
83
|
+
Justiz: '',
|
|
84
|
+
Vfgh: 'VfGH',
|
|
85
|
+
Vwgh: 'VwGH',
|
|
86
|
+
Bvwg: 'BVwG',
|
|
87
|
+
Lvwg: 'LVwG',
|
|
88
|
+
Dsk: 'DSK',
|
|
89
|
+
};
|
|
90
|
+
const dokumentnummer = data.dokumentnummer ?? '';
|
|
91
|
+
// For ordinary courts
|
|
92
|
+
if (applikation === 'Justiz') {
|
|
93
|
+
// Title often contains "OGH 5 Ob 123/23t" or similar
|
|
94
|
+
const match = titel.match(/(OGH|OLG|LG|BG)\s*[,:]?\s*(\d+\s*\w+\s*\d+\/\d+\w?)/i);
|
|
95
|
+
if (match) {
|
|
96
|
+
return `${match[1]} ${match[2]}`;
|
|
97
|
+
}
|
|
98
|
+
// Try to extract from dokumentnummer
|
|
99
|
+
const dokMatch = dokumentnummer.match(/(OGH|OLG|LG|BG)\d+/i);
|
|
100
|
+
if (dokMatch) {
|
|
101
|
+
const court = dokMatch[1].toUpperCase();
|
|
102
|
+
const caseMatch = dokumentnummer.match(/_(\d+\w+)_(\d+)([A-Z])\d+_/);
|
|
103
|
+
if (caseMatch) {
|
|
104
|
+
return `${court} ${caseMatch[1]}/${caseMatch[2]}${caseMatch[3].toLowerCase()}`;
|
|
105
|
+
}
|
|
106
|
+
}
|
|
107
|
+
}
|
|
108
|
+
// For VfGH, VwGH etc.
|
|
109
|
+
const prefix = courtPrefixes[applikation] ?? '';
|
|
110
|
+
if (prefix) {
|
|
111
|
+
const dateMatch = titel.match(/(\d{1,2}\.\d{1,2}\.\d{4})/);
|
|
112
|
+
const caseMatch = titel.match(/([EGUBVW]\s*\d+\/\d+)/i);
|
|
113
|
+
if (dateMatch && caseMatch) {
|
|
114
|
+
return `${prefix} ${dateMatch[1]}, ${caseMatch[1]}`;
|
|
115
|
+
}
|
|
116
|
+
if (caseMatch) {
|
|
117
|
+
return `${prefix} ${caseMatch[1]}`;
|
|
118
|
+
}
|
|
119
|
+
}
|
|
120
|
+
// Fallback
|
|
121
|
+
if (titel.length <= 60) {
|
|
122
|
+
return titel;
|
|
123
|
+
}
|
|
124
|
+
return dokumentnummer;
|
|
125
|
+
}
|
|
126
|
+
/**
|
|
127
|
+
* Format citation for laws and regulations.
|
|
128
|
+
*/
|
|
129
|
+
function formatLawCitation(data, kurztitel, citationData) {
|
|
130
|
+
const paragraph = citationData?.paragraph ?? '';
|
|
131
|
+
const kundmachungsorgan = citationData?.kundmachungsorgan ?? '';
|
|
132
|
+
const parts = [];
|
|
133
|
+
if (paragraph) {
|
|
134
|
+
parts.push(paragraph);
|
|
135
|
+
}
|
|
136
|
+
if (kurztitel) {
|
|
137
|
+
parts.push(kurztitel);
|
|
138
|
+
}
|
|
139
|
+
if (kundmachungsorgan && kundmachungsorgan.length < 30) {
|
|
140
|
+
parts.push(`(${kundmachungsorgan})`);
|
|
141
|
+
}
|
|
142
|
+
if (parts.length > 0) {
|
|
143
|
+
return parts.join(' ');
|
|
144
|
+
}
|
|
145
|
+
return data.titel ?? data.dokumentnummer ?? '';
|
|
146
|
+
}
|
|
147
|
+
// =============================================================================
|
|
148
|
+
// Search Results Formatting
|
|
149
|
+
// =============================================================================
|
|
150
|
+
/**
|
|
151
|
+
* Document to dictionary representation.
|
|
152
|
+
*/
|
|
153
|
+
function documentToDict(doc) {
|
|
154
|
+
return {
|
|
155
|
+
dokumentnummer: doc.dokumentnummer,
|
|
156
|
+
applikation: doc.applikation,
|
|
157
|
+
titel: doc.titel,
|
|
158
|
+
kurztitel: doc.kurztitel,
|
|
159
|
+
citation: doc.citation,
|
|
160
|
+
content_urls: doc.content_urls,
|
|
161
|
+
dokument_url: doc.dokument_url,
|
|
162
|
+
gesamte_rechtsvorschrift_url: doc.gesamte_rechtsvorschrift_url,
|
|
163
|
+
};
|
|
164
|
+
}
|
|
165
|
+
/**
|
|
166
|
+
* Format search results for display.
|
|
167
|
+
*/
|
|
168
|
+
export function formatSearchResults(results, format = 'markdown') {
|
|
169
|
+
let data;
|
|
170
|
+
if ('documents' in results && Array.isArray(results.documents)) {
|
|
171
|
+
// It's a SearchResult
|
|
172
|
+
const sr = results;
|
|
173
|
+
data = {
|
|
174
|
+
total_hits: sr.total_hits,
|
|
175
|
+
page: sr.page,
|
|
176
|
+
page_size: sr.page_size,
|
|
177
|
+
has_more: sr.has_more,
|
|
178
|
+
documents: sr.documents.map(documentToDict),
|
|
179
|
+
};
|
|
180
|
+
}
|
|
181
|
+
else {
|
|
182
|
+
data = results;
|
|
183
|
+
}
|
|
184
|
+
if (format === 'json') {
|
|
185
|
+
return JSON.stringify(data, null, 2);
|
|
186
|
+
}
|
|
187
|
+
return formatSearchResultsMarkdown(data);
|
|
188
|
+
}
|
|
189
|
+
/**
|
|
190
|
+
* Format search results as markdown.
|
|
191
|
+
*/
|
|
192
|
+
function formatSearchResultsMarkdown(data) {
|
|
193
|
+
const totalHits = data.total_hits ?? 0;
|
|
194
|
+
const page = data.page ?? 1;
|
|
195
|
+
const pageSize = data.page_size ?? 20;
|
|
196
|
+
const hasMore = data.has_more ?? false;
|
|
197
|
+
const documents = data.documents ?? [];
|
|
198
|
+
const totalPages = pageSize > 0 ? Math.ceil(totalHits / pageSize) : 1;
|
|
199
|
+
const lines = [];
|
|
200
|
+
// Summary line
|
|
201
|
+
lines.push(`**Gefunden: ${totalHits} Treffer** (Seite ${page} von ${totalPages})`);
|
|
202
|
+
lines.push('');
|
|
203
|
+
if (documents.length === 0) {
|
|
204
|
+
lines.push('_Keine Dokumente gefunden._');
|
|
205
|
+
return lines.join('\n');
|
|
206
|
+
}
|
|
207
|
+
// Format each document
|
|
208
|
+
for (let i = 0; i < documents.length; i++) {
|
|
209
|
+
const doc = documents[i];
|
|
210
|
+
const citation = formatCitation(doc);
|
|
211
|
+
lines.push(`### ${i + 1}. ${citation}`);
|
|
212
|
+
// Title (if different from citation)
|
|
213
|
+
const titel = doc.titel ?? '';
|
|
214
|
+
if (titel && titel !== citation) {
|
|
215
|
+
lines.push(`**${titel}**`);
|
|
216
|
+
}
|
|
217
|
+
// Metadata
|
|
218
|
+
const citationData = doc.citation ?? {};
|
|
219
|
+
const metadataParts = [];
|
|
220
|
+
// Long title
|
|
221
|
+
const langtitel = citationData.langtitel;
|
|
222
|
+
if (langtitel) {
|
|
223
|
+
metadataParts.push(`_${langtitel}_`);
|
|
224
|
+
}
|
|
225
|
+
// Inkrafttreten
|
|
226
|
+
const inkrafttreten = citationData.inkrafttreten;
|
|
227
|
+
if (inkrafttreten) {
|
|
228
|
+
metadataParts.push(`In Kraft seit: ${formatDate(inkrafttreten)}`);
|
|
229
|
+
}
|
|
230
|
+
// Ausserkrafttreten
|
|
231
|
+
const ausserkrafttreten = citationData.ausserkrafttreten;
|
|
232
|
+
if (ausserkrafttreten && ausserkrafttreten !== '9999-12-31') {
|
|
233
|
+
metadataParts.push(`Außer Kraft: ${formatDate(ausserkrafttreten)}`);
|
|
234
|
+
}
|
|
235
|
+
// Kundmachungsorgan
|
|
236
|
+
const kundmachungsorgan = citationData.kundmachungsorgan;
|
|
237
|
+
if (kundmachungsorgan) {
|
|
238
|
+
metadataParts.push(`Fundstelle: ${kundmachungsorgan}`);
|
|
239
|
+
}
|
|
240
|
+
if (metadataParts.length > 0) {
|
|
241
|
+
lines.push(metadataParts.join(' \n'));
|
|
242
|
+
}
|
|
243
|
+
// Document number for retrieval
|
|
244
|
+
const dokumentnummer = doc.dokumentnummer ?? '';
|
|
245
|
+
if (dokumentnummer) {
|
|
246
|
+
lines.push(`\`Dokumentnummer: ${dokumentnummer}\``);
|
|
247
|
+
}
|
|
248
|
+
lines.push('');
|
|
249
|
+
}
|
|
250
|
+
// Pagination hint
|
|
251
|
+
if (hasMore) {
|
|
252
|
+
lines.push('---');
|
|
253
|
+
lines.push(`_Weitere Treffer verfügbar. Verwende \`seite: ${page + 1}\` für die nächste Seite._`);
|
|
254
|
+
}
|
|
255
|
+
return lines.join('\n');
|
|
256
|
+
}
|
|
257
|
+
/**
|
|
258
|
+
* Format a full document for LLM context.
|
|
259
|
+
*/
|
|
260
|
+
export function formatDocument(content, metadata, format = 'markdown') {
|
|
261
|
+
if (format === 'json') {
|
|
262
|
+
return JSON.stringify({
|
|
263
|
+
metadata,
|
|
264
|
+
content: htmlToText(content),
|
|
265
|
+
}, null, 2);
|
|
266
|
+
}
|
|
267
|
+
return formatDocumentMarkdown(content, metadata);
|
|
268
|
+
}
|
|
269
|
+
/**
|
|
270
|
+
* Format document as markdown.
|
|
271
|
+
*/
|
|
272
|
+
function formatDocumentMarkdown(content, metadata) {
|
|
273
|
+
const lines = [];
|
|
274
|
+
// Citation header
|
|
275
|
+
const citation = formatCitation(metadata);
|
|
276
|
+
lines.push(`# ${citation}`);
|
|
277
|
+
lines.push('');
|
|
278
|
+
// Metadata block
|
|
279
|
+
lines.push('## Dokumentinformation');
|
|
280
|
+
lines.push('');
|
|
281
|
+
const citationData = metadata.citation ?? {};
|
|
282
|
+
// Full title
|
|
283
|
+
const langtitel = citationData.langtitel ?? metadata.titel ?? '';
|
|
284
|
+
if (langtitel) {
|
|
285
|
+
lines.push(`**Titel:** ${langtitel}`);
|
|
286
|
+
}
|
|
287
|
+
// Paragraph
|
|
288
|
+
const paragraph = citationData.paragraph;
|
|
289
|
+
if (paragraph) {
|
|
290
|
+
lines.push(`**Paragraph:** ${paragraph}`);
|
|
291
|
+
}
|
|
292
|
+
// Kundmachungsorgan
|
|
293
|
+
const kundmachungsorgan = citationData.kundmachungsorgan;
|
|
294
|
+
if (kundmachungsorgan) {
|
|
295
|
+
lines.push(`**Kundmachungsorgan:** ${kundmachungsorgan}`);
|
|
296
|
+
}
|
|
297
|
+
// Dates
|
|
298
|
+
const inkrafttreten = citationData.inkrafttreten;
|
|
299
|
+
if (inkrafttreten) {
|
|
300
|
+
lines.push(`**In Kraft seit:** ${formatDate(inkrafttreten)}`);
|
|
301
|
+
}
|
|
302
|
+
const ausserkrafttreten = citationData.ausserkrafttreten;
|
|
303
|
+
if (ausserkrafttreten && ausserkrafttreten !== '9999-12-31') {
|
|
304
|
+
lines.push(`**Außer Kraft:** ${formatDate(ausserkrafttreten)}`);
|
|
305
|
+
}
|
|
306
|
+
// ELI
|
|
307
|
+
const eli = citationData.eli;
|
|
308
|
+
if (eli) {
|
|
309
|
+
lines.push(`**ELI:** ${eli}`);
|
|
310
|
+
}
|
|
311
|
+
// Document number
|
|
312
|
+
const dokumentnummer = metadata.dokumentnummer ?? '';
|
|
313
|
+
if (dokumentnummer) {
|
|
314
|
+
lines.push(`**Dokumentnummer:** \`${dokumentnummer}\``);
|
|
315
|
+
}
|
|
316
|
+
// URLs
|
|
317
|
+
const dokumentUrl = metadata.dokument_url;
|
|
318
|
+
if (dokumentUrl) {
|
|
319
|
+
lines.push(`**Quelle:** [${dokumentUrl}](${dokumentUrl})`);
|
|
320
|
+
}
|
|
321
|
+
const gesamteUrl = metadata.gesamte_rechtsvorschrift_url;
|
|
322
|
+
if (gesamteUrl) {
|
|
323
|
+
lines.push(`**Gesamte Rechtsvorschrift:** [${gesamteUrl}](${gesamteUrl})`);
|
|
324
|
+
}
|
|
325
|
+
lines.push('');
|
|
326
|
+
// Content
|
|
327
|
+
lines.push('## Inhalt');
|
|
328
|
+
lines.push('');
|
|
329
|
+
const cleanContent = htmlToText(content);
|
|
330
|
+
lines.push(cleanContent);
|
|
331
|
+
return lines.join('\n');
|
|
332
|
+
}
|
|
333
|
+
// =============================================================================
|
|
334
|
+
// Response Truncation
|
|
335
|
+
// =============================================================================
|
|
336
|
+
/**
|
|
337
|
+
* Truncate response if too long.
|
|
338
|
+
*/
|
|
339
|
+
export function truncateResponse(text, limit = CHARACTER_LIMIT) {
|
|
340
|
+
if (text.length <= limit) {
|
|
341
|
+
return text;
|
|
342
|
+
}
|
|
343
|
+
const originalLen = text.length;
|
|
344
|
+
// Reserve space for the warning message
|
|
345
|
+
const truncateAt = limit - 200;
|
|
346
|
+
// Try to truncate at a paragraph boundary
|
|
347
|
+
let truncated = text.slice(0, truncateAt);
|
|
348
|
+
// Find last paragraph break
|
|
349
|
+
const lastPara = truncated.lastIndexOf('\n\n');
|
|
350
|
+
if (lastPara > truncateAt * 0.7) {
|
|
351
|
+
truncated = truncated.slice(0, lastPara);
|
|
352
|
+
}
|
|
353
|
+
else {
|
|
354
|
+
// Try sentence boundary
|
|
355
|
+
const lastSentence = Math.max(truncated.lastIndexOf('. '), truncated.lastIndexOf('.\n'), truncated.lastIndexOf('? '), truncated.lastIndexOf('! '));
|
|
356
|
+
if (lastSentence > truncateAt * 0.8) {
|
|
357
|
+
truncated = truncated.slice(0, lastSentence + 1);
|
|
358
|
+
}
|
|
359
|
+
}
|
|
360
|
+
const newLen = truncated.length;
|
|
361
|
+
const warning = `\n\n---\n` +
|
|
362
|
+
`Antwort gekuerzt (${originalLen} -> ${newLen} Zeichen). ` +
|
|
363
|
+
`Verwende spezifischere Suchparameter oder ris_dokument fuer Einzeldokumente.`;
|
|
364
|
+
return truncated + warning;
|
|
365
|
+
}
|
|
366
|
+
//# sourceMappingURL=formatting.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"formatting.js","sourceRoot":"","sources":["../src/formatting.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Helper functions for MCP tool handlers.
|
|
3
|
+
*
|
|
4
|
+
* Extracted from server.ts to reduce file size and improve maintainability.
|
|
5
|
+
*/
|
|
6
|
+
/**
|
|
7
|
+
* Format an error response in German.
|
|
8
|
+
*/
|
|
9
|
+
export declare function formatErrorResponse(error: unknown): string;
|
|
10
|
+
/** MCP tool response type with index signature for SDK compatibility */
|
|
11
|
+
export type McpToolResponse = {
|
|
12
|
+
[x: string]: unknown;
|
|
13
|
+
content: [{
|
|
14
|
+
type: 'text';
|
|
15
|
+
text: string;
|
|
16
|
+
}];
|
|
17
|
+
};
|
|
18
|
+
/**
|
|
19
|
+
* Create a standard MCP text response.
|
|
20
|
+
*/
|
|
21
|
+
export declare function createMcpResponse(text: string): McpToolResponse;
|
|
22
|
+
/**
|
|
23
|
+
* Create a validation error response listing required parameters.
|
|
24
|
+
*/
|
|
25
|
+
export declare function createValidationErrorResponse(requiredParams: string[]): McpToolResponse;
|
|
26
|
+
/**
|
|
27
|
+
* Check if any of the specified parameters has a truthy value.
|
|
28
|
+
*/
|
|
29
|
+
export declare function hasAnyParam(args: Record<string, unknown>, keys: string[]): boolean;
|
|
30
|
+
/**
|
|
31
|
+
* Build base API parameters common to all search requests.
|
|
32
|
+
*/
|
|
33
|
+
export declare function buildBaseParams(applikation: string, limit: number, seite: number): Record<string, unknown>;
|
|
34
|
+
/**
|
|
35
|
+
* Add optional parameters to the params object.
|
|
36
|
+
* Only adds values that are truthy (not undefined, null, or empty string).
|
|
37
|
+
*/
|
|
38
|
+
export declare function addOptionalParams(params: Record<string, unknown>, mappings: [value: unknown, key: string][]): void;
|
|
39
|
+
/** Search function type for API calls */
|
|
40
|
+
export type SearchFunction = (params: Record<string, unknown>) => Promise<unknown>;
|
|
41
|
+
/**
|
|
42
|
+
* Execute a search tool and return formatted results.
|
|
43
|
+
* Handles the common try-catch, parsing, formatting, and truncation logic.
|
|
44
|
+
*/
|
|
45
|
+
export declare function executeSearchTool(searchFn: SearchFunction, params: Record<string, unknown>, responseFormat: 'markdown' | 'json'): Promise<McpToolResponse>;
|
|
46
|
+
//# sourceMappingURL=helpers.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"helpers.d.ts","sourceRoot":"","sources":["../src/helpers.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAWH;;GAEG;AACH,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,OAAO,GAAG,MAAM,CA2B1D;AAMD,wEAAwE;AAExE,MAAM,MAAM,eAAe,GAAG;IAC5B,CAAC,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC;IACrB,OAAO,EAAE,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;CAC3C,CAAC;AAEF;;GAEG;AACH,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,MAAM,GAAG,eAAe,CAE/D;AAED;;GAEG;AACH,wBAAgB,6BAA6B,CAAC,cAAc,EAAE,MAAM,EAAE,GAAG,eAAe,CAKvF;AAED;;GAEG;AACH,wBAAgB,WAAW,CAAC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,GAAG,OAAO,CAKlF;AAED;;GAEG;AACH,wBAAgB,eAAe,CAC7B,WAAW,EAAE,MAAM,EACnB,KAAK,EAAE,MAAM,EACb,KAAK,EAAE,MAAM,GACZ,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAMzB;AAED;;;GAGG;AACH,wBAAgB,iBAAiB,CAC/B,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC/B,QAAQ,EAAE,CAAC,KAAK,EAAE,OAAO,EAAE,GAAG,EAAE,MAAM,CAAC,EAAE,GACxC,IAAI,CAMN;AAED,yCAAyC;AACzC,MAAM,MAAM,cAAc,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,KAAK,OAAO,CAAC,OAAO,CAAC,CAAC;AAEnF;;;GAGG;AACH,wBAAsB,iBAAiB,CACrC,QAAQ,EAAE,cAAc,EACxB,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC/B,cAAc,EAAE,UAAU,GAAG,MAAM,GAClC,OAAO,CAAC,eAAe,CAAC,CAU1B"}
|
package/dist/helpers.js
ADDED
|
@@ -0,0 +1,92 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Helper functions for MCP tool handlers.
|
|
3
|
+
*
|
|
4
|
+
* Extracted from server.ts to reduce file size and improve maintainability.
|
|
5
|
+
*/
|
|
6
|
+
import { RISAPIError, RISParsingError, RISTimeoutError } from './client.js';
|
|
7
|
+
import { formatSearchResults, truncateResponse } from './formatting.js';
|
|
8
|
+
import { parseSearchResults } from './parser.js';
|
|
9
|
+
import { limitToDokumenteProSeite } from './types.js';
|
|
10
|
+
// =============================================================================
|
|
11
|
+
// Error Handling
|
|
12
|
+
// =============================================================================
|
|
13
|
+
/**
|
|
14
|
+
* Format an error response in German.
|
|
15
|
+
*/
|
|
16
|
+
export function formatErrorResponse(error) {
|
|
17
|
+
if (error instanceof RISTimeoutError) {
|
|
18
|
+
return ('**Fehler:** Die Anfrage an das RIS hat zu lange gedauert.\n\n' +
|
|
19
|
+
'Bitte versuche es erneut oder verwende spezifischere Suchparameter.');
|
|
20
|
+
}
|
|
21
|
+
if (error instanceof RISParsingError) {
|
|
22
|
+
return ('**Fehler:** Die Antwort des RIS konnte nicht verarbeitet werden.\n\n' +
|
|
23
|
+
`Technische Details: ${error.message}`);
|
|
24
|
+
}
|
|
25
|
+
if (error instanceof RISAPIError) {
|
|
26
|
+
const statusInfo = error.statusCode ? ` (Status: ${error.statusCode})` : '';
|
|
27
|
+
return (`**Fehler:** Das RIS hat einen Fehler zurueckgegeben${statusInfo}.\n\n` +
|
|
28
|
+
`Details: ${error.message}`);
|
|
29
|
+
}
|
|
30
|
+
return ('**Fehler:** Ein unerwarteter Fehler ist aufgetreten.\n\n' +
|
|
31
|
+
`Details: ${error instanceof Error ? error.message : String(error)}`);
|
|
32
|
+
}
|
|
33
|
+
/**
|
|
34
|
+
* Create a standard MCP text response.
|
|
35
|
+
*/
|
|
36
|
+
export function createMcpResponse(text) {
|
|
37
|
+
return { content: [{ type: 'text', text }] };
|
|
38
|
+
}
|
|
39
|
+
/**
|
|
40
|
+
* Create a validation error response listing required parameters.
|
|
41
|
+
*/
|
|
42
|
+
export function createValidationErrorResponse(requiredParams) {
|
|
43
|
+
const paramList = requiredParams.map((p) => `- \`${p}\``).join('\n');
|
|
44
|
+
return createMcpResponse('**Fehler:** Bitte gib mindestens einen Suchparameter an:\n' + paramList);
|
|
45
|
+
}
|
|
46
|
+
/**
|
|
47
|
+
* Check if any of the specified parameters has a truthy value.
|
|
48
|
+
*/
|
|
49
|
+
export function hasAnyParam(args, keys) {
|
|
50
|
+
return keys.some((key) => {
|
|
51
|
+
const value = args[key];
|
|
52
|
+
return value !== undefined && value !== null && value !== '';
|
|
53
|
+
});
|
|
54
|
+
}
|
|
55
|
+
/**
|
|
56
|
+
* Build base API parameters common to all search requests.
|
|
57
|
+
*/
|
|
58
|
+
export function buildBaseParams(applikation, limit, seite) {
|
|
59
|
+
return {
|
|
60
|
+
Applikation: applikation,
|
|
61
|
+
DokumenteProSeite: limitToDokumenteProSeite(limit),
|
|
62
|
+
Seitennummer: seite,
|
|
63
|
+
};
|
|
64
|
+
}
|
|
65
|
+
/**
|
|
66
|
+
* Add optional parameters to the params object.
|
|
67
|
+
* Only adds values that are truthy (not undefined, null, or empty string).
|
|
68
|
+
*/
|
|
69
|
+
export function addOptionalParams(params, mappings) {
|
|
70
|
+
for (const [value, key] of mappings) {
|
|
71
|
+
if (value !== undefined && value !== null && value !== '') {
|
|
72
|
+
params[key] = value;
|
|
73
|
+
}
|
|
74
|
+
}
|
|
75
|
+
}
|
|
76
|
+
/**
|
|
77
|
+
* Execute a search tool and return formatted results.
|
|
78
|
+
* Handles the common try-catch, parsing, formatting, and truncation logic.
|
|
79
|
+
*/
|
|
80
|
+
export async function executeSearchTool(searchFn, params, responseFormat) {
|
|
81
|
+
try {
|
|
82
|
+
const apiResponse = await searchFn(params);
|
|
83
|
+
const searchResult = parseSearchResults(apiResponse);
|
|
84
|
+
const formatted = formatSearchResults(searchResult, responseFormat);
|
|
85
|
+
const result = truncateResponse(formatted);
|
|
86
|
+
return createMcpResponse(result);
|
|
87
|
+
}
|
|
88
|
+
catch (e) {
|
|
89
|
+
return createMcpResponse(formatErrorResponse(e));
|
|
90
|
+
}
|
|
91
|
+
}
|
|
92
|
+
//# sourceMappingURL=helpers.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"helpers.js","sourceRoot":"","sources":["../src/helpers.ts"],"names":[],"mappings":"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"}
|
package/dist/index.d.ts
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AACA;;;;;GAKG"}
|
package/dist/index.js
ADDED
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
/**
|
|
3
|
+
* Entry point for the RIS MCP Server.
|
|
4
|
+
*
|
|
5
|
+
* Starts the MCP server with stdio transport for communication
|
|
6
|
+
* with Claude Desktop or other MCP clients.
|
|
7
|
+
*/
|
|
8
|
+
import { StdioServerTransport } from '@modelcontextprotocol/sdk/server/stdio.js';
|
|
9
|
+
import { server } from './server.js';
|
|
10
|
+
/**
|
|
11
|
+
* Main function to start the MCP server.
|
|
12
|
+
*/
|
|
13
|
+
async function main() {
|
|
14
|
+
const transport = new StdioServerTransport();
|
|
15
|
+
await server.connect(transport);
|
|
16
|
+
}
|
|
17
|
+
main().catch((error) => {
|
|
18
|
+
console.error('Failed to start RIS MCP server:', error);
|
|
19
|
+
process.exit(1);
|
|
20
|
+
});
|
|
21
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AACA;;;;;GAKG;AAEH,OAAO,EAAE,oBAAoB,EAAE,MAAM,2CAA2C,CAAC;AAEjF,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AAErC;;GAEG;AACH,KAAK,UAAU,IAAI;IACjB,MAAM,SAAS,GAAG,IAAI,oBAAoB,EAAE,CAAC;IAC7C,MAAM,MAAM,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;AAClC,CAAC;AAED,IAAI,EAAE,CAAC,KAAK,CAAC,CAAC,KAAK,EAAE,EAAE;IACrB,OAAO,CAAC,KAAK,CAAC,iCAAiC,EAAE,KAAK,CAAC,CAAC;IACxD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAClB,CAAC,CAAC,CAAC"}
|