Seco Labor Mcp — independently scanned and version-tracked by SaferSkills.
SaferSkills independently audited Seco Labor Mcp (Agent Skill) and scored it 100/100 (green). The audit ran 55 deterministic rules across Security, Supply Chain, Maintenance, Transparency, and Community; it found 0 high-severity and 0 lower-severity findings. The full rule-by-rule trace and per-finding evidence are below. Free, methodology-open.
Findings & checks · 0 flagged
Every scanned point with the score it earned and what moved between them.
First recorded scan — no prior version to compare against.
The primary manifest — the file an agent reads to learn what this artifact does.
🇨🇭 Part of the [Swiss Public Data MCP Portfolio](https://github.com/malkreide)
🌐 English | [Deutsch](README.de.md)
An MCP (Model Context Protocol) server for Swiss labor market data from SECO (Staatssekretariat für Wirtschaft) and AMSTAT via opendata.swiss.
<p align="center"> <img src="assets/demo.png" alt="Demo: Claude queries youth unemployment via seco-labor-mcp tool call" width="720"> </p>
This server connects AI models to Swiss labor market statistics — unemployment rates, job seekers, open positions, youth unemployment, and occupational breakdowns — all without requiring an API key.
Primary audiences:
Anchor query: "Welche Berufsgruppen haben im Kanton Zürich die höchste Jugendarbeitslosigkeit, und welche Lehrberufe unterliegen der Stellenmeldepflicht?" → More use cases by audience →
| Source | Description | Status |
|---|---|---|
| opendata.swiss | CKAN metadata catalog with SECO dataset CSVs | ✅ Live |
| arbeit.swiss | Monthly press reports (PDF, structured URL pattern) | ✅ Live |
| amstat.ch | AMSTAT reference portal | ⚠️ JavaScript SPA, no public REST API |
┌─────────────────────────────────────────────────────┐
│ seco-labor-mcp │
│ │
│ ┌─────────────┐ ┌──────────────────────────┐ │
│ │ FastMCP │ │ 9 MCP Tools │ │
│ │ Server │◄──►│ seco_search_datasets │ │
│ │ (stdio / │ │ seco_get_dataset │ │
│ │ SSE) │ │ 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) │
└───────────────────────────────────┘| Tool | Description | Key Use Case |
|---|---|---|
seco_search_datasets | Search SECO datasets on opendata.swiss | Discovery |
seco_get_dataset | Full metadata + download links for a dataset | Data access |
seco_get_unemployment_overview | National/cantonal unemployment figures | Labor market overview |
seco_get_youth_unemployment | Youth unemployment (15–24 year olds) | 🎓 Berufswahlberatung |
seco_get_job_seekers | Stellensuchende (broader than unemployed) | Training demand |
seco_get_open_positions | Open positions — leading indicator | Sector analysis |
seco_get_unemployment_by_occupation | Breakdown by Berufshauptgruppe | 🎓 Vocational guidance |
seco_get_monthly_report_url | Generate/verify PDF report URL | Source access |
seco_list_cantons | All 26 canton codes and names | Utility |
Add to claude_desktop_config.json:
{
"mcpServers": {
"seco-labor": {
"command": "uvx",
"args": ["seco-labor-mcp"]
}
}
}pip install seco-labor-mcp
MCP_TRANSPORT=sse PORT=8000 seco-labor-mcpThe SSE server binds to `127.0.0.1` (loopback) by default to prevent NeighborJack on shared networks. For container deployments where you actually need to accept traffic from outside the container, set HOST=0.0.0.0 explicitly — ideally in your Dockerfile / orchestrator config, and only behind an upstream proxy or firewall:
HOST=0.0.0.0 MCP_TRANSPORT=sse PORT=8000 seco-labor-mcp # container onlygit clone https://github.com/malkreide/seco-labor-mcp.git
cd seco-labor-mcp
pip install -e ".[dev]"
pytest tests/ -m "not live" -vTool: seco_search_datasets
Input: { "query": "Jugendarbeitslosigkeit Alter", "limit": 5 }Tool: seco_get_unemployment_overview
Input: { "canton": "ZH", "response_format": "markdown" }Tool: seco_get_monthly_report_url
Input: { "year": 2026, "month": 2, "language": "de" }Eselsbrücke: Arbeitslose ⊂ Stellensuchende — Arbeitslose sind eine Teilmenge.
| Term | Definition | Dec 2025 |
|---|---|---|
| Arbeitslose | RAV-registered, immediately available | ~149'000 (3.2%) |
| Stellensuchende | All RAV-registered (incl. training programs) | ~233'900 |
Occupations with ≥5% unemployment rate must be reported to the RAV before posting publicly. The list changes annually. This is directly relevant for vocational counseling — these professions have highest availability for Swiss job seekers.
| Server | Synergy |
|---|---|
swiss-statistics-mcp | BFS population/employment data for deeper context |
zurich-opendata-mcp | City of Zurich-level education and social data |
swiss-snb-mcp | Economic context (GDP, wages) for labor market interpretation |
fedlex-mcp | ALV (Arbeitslosenversicherung) legislative framework |
amstat.arbeit.swiss has no public REST API (JavaScript SPA) → workaround via CKANPhase 2 roadmap:
zh-education-mcp for Schulamt-specific correlationsSECO data published on opendata.swiss is under Creative Commons CCZero (public domain). Source: Staatssekretariat für Wirtschaft (SECO) — seco.admin.ch
| Aspect | Details |
|---|---|
| Access | Read-only (readOnlyHint: true) — the server cannot modify or delete any data |
| Personal data | No personal data — all sources are aggregated, anonymous public statistics |
| Rate limits | No enforced external limits; server caps queries at 20 results by default; 30 s HTTP timeout |
| Authentication | No API keys required — opendata.swiss and arbeit.swiss are publicly accessible |
| Licenses | SECO data under Creative Commons CCZero (public domain) |
| Terms of Service | Subject to ToS of: opendata.swiss, SECO, arbeit.swiss |
| GDPR / DSG | Fully compliant — no personal data transmitted or stored; all data is official public statistics |
See CONTRIBUTING.md for development guidelines.
See SECURITY.md for the security posture and how to report a vulnerability.
Released under the MIT License — Copyright © 2026 Hayal Oezkan.
<!-- mcp-name: io.github.malkreide/seco-labor-mcp -->
<!-- BEGIN GENERATED: install -->
Run via uv's uvx — no clone or manual install needed. Add to your MCP client config (mcpServers for Claude Desktop, Cursor and Windsurf; use a top-level servers key for VS Code in .vscode/mcp.json):
{
"mcpServers": {
"seco-labor-mcp": {
"command": "uvx",
"args": [
"seco-labor-mcp"
]
}
}
}<!-- END GENERATED: install -->
~30 seconds. Free. No account. Every finding cites a rule and a line of evidence.