{
  "name": "Unsafe Products / Опасные товары",
  "description": "Catalog of non-food products found dangerous in the EU (Safety Gate / RAPEX) in Russian and English.",
  "site": "https://safety.weblocally.com",
  "spec": "https://webmachinelearning.github.io/webmcp/",
  "entry_point": "document.modelContext (navigator.modelContext in early builds)",
  "script": "https://safety.weblocally.com/static/webmcp.js",
  "pages": [
    "https://safety.weblocally.com/ru/*",
    "https://safety.weblocally.com/en/*"
  ],
  "exposed_to": [],
  "tools": [
    {
      "name": "search_dangerous_products",
      "title": "Search dangerous products",
      "description": "Search the catalog of non-food products found dangerous in the EU (Safety Gate / RAPEX alerts since 2005: toys, cosmetics, electrical appliances, childcare articles, vehicles and more). Filters by free text (product name, brand, model, barcode or alert number), category, risk type, country of origin, notifying country and year. Returns alert summaries, newest first, each with a link to the page on this site and to the original EU alert. Category and risk keys come from list_categories_and_risks.",
      "inputSchema": {
        "type": "object",
        "properties": {
          "query": {
            "type": "string",
            "maxLength": 120,
            "description": "Free text: product name, brand, model, barcode or alert number such as A12/01234/23. Every word must match (prefix match)."
          },
          "category": {
            "type": "string",
            "pattern": "^[a-z.]+$",
            "description": "Category key, for example toys, cosmetics, electrical.appliances.and.equipment."
          },
          "risk": {
            "type": "string",
            "pattern": "^[a-z.]+$",
            "description": "Risk type key, for example chemical, choking, electric.shock, fire."
          },
          "origin_country": {
            "type": "string",
            "pattern": "^[A-Z]{2}$",
            "description": "Country of origin of the product, ISO 3166-1 alpha-2 code, for example CN."
          },
          "notifying_country": {
            "type": "string",
            "pattern": "^[A-Z]{2}$",
            "description": "Country that reported the alert, ISO 3166-1 alpha-2 code, for example DE."
          },
          "year": {
            "type": "integer",
            "minimum": 2005,
            "maximum": 2100,
            "description": "Publication year of the alert."
          },
          "sort": {
            "type": "string",
            "enum": [
              "newest",
              "oldest"
            ],
            "description": "Sort order by publication date. Default newest."
          },
          "page": {
            "type": "integer",
            "minimum": 1,
            "maximum": 1000,
            "description": "Page number, default 1."
          },
          "per_page": {
            "type": "integer",
            "minimum": 1,
            "maximum": 50,
            "description": "Results per page, default 10, at most 50."
          },
          "lang": {
            "type": "string",
            "enum": [
              "ru",
              "en"
            ],
            "description": "Language of labels and texts. Default: the language of the current page."
          }
        },
        "additionalProperties": false
      },
      "annotations": {
        "readOnlyHint": true,
        "untrustedContentHint": true
      }
    },
    {
      "name": "get_product_alert",
      "title": "Get one alert",
      "description": "Get the full details of one dangerous product alert: product description, brands, models, barcodes, batches, the danger, breached requirements, measures taken, photos, dates, the page on this site and the original EU alert URL. Pass either the numeric id or the alert reference number.",
      "inputSchema": {
        "type": "object",
        "properties": {
          "id": {
            "type": "integer",
            "description": "Numeric alert id as used in this site's URLs /ru/alert/<id>."
          },
          "reference": {
            "type": "string",
            "maxLength": 40,
            "description": "Alert reference number, for example A12/01234/23 or 0784/06. Used when id is not known."
          },
          "lang": {
            "type": "string",
            "enum": [
              "ru",
              "en"
            ],
            "description": "Language of labels and texts. Default: the language of the current page."
          }
        },
        "additionalProperties": false
      },
      "annotations": {
        "readOnlyHint": true,
        "untrustedContentHint": true
      }
    },
    {
      "name": "list_categories_and_risks",
      "title": "List categories and risks",
      "description": "List the product categories, risk types, countries of origin, notifying countries and years present in the catalog, with their keys, human readable labels and the number of alerts. Use the keys as filters in search_dangerous_products.",
      "inputSchema": {
        "type": "object",
        "properties": {
          "lang": {
            "type": "string",
            "enum": [
              "ru",
              "en"
            ],
            "description": "Language of the labels. Default: the language of the current page."
          }
        },
        "additionalProperties": false
      },
      "annotations": {
        "readOnlyHint": true
      }
    },
    {
      "name": "check_barcode",
      "title": "Check a barcode",
      "description": "Check whether a product barcode (EAN-13, EAN-8 or UPC-A digits) appears in any EU dangerous product alert. The 12 and 13 digit forms of the same code are matched both ways. A missing match does not prove the product is safe: only products reported to Safety Gate are listed, and many alerts have no barcode.",
      "inputSchema": {
        "type": "object",
        "properties": {
          "barcode": {
            "type": "string",
            "pattern": "^[0-9 -]{6,24}$",
            "description": "Barcode digits printed under the bars, 8 to 14 digits; spaces and dashes are ignored."
          },
          "lang": {
            "type": "string",
            "enum": [
              "ru",
              "en"
            ],
            "description": "Language of labels and texts. Default: the language of the current page."
          }
        },
        "required": [
          "barcode"
        ],
        "additionalProperties": false
      },
      "annotations": {
        "readOnlyHint": true,
        "untrustedContentHint": true
      }
    },
    {
      "name": "open_alert_page",
      "title": "Open an alert page",
      "description": "Open the page of one alert on this site in the current tab so the user can see the photos and details. Navigates away from the current page.",
      "inputSchema": {
        "type": "object",
        "properties": {
          "id": {
            "type": "integer",
            "description": "Numeric alert id."
          },
          "lang": {
            "type": "string",
            "enum": [
              "ru",
              "en"
            ],
            "description": "Page language. Default: the language of the current page."
          }
        },
        "required": [
          "id"
        ],
        "additionalProperties": false
      },
      "annotations": {
        "readOnlyHint": true
      }
    }
  ],
  "declarative_tools": [
    {
      "toolname": "report_site_mistake",
      "tooldescription": "Prepare a report to the site administrator about a mistake on this site: a wrong translation, wrong product data or a photo problem. Use only when the user asks to report a mistake. The form is filled in for the user, who reviews and sends it.",
      "params": {
        "kind": "Type of problem: translation, data, photo or other.",
        "message": "Description of the mistake in the user's words, 5 to 3000 characters.",
        "email": "Optional email for a reply. Fill only if the user gives it for this purpose.",
        "alert_id": "Id of the alert the report is about. Prefilled on alert pages, keep as is."
      },
      "pages": [
        "https://safety.weblocally.com/ru/alert/{id}",
        "https://safety.weblocally.com/en/alert/{id}",
        "https://safety.weblocally.com/ru/report",
        "https://safety.weblocally.com/en/report"
      ]
    }
  ],
  "api": {
    "openapi": "https://safety.weblocally.com/api/v1/openapi.json",
    "docs": {
      "ru": "https://safety.weblocally.com/ru/api",
      "en": "https://safety.weblocally.com/en/api"
    }
  },
  "llms_txt": "https://safety.weblocally.com/llms.txt"
}