mcpField
S
swiss-holidays-mcp

swiss-holidays-mcp

ローカル
github.com生産性05 週間前に更新

swiss-holidays-mcp について

swiss-holidays-mcpは、スイス全26州の祝日と学校休暇を提供する、AIアシスタント向けMCPサーバーです。学校種別の違いを扱い、公開データを使った州間の計画にも対応します。APIキーは不要です。

主な機能

  1. 01州・学校種別ごとの学校休暇
  2. 02州・地域別の祝日
  3. 03州をまたぐ休暇の重複比較
  4. 04連休とブリッジデーの確認
  5. 05iCalendar出力と休暇リソース
  6. 06データソースの状態と出典情報

活用シーン

  1. 01州ごとの学校休暇日の確認
  2. 02州間の休暇重複の比較
  3. 03共同計画向けの共通休暇の特定
  4. 04州の休暇をICSカレンダーに出力

MCP 対応

読み取り専用の休暇ツールと休暇フィードのリソースをMCPクライアントに提供します。stdioとHTTPベースのトランスポートに対応します。

設定

ローカルサーバーの設定はどのクライアントでも共通です。コピーしてクライアントの MCP 設定ファイルに貼り付けてください。

mcp.json · 共通設定
{
"mcpServers": {
"malkreide-swiss-holidays": {
"command": "uvx",
"args": [
"swiss-holidays-mcp"
]
}
}
}
起動コマンドuvx swiss-holidays-mcp

ローカルサーバーにはマシン上の実行環境(Node.js 18 以上など)が必要です。設定ファイルの場所はクライアントごとに異なります。

パッケージ
pypiswiss-holidays-mcp0.7.0

ツール

ツール一覧はまだ取得されていません

ローカルサーバーのツールはマシン上で起動して初めて取得できます。メンテナーはまだツール一覧を提供していません。

詳細

🇨🇭 スイス公共データ MCP ポートフォリオの一部

これは個人プロジェクトです。雇用主や所属機関とは無関係であり、いかなる当局の公式見解も代表しません。

📅 swiss-holidays-mcp

License: MIT Python 3.10+ MCP CI No Auth Required Data Source

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 を試し、州間の調整で計画サイクルのたびに繰り返される質問に答えます。 → 利用者別のユースケース →

デモ

デモ:Claude が find_common_free_window と compare_school_holidays を使用


機能

  • 🏫 学校休暇 — 州および日付範囲ごとの期間。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_cantonsISO コードと公用語を含む26州の一覧OpenHolidays
list_school_types州ごとの Schulart グループ(CH-ZH-VS など)OpenHolidays
get_school_holidays1つの州の指定日付範囲における学校休暇OpenHolidays
get_public_holidays1つの州の1年間の祝日OpenHolidays
get_local_holidays1つの自治体または地区の祝日。地域独自の祝日を含みます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_status2つの上流データソースの到達可能性とレイテンシー組み込み
リソース
リソース 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ステータスレコード数注記
/Countries200✅ 動作36
/Subdivisions?countryIsoCode=CH200✅ 動作26公式のカントン数と一致
/Groups?countryIsoCode=CH200✅ 動作11Schulartグループ。対象は6州のみ
/PublicHolidays(CH、2026年)200✅ 動作39カントンの適用範囲を含む
/SchoolHolidays(CH、2026年)200✅ 動作193学校種別による分割後の異なる項目数は183
/SchoolHolidaysByDate200✅ 動作–
/SchoolHolidays?countryIsoCode=XX200⚠️ エラーなしで空を返す0無効な国コードはエラーになりません
/Subdivisions?languageIsoCode=ZZ200⚠️ エラーなしで英語にフォールバック26無効な言語コードはエラーになりません
日付範囲なしの/SchoolHolidays400✅ 正しいエラー–RFC 9110のproblem+json
Nager /PublicHolidays/2026/CH200✅ 動作3329行にcountiesが含まれます
Nager /LongWeekend/2026/CH200✅ 動作3
Nager /PublicHolidays/2026/XX404✅ 正しいエラー–OpenHolidaysより厳格
確認されている事項
  1. 一見重複している項目は、学校種別の違いによるものです。 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)を使用してください。
  2. 学校種別を区別するのは、6つの州のみです(AI、AR、BE、GR、SO、ZH)。それ以外では groups はなく、1つの表がすべてを網羅します。そのため、フィルターでは groups フィールドがない場合、「すべてに適用」として扱います。
  3. 細分区域コードは異なる階層が混在しています。 レコードには CH-AI-AP や CH-BE-TH-BL が含まれることがあります。必ず CH-XX の接頭辞で照合し、文字列の完全一致では照合しないでください。
  4. 空のリストは回答ではありません。 不明な国コードまたは州コードを指定すると、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_TRANSPORTstdioトランスポート:stdio、sse、streamable-http(別名:http)
PORT / MCP_PORT8000HTTP トランスポートのポート
MCP_HOST127.0.0.1HTTP トランスポートのバインドアドレス。デフォルトはループバックです。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 つの世代にネイティブ対応。 mcp 2.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 が返されます。現在は、姉妹サーバーではなく、ここで実測しています。ワイヤーバージョンは、ピン留めされた mcp SDK(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 は、ttlMs 300000、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-mcpBFS STAT-TAB — スイス連邦統計
swisstopo-mcpスイス連邦の地理空間データ(swisstopo)

MIT ライセンスです。公的資金で作られたものは、コードも公開します。

コメント

MCP は初めてですか?

プロトコルの概要から最初のサーバーの導入まで、よくある疑問にまとめて答えます。

AI アプリケーションが外部のツールやデータソースに統一的な方法で接続するためのオープンなプロトコルです。クライアントはモデルとの対話を担い、MCP サーバーはツール・リソース・プロンプトテンプレートを提供します。標準メッセージでやり取りするため、1 つのサーバーを複数のクライアントで再利用できます。