swiss-holidays-mcp について
swiss-holidays-mcpは、スイス全26州の祝日と学校休暇を提供する、AIアシスタント向けMCPサーバーです。学校種別の違いを扱い、公開データを使った州間の計画にも対応します。APIキーは不要です。
主な機能
- 01州・学校種別ごとの学校休暇
- 02州・地域別の祝日
- 03州をまたぐ休暇の重複比較
- 04連休とブリッジデーの確認
- 05iCalendar出力と休暇リソース
- 06データソースの状態と出典情報
活用シーン
- 01州ごとの学校休暇日の確認
- 02州間の休暇重複の比較
- 03共同計画向けの共通休暇の特定
- 04州の休暇をICSカレンダーに出力
MCP 対応
読み取り専用の休暇ツールと休暇フィードのリソースをMCPクライアントに提供します。stdioとHTTPベースのトランスポートに対応します。
設定
ローカルサーバーの設定はどのクライアントでも共通です。コピーしてクライアントの MCP 設定ファイルに貼り付けてください。
ツール
ローカルサーバーのツールはマシン上で起動して初めて取得できます。メンテナーはまだツール一覧を提供していません。
詳細
🇨🇭 スイス公共データ MCP ポートフォリオの一部
これは個人プロジェクトです。雇用主や所属機関とは無関係であり、いかなる当局の公式見解も代表しません。
📅 swiss-holidays-mcp
AI エージェント向けのスイス祝日カレンダーです。26 のすべての州を対象に、祝日、学校休暇、連休を州間で比較できます。学校休暇は Schulart(学校種別)ごとに区別されます。これは一見した以上に重要です。API キーは不要です。
概要
swiss-holidays-mcp は、Claude のような AI アシスタント向けのスイス祝日カレンダーです。26 のすべての州を対象に、祝日、学校休暇、連休を確認でき、API キーは不要です。祝日は州ごとに定められているため、ベヒトルトスタークや聖体祭などは、連邦の最低基準だけでなく州によっても異なります。学校休暇も州ごとに定められ、地区単位の場合もあり、さらに 6 州では学校種別ごとに別々に設定されています。連邦共通のカレンダーは存在しません。そのため、州境を越えて予定を立てる場合、通常は 26 個の PDF を開くしかありません。
このサーバーは、祝日/連休と学校休暇(Schulart による区別)の 2 つのテーマを扱います。それぞれのテーマに専用ツールのグループが対応し、行政機関の生データを、出典情報付きの整った JSON レスポンスに変換します。すべてのデータは、OpenHolidays API(CC BY 4.0)および Nager.Date(MIT)から取得しています。
覚え方: スイスの学校データに重複があったら、たいていは学校種別が隠れています。 基盤となる API は、州が学校種別ごとに区別している場合、同じ休暇期間を複数回公開します。これは重複データのように見え、安易に重複排除したくなりますが、そうすると学校当局が必要とする区別そのものが失われてしまいます。
中心となるデモの質問: 「2026 年にチューリッヒ、ツーク、アールガウの義務教育課程が同時に休暇となるのは何週で、各州ペアで重複する日数はいくつですか?」
→ 1 回の会話で find_common_free_window、compare_school_holidays、list_school_types を試し、州間の調整で計画サイクルのたびに繰り返される質問に答えます。
→ 利用者別のユースケース →
デモ
機能
- 🏫 学校休暇 — 州および日付範囲ごとの期間。Schulart(
VS/MS/BS/EO)別に分類されています - 🎌 祝日 — 州ごとの祝日セット。連邦の最低限の祝日だけではありません(Berchtoldstag など)
- 🔍 日付の確認 — 指定した日付が州の学校休暇または祝日にあたるかを確認できます
- 🔗 州をまたいだ比較 — 州間の休暇日のペアごとの重複マトリクス
- 🪟 共通の休暇期間 — 指定したすべての州が同時に休暇となる日付範囲
- 🌉 連休と橋渡し休日 — 連邦祝日(Nager.Date)に基づいて算出します
- 🏘️ 地域・自治体の祝日 — チューリッヒのSechseläutenやKnabenschiessenなど、地区・自治体レベルの詳細を提供します。州全体の祝日と誤認されないよう、
scopeマーカーが付いています - 📆 iCal/ICS エクスポート — ある年の州の祝日を、すぐにインポートできる
.icsカレンダーとして出力します - 🔖 祝日フィードリソース — Markdown の概要を含む
holidays://<canton>/<year>MCP リソース - 📌 「今日は祝日ですか?」 — 日常的な質問に1回の呼び出しで答えます
- 🩺 ソースの状態 — 2つの上流データソースの到達可能性とレイテンシーを常に確認できます
- 🔑 認証不要 — どちらのデータソースも一般公開されています
- ☁️ デュアルトランスポート — Claude Desktop 向けの stdio と、クラウドデプロイ向けの Streamable HTTP/SSE
- 🧾 すべての応答にデータの出所を表示 —
live_api|cached|degraded。空のリストが無言で返されることはありません
データソース
| ソース | データ | ライセンス |
|---|---|---|
| OpenHolidays API | 州、Schularten、学校休暇、祝日 | CC BY 4.0 |
| Nager.Date | 連休と必要な橋渡し休日 | MIT |
どちらのソースも一般公開されており、認証は不要です。 クレジット表記が必要です: データを使用する際は、OpenHolidays(CC BY 4.0)とNager.Dateを出典として明記してください。
ツール
| ツール | 目的 | データソース |
|---|---|---|
list_cantons | ISO コードと公用語を含む26州の一覧 | OpenHolidays |
list_school_types | 州ごとの Schulart グループ(CH-ZH-VS など) | OpenHolidays |
get_school_holidays | 1つの州の指定日付範囲における学校休暇 | OpenHolidays |
get_public_holidays | 1つの州の1年間の祝日 | OpenHolidays |
get_local_holidays | 1つの自治体または地区の祝日。地域独自の祝日を含みます | OpenHolidays |
check_date | 指定した日付が学校休暇または祝日にあたるかを確認します | OpenHolidays |
compare_school_holidays | 州間のペアごとの重複マトリクス | OpenHolidays |
find_common_free_window | 指定したすべての州が休暇となる期間 | OpenHolidays |
next_school_holidays | 次に予定されている休暇期間 | OpenHolidays |
get_long_weekends | 連休と必要な橋渡し休日 | Nager.Date |
export_holidays_ics | ある年の州の祝日をiCalendar(.ics)ドキュメントとして出力します | OpenHolidays |
is_holiday_today | 今日が州の学校休暇または祝日にあたるかを確認します | OpenHolidays |
source_status | 2つの上流データソースの到達可能性とレイテンシー | 組み込み |
リソース
| リソース URI | 内容 |
|---|---|
holidays://{canton}/{year} | 祝日と学校休暇のすべてをまとめたMarkdownの概要。例:holidays://CH-ZH/2026 |
すべてのツールに完全なアノテーションセット(readOnlyHint: true、destructiveHint: false、idempotentHint: true、openWorldHint: true)が付いています(外部 API にアクセスします)。ツールが何かを書き込むことはありません。入力はスキーマ検証されます(州コードは既知の26州に対して検証され、日付は YYYY-MM-DD 形式、year は範囲制限され、language/school_type は許可リストで検証されます)。
使用例
| クエリ | ツール |
|---|---|
| 「カントンはいくつあり、それぞれのコードは何ですか?」 | list_cantons |
| 「チューリッヒの2026年春の義務教育の休暇を表示してください」 | get_school_holidays |
| 「2026年4月3日はティチーノ州の祝日ですか?」 | check_date |
| 「今年、チューリッヒ州とツーク州の学校休暇は重なりますか?」 | compare_school_holidays |
| 「チューリッヒ州、ツーク州、アールガウ州の全域で、学校を共同で1週間休みにできる時期はいつですか?」 | find_common_free_window |
| 「バーゼル=シュタット州の学校の次の休暇はいつですか?」 | next_school_holidays |
| 「2026年には連休がいくつあり、それぞれ何日の橋渡し休日が必要ですか?」 | get_long_weekends |
| 「チューリッヒ市で実施され、州内の他の地域では実施されない地域の祝日は何ですか?」 | get_local_holidays |
| 「インポートできるように、チューリッヒの2026年の祝日を.icsカレンダーとしてエクスポートしてください」 | export_holidays_ics |
| 「今日はアールガウ州の祝日ですか?」 | is_holiday_today |
🛡️ 安全性と制限
| 項目 | 詳細 |
|---|---|
| アクセス | 読み取り専用(readOnlyHint: true)— サーバーはデータを変更または削除できません |
| 個人データ | 個人データはありません — すべての情報源は集計済みの公開祝日カレンダーです |
| キャッシュ | メモリ内TTLは12時間(祝日テーブルが変更されるのは年に数回です) |
| 再試行 | 指数バックオフで2秒/4秒/8秒。429を除く4xxは再試行されません |
| タイムアウト | API呼び出しごとに20秒(ヘルスプローブは8秒) |
| 認証 | APIキーは不要です — どちらの上流サービスも公開されています |
| 縮退動作 | 上流サービスの障害時には、説明用のnoteを含むdegradedエンベロープを返し、空のリストを黙って返すことはありません |
| 利用規約 | 各データソースの利用規約が適用されます:OpenHolidays、Nager.Date |
アーキテクチャ
このサーバーは**アーキテクチャA(メモリ内キャッシュを使用するライブAPIのみ)**を採用しています。
┌──────────────────────────┐
Claude / any ───▶│ swiss-holidays-mcp │
MCP host │ (MCPServer · 13 tools) │
└────────┬─────────────────┘
│ retry 2s/4s/8s · 12h cache
┌────────┴─────────┐
▼ ▼
OpenHolidays API Nager.Date
(CC BY 4.0) (MIT)
cantons · Schularten long weekends
school + public bridge days
根拠(2026-07-19にライブで確認済み):
- ドキュメントに記載されたOpenHolidaysの10個すべてのエンドポイントが、妥当なペイロードとともにHTTP 200を返しました。
/Subdivisions?countryIsoCode=CHは公式の数と一致する26個のカントンを正確に返します。 - ビルド時に公開の一括ダンプを確認できなかったため(
openpotato/openholidays.dataのrawアクセスは404を返しました)、アーキテクチャBは利用できませんでした。 - 祝日テーブルが変更されるのは年に数回のため、メモリ内TTLを12時間にすることで、データの古さを招くことなく上流への負荷をほぼなくせます。
影響:
- すべてのレスポンスに
provenance(live_api|cached|degraded)が含まれます。 - 上流サービスの障害時には、説明用の
noteを含むdegradedエンベロープを返し、空のリストを黙って返すことはありません。 source_statusは常に評価可能なヘルスレポートを返します。
ライブプローブの調査結果(2026-07-19)
| エンドポイント | HTTP | ステータス | レコード数 | 注記 |
|---|---|---|---|---|
/Countries | 200 | ✅ 動作 | 36 | |
/Subdivisions?countryIsoCode=CH | 200 | ✅ 動作 | 26 | 公式のカントン数と一致 |
/Groups?countryIsoCode=CH | 200 | ✅ 動作 | 11 | Schulartグループ。対象は6州のみ |
/PublicHolidays(CH、2026年) | 200 | ✅ 動作 | 39 | カントンの適用範囲を含む |
/SchoolHolidays(CH、2026年) | 200 | ✅ 動作 | 193 | 学校種別による分割後の異なる項目数は183 |
/SchoolHolidaysByDate | 200 | ✅ 動作 | – | |
/SchoolHolidays?countryIsoCode=XX | 200 | ⚠️ エラーなしで空を返す | 0 | 無効な国コードはエラーになりません |
/Subdivisions?languageIsoCode=ZZ | 200 | ⚠️ エラーなしで英語にフォールバック | 26 | 無効な言語コードはエラーになりません |
日付範囲なしの/SchoolHolidays | 400 | ✅ 正しいエラー | – | RFC 9110のproblem+json |
Nager /PublicHolidays/2026/CH | 200 | ✅ 動作 | 33 | 29行にcountiesが含まれます |
Nager /LongWeekend/2026/CH | 200 | ✅ 動作 | 3 | |
Nager /PublicHolidays/2026/XX | 404 | ✅ 正しいエラー | – | OpenHolidaysより厳格 |
確認されている事項
- 一見重複している項目は、学校種別の違いによるものです。 Zurich では Frühlingsferien 2026 が2回返されます。1つは
CH-ZH-VS(Volksschulen、Recommendedタグ付き)、もう1つはCH-ZH-BS+CH-ZH-MS(Berufsfach- und Mittelschulen)です。重複を除去するのではなく、school_typeパラメーター(VS/MS/BS/EO)を使用してください。 - 学校種別を区別するのは、6つの州のみです(AI、AR、BE、GR、SO、ZH)。それ以外では
groupsはなく、1つの表がすべてを網羅します。そのため、フィルターではgroupsフィールドがない場合、「すべてに適用」として扱います。 - 細分区域コードは異なる階層が混在しています。 レコードには
CH-AI-APやCH-BE-TH-BLが含まれることがあります。必ずCH-XXの接頭辞で照合し、文字列の完全一致では照合しないでください。 - 空のリストは回答ではありません。 不明な国コードまたは州コードを指定すると、HTTP 200 と
[]が返されます。このサーバーは説明用のnoteを設定するため、「祝日がない」場合と「無効なフィルター」の場合を区別できます。
前提条件
- Python 3.10 以降
- uv / uvx(推奨)または pip
- インターネット接続(両方の API は一般公開されています)
インストール
uv の uvx を使って実行します。クローンや手動インストールは不要です。
uvx swiss-holidays-mcp
開発
git clone https://github.com/malkreide/swiss-holidays-mcp
cd swiss-holidays-mcp
pip install -e ".[dev]"
設定
Claude Desktop
claude_desktop_config.json に追加します。
macOS: ~/Library/Application Support/Claude/claude_desktop_config.json
Windows: %APPDATA%\Claude\claude_desktop_config.json
{
"mcpServers": {
"swiss-holidays": {
"command": "uvx",
"args": ["swiss-holidays-mcp"]
}
}
}
Claude Desktop を再起動すると、初回使用時にサーバーが自動的に起動します。
クラウドへのデプロイ(ブラウザーアクセス用の SSE / Streamable HTTP)
ブラウザーの claude.ai 経由で使用する場合(例:ローカルソフトウェアを使用できない管理対象ワークステーション):
MCP_TRANSPORT=sse PORT=8000 python -m swiss_holidays_mcp
SDK は /mcp ではなく、/sse で SSE を公開します。
| 変数 | デフォルト | 説明 |
|---|---|---|
MCP_TRANSPORT | stdio | トランスポート:stdio、sse、streamable-http(別名:http) |
PORT / MCP_PORT | 8000 | HTTP トランスポートのポート |
MCP_HOST | 127.0.0.1 | HTTP トランスポートのバインドアドレス。デフォルトはループバックです。0.0.0.0 は明示的なオプトインが必要で、警告がログに記録されます。認証を行うリバースプロキシの背後で実行してください。 |
MCP_CORS_ORIGINS | (空) | ブラウザークライアント用の追加 CORS オリジン(カンマ区切り、SDK-004 の監査)。ループバックオリジンは常に許可されます。UI の配信元となる公開オリジン(例:https://ui.example.ch)を追加してください。* は使用しないでください。 |
HTTP トランスポートには、Mcp-Session-Id ヘッダーを公開する明示的な CORS レイヤーが付加されます。そのため、ブラウザーの MCP クライアントはセッション ID を読み取り、後続のリクエストを送信できます。許可リストにワイルドカードを使用することはありません。
ロードバランサーの背後で 複数の HTTP インスタンス を実行するには、Mcp-Session-Id をキーとするスティッキーセッションが必要です。nginx / Traefik / Kubernetes の例については、docs/scaling.md を参照してください。単一インスタンス(一般的なケース)では、アフィニティ設定は不要です。
💡 「開発者のノート PC では stdio、ブラウザーでは SSE。」
プロジェクト構成
swiss-holidays-mcp/
├── src/
│ └── swiss_holidays_mcp/
│ ├── __init__.py # Package init
│ ├── __main__.py # Entry point: stdio / SSE / Streamable HTTP
│ ├── server.py # MCPServer: lifespan, 13 tools, 1 resource, op_* logic
│ ├── client.py # Shared HTTP client: retry, 12h cache, egress guard
│ ├── guard.py # Egress / SSRF guard (HTTPS + allow-list + IP blocklist)
│ ├── pinning.py # DNS-pinning transport (TOCTOU-free connect, SEC-005)
│ ├── ical.py # RFC 5545 iCalendar (.ics) writer
│ ├── settings.py # Pydantic-Settings config (loopback default)
│ ├── logging_setup.py # Structured logging to stderr
│ ├── constants.py # Canton codes, Schulart suffixes, API bases, allow-list
│ └── models.py # Pydantic v2 response envelopes
├── tests/
│ ├── conftest.py # respx fixtures
│ ├── test_tools.py # Tool unit tests (mocked, no network)
│ ├── test_resilience.py # Degradation / retry / cache behaviour
│ └── test_live.py # Live smoke tests (marker: live)
├── docs/ # roadmap.md, security.md, network-egress.md
├── deploy/ # Network-layer egress manifests (Cilium / NetworkPolicy)
├── audits/ # mcp-audit run artifacts
├── Dockerfile # Non-root multi-stage container
├── .github/
│ ├── dependabot.yml # Monthly dependency / action update PRs
│ └── workflows/ # ci.yml, live-tests.yml, publish.yml
├── pyproject.toml
├── CHANGELOG.md
├── CONTRIBUTING.md # Contributing guide (English)
├── CONTRIBUTING.de.md # Contributing guide (German)
├── SECURITY.md # Security policy (English)
├── SECURITY.de.md # Security policy (German)
├── EXAMPLES.md # Use cases by audience
├── server.json # MCP registry manifest
├── LICENSE
├── README.md # This file (English)
└── README.de.md # German version
単一ファイルの server.py について(監査 ARCH-011)。 13 個のツールは、意図的に tools/ パッケージではなく、1つのモジュールに配置されています。各ツールは、トランスポートに依存しない op_* 操作を呼び出す、薄く一貫性のあるラッパー(@mcp.tool → @_safe_tool → op_*)です。すべての操作は、共通の少数のヘルパー(_to_period、_matches_school_type、_require_known_canton など)と、単一の HolidayClient を共有します。これらを複数のファイルに分割すると、共有する中核部分が散在し、分離による利点がないままインポートが重複します。このファイルは一貫してセクション分けされており(エイリアス → ヘルパー → op_* のロジック → ツールラッパー → リソース)、すべての op_* はトランスポートを介さず直接ユニットテストされています。tools/ への分割を予定しているのは、フェーズ 2 でツール数が大幅に増えた場合のみです。
ライフサイクルフェーズ
このサーバーは**フェーズ 1(読み取り専用)**です。すべてのツールは読み取り専用で、認証は不要、副作用もありません。推奨される最大数の 15~20 に対して、13 個というツール数にはまだ余裕があります。チューリッヒのゼクセロイテンやクナーベンシーセンを含む、地域および自治体固有の情報は、get_local_holidays を使って OpenHolidays から直接取得できます(ライブプローブにより、これらが Gemeinde レベルで上流に公開されていることを確認しました)。そのため、これらに別の都市データソースは必要ありません。
MCP プリミティブとプロトコルバージョン
-
プリミティブ — ツールとリソース。 13 個のツールは、冪等で副作用のない
GETです。リソースは安定した URI フィード(holidays://<canton>/<year>)を公開するため、クライアントはツールを呼び出さずに、キャッシュ可能なコンテキストとして州のカレンダーを読み取れます。定期的に繰り返すテンプレート化されたワークフローはないため、プロンプトは使用しません(変更があれば再検討します)。 -
MCP プロトコルバージョン — 2 つの世代にネイティブ対応。
mcp2.x は同じサーバー上で両方に対応し、どちらが適用されるかは、接続時のクライアントの最初のリクエストによって決まります。initializeハンドシェイクの上限は2025-11-25です。一方、リクエスト単位のエンベロープを使う世代(仕様2026-07-28)にはハンドシェイクがありません。この世代では、各リクエストがプロトコルバージョン、クライアント情報、クライアント機能をparams._metaに含め、Mcp-Protocol-Version/Mcp-Method/Mcp-Nameルーティングヘッダーにも同じ情報が反映されます。また、initializeの代わりにserver/discoverを使用します。source_statusはmcp_protocol_versionで、Context.protocol_versionからリクエストごとに読み取ったこのリクエストが受信されたバージョンを報告します。以前はすべての呼び出し元に定数(ハンドシェイクの上限)を報告していたため、2026-07-28をネゴシエートしたクライアントにも、自身の接続について2025-11-25と伝えていました。この定数は、ネゴシエーションが行われなかったop_*レイヤーでのフォールバックとしてのみ残っています。SDK のLATEST_HANDSHAKE_VERSIONから導出されるため、以前のように値がずれることはありません。かつては 2 つのリビジョンにわたり2025-06-18のままで、すべての呼び出しで事実として報告されていました。推測ではなく、実測しています。
tests/test_protocol_version.pyは、本番環境でこのリポジトリが提供するものと同じ ASGI アプリを通して両世代を動作させ、世代ごとに配信されるフィールドを比較します。このファイルの以前のバージョンには、リポジトリではそのようなアプリを構築できないと記載されていましたが、実際には構築できます。この主張は、実測から 2 つのリビジョンにわたって更新されないまま残っていました。ハンドシェイクで2026-07-28を要求するクライアントには、引き続き2025-11-25が返されます。現在は、姉妹サーバーではなく、ここで実測しています。ワイヤーバージョンは、ピン留めされたmcpSDK(mcp>=2.0.0,<3)によってネゴシエートされます。 -
すべての結果にサーバーの識別情報が付随します。
2026-07-28にはinitializeの結果がないため、各結果の_metaスタンプとしてserverInfoが付随します。呼び出し元が、どのサーバーのどのビルドが応答したかを知ることができる唯一の場所です。サーバーはMCPServerにパッケージのバージョンとホームページを渡します。これがないと、SDK はversion: ""をスタンプし、独自の値に置き換えることもありません。空のバージョンは、値がないよりも悪いものです。回答があるように見えるからです。 -
リスト取得メソッドの鮮度ヒント(SEP-2549):
tools/list、resources/list、resources/templates/list、server/discoverは、ttlMs300000、cacheScope: publicを返します。これらがない場合、SDK の既定値は「即座に古くなり、共有しない」です。そのため、リストはインポート時に固定されているにもかかわらず、クライアントは接続のたびにリストを再取得します。resources/readにはヒントがありません。holidays://{canton}/{year}はディレクトリではなく、ライブクエリです。 -
更新ポリシー。 SDK と依存関係の更新は Dependabot 経由で取り込みます(毎月、グループ化)。プロトコルバージョンやツール定義の変更は、バージョンを更新したうえで
CHANGELOG.mdに記録します。
データ分類
すべてのデータはÖffentlich / Public Open Dataです。集約された祝日カレンダーのみで、個人データは含みません(DSG/DSGVO)。これは、このサーバーが扱うデータの中で最も高い分類です。全体像は docs/security.md に記載されています。
既知の制限事項
- 非公式な情報源です。 OpenHolidays は州の公表情報を集約しています。法的拘束力のある日付については、州当局が正式な情報源となります。その旨はすべての応答で伝えます。
- 自治体の網羅状況は上流データに依存します。 OpenHolidays には、地区および自治体レベルの祝日(
CH-ZH-ZH-ZHの Sechseläuten、Knabenschiessen など)も含まれており、get_local_holidaysで取得できます。Gemeinde レベルでの網羅性は上流データの品質に左右され、州ごとに異なります。自治体の 学校休暇 は個別にモデル化されていません。 - Nager の連休情報には州の祝日が反映されません。 全国の祝日のみを基に算出されます。
- 過去のデータの網羅性は保証されません。 おおむね 2020 年より前のデータの網羅状況にはばらつきがあります。
テスト
# Unit tests (no network required — respx-mocked)
PYTHONPATH=src pytest tests/ -m "not live"
# Live smoke tests (hits the real upstream APIs)
PYTHONPATH=src pytest tests/ -m "live"
# Linting
ruff check src/ tests/ scripts/
ruff format --check src/ tests/ scripts/
貢献
貢献を歓迎します!バグ報告、開発環境のセットアップ、コードスタイル、テスト要件に関するガイドラインは、CONTRIBUTING.md(英語)· CONTRIBUTING.de.md(ドイツ語)をお読みください。
このプロジェクトは、Swiss Public Data MCP Portfolio の規約に従っています。
セキュリティ
脆弱性を報告する場合は、SECURITY.md(英語)· SECURITY.de.md(ドイツ語)に記載されている責任ある開示の手順に従ってください。このサーバーは読み取り専用で、API キーは不要です。セキュリティモデルについては、上記の 安全性と制限事項 のセクションをご覧ください。
変更履歴
CHANGELOG.md をご覧ください。
スイスの行政機関向けデプロイ
スイスの学校当局または自治体での用途に、このサーバーをセルフホストする場合:
- データの保管場所: クエリパターン(公務員が比較する州など)から進行中の計画が明らかになる可能性があるため、スイス国内または信頼できるインフラストラクチャで管理するのが望ましいです。
- 上流へのリクエスト: OpenHolidays(EU でホストされている OGD プロジェクト)および Nager.Date に送信されます。個人データが環境外に送信されることはなく、祝日カレンダーのみがリクエストされます。
- ログ: ログは stderr に出力されます。IT の保存ポリシーに従って設定してください。
- HTTP トランスポート: 認証と IP ごとのレート制限を設定したリバースプロキシの背後で実行してください。このサーバーには認証機能が組み込まれていません。
ライセンス
MIT License — LICENSE をご覧ください。
ソースデータには OpenHolidays(CC BY 4.0)および Nager.Date(MIT)の利用規約が適用されます。これらのデータを利用する際は、出典を明記する必要があります。
作者
Hayal Oezkan · github.com/malkreide
クレジットと関連プロジェクト
- データ: OpenHolidays API(CC BY 4.0)· Nager.Date(MIT)
- プロトコル: Model Context Protocol — Anthropic / Linux Foundation
- 構築にあたって
mcp-data-source-probeの方法論に従いました:設計前に実環境で調査し、API に依存する前にダンプをフォールバックとして用意し、諦める前に再試行する。 - ポートフォリオ: Swiss Public Data MCP Portfolio
| サーバー | 説明 |
|---|---|
zh-education-mcp | チューリッヒ州の教育データ |
zurich-opendata-mcp | チューリッヒ市のオープンデータ |
swiss-statistics-mcp | BFS STAT-TAB — スイス連邦統計 |
swisstopo-mcp | スイス連邦の地理空間データ(swisstopo) |
MIT ライセンスです。公的資金で作られたものは、コードも公開します。
コメント
AI アプリケーションが外部のツールやデータソースに統一的な方法で接続するためのオープンなプロトコルです。クライアントはモデルとの対話を担い、MCP サーバーはツール・リソース・プロンプトテンプレートを提供します。標準メッセージでやり取りするため、1 つのサーバーを複数のクライアントで再利用できます。