Use our sunscreen law data and Reef Safe Index
Free and keyless. Connect an AI assistant to check any ingredient list against every reef law we track, or download the data as JSON. Use it with attribution.
- 13 laws and rules
- 41 ingredients
- 988 products
Dataset last reviewed September 23, 2026.
MCP server
Connect any MCP client to https://reeflabel.com/mcp. It is read-only and needs no account, key or sign-in. Your assistant can then check a label, find products legal where you are going, and read the law with its sources.
Server URL
https://reeflabel.com/mcp
Add it to your client
Claude Code
Run once in a terminal.
claude mcp add --transport http reef-label https://reeflabel.com/mcpClaude (claude.ai and Desktop)
Settings → Connectors → Add custom connector, then paste the URL. No sign-in is needed.
https://reeflabel.com/mcpCursor
Add to ~/.cursor/mcp.json.
{
"mcpServers": {
"reef-label": {
"url": "https://reeflabel.com/mcp"
}
}
}VS Code
Add to .vscode/mcp.json.
{
"servers": {
"reef-label": {
"type": "http",
"url": "https://reeflabel.com/mcp"
}
}
}Clients that only speak stdio
Bridge the remote server with mcp-remote.
{
"mcpServers": {
"reef-label": {
"command": "npx",
"args": [
"-y",
"mcp-remote",
"https://reeflabel.com/mcp"
]
}
}
}Tools
check_label: 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.list_locations: Every sunscreen law and reef rule tracked, with status, rule type and banned ingredients. Use the slugs with the other tools.get_law: Full detail for one location: what is banned, who it applies to, the effective date, exceptions, the law citation and primary sources.find_products: 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.get_product: One product: full active and inactive ingredient lists, GTINs, source, and its verdict for every location with the ingredients that blocked it.get_ingredient: A UV filter or additive: regulatory status, reef evidence, aliases, and the locations that ban it.
Things to ask
- “Is a sunscreen with avobenzone, octocrylene and zinc oxide legal on Maui?”
- “Which face sunscreens are legal in Hawaii, Maui County and Palau?”
- “Which sunscreen laws ban phenoxyethanol?”
- “Here is the label from my sunscreen: … Where can I use it?”
Call it directly
The endpoint speaks JSON-RPC over HTTP POST (MCP Streamable HTTP, stateless), so a plain request works too.
curl
curl -s https://reeflabel.com/mcp \
-H 'Content-Type: application/json' \
-d '{"jsonrpc":"2.0","id":1,"method":"tools/call","params":{"name":"check_label","arguments":{"label_text":"Active Ingredients: Avobenzone 3%, Zinc Oxide 5%. Inactive Ingredients: Water","locations":["maui-county","palau"]}}}'JSON files
The same data the pages are built from, as static files. No parameters and no keys: download a file and filter it yourself. Every file carries an attribution block, and each product has a verdict for every location.
/data/index.json: Manifest: counts, review date and links to every file./data/locations.json: Every law and rule: status, banned ingredient ids, citation, sources, last verified. (13 locations)/data/ingredients.json: Every UV filter and additive, with aliases and the locations that ban it. (41 ingredients)/data/brands.json: Brands with product counts. (42 brands)/data/products.json: Every product: ingredients, GTINs and a computed verdict for each location. (988 products)
Schemas are in the OpenAPI description. The API catalog is at /.well-known/api-catalog.
Example: face sunscreens legal under every law
curl -s https://reeflabel.com/data/products.json \
| jq '[.products[] | select(.legalEverywhere and .category == "face") | {name, brand: .brand.name, spf, url}]'Reading a verdict
allowed: the ingredient list meets the rule.not-allowed: it violates a rule in force.blockedBynames the ingredients.recommended/not-recommended: advisory guidance only, not a law.no-rule: repealed or not enforceable.unverified: it passes on what we know, but the ingredient data is incomplete. CheckinciVerified.
Verdicts are computed from published ingredient lists against the enacted text of each rule, never entered by hand. They are reference information, not legal advice. How verdicts are made.
Terms of use
Free to use with attribution: name Reef Label and link the page you used, and for a legal claim also cite the primary source on the location page. Keep request rates modest, identify your client with an honest User-Agent and cache responses; the files change only when the dataset is reviewed. Full terms in sections 10 and 11, and how to cite us.
For agents and crawlers
- /llms.txt: map of the site for language models.
- /auth.md: no authentication is needed.
- /.well-known/mcp/server-card.json: MCP server card.
- Every page has a Markdown version: send
Accept: text/markdownor addindex.mdto the URL.
Questions and higher volume
Need more than the free limits, a field we do not publish, or found a mistake? Email [email protected].