# Cast Forecast > Predicts how white a mineral (zinc oxide) sunscreen will look on a shopper's skin, as a CIELAB L* change, from the zinc oxide percent on its FDA label. The model is linear, fitted to the raw data of Maldonado Lopez et al., PLOS ONE 2025 (CC BY 4.0). Appearance only. ## MCP server - Endpoint: https://cast-forecast.vercel.app/api/mcp (Streamable HTTP: POST one JSON-RPC message, get one JSON answer). No key, no session, no cost. - Protocol versions: 2026-07-28, 2025-11-25, 2025-06-18, 2025-03-26. 2026-07-28 requests carry their version in params._meta and the MCP-Protocol-Version, Mcp-Method and Mcp-Name headers; older clients start with initialize. - list_bottles: The featured bottles (the site's chips; use search_labels for all 687 FDA labels): id, name, brand and the evidence behind each prediction (the zinc oxide percent on its FDA label, the label's DailyMed set id and effective date), with a link to the label. - search_labels: Finds FDA sunscreen labels by brand or product name among all 687 the site predicts (every word must start a word of the name or brand), best first: id, name, brand, zinc oxide percent and a link to the label. - predict_cast: Predicted lightening of skin under a zinc oxide sunscreen (CIELAB L* change, dL*), with its band, from the zinc oxide percent on the label. Give bottle_id (from search_labels or list_bottles) or zinc_oxide_pct, not both, and skin_lightness. No prediction outside the study (5 to 30% zinc oxide, skin L* 44.4 to 68.4): the model is never extrapolated. Appearance only. - held_out_error: Refits the label model from the study table and recomputes its held-out error (Gate 1): overall, on darker skin, and on the study's differently formulated benchmark product, whose error is each prediction's band. The same payload as GET /api/label-model. ## Try it Predict one bottle on one skin tone: curl -s https://cast-forecast.vercel.app/api/mcp -H 'Content-Type: application/json' -d '{"jsonrpc":"2.0","id":1,"method":"tools/call","params":{"name":"predict_cast","arguments":{"bottle_id":"cetaphil-sheer-mineral-face","skin_lightness":55}}}' Find a label by brand or name (its id goes to predict_cast as bottle_id): curl -s https://cast-forecast.vercel.app/api/mcp -H 'Content-Type: application/json' -d '{"jsonrpc":"2.0","id":1,"method":"tools/call","params":{"name":"search_labels","arguments":{"query":"mineral","limit":5}}}' Initialize (2025-11-25), then list the tools: curl -s https://cast-forecast.vercel.app/api/mcp -H 'Content-Type: application/json' -H 'Accept: application/json, text/event-stream' -d '{"jsonrpc":"2.0","id":1,"method":"initialize","params":{"protocolVersion":"2025-11-25","capabilities":{},"clientInfo":{"name":"curl","version":"1"}}}' curl -s https://cast-forecast.vercel.app/api/mcp -H 'Content-Type: application/json' -H 'Accept: application/json, text/event-stream' -H 'MCP-Protocol-Version: 2025-11-25' -d '{"jsonrpc":"2.0","id":2,"method":"tools/list"}' The same with 2026-07-28 request metadata: curl -s https://cast-forecast.vercel.app/api/mcp -H 'Content-Type: application/json' -H 'Accept: application/json, text/event-stream' -H 'MCP-Protocol-Version: 2026-07-28' -H 'Mcp-Method: server/discover' -d '{"jsonrpc":"2.0","id":3,"method":"server/discover","params":{"_meta":{"io.modelcontextprotocol/protocolVersion":"2026-07-28","io.modelcontextprotocol/clientCapabilities":{}}}}' curl -s https://cast-forecast.vercel.app/api/mcp -H 'Content-Type: application/json' -H 'Accept: application/json, text/event-stream' -H 'MCP-Protocol-Version: 2026-07-28' -H 'Mcp-Method: tools/call' -H 'Mcp-Name: predict_cast' -d '{"jsonrpc":"2.0","id":4,"method":"tools/call","params":{"name":"predict_cast","arguments":{"bottle_id":"cetaphil-sheer-mineral-face","skin_lightness":55},"_meta":{"io.modelcontextprotocol/protocolVersion":"2026-07-28","io.modelcontextprotocol/clientCapabilities":{}}}}' ## Also - [GET /api/label-model](https://cast-forecast.vercel.app/api/label-model): refits the label model from the study table and recomputes Gate 1's held-out error. - [GET /api/gates](https://cast-forecast.vercel.app/api/gates): the gates table and the K1b render curve check. - [Evidence](https://cast-forecast.vercel.app/evidence): every gate result, pass or fail. - [Data](https://github.com/StephenSook/cast-forecast/tree/main/data): the study table and the pinned FDA labels. - [Code](https://github.com/StephenSook/cast-forecast)