seco-labor-mcp について
seco-labor-mcpは、スイスの労働市場や労働災害を分析する研究者、教育計画担当者、エージェント向けのサーバーです。全国の年次統計、4州の失業データ、UVGの業種別統計を扱い、対象範囲と制約も明示します。
主な機能
- 01労働市場データセットの検索と取得
- 02全国の年次失業者・求職者数の取得
- 03TG・FR・ZG・ZH州の失業データ表示
- 04若年失業データと月次レポートURLの取得
- 05UVG事故統計と業種別推移の検索
活用シーン
- 01州ごとの失業状況の比較
- 02職業相談での若年失業データの活用
- 03業種別の労働災害傾向の確認
- 04データセットの発見とダウンロードリンク取得
MCP 対応
MCPサーバーは、データセット検索、失業者・求職者統計、UVG労働災害データを扱う12のツールをクライアントに提供します。一部のツールでは、データがない場合や州別の対象範囲が限られることを明示します。
設定
ローカルサーバーの設定はどのクライアントでも共通です。コピーしてクライアントの MCP 設定ファイルに貼り付けてください。
ツール
12掲載時のツール一覧 · 2 週間前に更新
| パラメーター | 型 | 必須 | 説明 |
|---|---|---|---|
| params | object | はい | 含まれる項目: - query (str):検索語(ドイツ語/英語) - limit (int):結果の最大数(1-20、デフォルトは10) - response_format (str):'markdown' または 'json' |
| params.limit | integer | いいえ | 返すデータセットの最大数(1-20)。 |
| params.query | string | はい | ドイツ語または英語の検索クエリ。例:'arbeitslose kantone'、'Jugendarbeitslosigkeit'、'offene Stellen'、'Kurzarbeit'、'unemployment youth' |
| params.response_format | enum | いいえ | 出力形式:人が読みやすい形式は 'markdown'、構造化データは 'json'。markdown | json |
詳細
🇨🇭 スイス公共データ MCP ポートフォリオの一部
SECO 労働市場 MCP サーバー
🌐 英語 | ドイツ語
opendata.swiss を通じて、SECO(経済事務局)および AMSTAT のスイス労働市場データを提供する MCP(Model Context Protocol)サーバーです。
概要
このサーバーは、API キーを必要とせずに、失業率、求職者、求人、若年層の失業率、職業別内訳などのスイスの労働市場統計を AI モデルに提供します。
主な対象者:
- 🏫 学校当局/教育計画担当者 — 若年層の失業率、職業指導データ
- 📊 調査・分析担当者 — 労働市場の動向、州ごとの比較
- 🤖 AI エージェント — 労働市場の自動監視とレポート作成
代表的な質問:
「チューリッヒ州で若年層の失業率が最も高い職業グループはどれですか。また、求人届出義務の対象となる見習い職種はどれですか?」
→ 対象者別のユースケースをさらに見る →
データソース(フェーズ 1 — 認証不要)
| ソース | 説明 | 状態 |
|---|---|---|
| opendata.swiss | CKAN カタログ。固定された BFS の表 T3.3.0.1 に SECO の年次系列が掲載されています | ✅ 稼働中 |
| arbeit.swiss | 月次の報道発表(PDF、構造化された URL パターン) | ✅ 稼働中 |
| amstat.ch | AMSTAT の参照ポータル | ⚠️ JavaScript SPA、公開 REST API なし |
| unfallstatistik.ch | Unfallstatistik UVG(SSUV/KSUV c/o Suva)— 労働災害および職業病 | ⚠️ PDF のみ、API なし(下記参照) |
アーキテクチャ
┌─────────────────────────────────────────────────────┐
│ seco-labor-mcp │
│ │
│ ┌─────────────┐ ┌──────────────────────────┐ │
│ │ FastMCP │ │ 9 MCP Tools │ │
│ │ Server │◄──►│ seco_search_datasets │ │
│ │ (stdio / │ │ seco_get_dataset │ │
│ │ HTTP) │ │ seco_get_unemployment_* │ │
│ └─────────────┘ │ seco_get_youth_* │ │
│ │ │ seco_get_job_seekers │ │
│ ▼ │ seco_get_open_positions │ │
│ ┌─────────────┐ │ seco_get_monthly_url │ │
│ │ httpx │ │ seco_list_cantons │ │
│ │ async │ └──────────────────────────┘ │
│ └──────┬──────┘ │
└─────────┼───────────────────────────────────────────┘
│
▼
┌───────────────────────────────────┐
│ opendata.swiss CKAN API │
│ https://opendata.swiss/api/3/ │
│ action/package_search │
│ action/package_show │
└───────────┬───────────────────────┘
│
▼
┌───────────────────────────────────┐
│ SECO Data Resources │
│ CSV / XLSX / PDF Downloads │
│ (monthly labor market data) │
└───────────────────────────────────┘
数値の出所と不足しているデータ
SECO は opendata.swiss の公開元ではなくなっています。 2026-08-14 に確認:
organization_show は 404 を返し、organization_list の 176 件に SECO は含まれていません。それ以前は、このサーバーは同組織で検索結果を絞り込んでいたため、何も返しませんでした。組織名の検索に失敗すると、検索結果が空である場合とまったく同じように見えます。
登録失業者と求職者の数値は引き続き SECO の数値です。BFS が表 T3.3.0.1 で公開し、脚注に SECO を記載しています。このサーバーは、ライブテストでライブソースとの照合を確認した固定データセット ID(sources.py)を使って、その表を読み込みます。
| 系列 | 2000 | 2025 |
|---|---|---|
| 登録求職者(SECO) | 124.6 | 214.1 |
| 登録失業者(SECO) | 72.0 | 133.7 |
| ILO 失業者(BFS) | 126.5 | 248.5 |
千人、年平均
この 3 つの系列は同じものを測定しているわけではありません。2000 年の ILO の数値は登録者の数値の 1.76 倍です。このサーバーはそれぞれを区別してラベル付きで報告し、一方を他方に換算することはありません。
州レベル:4つの州、4つのスキーマ
全国の月次系列はありませんが、4つの州が独自のRAV統計を公開しており、それぞれ独自のポータルと列名を使用しています。これらについては、seco_get_unemployment_overview(canton=…) が実際の値を返します。
| 州 | 粒度 | 開始時期 | レベル | 備考 |
|---|---|---|---|---|
| TG | 月次 | 2016-01 | 州 | 年齢層別の系列のみ → 若年失業者数 |
| FR | 月次 | 2004-01 | 州およびスイス | 比較用の行として全国の月次統計を掲載 |
| ZG | 月次 | 1993-01 | 州 | 若年失業者数は人数ではなく失業率のみ |
| ZH | 年次 | 1991 | 自治体 | 月次の値はありません。地区や地域も自治体と同じ列にあり、別途切り分けています |
残る22州については、理由を明記して対応を拒否します。他州の統計も全国集計も返しません。完全に見える不完全なカバレッジは、何も返さないより悪いからです。
4つの系列は相互に比較できず、合算してスイス全体の値を出すこともできません。時間軸も地理的なレベルも異なり、ZGでは人数ではなく失業率を扱っています。
引き続き利用できないもの: 職業グループ別の失業者数、全国系列としての求人件数、スイス全体または26州のうち24州の若年失業者数です。該当するツールはその旨を示し、代替の統計値は返しません。これらの値はamstat.chで対話的に確認できますが、サーバーから呼び出せるインターフェースはありません。
ツール
| ツール | 説明 | 主な用途 |
|---|---|---|
seco_search_datasets | opendata.swiss の労働市場データセットを検索します(各検索結果に公開者を表示) | データの探索 |
seco_get_dataset | データセットの完全なメタデータとダウンロードリンクを取得します | データアクセス |
seco_get_unemployment_overview | 登録失業者数:全国の年次統計、およびTG/FR/ZG/ZHの州別統計 | 労働市場の概況 |
seco_get_youth_unemployment | 若年失業者数(15~24歳)— TG(人数)とZG(失業率)のみ | 🎓 職業選択相談 |
seco_get_job_seekers | 登録求職者数。2000年からの全国年次系列 | 研修需要 |
seco_get_open_positions | 求人件数 — 全国系列はありません | セクター分析 |
seco_get_unemployment_by_occupation | 職業大分類別の内訳 — 機械可読な情報源はありません | 🎓 職業指導 |
seco_get_monthly_report_url | PDFレポートのURLを生成/検証します | 情報源へのアクセス |
seco_list_cantons | 26州のコードと名称をすべて表示します | ユーティリティ |
seco_get_uvg_overview | 労働災害および職業病に関するUVG主要統計 | リスクの概況 |
seco_get_uvg_by_branch | NOGA 2008経済部門別の結果 | 🎓 職業指導 |
seco_get_uvg_trends | 経済部門別の10年間の労働災害時系列 | 傾向分析 |
最大15個のツールのうち12個です。
UVG労働災害統計(SSUV)
3つのseco_get_uvg_*ツールは、失業統計ツールが示す同じ労働市場のリスク面を扱います。経済部門ごとの労働災害および職業病の発生件数と、その10年間の推移を確認できます。
公開者はSECOではありません。 UVG労働災害統計は、調整グループKSUVと、ルツェルンにあるSuva内の収集機関SSUVが発行しています。seco_という接頭辞はこのサーバーを示すもので、情報源を示すものではありません。各応答のsourceフィールドに実際の公開者が記載されています。
アーキテクチャの決定:C(ダンプ優先)
2026-08-05 にライブ環境で検証済みです。詳細なレポートは
PROBE_REPORT_UVG.md を参照してください。
ソースには API がありません。すべてのデータページを対象にリンクをスキャンしたところ、PDF が 165 件見つかり、.csv、.xlsx、.json ファイルは 0 件でした。opendata.swiss にはこのソースがまったく掲載されておらず(7 つの検索語のうち 6 つで count=0)、BFS dam-api はフィルターパラメーターを黙って無視します。残っているデータは、実際には機械可読ですが、そのように設計されてはいません。
| アクセス方法 | 形式 | 更新頻度 |
|---|---|---|
schluesselzahlen_d.htm | HTML テーブル、過去 5 年分、スイス全域 | 年 1 回 |
Ts{YY}.pdf | 年次版、NOGA 別の表 1.2 および 2.4 | 年 1 回、6 月 |
WirtKl_{BUV|NBUV}_{NN}.pdf | NOGA 部門ごとの 10 年間の時系列データ | 年 1 回、1 月 |
PDF は 24 時間キャッシュされ、2 秒/4 秒/8 秒のバックオフを伴って取得されます。
すべてのレスポンスが伝えること
source_freshness.data_year— 版の年ではなく、データの年です。2026 年版は 2024 年のデータを報告しており、この 2 年の遅れは明記されています。totals_check— 解析した行を合計し、同じ出版物に印刷された合計と照合します。レイアウトが崩れている場合は、もっともらしい誤った数値になるのではなく、ここに現れます。significant— ソースでは、前年比で統計的に有意な変化にアスタリスクが付けられます。このフラグはデータポイントごとに保持されるため、変化が有意であると報告されるのは、ソースがそう示している場合に限られます。
インストール
Claude Desktop(stdio)
claude_desktop_config.json に追加します。
{
"mcpServers": {
"seco-labor": {
"command": "uvx",
"args": ["seco-labor-mcp"]
}
}
}
クラウド/HTTP
pip install seco-labor-mcp
MCP_TRANSPORT=http PORT=8000 seco-labor-mcp
使用するトランスポートは http です。現代のプロトコル時代に対応できるのはこれだけです。このサーバーオブジェクトで測定したところ、http は 2026-07-28 をネゴシエートします。一方、sse は現代のプロトコル時代を提示するクライアントであっても、すべてのクライアントを 2025-11-25 に制限します。既存のデプロイメント向けに sse と streamable-http も引き続き受け付けます。tests/test_transport_aera.py は両方を実行し、それぞれが実際にどの時代のプロトコルを返すかを記録します。
HTTP サーバーは、共有ネットワークでの NeighborJack を防ぐため、デフォルトでは 127.0.0.1(ループバック) にバインドします。コンテナ外からのトラフィックを受け入れる必要があるコンテナデプロイメントでは、HOST=0.0.0.0 を明示的に設定してください。できれば Dockerfile/オーケストレーターの設定で指定し、上流のプロキシまたはファイアウォールの内側でのみ使用してください。
HOST=0.0.0.0 MCP_TRANSPORT=http PORT=8000 seco-labor-mcp # container only
不明な MCP_TRANSPORT 値が指定されると、エラーで終了するようになりました。以前は黙って stdio にフォールバックしていたため、タイプミスをすると、期待したポートにサーバーがまったく現れない状態になっていました。
開発
git clone https://github.com/malkreide/seco-labor-mcp.git
cd seco-labor-mcp
pip install -e ".[dev]"
pytest tests/ -m "not live" -v
使用例
若年層の失業データを検索する
Tool: seco_search_datasets
Input: { "query": "Jugendarbeitslosigkeit Alter", "limit": 5 }
チューリッヒ州の失業状況を取得する
Tool: seco_get_unemployment_overview
Input: { "canton": "ZH", "response_format": "markdown" }
月次レポートの URL を取得する
Tool: seco_get_monthly_report_url
Input: { "year": 2026, "month": 2, "language": "de" }
主な概念
Arbeitslose と Stellensuchende
覚え方:Arbeitslose ⊂ Stellensuchende — Arbeitslose はその一部です。
| 用語 | 定義 | 2025 年 12 月 |
|---|---|---|
| Arbeitslose | RAV に登録され、すぐに就業可能な人 | 約 149,000 人(3.2%) |
| Stellensuchende | RAV に登録されているすべての人(研修プログラム参加者を含む) | 約 233,900 人 |
若年層の失業の季節性
- 7 月/8 月:急増します(就職先が決まっていない学校卒業者)。
- 9 月/10 月:減少します(見習い制度の開始)。
- 秋の減少後に残る分は、つなぎのプログラム(Brückenangebote)が構造的に必要であることを示します。
Stellenmeldepflicht(2020 年以降)
失業率が 5% 以上の職業は、一般公開する前に RAV へ届け出る必要があります。このリストは毎年変更されます。職業相談に直接関係する情報であり、これらの職業はスイスの求職者にとって最も求人が多い分野です。
ポートフォリオの相乗効果
| サーバー | 相乗効果 |
|---|---|
swiss-statistics-mcp | BFS の人口/雇用データを使って、より深い背景情報を得られます |
zurich-opendata-mcp | チューリッヒ市レベルの教育・社会データを得られます |
swiss-snb-mcp | 労働市場の解釈に役立つ経済的背景(GDP、賃金)を得られます |
fedlex-mcp | ALV(失業保険)の法的枠組みを確認できます |
既知の制限事項
amstat.arbeit.swissには公開 REST API がありません(JavaScript SPA)。→ CKAN を使って回避します- 職業・産業部門別の詳細データを取得するには、SECO のリソースから CSV をダウンロードする必要があります
- 月次報道レポートの URL パターンは、古いレポートでは異なる場合があります
- このレベルでは、州内の市町村より細かいデータは利用できません
- UVG の数値は PDF の解析によって取得しています。レイアウトは 2025 年版と 2026 年版で安定していましたが、再設計によって解析が機能しなくなる可能性があります。各レスポンスの
totals_checkにより、このような問題を気づかないまま見過ごさずに済みます。 - UVG のデータにはおよそ 2 年の遅れがあります(2026 年版では 2024 年のデータが報告されています)
- UVG の部門別詳細は NOGA 2008 に準拠しており、一部の部門(
41 – 42、77, 79 – 82)はまとめられています。このレベルでは州別の内訳はありません - 公開資料より詳細な UVG データは SSUV の限定ユーザーグループのみが利用できるため、認証を必要としないこのサーバーの対象範囲外です
フェーズ 2 のロードマップ:
- TTL 24 時間の CSV 自動キャッシュ
- 州別内訳を取得するための XLSX 直接解析
zh-education-mcpとの連携による Schulamt 固有の相関分析
データライセンス
適用されるライセンスは 2 種類です。このサーバーのコードにはいずれの場合も MIT ライセンスが適用されますが、データはその対象ではありません。
opendata.swiss で公開されている SECO / AMSTAT データには、Creative Commons CCZero(パブリックドメイン)が適用されます。 出典:Staatssekretariat für Wirtschaft (SECO) — seco.admin.ch
Unfallstatistik UVG データには、オープンライセンスが適用されていません。公開資料には次のように記載されています。
«Abdruck – ausser für kommerzielle Nutzung – mit Quellenangabe gestattet.» (出典を明記すれば、商用利用を除き転載が認められます。)
これは、出典の明記が必要な非商用利用の制限です。データの権利は KSUV/SSUV に帰属し、このリポジトリの MIT ライセンスによって制限を解除することはできません。MIT ライセンスが適用されるのはコードであり、コードが取得する数値ではありません。このサーバーを商用利用する場合、UVG ツールは対象外です。Sammelstelle([email protected])に直接確認してください。README はモデルに渡されないため、すべての UVG レスポンスの source フィールドにこの制限が繰り返し記載されます。
安全性と制限
| 項目 | 詳細 |
|---|---|
| アクセス | 読み取り専用(readOnlyHint: true)— サーバーがデータを変更または削除することはできません |
| 個人データ | 個人データはありません。すべての情報源は、集計済みの匿名の公開統計です |
| レート制限 | 外部から課される制限はありません。サーバーはクエリの結果をデフォルトで 20 件に制限し、HTTP タイムアウトを 30 秒に設定しています |
| 認証 | API キーは不要です。opendata.swiss と arbeit.swiss は一般に公開されています |
| ライセンス | SECO データには Creative Commons CCZero(パブリックドメイン)が適用されます |
| 利用規約 | 次の利用規約が適用されます:opendata.swiss、SECO、arbeit.swiss |
| GDPR / DSG | 完全に準拠しています。個人データの送信や保存は行わず、すべてのデータは公的な公式統計です |
MCP プロトコルバージョン
このサーバーは、fastmcp 4.x / mcp 2.x で、同じサーバーオブジェクトを通じて2 つのプロトコル世代を提供します。
| 世代 | リビジョン | 形式 |
|---|---|---|
| モダン | 2026-07-28 | ハンドシェイクなし — server/discover、リクエストごとに完結したエンベロープを 1 つ使用 |
| ハンドシェイク | 2025-11-25 | initialize の後にステートフルセッションを開始 |
モダン世代を提示するクライアントにはモダン世代が提供され、ハンドシェイク世代しか知らないクライアントにも引き続き対応します。両方の世代は tests/test_protokoll_aeren.py で個別に固定され、さらに両方とも実測されます。テストは 2 つの定数を比較するのではなく、このサーバーオブジェクトに対して実際の接続をネゴシエートします。
LATEST_PROTOCOL_VERSION だけを固定しても不十分です。mcp 2.x ではこの名前はモダン世代の別名なので、ハンドシェイクの上限は変更可能なままになり、実際に多くのクライアントが使用しているのはその上限です。
0.4.0 までは、このサーバーは mcp 1.x を固定する fastmcp 3.x で動作していました。その場合、2025-11-25 は SDK が認識する最高のリビジョンであり、2026-07-28 は部分的にサポートされていたのではなく、存在していませんでした。以前は 1 世代だけの状態を保証していたテストは、現在はその反対の状態を保証します。ダウングレードによってモダン世代が再び失われると、テストは失敗します。
サーバーメタデータを読むものについての注意:モダン接続には InitializeResult はありません。世代に依存しない protocol_version / server_info を使用してください。
コントリビューション
開発ガイドラインについては、CONTRIBUTING.md を参照してください。
セキュリティ
セキュリティ対策と脆弱性の報告方法については、SECURITY.md を参照してください。
ライセンス
MIT License の下で公開されています — Copyright © 2026 Hayal Oezkan.
作者
Hayal Oezkan · github.com/malkreide
インストール
uv の uvx 経由で実行できます。クローンや手動インストールは不要です。MCP クライアントの設定に追加してください(Claude Desktop、Cursor、Windsurf では mcpServers を使用し、VS Code では .vscode/mcp.json のトップレベルにある servers キーを使用します)。
{
"mcpServers": {
"seco-labor-mcp": {
"command": "uvx",
"args": [
"seco-labor-mcp"
]
}
}
}
コメント
AI アプリケーションが外部のツールやデータソースに統一的な方法で接続するためのオープンなプロトコルです。クライアントはモデルとの対話を担い、MCP サーバーはツール・リソース・プロンプトテンプレートを提供します。標準メッセージでやり取りするため、1 つのサーバーを複数のクライアントで再利用できます。