io.github.malkreide/swiss-food-safety-mcp
BLV open data for food safety and veterinary inspections
Versions
1.1.3latestTools 11
blv_get_public_warnings Current BLV food recalls and public health warnings (live RSS feed). Use case: answer questions about food safety alerts currently active in Switzerland, e.g. "which products have been recalled recently?". Args: limit: Maximum number of items to return (default 20, max 50). Returns: List of warning items with title, link, description, pubDate, source.
blv_list_datasets Browse all BLV open datasets on opendata.swiss (CKAN API). Use case: discover which datasets exist before drilling into one with blv_get_dataset_info, or to map a topic to a concrete dataset slug. Args: limit: Maximum datasets to return (default 28 = all BLV datasets). search: Optional keyword filter on title/notes. Returns: List of dataset summaries with name, title, notes, num_resources, source.
blv_get_dataset_info Detailed metadata and resource URLs for a specific BLV dataset. Use case: obtain the concrete download URLs and formats of a dataset found via blv_list_datasets, including its open-data licence. Args: dataset_name: CKAN dataset name/slug (from blv_list_datasets). Returns: Full dataset metadata including all resource download URLs and formats.
blv_search_animal_diseases Search notifiable animal disease cases in Switzerland since 1991 (InfoSM). Use case: report on disease occurrence by canton and year, e.g. "were there avian influenza cases in Bern in 2024?". Args: canton: Two-letter canton abbreviation (e.g. "ZH", "BE"). Empty = all cantons. disease: Disease name filter (partial match, e.g. "Maul", "Vogelgrippe"). Empty = all. year_from: Start year (default 2020). year_to: End year (default 2024). limit: Maximum results (default 50). Returns: List of disease case records with year, canton, disease, cases, source.
blv_get_animal_health_stats Annual animal health statistics from BLV (opendata.swiss CSV/JSON). Use case: track year-over-year animal health indicators across Switzerland. Args: year: Filter by year (e.g. 2023). None returns all available years. Returns: List of annual statistics records.
blv_get_food_control_results Cantonal food inspection results and violation rates (Lebensmittelkontrolle). Use case: compare inspection volumes and violation rates between cantons or across years. Args: canton: Two-letter canton abbreviation (e.g. "ZH"). Empty = all. year: Filter by year. None = all available. limit: Maximum rows to return (default 100). Returns: List of inspection result records with canton, year, inspections, violations.
blv_get_antibiotic_usage_vet Veterinary antibiotic usage data from the Swiss ISABV monitoring system. Use case: analyse antibiotic consumption trends by livestock species, e.g. for antimicrobial-resistance reporting. Args: year: Filter by year (e.g. 2022). None = all years. animal_species: Filter by species (e.g. "Rind", "Schwein", "Geflügel"). Empty = all. Returns: Antibiotic usage records with year, species, substance class, quantity (kg).
blv_get_avian_influenza Wild bird avian influenza (H5N1 / HPAI) surveillance data with geodata. Use case: locate and date wild-bird avian influenza detections, optionally narrowed to one canton. Args: year: Filter by year (e.g. 2024). None = all. canton: Two-letter canton code (e.g. "ZH"). Empty = all Switzerland. Returns: Avian influenza case records with date, location, species, result, coordinates.
blv_get_nutrition_data_children Swiss national children's nutrition survey — questionnaire tallies (menuCH-Kids). Use case: how often each answer was given, broken down by sex, language region and age group. NOT nutrient intake. The docstring here promised "nutrient intake by age group against dietary recommendations" and named "Energie", "Zucker", "Eisen" as filter examples. The only menuCH-Kids dataset published on opendata.swiss is the questionnaire, and it carries answer counts: ``Geschlecht, Sprachregion, Altersgruppe, Frage, Antwort, Anzahl``. Measured on 2026-08-08. A filter on "Eisen" therefore matched nothing and returned an empty list — indistinguishable from "no such data for this age group". Nutrient intake for adults exists as a separate dataset (``menuch_lebensmittelkonsum``); this tool does not cover it, and inventing a mapping would be worse than the missing feature. Args: age_group: Filter by age group as the source spells it (e.g. "10bis13"). answer_code: Filter by question or answer code (e.g. "c09B_12", "a78"). Returns: Questionnaire records: sex, language region, age group, question code, answer code, count.
blv_search_pesticide_products Search the Swiss approved pesticide register (Pflanzenschutzmittelverzeichnis). Use case: check whether a plant-protection product or active ingredient is approved (or revoked) in Switzerland. Args: product_name: Filter by product name (partial match). Empty = all. active_ingredient: Filter by active ingredient, e.g. "Kupfer", "Glyphosat". Empty = all. status: Authorization status — "bewilligt" (approved), "widerrufen" (revoked), or "". limit: Maximum results (default 50). Returns: Pesticide product records with name, authorization number, active ingredients, status.
blv_get_meat_inspection_stats Slaughterhouse meat inspection statistics (Fleischuntersuchung). Use case: review slaughter counts and condemnation rates by animal type and year. Args: year: Filter by year (e.g. 2023). None = all. animal_type: Filter by animal type (e.g. "Rind", "Schwein", "Geflügel"). Empty = all. Returns: Inspection statistics with year, animal type, slaughter count, condemnation rate.
Permissions 2
network medium filesystem low