@cyanheads/ris-austria-mcp-server 0.1.5
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/AGENTS.md +401 -0
- package/CLAUDE.md +401 -0
- package/Dockerfile +125 -0
- package/LICENSE +201 -0
- package/README.md +309 -0
- package/changelog/0.1.x/0.1.0.md +25 -0
- package/changelog/0.1.x/0.1.1.md +24 -0
- package/changelog/0.1.x/0.1.2.md +16 -0
- package/changelog/0.1.x/0.1.3.md +11 -0
- package/changelog/0.1.x/0.1.4.md +11 -0
- package/changelog/0.1.x/0.1.5.md +18 -0
- package/changelog/template.md +129 -0
- package/dist/config/server-config.d.ts +19 -0
- package/dist/config/server-config.d.ts.map +1 -0
- package/dist/config/server-config.js +35 -0
- package/dist/config/server-config.js.map +1 -0
- package/dist/index.d.ts +7 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +37 -0
- package/dist/index.js.map +1 -0
- package/dist/mcp-server/resources/definitions/ris-document.resource.d.ts +30 -0
- package/dist/mcp-server/resources/definitions/ris-document.resource.d.ts.map +1 -0
- package/dist/mcp-server/resources/definitions/ris-document.resource.js +75 -0
- package/dist/mcp-server/resources/definitions/ris-document.resource.js.map +1 -0
- package/dist/mcp-server/tools/definitions/_shared.d.ts +8 -0
- package/dist/mcp-server/tools/definitions/_shared.d.ts.map +1 -0
- package/dist/mcp-server/tools/definitions/_shared.js +10 -0
- package/dist/mcp-server/tools/definitions/_shared.js.map +1 -0
- package/dist/mcp-server/tools/definitions/ris-get-document.tool.d.ts +189 -0
- package/dist/mcp-server/tools/definitions/ris-get-document.tool.d.ts.map +1 -0
- package/dist/mcp-server/tools/definitions/ris-get-document.tool.js +504 -0
- package/dist/mcp-server/tools/definitions/ris-get-document.tool.js.map +1 -0
- package/dist/mcp-server/tools/definitions/ris-list-reference.tool.d.ts +42 -0
- package/dist/mcp-server/tools/definitions/ris-list-reference.tool.d.ts.map +1 -0
- package/dist/mcp-server/tools/definitions/ris-list-reference.tool.js +316 -0
- package/dist/mcp-server/tools/definitions/ris-list-reference.tool.js.map +1 -0
- package/dist/mcp-server/tools/definitions/ris-lookup-citation.tool.d.ts +80 -0
- package/dist/mcp-server/tools/definitions/ris-lookup-citation.tool.d.ts.map +1 -0
- package/dist/mcp-server/tools/definitions/ris-lookup-citation.tool.js +529 -0
- package/dist/mcp-server/tools/definitions/ris-lookup-citation.tool.js.map +1 -0
- package/dist/mcp-server/tools/definitions/ris-search-announcements.tool.d.ts +118 -0
- package/dist/mcp-server/tools/definitions/ris-search-announcements.tool.d.ts.map +1 -0
- package/dist/mcp-server/tools/definitions/ris-search-announcements.tool.js +389 -0
- package/dist/mcp-server/tools/definitions/ris-search-announcements.tool.js.map +1 -0
- package/dist/mcp-server/tools/definitions/ris-search-case-law.tool.d.ts +178 -0
- package/dist/mcp-server/tools/definitions/ris-search-case-law.tool.d.ts.map +1 -0
- package/dist/mcp-server/tools/definitions/ris-search-case-law.tool.js +495 -0
- package/dist/mcp-server/tools/definitions/ris-search-case-law.tool.js.map +1 -0
- package/dist/mcp-server/tools/definitions/ris-search-drafts.tool.d.ts +80 -0
- package/dist/mcp-server/tools/definitions/ris-search-drafts.tool.d.ts.map +1 -0
- package/dist/mcp-server/tools/definitions/ris-search-drafts.tool.js +264 -0
- package/dist/mcp-server/tools/definitions/ris-search-drafts.tool.js.map +1 -0
- package/dist/mcp-server/tools/definitions/ris-search-gazette.tool.d.ts +147 -0
- package/dist/mcp-server/tools/definitions/ris-search-gazette.tool.d.ts.map +1 -0
- package/dist/mcp-server/tools/definitions/ris-search-gazette.tool.js +509 -0
- package/dist/mcp-server/tools/definitions/ris-search-gazette.tool.js.map +1 -0
- package/dist/mcp-server/tools/definitions/ris-search-legislation.tool.d.ts +145 -0
- package/dist/mcp-server/tools/definitions/ris-search-legislation.tool.d.ts.map +1 -0
- package/dist/mcp-server/tools/definitions/ris-search-legislation.tool.js +466 -0
- package/dist/mcp-server/tools/definitions/ris-search-legislation.tool.js.map +1 -0
- package/dist/mcp-server/tools/definitions/ris-track-changes.tool.d.ts +73 -0
- package/dist/mcp-server/tools/definitions/ris-track-changes.tool.d.ts.map +1 -0
- package/dist/mcp-server/tools/definitions/ris-track-changes.tool.js +265 -0
- package/dist/mcp-server/tools/definitions/ris-track-changes.tool.js.map +1 -0
- package/dist/services/ris/normalizer.d.ts +40 -0
- package/dist/services/ris/normalizer.d.ts.map +1 -0
- package/dist/services/ris/normalizer.js +480 -0
- package/dist/services/ris/normalizer.js.map +1 -0
- package/dist/services/ris/reference/applications.d.ts +529 -0
- package/dist/services/ris/reference/applications.d.ts.map +1 -0
- package/dist/services/ris/reference/applications.js +520 -0
- package/dist/services/ris/reference/applications.js.map +1 -0
- package/dist/services/ris/reference/changed-since-intervals.d.ts +42 -0
- package/dist/services/ris/reference/changed-since-intervals.d.ts.map +1 -0
- package/dist/services/ris/reference/changed-since-intervals.js +16 -0
- package/dist/services/ris/reference/changed-since-intervals.js.map +1 -0
- package/dist/services/ris/reference/citation-formats.d.ts +39 -0
- package/dist/services/ris/reference/citation-formats.d.ts.map +1 -0
- package/dist/services/ris/reference/citation-formats.js +39 -0
- package/dist/services/ris/reference/citation-formats.js.map +1 -0
- package/dist/services/ris/reference/collections.d.ts +82 -0
- package/dist/services/ris/reference/collections.d.ts.map +1 -0
- package/dist/services/ris/reference/collections.js +102 -0
- package/dist/services/ris/reference/collections.js.map +1 -0
- package/dist/services/ris/reference/courts.d.ts +201 -0
- package/dist/services/ris/reference/courts.d.ts.map +1 -0
- package/dist/services/ris/reference/courts.js +198 -0
- package/dist/services/ris/reference/courts.js.map +1 -0
- package/dist/services/ris/reference/decision-kinds.d.ts +78 -0
- package/dist/services/ris/reference/decision-kinds.d.ts.map +1 -0
- package/dist/services/ris/reference/decision-kinds.js +117 -0
- package/dist/services/ris/reference/decision-kinds.js.map +1 -0
- package/dist/services/ris/reference/decision-types.d.ts +36 -0
- package/dist/services/ris/reference/decision-types.d.ts.map +1 -0
- package/dist/services/ris/reference/decision-types.js +29 -0
- package/dist/services/ris/reference/decision-types.js.map +1 -0
- package/dist/services/ris/reference/district-authorities.d.ts +314 -0
- package/dist/services/ris/reference/district-authorities.d.ts.map +1 -0
- package/dist/services/ris/reference/district-authorities.js +212 -0
- package/dist/services/ris/reference/district-authorities.js.map +1 -0
- package/dist/services/ris/reference/gazette-parts.d.ts +73 -0
- package/dist/services/ris/reference/gazette-parts.d.ts.map +1 -0
- package/dist/services/ris/reference/gazette-parts.js +58 -0
- package/dist/services/ris/reference/gazette-parts.js.map +1 -0
- package/dist/services/ris/reference/index.d.ts +23 -0
- package/dist/services/ris/reference/index.d.ts.map +1 -0
- package/dist/services/ris/reference/index.js +23 -0
- package/dist/services/ris/reference/index.js.map +1 -0
- package/dist/services/ris/reference/issuing-bodies.d.ts +642 -0
- package/dist/services/ris/reference/issuing-bodies.d.ts.map +1 -0
- package/dist/services/ris/reference/issuing-bodies.js +616 -0
- package/dist/services/ris/reference/issuing-bodies.js.map +1 -0
- package/dist/services/ris/reference/justiz-subject-areas.d.ts +133 -0
- package/dist/services/ris/reference/justiz-subject-areas.d.ts.map +1 -0
- package/dist/services/ris/reference/justiz-subject-areas.js +67 -0
- package/dist/services/ris/reference/justiz-subject-areas.js.map +1 -0
- package/dist/services/ris/reference/law-types.d.ts +46 -0
- package/dist/services/ris/reference/law-types.d.ts.map +1 -0
- package/dist/services/ris/reference/law-types.js +41 -0
- package/dist/services/ris/reference/law-types.js.map +1 -0
- package/dist/services/ris/reference/ministries.d.ts +360 -0
- package/dist/services/ris/reference/ministries.d.ts.map +1 -0
- package/dist/services/ris/reference/ministries.js +408 -0
- package/dist/services/ris/reference/ministries.js.map +1 -0
- package/dist/services/ris/reference/search-syntax.d.ts +66 -0
- package/dist/services/ris/reference/search-syntax.d.ts.map +1 -0
- package/dist/services/ris/reference/search-syntax.js +65 -0
- package/dist/services/ris/reference/search-syntax.js.map +1 -0
- package/dist/services/ris/reference/section-types.d.ts +33 -0
- package/dist/services/ris/reference/section-types.d.ts.map +1 -0
- package/dist/services/ris/reference/section-types.js +29 -0
- package/dist/services/ris/reference/section-types.js.map +1 -0
- package/dist/services/ris/reference/stages.d.ts +41 -0
- package/dist/services/ris/reference/stages.d.ts.map +1 -0
- package/dist/services/ris/reference/stages.js +27 -0
- package/dist/services/ris/reference/stages.js.map +1 -0
- package/dist/services/ris/reference/states.d.ts +90 -0
- package/dist/services/ris/reference/states.d.ts.map +1 -0
- package/dist/services/ris/reference/states.js +85 -0
- package/dist/services/ris/reference/states.js.map +1 -0
- package/dist/services/ris/request-builder.d.ts +195 -0
- package/dist/services/ris/request-builder.d.ts.map +1 -0
- package/dist/services/ris/request-builder.js +673 -0
- package/dist/services/ris/request-builder.js.map +1 -0
- package/dist/services/ris/ris-service.d.ts +65 -0
- package/dist/services/ris/ris-service.d.ts.map +1 -0
- package/dist/services/ris/ris-service.js +200 -0
- package/dist/services/ris/ris-service.js.map +1 -0
- package/dist/services/ris/types.d.ts +651 -0
- package/dist/services/ris/types.d.ts.map +1 -0
- package/dist/services/ris/types.js +11 -0
- package/dist/services/ris/types.js.map +1 -0
- package/package.json +108 -0
- package/server.json +111 -0
|
@@ -0,0 +1,316 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @fileoverview ris_list_reference — static, offline reference for the opaque German codes
|
|
3
|
+
* across the RIS surface. No service dependency, no upstream calls: every topic renders
|
|
4
|
+
* from the typed tables in `src/services/ris/reference/`. The other ris_* tools' recovery
|
|
5
|
+
* hints and zero-hit notices route here.
|
|
6
|
+
* @module mcp-server/tools/definitions/ris-list-reference
|
|
7
|
+
*/
|
|
8
|
+
import { tool, z } from '@cyanheads/mcp-ts-core';
|
|
9
|
+
import { COURTS_WITHOUT_DECISION_KIND, RIS_APPLICATIONS, RIS_CHANGED_SINCE_INTERVALS, RIS_CITATION_FORMATS, RIS_COLLECTIONS, RIS_COURTS, RIS_DECISION_KINDS, RIS_DECISION_TYPES, RIS_DISTRICT_AUTHORITIES, RIS_FEDERAL_GAZETTE_TIERS, RIS_GAZETTE_PARTS, RIS_ISSUING_BODIES, RIS_JUSTIZ_SUBJECT_AREAS, RIS_LAW_TYPES, RIS_MINISTRIES, RIS_SEARCH_SYNTAX, RIS_SECTION_TYPES, RIS_STAGES, RIS_STATES, } from '../../../services/ris/reference/index.js';
|
|
10
|
+
const TOPICS = [
|
|
11
|
+
'applications',
|
|
12
|
+
'courts',
|
|
13
|
+
'states',
|
|
14
|
+
'decision_types',
|
|
15
|
+
'decision_kinds',
|
|
16
|
+
'issuing_bodies',
|
|
17
|
+
'ministries',
|
|
18
|
+
'collections',
|
|
19
|
+
'stages',
|
|
20
|
+
'changed_since_intervals',
|
|
21
|
+
'section_types',
|
|
22
|
+
'gazette_parts',
|
|
23
|
+
'law_types',
|
|
24
|
+
'district_authorities',
|
|
25
|
+
'justiz_subject_areas',
|
|
26
|
+
'search_syntax',
|
|
27
|
+
'citation_formats',
|
|
28
|
+
];
|
|
29
|
+
/** Build a details array, dropping pairs whose value is null/undefined. */
|
|
30
|
+
function kv(...pairs) {
|
|
31
|
+
return pairs.flatMap(([key, value]) => (value == null ? [] : [{ key, value }]));
|
|
32
|
+
}
|
|
33
|
+
const TOPIC_BUILDERS = {
|
|
34
|
+
applications: () => ({
|
|
35
|
+
summary: 'All 39 RIS OGD applications with controller, document class, binding status, coverage window, content-format availability, and the History feed name. ris_track_changes takes the application code; the search tools route to applications via scope, court, stage, and collection.',
|
|
36
|
+
entries: RIS_APPLICATIONS.map((a) => ({
|
|
37
|
+
value: a.code,
|
|
38
|
+
label: a.name,
|
|
39
|
+
details: kv(['German name', a.germanName], ['Controller', a.controller], ['Document class', a.documentClass], ['Binding', a.binding], ['Coverage', a.coverage], ['Formats', a.formats], ['History feed name', a.historyName === a.code ? null : a.historyName], ['Note', a.note]),
|
|
40
|
+
})),
|
|
41
|
+
notes: [
|
|
42
|
+
'Binding labels: only "authentic" (amtssignierte) publications are legally binding; consolidated and historical texts are informational.',
|
|
43
|
+
'Formats: full = Xml/Html/Rtf (plus Pdf and the signed Authentisch PDF where published); authentic_pdf_only = signed PDF, no text renditions; pdf_only = plain PDF; none = metadata only.',
|
|
44
|
+
'The History change feed uses the application code, except the four aliases shown under "History feed name" (BrKons → Bundesnormen, LrKons → Landesnormen, Gr → Gemeinderecht, GrA → GemeinderechtAuth).',
|
|
45
|
+
],
|
|
46
|
+
}),
|
|
47
|
+
courts: () => ({
|
|
48
|
+
summary: 'The 17 court codes for ris_search_case_law: what each body is, its coverage window, active-vs-historical status with successor, and a real Geschäftszahl showing the case-number format ris_lookup_citation pattern-matches.',
|
|
49
|
+
entries: RIS_COURTS.map((c) => ({
|
|
50
|
+
value: c.code,
|
|
51
|
+
label: c.name,
|
|
52
|
+
details: kv(['Application', c.application], ['German name', c.germanName], ['Status', c.status], ['Coverage', c.window], ['Successor', c.successor], ['Geschäftszahl example', c.gzExample], ['Note', c.note]),
|
|
53
|
+
})),
|
|
54
|
+
notes: [
|
|
55
|
+
'One court per call — cross-court research is one call per court.',
|
|
56
|
+
'Historical bodies are closed windows: search the successor for current decisions.',
|
|
57
|
+
'Decision-kind values per court: topic decision_kinds. Issuing bodies for dsk/dok/pvak/verg: topic issuing_bodies.',
|
|
58
|
+
],
|
|
59
|
+
}),
|
|
60
|
+
states: () => ({
|
|
61
|
+
summary: 'The nine Bundesländer and their RIS request spellings. RIS uses three shapes: Bundesland.SucheIn<Land> boolean flags (consolidated state law and state gazettes), a flat ASCII enum without umlauts (municipal law, state administrative courts, ordinance gazettes, health-plan regions), and a flat umlauted enum (district promulgations only).',
|
|
62
|
+
entries: RIS_STATES.map((s) => ({
|
|
63
|
+
value: s.code,
|
|
64
|
+
label: s.name,
|
|
65
|
+
details: kv(['SucheIn flag', s.flagParam], ['Flat enum (most applications)', s.flatAscii], ['Flat enum (Bvb districts)', s.flatUmlaut], ['In historical Lgbl gazette', s.inLgbl ? 'yes' : 'no']),
|
|
66
|
+
})),
|
|
67
|
+
notes: [
|
|
68
|
+
'Sending the wrong spelling fails schema validation — "Kaernten" errors on Bvb, "Kärnten" errors everywhere else.',
|
|
69
|
+
'The historical non-authentic Lgbl gazette has no Niederösterreich and no Wien; Niederösterreich uses the LgblNO systematic collection instead.',
|
|
70
|
+
'Vbl (ordinance gazettes) accepts every ASCII state value in its schema, but only Tirol resolves — other states fail on the RIS backend.',
|
|
71
|
+
],
|
|
72
|
+
}),
|
|
73
|
+
decision_types: () => ({
|
|
74
|
+
summary: 'Values for the decision_type parameter of ris_search_case_law — whether to search headnotes (Rechtssätze), full decision texts (Entscheidungstexte), or both.',
|
|
75
|
+
entries: RIS_DECISION_TYPES.map((t) => ({
|
|
76
|
+
value: t.code,
|
|
77
|
+
label: `${t.germanName}`,
|
|
78
|
+
details: kv(['Upstream', t.upstream], ['Description', t.description]),
|
|
79
|
+
})),
|
|
80
|
+
notes: [
|
|
81
|
+
'A single decision can appear as several headnote documents plus one text document sharing the same Geschäftszahl — deduplicate by case number when needed.',
|
|
82
|
+
],
|
|
83
|
+
}),
|
|
84
|
+
decision_kinds: () => ({
|
|
85
|
+
summary: 'Per-court Entscheidungsart values for the decision_kind parameter of ris_search_case_law. Most courts validate against a schema enum; justiz matches an exact string.',
|
|
86
|
+
entries: RIS_DECISION_KINDS.map((k) => ({
|
|
87
|
+
value: k.court,
|
|
88
|
+
label: k.paramKind === 'schema_enum' ? 'Schema enum' : 'Exact-match string',
|
|
89
|
+
details: kv(['Values', k.values.join(' | ')], ['Note', k.note]),
|
|
90
|
+
})),
|
|
91
|
+
notes: [
|
|
92
|
+
`No Entscheidungsart parameter exists for: ${COURTS_WITHOUT_DECISION_KIND.join(', ')}.`,
|
|
93
|
+
'Values are passed verbatim as shown — they are German compound codes, not free text.',
|
|
94
|
+
],
|
|
95
|
+
}),
|
|
96
|
+
issuing_bodies: () => ({
|
|
97
|
+
summary: 'Issuing-body values for the issuing_body parameter (courts dsk, dok, pvak, verg) and the social-insurance issuer parameter of ris_search_announcements (collection social_insurance, upstream Urheber).',
|
|
98
|
+
entries: RIS_ISSUING_BODIES.map((b) => ({
|
|
99
|
+
value: b.value,
|
|
100
|
+
label: `${b.application} ${b.parameter}`,
|
|
101
|
+
details: kv(['Note', b.note]),
|
|
102
|
+
})),
|
|
103
|
+
notes: [
|
|
104
|
+
'Dsk and Pvak values are schema enums in ASCII spelling; Dok and Avsv values are exact-match strings — pass them completely, including any "(ÖGK)"-style suffix.',
|
|
105
|
+
'Live check 2026-07-05: Urheber "Österreichische Gesundheitskasse (ÖGK)" matches 78 notices; the name without the suffix matches none.',
|
|
106
|
+
],
|
|
107
|
+
}),
|
|
108
|
+
ministries: () => ({
|
|
109
|
+
summary: 'Ministry designations, including historical ministries, for the ministry parameter of ris_search_drafts and the issuer parameter of ris_search_announcements (ministerial_decrees, council_minutes). Three upstream formats exist — see the notes.',
|
|
110
|
+
entries: RIS_MINISTRIES.map((m) => ({
|
|
111
|
+
value: m.abbreviation ?? m.designation,
|
|
112
|
+
label: m.designation,
|
|
113
|
+
details: kv(['Accepted by', m.acceptedBy.join(', ')], ['Mrp exact value', m.mrpComposite]),
|
|
114
|
+
})),
|
|
115
|
+
notes: [
|
|
116
|
+
'einbringende_stelle = EinbringendeStelle on BgblAuth/Begut/RegV — a phrase field, so the bare abbreviation matches ("BMF" → 536 review drafts, live check 2026-07-05).',
|
|
117
|
+
'mrp_einbringer = Einbringer on Mrp — exact match; pass the full "ABBR (Name)" composite shown under "Mrp exact value".',
|
|
118
|
+
'erlaesse_bundesministerium = Bundesministerium on Erlaesse — exact match against the full designation without any abbreviation prefix.',
|
|
119
|
+
'The historical designation at submission time counts — a 2015 draft carries the 2015 ministry name, not today’s successor.',
|
|
120
|
+
],
|
|
121
|
+
}),
|
|
122
|
+
collections: () => ({
|
|
123
|
+
summary: 'The seven collections of ris_search_announcements, each mapping to one RIS application with its own parameter set. Five are legally binding authentic publications.',
|
|
124
|
+
entries: RIS_COLLECTIONS.map((c) => ({
|
|
125
|
+
value: c.code,
|
|
126
|
+
label: c.name,
|
|
127
|
+
details: kv(['Application', c.application], ['German name', c.germanName], ['Authentic', c.authentic ? 'yes' : 'no'], ['Coverage', c.coverage], ['Supported parameters', c.params.join(', ')]),
|
|
128
|
+
})),
|
|
129
|
+
notes: [
|
|
130
|
+
'Parameters outside a collection’s supported set are rejected locally before any upstream call.',
|
|
131
|
+
'changed_since, sort_by, sort_direction, page, and page_size apply to every collection.',
|
|
132
|
+
],
|
|
133
|
+
}),
|
|
134
|
+
stages: () => ({
|
|
135
|
+
summary: 'The two lawmaking-pipeline stages of ris_search_drafts: ministerial drafts in public review, and government bills adopted by the council of ministers.',
|
|
136
|
+
entries: RIS_STAGES.map((s) => ({
|
|
137
|
+
value: s.code,
|
|
138
|
+
label: s.name,
|
|
139
|
+
details: kv(['Application', s.application], ['German name', s.germanName], ['Description', s.description], ['Stage-specific parameters', s.stageParams.join(', ')], ['Coverage', s.coverage]),
|
|
140
|
+
})),
|
|
141
|
+
notes: [
|
|
142
|
+
'in_review_on applies only to review_drafts; decided_from/decided_to only to government_bills.',
|
|
143
|
+
],
|
|
144
|
+
}),
|
|
145
|
+
changed_since_intervals: () => ({
|
|
146
|
+
summary: 'Values for the changed_since parameter across the search tools — coarse recency filtering over when a document last changed in RIS.',
|
|
147
|
+
entries: RIS_CHANGED_SINCE_INTERVALS.map((i) => ({
|
|
148
|
+
value: i.code,
|
|
149
|
+
label: i.english,
|
|
150
|
+
details: kv(['RIS value', i.risValue]),
|
|
151
|
+
})),
|
|
152
|
+
notes: [
|
|
153
|
+
'Maps to the upstream ImRisSeit parameter; gazette-law applications use Kundmachung.Periode with the same value set.',
|
|
154
|
+
'For exact-dated change windows and deletions, use ris_track_changes instead.',
|
|
155
|
+
],
|
|
156
|
+
}),
|
|
157
|
+
section_types: () => ({
|
|
158
|
+
summary: 'Values for the section_type parameter of ris_search_legislation — which kind of section a section_from/section_to range addresses.',
|
|
159
|
+
entries: RIS_SECTION_TYPES.map((t) => ({
|
|
160
|
+
value: t.value,
|
|
161
|
+
label: t.english,
|
|
162
|
+
details: kv(['Note', t.note]),
|
|
163
|
+
})),
|
|
164
|
+
notes: ['Maps to the upstream Abschnitt.Typ parameter alongside Abschnitt.Von/Bis.'],
|
|
165
|
+
}),
|
|
166
|
+
gazette_parts: () => ({
|
|
167
|
+
summary: 'Federal gazette parts for the part parameter of ris_search_gazette, plus the three federal era tiers the tool auto-routes across by year.',
|
|
168
|
+
entries: [
|
|
169
|
+
...RIS_GAZETTE_PARTS.map((p) => ({
|
|
170
|
+
value: p.code,
|
|
171
|
+
label: p.germanName,
|
|
172
|
+
details: kv(['Contents', p.contents], ['Upstream', p.upstream]),
|
|
173
|
+
})),
|
|
174
|
+
...RIS_FEDERAL_GAZETTE_TIERS.map((t) => ({
|
|
175
|
+
value: t.application,
|
|
176
|
+
label: `Era tier ${t.window}`,
|
|
177
|
+
details: kv(['Authentic', t.authentic ? 'yes' : 'no'], ['Number lookup', t.numberParams], ['Note', t.note]),
|
|
178
|
+
})),
|
|
179
|
+
],
|
|
180
|
+
notes: [
|
|
181
|
+
'Parts I/II/III exist only from 1997 — earlier issues are partless (pre_1997, BgblPdf only).',
|
|
182
|
+
'A "BGBl. II" number filtered to part1 returns nothing — verify part and year together.',
|
|
183
|
+
],
|
|
184
|
+
}),
|
|
185
|
+
law_types: () => ({
|
|
186
|
+
summary: 'Principal norm-type codes carried in consolidated-law records and accepted by the type filter (upstream Typ, a full-text field — not a closed enum).',
|
|
187
|
+
entries: RIS_LAW_TYPES.map((t) => ({
|
|
188
|
+
value: t.code,
|
|
189
|
+
label: t.english,
|
|
190
|
+
details: kv(['German name', t.germanName], ['Note', t.note]),
|
|
191
|
+
})),
|
|
192
|
+
notes: [
|
|
193
|
+
'Live-confirmed against the corpus 2026-07-05; further variants exist (treaties carry per-party suffixes).',
|
|
194
|
+
],
|
|
195
|
+
}),
|
|
196
|
+
district_authorities: () => ({
|
|
197
|
+
summary: 'All district administrative authorities accepted by the district_authority parameter of ris_search_gazette (scope district). Exact-match values — pass the name verbatim.',
|
|
198
|
+
entries: RIS_DISTRICT_AUTHORITIES.map((d) => ({
|
|
199
|
+
value: d.name,
|
|
200
|
+
label: `${d.kind === 'statutory_city' ? 'Statutory city' : 'District commission'} — ${d.state}`,
|
|
201
|
+
details: [],
|
|
202
|
+
})),
|
|
203
|
+
notes: [
|
|
204
|
+
'Harvested from the complete live Bvb corpus (2,433 documents, 2026-07-05) — the values documents actually carry.',
|
|
205
|
+
'District promulgations cover Niederösterreich (2021-09+), Oberösterreich and Tirol (2022+), Vorarlberg (2022-07+), Burgenland (2023+), and Steiermark (2013+); Salzburg districts publish in the Salzburg LGBl.',
|
|
206
|
+
'The Bvb Bundesland filter uses umlauted spellings ("Kärnten") — see topic states.',
|
|
207
|
+
],
|
|
208
|
+
}),
|
|
209
|
+
justiz_subject_areas: () => ({
|
|
210
|
+
summary: 'The documented Fachgebiet taxonomy for the subject_area parameter of ris_search_case_law (court justiz).',
|
|
211
|
+
entries: RIS_JUSTIZ_SUBJECT_AREAS.map((a) => ({
|
|
212
|
+
value: a.value,
|
|
213
|
+
label: a.english,
|
|
214
|
+
details: [],
|
|
215
|
+
})),
|
|
216
|
+
notes: [
|
|
217
|
+
'The filter is documented in API v2.6 but the corpus carries no tagged documents yet — every probed value returned 0 hits on 2026-07-05. Until RIS populates the tags, filter with query or norm instead.',
|
|
218
|
+
],
|
|
219
|
+
}),
|
|
220
|
+
search_syntax: () => ({
|
|
221
|
+
summary: 'The RIS search grammar: boolean operators, wildcard rules per field type, phrase quoting, and which parameters are full-text, phrase, or exact-match fields.',
|
|
222
|
+
entries: RIS_SEARCH_SYNTAX.map((r) => ({
|
|
223
|
+
value: r.element,
|
|
224
|
+
label: r.appliesTo,
|
|
225
|
+
details: kv(['Description', r.description], ['Example', r.example]),
|
|
226
|
+
})),
|
|
227
|
+
notes: [
|
|
228
|
+
'Unknown parameter names are silently ignored upstream — a typo returns plausible but unfiltered results, never an error. Invalid values of known enum parameters do error.',
|
|
229
|
+
],
|
|
230
|
+
}),
|
|
231
|
+
citation_formats: () => ({
|
|
232
|
+
summary: 'The citation shapes ris_lookup_citation parses — norm cites, gazette numbers across all era tiers, case numbers, and official collection numbers — with the deterministic route each resolves through.',
|
|
233
|
+
entries: RIS_CITATION_FORMATS.map((f) => ({
|
|
234
|
+
value: f.kind,
|
|
235
|
+
label: f.description,
|
|
236
|
+
details: kv(['Examples', f.examples.join(' · ')], ['Resolves via', f.resolvesVia]),
|
|
237
|
+
})),
|
|
238
|
+
notes: [
|
|
239
|
+
'Per-court Geschäftszahl format examples: topic courts.',
|
|
240
|
+
'Unresolvable citations return found: false with guidance — never an error.',
|
|
241
|
+
],
|
|
242
|
+
}),
|
|
243
|
+
};
|
|
244
|
+
/** Escape a string for use inside a markdown table cell. */
|
|
245
|
+
function cell(text) {
|
|
246
|
+
return text.replace(/\|/g, '\\|').replace(/\r?\n/g, ' ');
|
|
247
|
+
}
|
|
248
|
+
export const risListReference = tool('ris_list_reference', {
|
|
249
|
+
title: 'RIS Reference Lists',
|
|
250
|
+
description: 'Ground the opaque German codes across the RIS surface — static and offline, no upstream call. Topics: applications (all 39, with coverage windows, binding status, and content formats), courts (17 codes with Geschäftszahl examples and successor mapping), states (the three Bundesland request spellings), decision_types, decision_kinds (per-court Entscheidungsart values), issuing_bodies (dsk/dok/pvak/verg bodies and social-insurance issuers), ministries (abbreviations and full designations, historical included), collections (the 7 announcement collections and their parameter matrix), stages (lawmaking pipeline), changed_since_intervals, section_types, gazette_parts (BGBl parts and era tiers), law_types, district_authorities (all Bezirksverwaltungsbehörden), justiz_subject_areas (Fachgebiet taxonomy), search_syntax (operators and wildcard rules), and citation_formats (the shapes ris_lookup_citation parses). Recovery hints from the other ris_* tools route here.',
|
|
251
|
+
annotations: { readOnlyHint: true, idempotentHint: true, openWorldHint: false },
|
|
252
|
+
input: z.object({
|
|
253
|
+
topic: z
|
|
254
|
+
.enum(TOPICS)
|
|
255
|
+
.describe('Which reference table to return. Pick the topic named in the error recovery hint or zero-hit notice that sent you here.'),
|
|
256
|
+
}),
|
|
257
|
+
output: z.object({
|
|
258
|
+
topic: z.string().describe('The requested topic, echoed back.'),
|
|
259
|
+
summary: z
|
|
260
|
+
.string()
|
|
261
|
+
.describe('What this topic covers and which tool parameters consume its values.'),
|
|
262
|
+
entries: z
|
|
263
|
+
.array(z
|
|
264
|
+
.object({
|
|
265
|
+
value: z
|
|
266
|
+
.string()
|
|
267
|
+
.describe('The reference value — an enum value, application code, exact filter string, or syntax element, depending on the topic.'),
|
|
268
|
+
label: z.string().describe('Concise human-readable label or gloss for the value.'),
|
|
269
|
+
details: z
|
|
270
|
+
.array(z
|
|
271
|
+
.object({
|
|
272
|
+
key: z.string().describe('Attribute name.'),
|
|
273
|
+
value: z.string().describe('Attribute value.'),
|
|
274
|
+
})
|
|
275
|
+
.describe('One key–value attribute pair.'))
|
|
276
|
+
.describe('Additional attributes as key–value pairs; keys vary by topic (coverage windows, upstream spellings, examples, notes).'),
|
|
277
|
+
})
|
|
278
|
+
.describe('One reference entry: a value, its label, and its attributes.'))
|
|
279
|
+
.describe('Reference entries for the topic.'),
|
|
280
|
+
notes: z
|
|
281
|
+
.array(z.string())
|
|
282
|
+
.describe('Topic-level caveats and usage guidance. Empty when none apply.'),
|
|
283
|
+
}),
|
|
284
|
+
handler(input) {
|
|
285
|
+
const payload = TOPIC_BUILDERS[input.topic]();
|
|
286
|
+
return { topic: input.topic, ...payload };
|
|
287
|
+
},
|
|
288
|
+
// format() populates content[] — the markdown twin of structuredContent. Both surfaces
|
|
289
|
+
// must carry the same data: every entry, every detail pair, every note.
|
|
290
|
+
format: (result) => {
|
|
291
|
+
const lines = [`# ris_list_reference — ${result.topic}`, '', result.summary, ''];
|
|
292
|
+
const detailKeys = [];
|
|
293
|
+
for (const entry of result.entries) {
|
|
294
|
+
for (const d of entry.details) {
|
|
295
|
+
if (!detailKeys.includes(d.key))
|
|
296
|
+
detailKeys.push(d.key);
|
|
297
|
+
}
|
|
298
|
+
}
|
|
299
|
+
lines.push(`| Value | Label |${detailKeys.map((k) => ` ${cell(k)} |`).join('')}`);
|
|
300
|
+
lines.push(`|---|---|${detailKeys.map(() => '---|').join('')}`);
|
|
301
|
+
for (const entry of result.entries) {
|
|
302
|
+
const detailCells = detailKeys.map((k) => {
|
|
303
|
+
const found = entry.details.find((d) => d.key === k);
|
|
304
|
+
return ` ${found ? cell(found.value) : ''} |`;
|
|
305
|
+
});
|
|
306
|
+
lines.push(`| ${cell(entry.value)} | ${cell(entry.label)} |${detailCells.join('')}`);
|
|
307
|
+
}
|
|
308
|
+
if (result.notes.length > 0) {
|
|
309
|
+
lines.push('', '**Notes:**');
|
|
310
|
+
for (const note of result.notes)
|
|
311
|
+
lines.push(`- ${note}`);
|
|
312
|
+
}
|
|
313
|
+
return [{ type: 'text', text: lines.join('\n') }];
|
|
314
|
+
},
|
|
315
|
+
});
|
|
316
|
+
//# sourceMappingURL=ris-list-reference.tool.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ris-list-reference.tool.js","sourceRoot":"","sources":["../../../../src/mcp-server/tools/definitions/ris-list-reference.tool.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,80 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @fileoverview ris_lookup_citation — the deterministic citation resolver. Parses one
|
|
3
|
+
* Austrian legal citation, classifies it into one of four routes (norm, gazette, case
|
|
4
|
+
* number, collection number), and routes it to the owning search application with a
|
|
5
|
+
* deterministic filter, returning the single best-matching document.
|
|
6
|
+
*
|
|
7
|
+
* The core contract: unparseable OR unresolvable input is a `{ found: false, kind, guidance }`
|
|
8
|
+
* RESULT, never a throw — the agent self-corrects from structured guidance better than from
|
|
9
|
+
* an exception (fleet precedent: eur-lex lookup_celex, pubmed/courtlistener lookup_citation).
|
|
10
|
+
* The ONLY thrown error is `upstream_error` when a routed search fails upstream
|
|
11
|
+
* (ServiceUnavailable). A service InvalidParams/ValidationError during a routed lookup is a
|
|
12
|
+
* failed deterministic filter = no resolution = `found: false`, not an error.
|
|
13
|
+
*
|
|
14
|
+
* The resolved record is produced by the corresponding search tool's own record mapper, so an
|
|
15
|
+
* agent chaining a resolved citation sees exactly the shape that tool returns.
|
|
16
|
+
* @module mcp-server/tools/definitions/ris-lookup-citation
|
|
17
|
+
*/
|
|
18
|
+
import { z } from '@cyanheads/mcp-ts-core';
|
|
19
|
+
import { JsonRpcErrorCode } from '@cyanheads/mcp-ts-core/errors';
|
|
20
|
+
export declare const risLookupCitation: import("@cyanheads/mcp-ts-core").ToolDefinition<z.ZodObject<{
|
|
21
|
+
citation: z.ZodString;
|
|
22
|
+
kind: z.ZodDefault<z.ZodEnum<{
|
|
23
|
+
norm: "norm";
|
|
24
|
+
gazette: "gazette";
|
|
25
|
+
case_number: "case_number";
|
|
26
|
+
collection_number: "collection_number";
|
|
27
|
+
auto: "auto";
|
|
28
|
+
}>>;
|
|
29
|
+
court: z.ZodOptional<z.ZodEnum<{
|
|
30
|
+
vfgh: "vfgh";
|
|
31
|
+
vwgh: "vwgh";
|
|
32
|
+
justiz: "justiz";
|
|
33
|
+
bvwg: "bvwg";
|
|
34
|
+
lvwg: "lvwg";
|
|
35
|
+
dsk: "dsk";
|
|
36
|
+
normenliste: "normenliste";
|
|
37
|
+
dok: "dok";
|
|
38
|
+
pvak: "pvak";
|
|
39
|
+
gbk: "gbk";
|
|
40
|
+
uvs: "uvs";
|
|
41
|
+
asylgh: "asylgh";
|
|
42
|
+
ubas: "ubas";
|
|
43
|
+
umse: "umse";
|
|
44
|
+
bks: "bks";
|
|
45
|
+
verg: "verg";
|
|
46
|
+
upts: "upts";
|
|
47
|
+
}>>;
|
|
48
|
+
state: z.ZodOptional<z.ZodEnum<{
|
|
49
|
+
burgenland: "burgenland";
|
|
50
|
+
kaernten: "kaernten";
|
|
51
|
+
niederoesterreich: "niederoesterreich";
|
|
52
|
+
oberoesterreich: "oberoesterreich";
|
|
53
|
+
salzburg: "salzburg";
|
|
54
|
+
steiermark: "steiermark";
|
|
55
|
+
tirol: "tirol";
|
|
56
|
+
vorarlberg: "vorarlberg";
|
|
57
|
+
wien: "wien";
|
|
58
|
+
}>>;
|
|
59
|
+
in_force_as_of: z.ZodOptional<z.ZodString>;
|
|
60
|
+
}, z.core.$strip>, z.ZodObject<{
|
|
61
|
+
found: z.ZodBoolean;
|
|
62
|
+
kind: z.ZodEnum<{
|
|
63
|
+
unknown: "unknown";
|
|
64
|
+
norm: "norm";
|
|
65
|
+
gazette: "gazette";
|
|
66
|
+
case_number: "case_number";
|
|
67
|
+
collection_number: "collection_number";
|
|
68
|
+
}>;
|
|
69
|
+
resolution_note: z.ZodOptional<z.ZodString>;
|
|
70
|
+
record: z.ZodOptional<z.ZodObject<{}, z.core.$loose>>;
|
|
71
|
+
alternatives_count: z.ZodOptional<z.ZodNumber>;
|
|
72
|
+
guidance: z.ZodOptional<z.ZodString>;
|
|
73
|
+
}, z.core.$strip>, readonly [{
|
|
74
|
+
readonly reason: "upstream_error";
|
|
75
|
+
readonly code: JsonRpcErrorCode.ServiceUnavailable;
|
|
76
|
+
readonly when: "A routed RIS search was unreachable, returned a server error, or served an HTML error page. An unparseable or unresolvable citation is NOT this error — it returns found: false.";
|
|
77
|
+
readonly retryable: true;
|
|
78
|
+
readonly recovery: "RIS is temporarily unavailable — retry the same citation after a short delay.";
|
|
79
|
+
}], undefined>;
|
|
80
|
+
//# sourceMappingURL=ris-lookup-citation.tool.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ris-lookup-citation.tool.d.ts","sourceRoot":"","sources":["../../../../src/mcp-server/tools/definitions/ris-lookup-citation.tool.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AAEH,OAAO,EAAQ,CAAC,EAAE,MAAM,wBAAwB,CAAC;AACjD,OAAO,EAAE,gBAAgB,EAAY,MAAM,+BAA+B,CAAC;AA2V3E,eAAO,MAAM,iBAAiB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;cAiQ5B,CAAC"}
|