search_city
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.
query必填
io.github.JaviMaligno由 GitHub 账号 JaviMaligno 发布v1.0.0更新于 Oct 29, 2026
Know when the sun can make vitamin D where you are, for your skin type. Live UV data.
远程 MCP 服务器,结合太阳几何、实时 UV 数据和个人皮肤档案,告诉助手何时何地晒太阳可合成维生素 D。
Web executable,通过 Streamable HTTP。 远程服务在工作区中配置后即可从网页运行时运行。
把这段提示词粘贴到 Claude Code、Codex、Cursor 等智能体,或 SourceWeft 对话中。智能体会读取该服务器的安装指南,先向你展示发布者、端点和登录方式,经你同意后再把它添加到你的客户端。密钥不会写进任何命令。
阅读 https://sourceweft.com/mcp/io.github.JaviMaligno%2Fvitamind/install.md,并按其中说明把这个 MCP 服务器接入我的客户端。修改任何配置之前,先告诉我它的发布者、端点和登录方式,等我确认。不要把 API 密钥写进命令或我会提交的文件;问我密钥应从哪里获取。把它添加到你客户端的 mcpServers 配置中。
{
"mcpServers": {
"vitamind": {
"type": "http",
"url": "https://getvitamind.app/api/mcp/mcp"
}
}
}Solar vitamin D calculator PWA — know when and where you can synthesize vitamin D from sunlight, based on solar elevation, real-time UV index, skin type, body exposure and age.
Live: https://getvitamind.app
Next.js (App Router) · next-intl (es/en/fr/de/ru/lt) · Tailwind CSS v4 · D3 · Supabase (auth, profiles, city search, push subscriptions) · Web Push · Vercel (hosting + daily cron).
Quality gate (all must pass, enforced by CI on every push/PR):
AGENTS.md — architecture, deployment runbook, operational
gotchas and incident history (CLAUDE.md imports it).docs/PRODUCTION_READINESS.md —
production-readiness assessment and the practices that keep it that way.MIT
来源:README.md,提交 6aedc0a
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.
query必填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.
lat必填lon必填datetimezoneThe 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.
agelat必填lon必填dateatTimeskinTypetargetIUtimezoneelevationMexposedSkinFractionThe 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.
agelat必填lon必填skinTypetargetIUtimezoneplaceNameelevationMexposedSkinFractionShow 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.
agelatlonskinTypetargetIUtimezoneplaceNameexposedSkinFractionThe 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.
agelat必填lon必填daysskinTypetargetIUtimezoneelevationMexposedSkinFractionCompare 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.
ageplaces必填skinTypetargetIUexposedSkinFractionWhether 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.
agelat必填lon必填skinTypetargetIUtimezoneelevationMexposedSkinFractionEstimate 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.
agelat必填lon必填dateminutes必填skinTypetimezonestartTimeelevationMexposedSkinFractionThe 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.
无需输入参数。
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).
无需输入参数。
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.
ageskinTypetargetIUexposedSkinFractionThe 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.
daysSets 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).
dateminutesconfirmedRecords 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).
to必填latlonfrom必填cityId已满足适用检查项的 90%
该评分衡量此收录条目的完整程度,依据注册中心条目、端点与公开来源计算得出。它不是对服务器本身的评价,也不表示服务器安全或当前可用:可连通性是带日期的检查结果,评分也不包含安装量或用户评价。
请在仓库或注册中心条目中声明许可证。
npm installcp .env.example .env.local # fill in valuesnpm run dev # localhost:3000npm run lint && npm run typecheck && npm test && npm run build