mcp-swiss 0.5.8-dev-beta.20260314091439 โ 0.5.8-dev
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +21 -16
- package/dist/modules/parliament.d.ts +106 -23
- package/dist/modules/parliament.js +382 -216
- package/package.json +1 -1
- package/server.json +1 -1
- package/src/modules/parliament.ts +573 -324
package/README.md
CHANGED
|
@@ -24,7 +24,7 @@
|
|
|
24
24
|
|
|
25
25
|
`mcp-swiss` is a [Model Context Protocol](https://modelcontextprotocol.io) server that gives any AI assistant direct access to Swiss open data โ trains, weather, rivers, maps, and companies.
|
|
26
26
|
|
|
27
|
-
**
|
|
27
|
+
**73 tools. No API keys. No registration. No server to run. Just `npx mcp-swiss`.**
|
|
28
28
|
|
|
29
29
|
```
|
|
30
30
|
๐ Transport โ SBB, PostBus, trams, live departures, journey planning
|
|
@@ -33,7 +33,7 @@
|
|
|
33
33
|
๐บ๏ธ Geodata โ swisstopo geocoding, solar potential, geographic layers
|
|
34
34
|
๐ข Companies โ ZEFIX federal registry, all 700K+ Swiss companies
|
|
35
35
|
๐ Holidays โ Swiss public & school holidays by canton
|
|
36
|
-
๐๏ธ Parliament โ Bills, votes,
|
|
36
|
+
๐๏ธ Parliament โ Bills, votes, members, speeches, cantonal affairs (OpenParlData.ch)
|
|
37
37
|
๐๏ธ Avalanche โ SLF danger bulletins and warning regions
|
|
38
38
|
๐จ Air Quality โ NABEL stations, Swiss legal limits (LRV)
|
|
39
39
|
๐ฎ Swiss Post โ Postcode lookup and parcel tracking
|
|
@@ -280,7 +280,7 @@ docker pull ghcr.io/vikramgorla/mcp-swiss
|
|
|
280
280
|
|
|
281
281
|
## Module Filtering
|
|
282
282
|
|
|
283
|
-
By default, mcp-swiss loads all 20 modules (
|
|
283
|
+
By default, mcp-swiss loads all 20 modules (73 tools). For better token efficiency, load only the modules you need:
|
|
284
284
|
|
|
285
285
|
### Select specific modules
|
|
286
286
|
```json
|
|
@@ -308,12 +308,12 @@ By default, mcp-swiss loads all 20 modules (68 tools). For better token efficien
|
|
|
308
308
|
|
|
309
309
|
| Preset | Modules | Tools | Token Savings |
|
|
310
310
|
|--------|---------|-------|---------------|
|
|
311
|
-
| `commuter` | transport, weather, holidays | 14 |
|
|
312
|
-
| `outdoor` | weather, avalanche, hiking, earthquakes, dams | 16 |
|
|
313
|
-
| `business` | companies, geodata, post, energy, statistics, snb | 24 |
|
|
314
|
-
| `citizen` | parliament, voting, holidays, news |
|
|
311
|
+
| `commuter` | transport, weather, holidays | 14 | 81% |
|
|
312
|
+
| `outdoor` | weather, avalanche, hiking, earthquakes, dams | 16 | 78% |
|
|
313
|
+
| `business` | companies, geodata, post, energy, statistics, snb | 24 | 67% |
|
|
314
|
+
| `citizen` | parliament, voting, holidays, news | 17 | 77% |
|
|
315
315
|
| `minimal` | transport | 5 | 93% |
|
|
316
|
-
| `full` | all 20 modules (default) |
|
|
316
|
+
| `full` | all 20 modules (default) | 73 | โ |
|
|
317
317
|
|
|
318
318
|
Combine preset + modules: `--preset commuter --modules parliament`
|
|
319
319
|
|
|
@@ -336,7 +336,7 @@ Once connected, try asking your AI:
|
|
|
336
336
|
| *"What rivers are near Thun?"* | `list_hydro_stations` + `get_water_level` |
|
|
337
337
|
| *"Plan my Saturday: train to Interlaken, check weather"* | Multiple tools chained |
|
|
338
338
|
| *"Is next Monday a holiday in Zรผrich?"* | `get_public_holidays` |
|
|
339
|
-
| *"What did the Swiss parliament vote on recently?"* | `
|
|
339
|
+
| *"What did the Swiss parliament vote on recently?"* | `search_parliament_business` |
|
|
340
340
|
| *"What's the avalanche danger level in the Bernese Alps?"* | `get_avalanche_bulletin` |
|
|
341
341
|
| *"What's the postcode for Zermatt?"* | `search_postcode` |
|
|
342
342
|
| *"Track my Swiss Post parcel 99.12.345678.12345678"* | `track_parcel` |
|
|
@@ -347,7 +347,7 @@ Once connected, try asking your AI:
|
|
|
347
347
|
|
|
348
348
|
## Tools
|
|
349
349
|
|
|
350
|
-
>
|
|
350
|
+
> 73 tools across 20 modules. Full specifications: [`docs/tool-specs.md`](docs/tool-specs.md) ยท Machine-readable: [`docs/tools.schema.json`](docs/tools.schema.json)
|
|
351
351
|
|
|
352
352
|
### ๐ Transport (5 tools)
|
|
353
353
|
|
|
@@ -399,14 +399,19 @@ Once connected, try asking your AI:
|
|
|
399
399
|
| `get_school_holidays` | School holiday periods by year and canton |
|
|
400
400
|
| `is_holiday_today` | Quick check if today is a public holiday |
|
|
401
401
|
|
|
402
|
-
### ๐๏ธ Parliament (
|
|
402
|
+
### ๐๏ธ Parliament (9 tools) โ [OpenParlData.ch](https://openparldata.ch)
|
|
403
403
|
|
|
404
404
|
| Tool | Description |
|
|
405
405
|
|------|-------------|
|
|
406
|
-
| `search_parliament_business` | Search bills, motions,
|
|
407
|
-
| `
|
|
408
|
-
| `
|
|
409
|
-
| `
|
|
406
|
+
| `search_parliament_business` | Search federal political affairs (bills, motions, questions) |
|
|
407
|
+
| `get_parliament_members` | List parliament members by canton, party, or activity |
|
|
408
|
+
| `get_parliament_votes` | Voting results for a specific affair |
|
|
409
|
+
| `get_session_schedule` | Upcoming/recent parliament sessions |
|
|
410
|
+
| `search_parliament_speeches` | Debate speeches for an affair |
|
|
411
|
+
| `get_politician_interests` | Declared interests and mandates of a member |
|
|
412
|
+
| `search_cantonal_affairs` | Search across 26 cantonal parliaments |
|
|
413
|
+
| `get_parliamentary_documents` | Official documents for an affair |
|
|
414
|
+
| `get_committee_meetings` | Committee/commission meeting schedule |
|
|
410
415
|
|
|
411
416
|
### ๐๏ธ Avalanche (2 tools)
|
|
412
417
|
|
|
@@ -530,7 +535,7 @@ All official Swiss open data โ no API keys required:
|
|
|
530
535
|
| [api3.geo.admin.ch](https://api3.geo.admin.ch) | swisstopo federal geodata | [API docs](https://api3.geo.admin.ch/api/doc.html) |
|
|
531
536
|
| [zefix.admin.ch](https://www.zefix.admin.ch) | Federal company registry | [Swagger](https://www.zefix.admin.ch/ZefixREST/swagger-ui.html) |
|
|
532
537
|
| [openholidaysapi.org](https://openholidaysapi.org) | Swiss public & school holidays | [API docs](https://openholidaysapi.org/swagger) |
|
|
533
|
-
| [
|
|
538
|
+
| [OpenParlData.ch](https://openparldata.ch) | Swiss Parliament data โ federal & cantonal (CC BY 4.0) | [API docs](https://api.openparldata.ch/documentation) |
|
|
534
539
|
| [whiterisk.ch](https://whiterisk.ch) / [aws.slf.ch](https://aws.slf.ch) | SLF/WSL avalanche bulletins | [SLF](https://www.slf.ch/en/avalanche-bulletin-and-snow-situation.html) |
|
|
535
540
|
| [geo.admin.ch](https://api3.geo.admin.ch) โ BAFU/NABEL | Swiss air quality monitoring stations | [BAFU NABEL](https://www.bafu.admin.ch/bafu/en/home/topics/air/state/data/nabel.html) |
|
|
536
541
|
| [geo.admin.ch](https://api3.geo.admin.ch) โ swisstopo | Swiss postcodes (Amtliches Ortschaftenverzeichnis) | [geo.admin.ch](https://api3.geo.admin.ch/api/doc.html) |
|
|
@@ -2,18 +2,40 @@ export declare const parliamentTools: ({
|
|
|
2
2
|
name: string;
|
|
3
3
|
description: string;
|
|
4
4
|
inputSchema: {
|
|
5
|
-
type:
|
|
5
|
+
type: "object";
|
|
6
6
|
required: string[];
|
|
7
7
|
properties: {
|
|
8
8
|
query: {
|
|
9
9
|
type: string;
|
|
10
10
|
description: string;
|
|
11
11
|
};
|
|
12
|
-
|
|
12
|
+
limit: {
|
|
13
|
+
type: string;
|
|
14
|
+
description: string;
|
|
15
|
+
};
|
|
16
|
+
canton?: undefined;
|
|
17
|
+
party?: undefined;
|
|
18
|
+
active?: undefined;
|
|
19
|
+
affair_id?: undefined;
|
|
20
|
+
person_id?: undefined;
|
|
21
|
+
group_id?: undefined;
|
|
22
|
+
};
|
|
23
|
+
};
|
|
24
|
+
} | {
|
|
25
|
+
name: string;
|
|
26
|
+
description: string;
|
|
27
|
+
inputSchema: {
|
|
28
|
+
type: "object";
|
|
29
|
+
properties: {
|
|
30
|
+
canton: {
|
|
31
|
+
type: string;
|
|
32
|
+
description: string;
|
|
33
|
+
};
|
|
34
|
+
party: {
|
|
13
35
|
type: string;
|
|
14
36
|
description: string;
|
|
15
37
|
};
|
|
16
|
-
|
|
38
|
+
active: {
|
|
17
39
|
type: string;
|
|
18
40
|
description: string;
|
|
19
41
|
};
|
|
@@ -21,29 +43,50 @@ export declare const parliamentTools: ({
|
|
|
21
43
|
type: string;
|
|
22
44
|
description: string;
|
|
23
45
|
};
|
|
24
|
-
|
|
46
|
+
query?: undefined;
|
|
47
|
+
affair_id?: undefined;
|
|
48
|
+
person_id?: undefined;
|
|
49
|
+
group_id?: undefined;
|
|
50
|
+
};
|
|
51
|
+
required?: undefined;
|
|
52
|
+
};
|
|
53
|
+
} | {
|
|
54
|
+
name: string;
|
|
55
|
+
description: string;
|
|
56
|
+
inputSchema: {
|
|
57
|
+
type: "object";
|
|
58
|
+
required: string[];
|
|
59
|
+
properties: {
|
|
60
|
+
affair_id: {
|
|
61
|
+
type: string;
|
|
62
|
+
description: string;
|
|
63
|
+
};
|
|
64
|
+
query?: undefined;
|
|
65
|
+
limit?: undefined;
|
|
25
66
|
canton?: undefined;
|
|
26
67
|
party?: undefined;
|
|
27
|
-
|
|
68
|
+
active?: undefined;
|
|
69
|
+
person_id?: undefined;
|
|
70
|
+
group_id?: undefined;
|
|
28
71
|
};
|
|
29
72
|
};
|
|
30
73
|
} | {
|
|
31
74
|
name: string;
|
|
32
75
|
description: string;
|
|
33
76
|
inputSchema: {
|
|
34
|
-
type:
|
|
77
|
+
type: "object";
|
|
35
78
|
properties: {
|
|
36
79
|
limit: {
|
|
37
80
|
type: string;
|
|
38
81
|
description: string;
|
|
39
82
|
};
|
|
40
83
|
query?: undefined;
|
|
41
|
-
type?: undefined;
|
|
42
|
-
year?: undefined;
|
|
43
|
-
name?: undefined;
|
|
44
84
|
canton?: undefined;
|
|
45
85
|
party?: undefined;
|
|
46
|
-
|
|
86
|
+
active?: undefined;
|
|
87
|
+
affair_id?: undefined;
|
|
88
|
+
person_id?: undefined;
|
|
89
|
+
group_id?: undefined;
|
|
47
90
|
};
|
|
48
91
|
required?: undefined;
|
|
49
92
|
};
|
|
@@ -51,38 +94,78 @@ export declare const parliamentTools: ({
|
|
|
51
94
|
name: string;
|
|
52
95
|
description: string;
|
|
53
96
|
inputSchema: {
|
|
54
|
-
type:
|
|
97
|
+
type: "object";
|
|
55
98
|
required: string[];
|
|
56
99
|
properties: {
|
|
57
|
-
|
|
100
|
+
affair_id: {
|
|
58
101
|
type: string;
|
|
59
102
|
description: string;
|
|
60
103
|
};
|
|
104
|
+
limit: {
|
|
105
|
+
type: string;
|
|
106
|
+
description: string;
|
|
107
|
+
};
|
|
108
|
+
query?: undefined;
|
|
109
|
+
canton?: undefined;
|
|
110
|
+
party?: undefined;
|
|
111
|
+
active?: undefined;
|
|
112
|
+
person_id?: undefined;
|
|
113
|
+
group_id?: undefined;
|
|
114
|
+
};
|
|
115
|
+
};
|
|
116
|
+
} | {
|
|
117
|
+
name: string;
|
|
118
|
+
description: string;
|
|
119
|
+
inputSchema: {
|
|
120
|
+
type: "object";
|
|
121
|
+
required: string[];
|
|
122
|
+
properties: {
|
|
123
|
+
person_id: {
|
|
124
|
+
type: string;
|
|
125
|
+
description: string;
|
|
126
|
+
};
|
|
127
|
+
query?: undefined;
|
|
128
|
+
limit?: undefined;
|
|
129
|
+
canton?: undefined;
|
|
130
|
+
party?: undefined;
|
|
131
|
+
active?: undefined;
|
|
132
|
+
affair_id?: undefined;
|
|
133
|
+
group_id?: undefined;
|
|
134
|
+
};
|
|
135
|
+
};
|
|
136
|
+
} | {
|
|
137
|
+
name: string;
|
|
138
|
+
description: string;
|
|
139
|
+
inputSchema: {
|
|
140
|
+
type: "object";
|
|
141
|
+
required: string[];
|
|
142
|
+
properties: {
|
|
61
143
|
canton: {
|
|
62
144
|
type: string;
|
|
63
145
|
description: string;
|
|
64
146
|
};
|
|
65
|
-
|
|
147
|
+
query: {
|
|
66
148
|
type: string;
|
|
67
149
|
description: string;
|
|
68
150
|
};
|
|
69
|
-
|
|
151
|
+
limit: {
|
|
70
152
|
type: string;
|
|
71
153
|
description: string;
|
|
72
154
|
};
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
155
|
+
party?: undefined;
|
|
156
|
+
active?: undefined;
|
|
157
|
+
affair_id?: undefined;
|
|
158
|
+
person_id?: undefined;
|
|
159
|
+
group_id?: undefined;
|
|
77
160
|
};
|
|
78
161
|
};
|
|
79
162
|
} | {
|
|
80
163
|
name: string;
|
|
81
164
|
description: string;
|
|
82
165
|
inputSchema: {
|
|
83
|
-
type:
|
|
166
|
+
type: "object";
|
|
84
167
|
properties: {
|
|
85
|
-
|
|
168
|
+
group_id: {
|
|
86
169
|
type: string;
|
|
87
170
|
description: string;
|
|
88
171
|
};
|
|
@@ -91,11 +174,11 @@ export declare const parliamentTools: ({
|
|
|
91
174
|
description: string;
|
|
92
175
|
};
|
|
93
176
|
query?: undefined;
|
|
94
|
-
type?: undefined;
|
|
95
|
-
name?: undefined;
|
|
96
177
|
canton?: undefined;
|
|
97
178
|
party?: undefined;
|
|
98
|
-
|
|
179
|
+
active?: undefined;
|
|
180
|
+
affair_id?: undefined;
|
|
181
|
+
person_id?: undefined;
|
|
99
182
|
};
|
|
100
183
|
required?: undefined;
|
|
101
184
|
};
|