Vitamind

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.

已驗證Streamable HTTP可網頁執行位置與生活資料與分析

概覽

AI 產生的概覽

遠端 MCP 伺服器,結合太陽幾何、即時 UV 資料與個人膚質設定,告訴助理何時何地曬太陽可合成維生素 D。

可以做什麼
  • 查詢城市並取得日出日落、黃金時段、日照長度與極晝極夜情況
  • 計算某日、整年或多日預報的維生素 D 合成時段
  • 並排比較二到五個地點的維生素 D 季節
  • 估算一次曬太陽的維生素 D 產出與曬傷時間,並查看目前狀況
  • 讀取與更新已登入使用者的設定、收藏城市與曬太陽歷史日曆
適用情境
適合使用者詢問何時外出曬太陽補充維生素 D、哪個城市或季節有可用陽光、依其膚質該曬多久,或想記錄並修正自己的曬太陽歷史時使用。
執行需求
遠端 streamable HTTP 端點,位於 getvitamind.app,無需本機安裝。個人相關工具需 OAuth 登入,作用域為 profile:read、profile:write 或 history:write。預報與目前狀態工具使用 Open-Meteo 即時資料,無法連線時改用晴空模型。
安裝前請注意
個人工具會讀寫帳戶資料:update_my_profile 修改已儲存的設定值,log_sun_session 設定某天的紀錄,set_history_location 記錄過去所在位置。位置與設定資料會傳送到該服務,UV 與雲量資料取自 Open-Meteo。結果僅為估算,不構成醫療建議。

安裝

在 SourceWeft 中

  1. 開啟 儀表板中的 Vitamind,將其新增到工作區。
  2. 為需要使用其工具的對話啟用該服務。

Web executable,透過 Streamable HTTP。 遠端服務在工作區中設定後即可從網頁執行環境執行。

交給代理程式安裝

把這段提示詞貼上到 Claude Code、Codex、Cursor 等代理程式,或 SourceWeft 對話中。代理程式會讀取該伺服器的安裝指南,先向你展示發布者、端點和登入方式,經你同意後再把它新增到你的客戶端。金鑰不會寫進任何命令。

閱讀 https://sourceweft.com/mcp/io.github.JaviMaligno%2Fvitamind/install.md,並按其中說明把這個 MCP 伺服器接入我的客戶端。修改任何設定之前,先告訴我它的發布者、端點和登入方式,等我確認。不要把 API 金鑰寫進命令或我會提交的檔案;問我金鑰應從哪裡取得。

檢視代理程式所依據的安裝指南

其他 MCP 客戶端

把它新增到你客戶端的 mcpServers 設定中。

{
  "mcpServers": {
    "vitamind": {
      "type": "http",
      "url": "https://getvitamind.app/api/mcp/mcp"
    }
  }
}

README

VitaminD Explorer

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

Stack

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).

Development

bash
npm installcp .env.example .env.local   # fill in valuesnpm run dev                  # localhost:3000

Quality gate (all must pass, enforced by CI on every push/PR):

bash
npm run lint && npm run typecheck && npm test && npm run build

Docs

  • 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.

License

MIT

來源:README.md,提交 6aedc0a

工具

15

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必填

get_sun_times

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必填datetimezone

get_vitamin_d_window

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.

輸入參數agelat必填lon必填dateatTimeskinTypetargetIUtimezoneelevationMexposedSkinFraction

get_vitamin_d_year

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.

輸入參數agelat必填lon必填skinTypetargetIUtimezoneplaceNameelevationMexposedSkinFraction

configure_sun_profile

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.

輸入參數agelatlonskinTypetargetIUtimezoneplaceNameexposedSkinFraction

get_sun_forecast

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.

輸入參數agelat必填lon必填daysskinTypetargetIUtimezoneelevationMexposedSkinFraction

compare_vitamin_d_year

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.

輸入參數ageplaces必填skinTypetargetIUexposedSkinFraction

get_current_status

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.

輸入參數agelat必填lon必填skinTypetargetIUtimezoneelevationMexposedSkinFraction

estimate_sun_session

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.

輸入參數agelat必填lon必填dateminutes必填skinTypetimezonestartTimeelevationMexposedSkinFraction

get_my_profile

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.

無需輸入參數。

get_my_cities

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).

無需輸入參數。

update_my_profile

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.

輸入參數ageskinTypetargetIUexposedSkinFraction

get_my_history

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.

輸入參數days

log_sun_session

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).

輸入參數dateminutesconfirmed

set_history_location

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).

輸入參數to必填latlonfrom必填cityId

版本歷史

1
  1. v1.0.0最新Sep 16, 2026

評分

已滿足適用檢查項的 90%

該評分衡量此收錄條目的完整程度,依據註冊中心條目、端點與公開來源計算得出。它不是對伺服器本身的評價,也不表示伺服器安全或目前可用:可連通性是帶日期的檢查結果,評分也不包含安裝量或使用者評價。

  • 近 30 天內可連通必需25 分
  • 已宣告認證方式必需10 分
  • 已列出工具必需15 分
  • 描述必需15 分
  • 圖示10 分
  • 文件15 分
  • 授權條款10 分

    請在儲存庫或註冊中心條目中宣告授權條款。