Swiss Food Safety Mcp — independently scanned and version-tracked by SaferSkills.
SaferSkills independently audited Swiss Food Safety 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)
MCP server connecting AI models to Swiss Federal Food Safety and Veterinary Office (BLV) open data — food recalls, animal disease surveillance, food control results, antibiotic usage, children's nutrition surveys and the pesticide register. No authentication required.
swiss-food-safety-mcp gives AI assistants like Claude direct access to official Swiss food safety and veterinary data from the Federal Food Safety and Veterinary Office (BLV / Bundesamt für Lebensmittelsicherheit und Veterinärwesen). It provides 11 tools covering food recalls, animal disease surveillance, food control results, antibiotic usage in veterinary medicine, nutrition surveys for children, and the pesticide register.
All data comes from official Swiss federal sources (opendata.swiss, lindas.admin.ch, news.admin.ch). No API keys or authentication are required.
This server follows the No-Auth-First philosophy and is part of a Swiss public sector MCP portfolio.
Anchor demo query: "Are there any current BLV food warnings relevant to Zurich school canteens — and which notifiable animal diseases are currently reported in the canton?"
Demo: Claude using blv_get_public_warnings and blv_search_animal_diseases → More use cases by audience →
uv or uvx (recommended) — install uvuvx swiss-food-safety-mcpuv tool install swiss-food-safety-mcp
swiss-food-safety-mcpgit clone https://github.com/malkreide/swiss-food-safety-mcp
cd swiss-food-safety-mcp
uv sync
uv run swiss-food-safety-mcpAdd to claude_desktop_config.json:
macOS: ~/Library/Application Support/Claude/claude_desktop_config.json Windows: %APPDATA%\Claude\claude_desktop_config.json
{
"mcpServers": {
"swiss-food-safety": {
"command": "uvx",
"args": ["swiss-food-safety-mcp"]
}
}
}Try it immediately in Claude Desktop:
"Which BLV food warnings are currently active?" "Are there any notifiable animal diseases reported in Zurich canton this year?"
{
"mcpServers": {
"swiss-food-safety": {
"command": "uvx",
"args": ["swiss-food-safety-mcp"]
}
}
}For use via claude.ai in the browser (e.g. on managed workstations without local software):
# Loopback only (default) — safe for local testing:
swiss-food-safety-mcp --http
# Server runs on 127.0.0.1:8002
# External exposure (e.g. behind the Render TLS proxy):
swiss-food-safety-mcp --http --host 0.0.0.0⚠️ The HTTP transport binds to127.0.0.1by default. Pass--host 0.0.0.0only when external exposure is intended. SetBLV_MCP_ALLOWED_ORIGINS(comma-separated, no wildcard) to permit browser clients; it defaults tohttps://claude.ai.
Render.com (recommended):
swiss-food-safety-mcp --http --host 0.0.0.0https://your-app.onrender.com/mcpDocker:
docker build -t swiss-food-safety-mcp .
docker run -p 8002:8002 swiss-food-safety-mcp
# or, with explicit CPU/memory limits:
docker compose upThe image is a non-root, multi-stage build; the container already binds 0.0.0.0 and includes a healthcheck. docker-compose.yml additionally caps CPU and memory.
💡 "stdio for the developer laptop, Streamable HTTP for the browser."
🔧 Configuration — every runtime setting is overridable viaBLV_MCP_*environment variables (BLV_MCP_HTTP_HOST,BLV_MCP_HTTP_PORT,BLV_MCP_ALLOWED_ORIGINS,BLV_MCP_TIMEOUT,BLV_MCP_OTEL_ENDPOINT, …). Outbound requests are restricted to Swiss federal hosts (*.admin.ch,opendata.swiss). Optional OpenTelemetry tracing: install withpip install swiss-food-safety-mcp[otel]and setBLV_MCP_OTEL_ENDPOINT.
| Tool | Description | Data Source |
|---|---|---|
blv_get_public_warnings | Current food recalls & health warnings | news.admin.ch RSS |
blv_list_datasets | Browse all 28 BLV open datasets | opendata.swiss CKAN |
blv_get_dataset_info | Dataset details & resource URLs | opendata.swiss CKAN |
blv_search_animal_diseases | Notifiable animal diseases since 1991 | SPARQL / CSV fallback |
blv_get_animal_health_stats | Annual animal health statistics | opendata.swiss CSV/JSON |
blv_get_food_control_results | Cantonal food inspection results | opendata.swiss CSV |
blv_get_antibiotic_usage_vet | Veterinary antibiotic usage (ISABV) | opendata.swiss CSV |
blv_get_avian_influenza | Wild bird avian influenza surveillance | opendata.swiss JSON/KML |
blv_get_nutrition_data_children | Children's nutrition survey (menuCH-Kids) | opendata.swiss CSV |
blv_search_pesticide_products | Swiss approved pesticide register | opendata.swiss XML |
blv_get_meat_inspection_stats | Slaughterhouse inspection statistics | opendata.swiss CSV/JSON |
| Query | Tool |
|---|---|
| "Which BLV food warnings are currently active?" | blv_get_public_warnings |
| "Are there animal diseases in Zurich canton in 2024?" | blv_search_animal_diseases |
| "What is the avian influenza situation in Switzerland 2024?" | blv_get_avian_influenza |
| "What do Swiss children actually eat?" | blv_get_nutrition_data_children |
| "Which copper-based pesticides are approved in Switzerland?" | blv_search_pesticide_products |
┌─────────────────┐ ┌─────────────────────────────┐ ┌──────────────────────────────┐
│ Claude / AI │────▶│ Swiss Food Safety MCP │────▶│ Swiss Federal Open Data │
│ (MCP Host) │◀────│ (MCP Server) │◀────│ │
└─────────────────┘ │ │ │ opendata.swiss (CKAN/CSV) │
│ 11 Tools · No Auth │ │ lindas.admin.ch (SPARQL) │
│ Stdio | Streamable HTTP │ │ news.admin.ch (RSS/XML) │
└─────────────────────────────┘ └──────────────────────────────┘| Combination | Use Case |
|---|---|
swiss-food-safety-mcp + zurich-opendata-mcp | Geo-mapped animal disease risk near school locations |
swiss-food-safety-mcp + fedlex-mcp | Link recalls to food law (Lebensmittelgesetz) |
swiss-food-safety-mcp + swiss-statistics-mcp | Nutrition data × socioeconomics by school district |
swiss-food-safety-mcp + global-education-mcp | Swiss children's nutrition vs. OECD benchmarks |
swiss-food-safety-mcp/
├── src/
│ └── swiss_food_safety_mcp/
│ ├── __init__.py # Package metadata
│ └── server.py # All tools, resources, prompts
├── tests/
│ ├── __init__.py
│ └── test_server.py # Unit tests (no live API calls)
├── .github/
│ └── workflows/
│ └── ci.yml # Python 3.11–3.13 matrix
├── pyproject.toml # hatchling build, uv-compatible
├── CHANGELOG.md
├── CONTRIBUTING.md # Contribution guide (English)
├── CONTRIBUTING.de.md # Contribution guide (German)
├── SECURITY.md # Security policy (English)
├── SECURITY.de.md # Security policy (German)
├── LICENSE # MIT
├── README.md # This file (English)
└── README.de.md # German version| Source | Description | Format |
|---|---|---|
| opendata.swiss/BLV | 28 open datasets | CSV, JSON, Parquet, SPARQL, XML |
| lindas.admin.ch/sparql | Swiss linked data SPARQL endpoint | RDF/SPARQL |
| news.admin.ch RSS | BLV public warnings & recalls | RSS/XML |
| blv.admin.ch | BLV website (DE/FR/IT/EN) | HTML |
All data is open government data (OGD) under Creative Commons with attribution requirement.
limit and filtering parameters conservatively. The server enforces a 30-second timeout per request.This server is Phase 1 — read-only (see ROADMAP.md): all 11 tools are read-only queries with no write surface.
Run it as a single instance. The Streamable HTTP transport keeps per-session state, so horizontal scaling would require Mcp-Session-Id sticky routing at the load balancer plus a shared session store — neither is implemented, by design, for a server of this scope. A single Render instance (or one container) is the supported deployment; docker-compose.yml sets explicit CPU/memory limits for self-hosting.
# Unit tests (no API access required)
PYTHONPATH=src pytest tests/ -m "not live"
# All tests including live API checks
PYTHONPATH=src pytest tests/See CHANGELOG.md
See CONTRIBUTING.md
See SECURITY.md for the security policy and how to report a vulnerability.
MIT License — see LICENSE
Hayal Oezkan · github.com/malkreide
<!-- mcp-name: io.github.malkreide/swiss-food-safety-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": {
"swiss-food-safety-mcp": {
"command": "uvx",
"args": [
"swiss-food-safety-mcp"
]
}
}
}<!-- END GENERATED: install -->
~30 seconds. Free. No account. Every finding cites a rule and a line of evidence.