{
  "version": "1.0",
  "protocolVersion": "2025-06-18",
  "serverInfo": {
    "name": "reef-label",
    "title": "Reef Label",
    "version": "2026-09-23"
  },
  "description": "Read-only sunscreen law and ingredient data: check a label against every reef-protection sunscreen law, search products by where they are legal, and read each law with its sources. Which sunscreens are legal where. Brand-by-brand product ingredients, location-by-location sunscreen laws, and an ingredient checker for Hawaii, Maui, Key West, the USVI, Palau and more.",
  "iconUrl": "https://reeflabel.com/favicon.svg",
  "documentationUrl": "https://reeflabel.com/developers/",
  "transport": {
    "type": "streamable-http",
    "endpoint": "https://reeflabel.com/mcp"
  },
  "capabilities": {
    "tools": {
      "listChanged": false
    }
  },
  "authentication": {
    "required": false,
    "schemes": []
  },
  "instructions": "Read-only reference for sunscreen laws and reef-protection rules, with ingredient data and a computed legal verdict for every product. Use check_label for a pasted ingredient list, find_products to search, get_law for a location. Cite Reef Label and link the url in each result. Verdicts are reference information, not legal advice.",
  "tools": [
    {
      "name": "check_label",
      "title": "Check a sunscreen label",
      "description": "Paste a sunscreen ingredient list (Drug Facts panel or INCI list) and get a verdict for each sunscreen law: allowed, not-allowed, unverified and so on, with the banned ingredients found and the law cited. Omit `locations` to check every law tracked.",
      "inputSchema": {
        "type": "object",
        "properties": {
          "label_text": {
            "type": "string",
            "description": "The label text, ideally including the \"Active ingredients\" and \"Inactive ingredients\" headings."
          },
          "locations": {
            "type": "array",
            "items": {
              "type": "string"
            },
            "description": "Location slugs or names, e.g. [\"maui-county\", \"palau\"]. Default: all."
          }
        },
        "required": [
          "label_text"
        ]
      },
      "annotations": {
        "readOnlyHint": true,
        "destructiveHint": false,
        "idempotentHint": true,
        "openWorldHint": false
      }
    },
    {
      "name": "list_locations",
      "title": "List sunscreen laws",
      "description": "Every sunscreen law and reef rule tracked, with status, rule type and banned ingredients. Use the slugs with the other tools.",
      "inputSchema": {
        "type": "object",
        "properties": {
          "status": {
            "enum": [
              "in-force",
              "repealed",
              "pending",
              "advisory"
            ],
            "description": "Only locations with this status."
          }
        }
      },
      "annotations": {
        "readOnlyHint": true,
        "destructiveHint": false,
        "idempotentHint": true,
        "openWorldHint": false
      }
    },
    {
      "name": "get_law",
      "title": "Get one sunscreen law",
      "description": "Full detail for one location: what is banned, who it applies to, the effective date, exceptions, the law citation and primary sources.",
      "inputSchema": {
        "type": "object",
        "properties": {
          "location": {
            "type": "string",
            "description": "Slug (maui-county) or name (Maui)."
          }
        },
        "required": [
          "location"
        ]
      },
      "annotations": {
        "readOnlyHint": true,
        "destructiveHint": false,
        "idempotentHint": true,
        "openWorldHint": false
      }
    },
    {
      "name": "find_products",
      "title": "Find sunscreens",
      "description": "Search the product database. Filter by where the product must be legal, brand, category, format, mineral-only and minimum SPF. Returns compact rows; use get_product for the full ingredient list.",
      "inputSchema": {
        "type": "object",
        "properties": {
          "legal_in": {
            "type": "array",
            "items": {
              "type": "string"
            },
            "description": "Location slugs or names the product must be allowed in. Use [\"everywhere\"] for every enforced law."
          },
          "query": {
            "type": "string",
            "description": "Words matched against product and brand name."
          },
          "brand": {
            "type": "string",
            "description": "Brand slug or name."
          },
          "category": {
            "type": "string",
            "description": "body, face, kids, baby, sport, lip or tinted."
          },
          "format": {
            "type": "string",
            "description": "lotion, cream, stick, spray-aerosol, spray-pump, gel, etc."
          },
          "mineral_only": {
            "type": "boolean"
          },
          "min_spf": {
            "type": "integer"
          },
          "include_discontinued": {
            "type": "boolean",
            "description": "Default false."
          },
          "limit": {
            "type": "integer",
            "description": "Default 20, max 50."
          },
          "offset": {
            "type": "integer"
          }
        }
      },
      "annotations": {
        "readOnlyHint": true,
        "destructiveHint": false,
        "idempotentHint": true,
        "openWorldHint": false
      }
    },
    {
      "name": "get_product",
      "title": "Get one product",
      "description": "One product: full active and inactive ingredient lists, GTINs, source, and its verdict for every location with the ingredients that blocked it.",
      "inputSchema": {
        "type": "object",
        "properties": {
          "slug": {
            "type": "string",
            "description": "Product slug, or a GTIN/UPC."
          }
        },
        "required": [
          "slug"
        ]
      },
      "annotations": {
        "readOnlyHint": true,
        "destructiveHint": false,
        "idempotentHint": true,
        "openWorldHint": false
      }
    },
    {
      "name": "get_ingredient",
      "title": "Get one ingredient",
      "description": "A UV filter or additive: regulatory status, reef evidence, aliases, and the locations that ban it.",
      "inputSchema": {
        "type": "object",
        "properties": {
          "ingredient": {
            "type": "string",
            "description": "Id (oxybenzone), name or label alias (benzophenone-3)."
          }
        },
        "required": [
          "ingredient"
        ]
      },
      "annotations": {
        "readOnlyHint": true,
        "destructiveHint": false,
        "idempotentHint": true,
        "openWorldHint": false
      }
    }
  ]
}