accueil / serveurs / Géo & Temps / io.github.JaviMaligno/vitamind
io.github.JaviMaligno/vitamind
serveur MCP (Model Context Protocol) · vitamind-explorer 1.0.0
Référencé dans l'annuaire. Seul le pentest comportemental fait foi, et il n'a pas encore été exécuté sur ce serveur.
Est-ce que io.github.JaviMaligno/vitamind est sûr ?
Au dernier audit MCP Hub, le serveur MCP « io.github.JaviMaligno/vitamind » est classé « Non encore testé ». Référencé dans l'annuaire. Seul le pentest comportemental fait foi, et il n'a pas encore été exécuté sur ce serveur. Le verdict est réévalué en continu ; consultez la fiche pour l'état à jour.
Méthode : MCP Hub analyse la description de chaque outil (couche 1) et, pour le verdict fort, exécute le serveur dans une micro-VM isolée avec leurres et réseau bloqué (couche 2). On publie des noms et des compteurs, jamais le contenu brut renvoyé par un outil.
Les 15 outils
- compare_vitamin_d_year≈ 507 tokens
Compare the vitamin D year of 2 to 5 places side by side in ONE call — 'Madrid vs Berlin vs Oslo, where do I actually get winter sun?'. Returns each place's months with sun, exact season span and viable days per year, plus rankedByViableDays. Use this instead of calling get_vitamin_d_year once per city: only this tool can draw the years on a shared axis.
Paramètres, retour & exemple (5)
Paramètresage· number · optionnel
Age in years (synthesis declines with age); omit for adult baselineplaces· array · requis
The places to compare, 2 to 5skinType· integer · optionnel
Fitzpatrick skin type 1 (very fair) to 6 (very dark); default 3targetIU· number · optionnel
Vitamin D target per session in IU; default 1000exposedSkinFraction· number · optionnel
Skin exposed: 0.10 face+hands, 0.18 face+arms, 0.25 t-shirt+shorts (default), 0.40 swimsuit
Exemple d'appel{"name": "compare_vitamin_d_year", "arguments": {"places": []}}Exemple de retour{"content": [{"type": "text", "text": "…"}]} - configure_sun_profile≈ 446 tokens
Show the user an interactive form for the four values every other tool assumes — Fitzpatrick skin type, fraction of skin exposed, age and target IU — with the minutes they need updating live. Use this when those values are unknown, when the user wants to change them, or instead of asking for them one at a time in conversation. Whatever the user picks comes back into the conversation; pass those values explicitly to the other tools afterwards.
Paramètres, retour & exemple (8)
Paramètresage· number · optionnel
Age in years (synthesis declines with age); omit for adult baselinelat· number · optionnel
Latitude of the place being discussed, so the live estimate uses today's real UV therelon· number · optionnel
Longitude, paired with latskinType· integer · optionnel
Fitzpatrick skin type 1 (very fair) to 6 (very dark); default 3targetIU· number · optionnel
Vitamin D target per session in IU; default 1000timezone· string · optionnel
IANA timezone like 'Europe/Madrid'. Strongly recommended — without it all times are UTCplaceName· string · optionnel
How to label that place in the widgetexposedSkinFraction· number · optionnel
Skin exposed: 0.10 face+hands, 0.18 face+arms, 0.25 t-shirt+shorts (default), 0.40 swimsuit
Exemple d'appel{"name": "configure_sun_profile", "arguments": {"age": 1, "lat": 1, "lon": 1, "skinType": 1, "targetIU": 1, "timezone": "texte"}}Exemple de retour{"content": [{"type": "text", "text": "…"}]} - estimate_sun_session≈ 501 tokens
Estimate a sun session's outcome: 'I was (or will be) out N minutes — how much vitamin D did I make?' plus 'how long before I'd burn?' for the profile. Takes a start time (defaults to the day's best hour) and session minutes; returns estimated IU (with the physiological cap), average UV and clear-sky minutes-to-sunburn. Use for any 'how much did I get / can I get in X minutes' or 'how long without burning' question.
Paramètres, retour & exemple (10)
Paramètresage· number · optionnel
Age in years (synthesis declines with age); omit for adult baselinelat· number · requis
Latitude in decimal degreeslon· number · requis
Longitude in decimal degreesdate· string · optionnel
Date as YYYY-MM-DD; defaults to todayminutes· number · requis
Session length in minutesskinType· integer · optionnel
Fitzpatrick skin type 1 (very fair) to 6 (very dark); default 3timezone· string · optionnel
IANA timezone like 'Europe/Madrid'. Strongly recommended — without it all times are UTCstartTime· string · optionnel
Local HH:MM the session starts; defaults to the day's best hourelevationM· number · optionnel
Ground elevation in metres (UV rises ~8%/km); default sea levelexposedSkinFraction· number · optionnel
Skin exposed: 0.10 face+hands, 0.18 face+arms, 0.25 t-shirt+shorts (default), 0.40 swimsuit
Exemple d'appel{"name": "estimate_sun_session", "arguments": {"lat": 1, "lon": 1, "minutes": 1}}Exemple de retour{"content": [{"type": "text", "text": "…"}]} - get_current_status≈ 391 tokens
Whether RIGHT NOW is a good moment for vitamin D synthesis at a location, using live Open-Meteo UV/cloud data when reachable (clear-sky model otherwise): current UV index, minutes needed now, and when today's window opens or closes.
Paramètres, retour & exemple (8)
Paramètresage· number · optionnel
Age in years (synthesis declines with age); omit for adult baselinelat· number · requis
Latitude in decimal degreeslon· number · requis
Longitude in decimal degreesskinType· integer · optionnel
Fitzpatrick skin type 1 (very fair) to 6 (very dark); default 3targetIU· number · optionnel
Vitamin D target per session in IU; default 1000timezone· string · optionnel
IANA timezone like 'Europe/Madrid'. Strongly recommended — without it all times are UTCelevationM· number · optionnel
Ground elevation in metres (UV rises ~8%/km); default sea levelexposedSkinFraction· number · optionnel
Skin exposed: 0.10 face+hands, 0.18 face+arms, 0.25 t-shirt+shorts (default), 0.40 swimsuit
Exemple d'appel{"name": "get_current_status", "arguments": {"lat": 1, "lon": 1}}Exemple de retour{"content": [{"type": "text", "text": "…"}]} - get_my_cities≈ 78 tokens
The signed-in user's current city and favorite cities with coordinates and timezones, ready to feed into the public tools. Requires OAuth (scope profile:read).
Paramètres, retour & exemple (0)
Exemple d'appel{"name": "get_my_cities", "arguments": {}}Exemple de retour{"content": [{"type": "text", "text": "…"}]} - get_my_history≈ 184 tokens
The signed-in user's sun history from the app's calendar: which recent days had viable sun, which they confirmed going outside, and their current streak. Covers the calendar days from `from` to `to`; records exist only for days the app was open, so a date missing from `records` means nothing was measured, not that the sun was insufficient. Requires OAuth (scope history:read). Renders as a calendar the user can tap to confirm a day.
Paramètres, retour & exemple (1)
Paramètresdays· integer · optionnel
How many recent days to return; default 30
Exemple d'appel{"name": "get_my_history", "arguments": {"days": 1}}Exemple de retour{"content": [{"type": "text", "text": "…"}]} - get_my_profile≈ 108 tokens
The signed-in user's saved Vitamin D profile: skin type, exposed-skin default, age, target IU and their current city. Requires connecting with OAuth (scope profile:read). Call this FIRST for any personal question, then pass its values to the public tools instead of asking the user.
Paramètres, retour & exemple (0)
Exemple d'appel{"name": "get_my_profile", "arguments": {}}Exemple de retour{"content": [{"type": "text", "text": "…"}]} - get_sun_forecast≈ 458 tokens
The NEXT FEW DAYS of vitamin D sun at a location, using the live Open-Meteo forecast: per day the peak UV, average cloud cover, the synthesis window and the minutes needed, plus bestDay. Use this for any question spanning several days — 'which day this week should I go out', 'will it be better tomorrow', 'when's my next chance' — instead of calling get_vitamin_d_window once per date.
Paramètres, retour & exemple (9)
Paramètresage· number · optionnel
Age in years (synthesis declines with age); omit for adult baselinelat· number · requis
Latitude in decimal degreeslon· number · requis
Longitude in decimal degreesdays· integer · optionnel
How many days ahead, 2 to 7; default 5skinType· integer · optionnel
Fitzpatrick skin type 1 (very fair) to 6 (very dark); default 3targetIU· number · optionnel
Vitamin D target per session in IU; default 1000timezone· string · optionnel
IANA timezone like 'Europe/Madrid'. Strongly recommended — without it all times are UTCelevationM· number · optionnel
Ground elevation in metres (UV rises ~8%/km); default sea levelexposedSkinFraction· number · optionnel
Skin exposed: 0.10 face+hands, 0.18 face+arms, 0.25 t-shirt+shorts (default), 0.40 swimsuit
Exemple d'appel{"name": "get_sun_forecast", "arguments": {"lat": 1, "lon": 1}}Exemple de retour{"content": [{"type": "text", "text": "…"}]} - get_sun_times≈ 238 tokens
Sunrise, sunset, solar noon, civil dawn/dusk, morning AND evening golden hour, and day length (with day-over-day trend) for a location and date. Handles midnight sun and polar night. Pure sun times — for vitamin D questions use the vitamin_d tools instead.
Paramètres, retour & exemple (4)
Paramètreslat· number · requis
Latitude in decimal degreeslon· number · requis
Longitude in decimal degreesdate· string · optionnel
Date as YYYY-MM-DD; defaults to todaytimezone· string · optionnel
IANA timezone like 'Europe/Madrid'. Strongly recommended — without it all times are UTC
Exemple d'appel{"name": "get_sun_times", "arguments": {"lat": 1, "lon": 1}}Exemple de retour{"content": [{"type": "text", "text": "…"}]} - get_vitamin_d_window≈ 530 tokens
The solar vitamin D synthesis window for ONE specific day at a location, for a personal profile: when UV is strong enough (index ≥ 3), the best hour, the clear-sky minutes needed to reach the target IU, and (with atTime) the minutes at the specific hour the user plans to go out. Returns synthesisPossible=false when the sun never gets high enough that day. Only for single-day questions — for months, seasons or 'when during the year', call get_vitamin_d_year instead of calling this once per date.
Paramètres, retour & exemple (10)
Paramètresage· number · optionnel
Age in years (synthesis declines with age); omit for adult baselinelat· number · requis
Latitude in decimal degreeslon· number · requis
Longitude in decimal degreesdate· string · optionnel
Date as YYYY-MM-DD; defaults to todayatTime· string · optionnel
Local HH:MM the user plans to go out — adds minutesNeeded and UV at that exact timeskinType· integer · optionnel
Fitzpatrick skin type 1 (very fair) to 6 (very dark); default 3targetIU· number · optionnel
Vitamin D target per session in IU; default 1000timezone· string · optionnel
IANA timezone like 'Europe/Madrid'. Strongly recommended — without it all times are UTCelevationM· number · optionnel
Ground elevation in metres (UV rises ~8%/km); default sea levelexposedSkinFraction· number · optionnel
Skin exposed: 0.10 face+hands, 0.18 face+arms, 0.25 t-shirt+shorts (default), 0.40 swimsuit
Exemple d'appel{"name": "get_vitamin_d_window", "arguments": {"lat": 1, "lon": 1}}Exemple de retour{"content": [{"type": "text", "text": "…"}]} - get_vitamin_d_year≈ 498 tokens
The WHOLE YEAR of solar vitamin D for a location in a single call. monthsWithSun lists every month with at least one viable day (season edges count as partial months, see byMonth[].viableDays); solidMonths lists months where most days work; exactViableSpan gives the exact season boundaries; summary carries per-year aggregates for comparing places. Use this for any question about months, seasons, winter/summer or 'when during the year can I…' — never probe individual dates with get_vitamin_d_window for that.
Paramètres, retour & exemple (9)
Paramètresage· number · optionnel
Age in years (synthesis declines with age); omit for adult baselinelat· number · requis
Latitude in decimal degreeslon· number · requis
Longitude in decimal degreesskinType· integer · optionnel
Fitzpatrick skin type 1 (very fair) to 6 (very dark); default 3targetIU· number · optionnel
Vitamin D target per session in IU; default 1000timezone· string · optionnel
IANA timezone like 'Europe/Madrid'. Strongly recommended — without it all times are UTCplaceName· string · optionnel
The place's name as the user said it — used to caption the chartelevationM· number · optionnel
Ground elevation in metres (UV rises ~8%/km); default sea levelexposedSkinFraction· number · optionnel
Skin exposed: 0.10 face+hands, 0.18 face+arms, 0.25 t-shirt+shorts (default), 0.40 swimsuit
Exemple d'appel{"name": "get_vitamin_d_year", "arguments": {"lat": 1, "lon": 1}}Exemple de retour{"content": [{"type": "text", "text": "…"}]} - log_sun_session≈ 218 tokens
Sets a day's answer in the signed-in user's history calendar. Three values: confirmed=true (went out, the default), confirmed=false (had usable sun but stayed in), confirmed=null (clear the answer). Defaults to today. Requires OAuth (scope history:write).
Paramètres, retour & exemple (3)
Paramètresdate· string · optionnel
Day to set, YYYY-MM-DD; defaults to todayminutes· number · optionnel
Minutes the user reports having spent in the sun (acknowledged, not stored)confirmed· boolean|null · optionnel
true (default) the user went out; false they had sun but stayed in; null clears the answer
Exemple d'appel{"name": "log_sun_session", "arguments": {"date": "texte", "minutes": 1, "confirmed": true}}Exemple de retour{"content": [{"type": "text", "text": "…"}]} - search_city≈ 124 tokens
Find a city in the app's database by name (any of the app's six languages works) and get its coordinates, IANA timezone and elevation — feed those into the other tools.
Paramètres, retour & exemple (1)
Paramètresquery· string · requis
City name, e.g. 'Madrid', 'London', 'Nueva York'
Exemple d'appel{"name": "search_city", "arguments": {"query": "texte"}}Exemple de retour{"content": [{"type": "text", "text": "…"}]} - set_history_location≈ 309 tokens
Records where the signed-in user was over a range of past days, so their history stops assuming. Use it when the user corrects a stretch — get_my_history marks inherited days with `locationAssumed`, and the history calendar offers those stretches for correction. Pass a cityId from search_city, or lat/lon. Changes only the location: whether they went outside that day is untouched. Requires OAuth (scope history:write).
Paramètres, retour & exemple (5)
Paramètresto· string · requis
Last day of the stretch, YYYY-MM-DD; same as `from` for one daylat· number · optionnel
Latitude, for a place not in the databaselon· number · optionnel
Longitude, paired with latfrom· string · requis
First day of the stretch, YYYY-MM-DDcityId· string · optionnel
City id from search_city, e.g. 'builtin:londres'
Exemple d'appel{"name": "set_history_location", "arguments": {"to": "texte", "from": "texte"}}Exemple de retour{"content": [{"type": "text", "text": "…"}]} - update_my_profile≈ 267 tokens
Save the signed-in user's synthesis profile — skin type, exposed-skin fraction, age and target IU — to their account, so the app and every later call use them. Requires OAuth (scope profile:write). Only these four values are writable; favourites, cities and history are not.
Paramètres, retour & exemple (4)
Paramètresage· ? · optionnel
Age in years, or null for the adult baselineskinType· integer · optionnel
Fitzpatrick skin type 1 (very fair) to 6 (very dark); default 3targetIU· number · optionnel
Vitamin D target per session in IU; default 1000exposedSkinFraction· number · optionnel
Skin exposed: 0.10 face+hands, 0.18 face+arms, 0.25 t-shirt+shorts (default), 0.40 swimsuit
Exemple d'appel{"name": "update_my_profile", "arguments": {"age": "texte", "skinType": 1, "targetIU": 1, "exposedSkinFraction": 1}}Exemple de retour{"content": [{"type": "text", "text": "…"}]}
C'est votre serveur ?
Revendiquez-le sur l'espace créateur (preuve GitHub, domaine ou npm) pour afficher le badge « propriétaire vérifié » et lancer un pentest comportemental à la demande afin d'obtenir le badge « Vérifié ».