Swiss open data for AI — zero config, zero API keys について
mcp-swiss は、スイスのオープンデータへの アクセスを AI アシスタントに提供する MCP サーバーです。交通、天気、水文、ジオデータ、企業登記情報などを扱います。API キーや登録、別途のサーバー構築は不要で、npx で起動できます。
主な機能
- 0122 モジュール・79 ツールを提供
- 02API キーとアカウント登録が不要
- 03モジュールやプリセットによるツール絞り込み
- 04SBB、MeteoSwiss、BAFU、ZEFIX などのデータ
- 05stdio トランスポートによる主要クライアントへの接続
活用シーン
- 01列車の発車情報の確認と経路検索
- 02河川や湖の水位と水温の確認
- 03スイス企業の登記情報と住所の検索
MCP 対応
MCP サーバーとして、stdio トランスポート経由で交通、天気、ジオデータ、統計などのツールを MCP クライアントに公開します。--modules や --preset で読み込むモジュールを絞り、トークン消費を抑えられます。
設定
ローカルサーバーの設定はどのクライアントでも共通です。コピーしてクライアントの MCP 設定ファイルに貼り付けてください。
ツール
76掲載時のツール一覧 · 3 週間前に更新
| パラメーター | 型 | 必須 | 説明 |
|---|---|---|---|
| query | string | いいえ | 検索する駅名 |
| x | number | いいえ | 経度(WGS84) |
| y | number | いいえ | 緯度(WGS84) |
| type | string | いいえ | 絞り込み:すべて、駅、POI、住所 |
詳細
mcp-swiss は、AI アシスタントがスイスのオープンデータ(鉄道、天気、河川、地図、企業)に直接アクセスできる Model Context Protocol サーバーです。
79 個のツール。API キー不要。登録不要。実行するサーバーも不要。npx mcp-swiss を実行するだけです。
🚆 Transport — SBB, PostBus, trams, live departures, journey planning
🌤️ Weather — MeteoSwiss live conditions + historical data
🌊 Hydrology — BAFU river & lake levels (great for Aare swimming!)
🗺️ Geodata — swisstopo geocoding, solar potential, geographic layers
🏢 Companies — ZEFIX federal registry, all 700K+ Swiss companies
🎄 Holidays — Swiss public & school holidays by canton
🏛️ Parliament — Bills, votes, members, speeches, cantonal affairs (OpenParlData.ch)
🏔️ Avalanche — SLF danger bulletins and warning regions
💨 Air Quality — NABEL stations, Swiss legal limits (LRV)
📮 Swiss Post — Postcode lookup and parcel tracking
⚡ Energy — Electricity tariffs by municipality (ElCom)
📊 Statistics — Population, demographics, BFS datasets
🏦 SNB Rates — Swiss National Bank CHF exchange rates, historical data
♻️ Recycling — Zurich city waste collection calendar (OpenERZ)
📰 Swiss News — SRF news headlines and keyword search
🗳️ Voting — Swiss popular vote results (Basel-Stadt open data)
🌊 Dams — Swiss federal dam registry (SFOE/swisstopo)
🥾 Hiking — Swiss trail closures and hiking alerts (swisstopo)
🏠 Real Estate — Swiss property prices, rent index, housing data (BFS)
🚗 Traffic — ASTRA counting stations, daily volumes
🌍 Earthquakes — Swiss Seismological Service (SED/ETH Zürich), FDSN API
❄️ Snow — SLF snow depth, stations, and measurements
🌿 Pollen — MeteoSwiss pollen concentrations at 16 stations
インストール
クイックスタート
npx mcp-swiss
これだけです。API キー、.env ファイル、アカウントは不要です。以下からクライアントを選び、設定を貼り付けてください。
ワンクリックインストール(.mcpb)
.mcpb バンドルは、Claude Desktop や MCP Bundle 互換アプリで動作します。
ダウンロードしたファイルを開けば、あとはアプリが処理します。設定の編集も、ターミナルも、API キーも不要です。
Claude Desktop
設定ファイルを編集します。
- macOS:
~/Library/Application Support/Claude/claude_desktop_config.json - Windows:
%APPDATA%\Claude\claude_desktop_config.json - Linux:
~/.config/Claude/claude_desktop_config.json
{
"mcpServers": {
"swiss": {
"command": "npx",
"args": ["-y", "mcp-swiss"]
}
}
}
保存後、Claude Desktop を再起動してください。
Claude Code(CLI)
claude mcp add swiss -- npx -y mcp-swiss
これだけです。次のセッションから Claude Code が使用します。
Cursor
Cursor 0.45.6 以降が必要です
方法 A:プロジェクト設定 — プロジェクトのルートに .cursor/mcp.json を作成します。
{
"mcpServers": {
"swiss": {
"command": "npx",
"args": ["-y", "mcp-swiss"]
}
}
}
方法 B:グローバル設定 — ~/.cursor/mcp.json を作成します。
{
"mcpServers": {
"swiss": {
"command": "npx",
"args": ["-y", "mcp-swiss"]
}
}
}
方法 C:Cursor の設定 UI から
- Cursor の設定を開きます
- 機能 → MCP サーバー に移動します
- + グローバル MCP サーバーを新規追加をクリックします
- 上記の JSON 設定を貼り付けます
VS Code(GitHub Copilot)
ワンクリックインストール
CLI でのインストール
# VS Code
code --add-mcp '{"name":"swiss","command":"npx","args":["-y","mcp-swiss"]}'
# VS Code Insiders
code-insiders --add-mcp '{"name":"swiss","command":"npx","args":["-y","mcp-swiss"]}'
手動設定
VS Code のユーザー設定(JSON)に追加します。Ctrl+Shift+P を押し、Preferences: Open User Settings (JSON) を選択します。
{
"mcp": {
"servers": {
"swiss": {
"command": "npx",
"args": ["-y", "mcp-swiss"]
}
}
}
}
または、ワークスペースの .vscode/mcp.json に追加します(チームで共有できます)。
{
"servers": {
"swiss": {
"command": "npx",
"args": ["-y", "mcp-swiss"]
}
}
}
Windsurf
~/.codeium/windsurf/model_config.json に追加します。
{
"mcpServers": {
"swiss": {
"command": "npx",
"args": ["-y", "mcp-swiss"]
}
}
}
Cline(VS Code)
VS Code の settings.json を開き、次の内容を追加します。
{
"cline.mcpServers": {
"swiss": {
"command": "npx",
"args": ["-y", "mcp-swiss"]
}
}
}
任意の MCP クライアント
mcp-swiss は stdio トランスポートを使用し、環境変数は必要ありません。共通の設定は次のとおりです。
{
"command": "npx",
"args": ["-y", "mcp-swiss"]
}
これは MCP 対応のあらゆるクライアントで動作します。接続するだけで使用できます。
Docker
docker pull vikramgorla/mcp-swiss
Docker ベースのサーバーに対応する任意の MCP クライアントで使用できます。コンテナは stdio トランスポートを使用します。
# Run directly (stdio)
docker run -i vikramgorla/mcp-swiss
# Use with Claude Desktop
Claude Desktop では、Docker を使用するよう設定を更新します。
{
"mcpServers": {
"swiss": {
"command": "docker",
"args": ["run", "-i", "--rm", "vikramgorla/mcp-swiss"]
}
}
}
GitHub Container Registry からも利用できます。
docker pull ghcr.io/vikramgorla/mcp-swiss
モジュールの絞り込み
デフォルトでは、mcp-swiss は 22 個すべてのモジュール(79 個のツール)を読み込みます。トークン効率を高めるには、必要なモジュールだけを読み込みます。
特定のモジュールを選択
{
"mcpServers": {
"swiss": {
"command": "npx",
"args": ["-y", "mcp-swiss", "--modules", "transport,weather"]
}
}
}
プリセットを使用
{
"mcpServers": {
"swiss": {
"command": "npx",
"args": ["-y", "mcp-swiss", "--preset", "commuter"]
}
}
}
| プリセット | モジュール | ツール | トークン削減率 |
|---|---|---|---|
commuter | transport, weather, holidays | 14 | 81% |
outdoor | weather, avalanche, hiking, earthquakes, dams, snow | 19 | 75% |
business | companies, geodata, post, energy, statistics, snb | 24 | 67% |
citizen | parliament, voting, holidays, news | 17 | 77% |
minimal | transport | 5 | 93% |
full | 22 個すべてのモジュール(デフォルト) | 79 | — |
プリセットとモジュールを組み合わせる場合:--preset commuter --modules parliament
利用可能な項目を一覧表示するには、npx mcp-swiss --list-modules または npx mcp-swiss --list-presets を実行します。
デモ用プロンプト
接続したら、AI に次のように質問してみてください。
| プロンプト | 使用するもの |
|---|---|
| 「Zürich HB から Geneva までの次の列車を 5 本教えて」 | get_connections |
| 「Bern の Aare は泳げるくらい暖かい?」 | get_water_level |
| 「今日の Lugano と Zürich の天気を比較して」 | get_weather |
| 「Zug に登録されているブロックチェーン企業を探して」 | search_companies |
| 「Bern の Bundesplatz 3 の太陽光発電ポテンシャルを教えて」 | geocode + get_solar_potential |
| 「Bern HB の現在の出発便を教えて」 | get_departures |
| 「Thun 付近の川を教えて」 | list_hydro_stations + get_water_level |
| 「土曜日の予定を立てて。Interlaken まで列車で行き、天気を確認して」 | 複数のツールを連携 |
| 「来週月曜日は Zürich の祝日?」 | get_public_holidays |
| 「最近、スイス議会ではどのような採決が行われた?」 | search_parliament_business |
| 「Bernese Alps の雪崩危険度を教えて」 | get_avalanche_bulletin |
| 「Zermatt の郵便番号は?」 | search_postcode |
| 「スイス郵便の荷物 99.12.345678.12345678 を追跡して」 | track_parcel |
| 「Zürich と Basel の電気料金を比較して」 | search_municipality_energy + compare_electricity_tariffs |
| 「Zug 州の人口は?」 | get_population |
ツール
22 個のモジュールに 79 個のツールがあります。詳細な仕様:
docs/tool-specs.md· 機械可読形式:docs/tools.schema.json
🚆 交通(5 個のツール)
| ツール | 説明 |
|---|---|
search_stations | 名称または場所から駅・停留所を検索 |
get_connections | 任意の2地点間の経路を検索 |
get_departures | 駅からのリアルタイム出発情報 |
get_arrivals | 駅へのリアルタイム到着情報 |
get_nearby_stations | 座標周辺の駅 |
🌤️ 天気・水文(6 個のツール)
| ツール | 説明 |
|---|---|
get_weather | MeteoSwissの観測所における現在の気象状況 |
list_weather_stations | メタデータ付きのMeteoSwiss観測所約160か所すべて |
get_weather_history | 過去の気象データ(最大32日分) |
get_water_level | 河川・湖の水位と水温(BAFU) |
list_hydro_stations | 水文観測所400か所以上すべて |
get_water_history | 過去の水文データ |
🗺️ 地理データ/swisstopo(6 個のツール)
| ツール | 説明 |
|---|---|
geocode | スイスの住所 → 座標 |
reverse_geocode | 座標 → スイスの住所 |
search_places | スイスの地名、山、湖、地形を検索 |
get_solar_potential | 指定地点の屋根における太陽光照射量 |
identify_location | 地点に該当するすべての地理データレイヤー |
get_municipality | 名称から自治体情報を取得 |
🏢 企業/ZEFIX(5 個のツール)
| ツール | 説明 |
|---|---|
search_companies | 名称、州、法的形態から検索 |
get_company | ZEFIX ehraid による企業の詳細情報 |
search_companies_by_address | 住所で登録されている企業 |
list_cantons | スイスの全26州 |
list_legal_forms | AG、GmbHなど、スイスのすべての法的形態 |
🎄 祝日(3 個のツール)
| ツール | 説明 |
|---|---|
get_public_holidays | 年ごとのスイスの祝日。州による絞り込みも可能 |
get_school_holidays | 年と州ごとの学校休暇期間 |
is_holiday_today | 今日が祝日かどうかをすばやく確認 |
🏛️ 議会(9 個のツール)— OpenParlData.ch
| ツール | 説明 |
|---|---|
search_parliament_business | 連邦政治案件(法案、動議、質問)を検索 |
get_parliament_members | 州、政党、活動状況で議員を一覧表示 |
get_parliament_votes | 特定の案件の投票結果 |
get_session_schedule | 今後および最近の議会会期 |
search_parliament_speeches | 案件に関する討論演説を検索 |
get_politician_interests | 議員が申告した利害関係と役職 |
search_cantonal_affairs | 26の州議会を横断して検索 |
get_parliamentary_documents | 案件に関する公式文書 |
get_committee_meetings | 委員会の会議予定 |
🏔️ 雪崩(2 個のツール)
| ツール | 説明 |
|---|---|
get_avalanche_bulletin | 危険度とPDFリンクを含む最新の雪崩情報 |
list_avalanche_regions | スイスの雪崩警戒区域22か所すべて |
💨 大気質(2 個のツール)
| ツール | 説明 |
|---|---|
list_air_quality_stations | NABELの観測所14か所すべて |
get_air_quality | 観測所情報、スイスの法的基準値(LRV)、BAFUデータへのリンク |
📮 スイス郵便(4 個のツール)
| ツール | 説明 |
|---|---|
lookup_postcode | PLZ → 地域、州、座標 |
search_postcode | 市区町村名 → 一致する郵便番号 |
list_postcodes_in_canton | 州内のすべての郵便番号 |
track_parcel | 荷物のSwiss Post追跡URLを生成 |
⚡ エネルギー価格(3 個のツール)
| ツール | 説明 |
|---|---|
get_electricity_tariff | 内訳付きの自治体別電気料金 |
compare_electricity_tariffs | 自治体間の電気料金を比較 |
search_municipality_energy | 料金検索に使う自治体IDを検索 |
📊 統計/BFS(3 ツール)
| ツール | 説明 |
|---|---|
get_population | BFS STATPOP による州または自治体別の人口 |
search_statistics | opendata.swiss で BFS のデータセットを検索 |
get_statistic | データセットの詳細情報を取得 |
🏦 SNB 為替レート(3 ツール)
| ツール | 説明 |
|---|---|
list_currencies | スイス国立銀行(SNB)で利用可能なすべての通貨を一覧表示 |
get_exchange_rate | 任意の通貨の現在の CHF 為替レートを取得 |
get_exchange_rate_history | 日付で絞り込んで、月ごとの過去の CHF 為替レートを取得 |
♻️ リサイクル/ごみ収集(3 ツール)
| ツール | 説明 |
|---|---|
get_waste_collection | チューリッヒの郵便番号とごみの種類に基づいて、次回のごみ収集日を取得 |
list_waste_types | 対応しているすべてのごみの種類と説明を一覧表示 |
get_waste_calendar | 郵便番号に対応する今後のごみ収集日をすべて掲載したカレンダーを取得 |
📰 スイスのニュース(2 ツール)
| ツール | 説明 |
|---|---|
get_swiss_news | カテゴリー(スイス/国際/経済)別に SRF の最新ニュース見出しを取得 |
search_swiss_news | すべてのカテゴリーからキーワードで SRF のニュースを検索 |
🗳️ 投票(3 ツール)
| ツール | 説明 |
|---|---|
get_voting_results | バーゼル=シュタット州のオープンデータからスイスの国民投票結果を取得 |
search_votes | キーワードで国民投票を検索(ドイツ語/フランス語/イタリア語) |
get_vote_details | 特定の投票について、地区ごとの詳細な内訳を取得 |
🌊 ダム・貯水池(3 ツール)
| ツール | 説明 |
|---|---|
search_dams | 名前またはキーワードでスイス連邦のダムを検索 |
get_dams_by_canton | 州内の連邦ダムをすべて一覧表示 |
get_dam_details | 特定のダムの詳細情報(高さ、容量、目的)を取得 |
🥾 ハイキング/トレイルの通行止め(2 ツール)
| ツール | 説明 |
|---|---|
get_trail_closures | swisstopo からスイスのトレイルの通行止めとハイキングに関する警報を取得 |
get_trail_closures_nearby | 指定した座標付近のトレイルの通行止めを取得 |
🏠 不動産(3 ツール)
| ツール | 説明 |
|---|---|
get_property_price_index | スイスの不動産価格指数(BFS Immo-Monitoring)を取得 |
search_real_estate_data | opendata.swiss で BFS の不動産データセットを検索 |
get_rent_index | BFS のスイスの家賃指数と住宅費データを取得 |
🚗 交通/ASTRA(3 ツール)
| ツール | 説明 |
|---|---|
get_traffic_count | 交通量計測所のデータ(ASTRA)— 日ごとの交通量と大型車両の割合 |
get_traffic_by_canton | 州で絞り込んだ ASTRA の交通量計測所を一覧表示 |
get_traffic_nearby | 指定した座標付近の交通量計測所を検索 |
🌍 地震/SED(3 ツール)
| ツール | 説明 |
|---|---|
get_recent_earthquakes | ETH Zürich のスイス地震学サービス(SED)から、スイス国内および周辺で最近発生した地震を取得 |
get_earthquake_details | SED のイベント ID で指定した地震イベントの詳細情報を取得 |
search_earthquakes_by_location | 指定した座標付近の地震を、半径、期間、件数の上限を指定して検索 |
❄️ 積雪状況/SLF(3 ツール)
| ツール | 説明 |
|---|---|
get_snow_conditions | SLF IMIS 観測所からスイス各地の現在の積雪深と新雪(24 時間)を取得。州/標高で絞り込み可能 |
list_snow_stations | SLF の積雪観測所 307 か所(IMIS 自動観測所および手動調査区画)をすべて一覧表示 |
get_snow_measurements | 特定の SLF 観測所の詳細な積雪・気象観測データを取得 |
🌿 花粉/MeteoSwiss(3 個のツール)
| ツール | 説明 |
|---|---|
get_pollen_current | MeteoSwiss の 16 観測所のいずれかにおける、現在の花粉濃度(1 時間ごと、7 種類:ハンノキ、カバノキ、ハシバミ、ブナ、トネリコ、オーク、イネ科植物) |
get_pollen_daily | 設定可能な期間の傾向分析に利用できる、日ごとの花粉濃度の平均値 |
list_pollen_stations | MeteoSwiss の自動花粉観測所 16 か所の一覧と所在地の詳細 |
データソース
スイスの公式オープンデータのみを使用しており、API キーは不要です。
開発
# Clone
git clone https://github.com/vikramgorla/mcp-swiss.git
cd mcp-swiss
# Install deps
npm install
# Build
npm run build
# Run in dev mode
npm run dev
# Test with MCP Inspector
npx @modelcontextprotocol/inspector node dist/index.js
テスト
npm test
貢献
皆さまからの貢献を歓迎します!mcp-swiss では、コードベースをクリーンに保ち、CI を常にグリーンに保つため、厳格な PR ベースのワークフローに従っています。
クイックリンク
-
CONTRIBUTING.md— 貢献者向けガイドの全文:- 開発環境のセットアップ(クローン、インストール、ビルド、テスト)
- ブランチモデル(develop / main / feature branches)
- 厳守するワークフロールール(直接プッシュしない、必ず PR を作成する、通常のマージのみ)
- 新しいモジュールの追加(コードテンプレート付きの手順)
- 統合チェックリスト(更新が必要なすべてのファイル)
- コード規約(TypeScript、
anyの使用禁止、応答の上限 50K、API キーは一切使用しない)
-
RELEASING.md— メンテナー向けのリリースプロセス:- リリースワークフローの手順
- リリース前チェックリスト
- バージョン戦略(機能追加はマイナー、修正はパッチ)
- リリース後の確認
- CI/CD ワークフローのリファレンス(
ci.yml、release.yml、beta.yml、mcp-registry.yml)
要件
- Node.js 20+
- API キーやアカウントは不要です
ライセンス
MIT — LICENSE を参照
コメント
AI アプリケーションが外部のツールやデータソースに統一的な方法で接続するためのオープンなプロトコルです。クライアントはモデルとの対話を担い、MCP サーバーはツール・リソース・プロンプトテンプレートを提供します。標準メッセージでやり取りするため、1 つのサーバーを複数のクライアントで再利用できます。