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 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
- **68 tools. No API keys. No registration. No server to run. Just `npx mcp-swiss`.**
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, councillors, session schedule
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 (68 tools). For better token efficiency, load only the modules you need:
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 | 82% |
312
- | `outdoor` | weather, avalanche, hiking, earthquakes, dams | 16 | 77% |
313
- | `business` | companies, geodata, post, energy, statistics, snb | 24 | 66% |
314
- | `citizen` | parliament, voting, holidays, news | 12 | 83% |
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) | 68 | โ€” |
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?"* | `get_latest_votes` |
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
- > 68 tools across 20 modules. Full specifications: [`docs/tool-specs.md`](docs/tool-specs.md) ยท Machine-readable: [`docs/tools.schema.json`](docs/tools.schema.json)
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 (4 tools)
402
+ ### ๐Ÿ›๏ธ Parliament (9 tools) โ€” [OpenParlData.ch](https://openparldata.ch)
403
403
 
404
404
  | Tool | Description |
405
405
  |------|-------------|
406
- | `search_parliament_business` | Search bills, motions, interpellations |
407
- | `get_latest_votes` | Recent parliamentary vote results |
408
- | `search_councillors` | Find members of the National/States Council |
409
- | `get_sessions` | Parliamentary session schedule |
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
- | [ws.parlament.ch](https://ws.parlament.ch) | Swiss Parliament OData (bills, votes, councillors) | [OData docs](https://ws.parlament.ch/odata.svc/$metadata) |
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: string;
5
+ type: "object";
6
6
  required: string[];
7
7
  properties: {
8
8
  query: {
9
9
  type: string;
10
10
  description: string;
11
11
  };
12
- type: {
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
- year: {
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
- name?: undefined;
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
- council?: undefined;
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: string;
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
- council?: undefined;
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: string;
97
+ type: "object";
55
98
  required: string[];
56
99
  properties: {
57
- name: {
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
- party: {
147
+ query: {
66
148
  type: string;
67
149
  description: string;
68
150
  };
69
- council: {
151
+ limit: {
70
152
  type: string;
71
153
  description: string;
72
154
  };
73
- query?: undefined;
74
- type?: undefined;
75
- year?: undefined;
76
- limit?: undefined;
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: string;
166
+ type: "object";
84
167
  properties: {
85
- year: {
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
- council?: undefined;
179
+ active?: undefined;
180
+ affair_id?: undefined;
181
+ person_id?: undefined;
99
182
  };
100
183
  required?: undefined;
101
184
  };