Skip to main content
Glama

vitamind-mcp

Connect your AI assistant to Vitamin D Explorer — so it can answer, for your actual location and skin type, whether the sun can make vitamin D right now, how long you'd need, and which months of the year it's possible at all.

Generic advice says "get 15 minutes of sun". That answer is wrong most of the time: skin type I in London and skin type V in Madrid need completely different exposure, and above about 40° latitude there are months where synthesis is physically impossible no matter how long you stay out.

Try it

"I'm in Vilnius, skin type II. Can I make vitamin D today?"

"Which months of the year can I get vitamin D in London?"

"I was out 25 minutes at noon in Madrid, arms and legs bare — how much did I make?"

"When's golden hour in Lisbon on Friday?"

Related MCP server: CoastWise MCP

Install

Most clients can connect to the hosted server directly, with no install at all — see getvitamind.app/connect for per-client steps. Use this package when your client only launches local commands.

The local bridge requires Node.js 24.22.1 or newer.

{
  "mcpServers": {
    "vitamind": {
      "command": "npx",
      "args": ["-y", "vitamind-mcp"]
    }
  }
}

That's the whole configuration. No API key, no account.

Tools

Six public tools, no account needed:

Tool

Answers

search_city

Find a city and its coordinates, in any of the app's six languages

get_sun_times

Sunrise, sunset, solar noon, civil dawn/dusk, both golden hours, day length

get_vitamin_d_window

The synthesis window for one day: minutes needed, best hour, UV peak

get_vitamin_d_year

The whole year in one call: which months work, which don't

get_current_status

Whether right now is a good moment, from live UV and cloud data

estimate_sun_session

What a session produced — IU made, and minutes until burning

Four more read your saved profile, favourite cities and sun history if you sign in (get_my_profile, get_my_cities, get_my_history, log_sun_session). Those need OAuth, which this bridge does not implement — connect the account endpoint directly, or:

npx mcp-remote https://getvitamind.app/api/mcp-auth/mcp

What's behind the numbers

Not a lookup table. Every answer is computed from:

  • Solar geometry — NOAA declination and elevation formulas.

  • UV model — Madronich (2007) clear-sky UVI with van Heuklon ozone by latitude, longitude and season, plus an altitude correction (~8% per km — enough to change which months work for a city like Bogotá).

  • Vitamin D synthesis — Holick & Dowdy (2010), with MED by Fitzpatrick skin type (I-VI) and the Holick (1989) age factor. Sessions saturate: past roughly ⅓ MED you gain little and burn risk rises, and the tools say so.

  • Live weather — Open-Meteo UV index and cloud cover.

Threshold for any synthesis at all: UV index ≥ 3. Below that the answer is honestly "not today, consider supplementing" rather than a smaller number.

Configuration

--url <endpoint>

Endpoint to bridge to. Default https://getvitamind.app/api/mcp/mcp

VITAMIND_MCP_URL

Same, as an environment variable

How it works

A stdio↔HTTP relay, and nothing more. It forwards JSON-RPC messages verbatim between your client and the hosted server, so new tools appear without a release here. All the vitamin D logic lives in the hosted server — deliberately, since a second copy of the model in this package would drift from the app that people actually use.

Not medical advice

Estimates for healthy skin under clear-sky or forecast conditions. They ignore aerosols, ground reflectance, sunscreen and individual variation, and they are not a substitute for advice from a professional. Do not use them to plan an intentional burn.

Development checks

Use npm ci --ignore-scripts to install the committed dependency lock. npm test spawns the CLI with a synthetic upstream through mocked fetch; it opens no TCP listener and does not contact the hosted service. CI runs these offline contracts on Ready PRs; drafts run parse and CLI checks.

npm run test:live contacts production. It is available only as an explicit local command or the live_handshake workflow-dispatch opt-in, never on PR events. The offline checks do not establish production availability or real UV results.

MIT

Available Tools

10 tools
estimate_sun_sessionA

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.

Inputs: lat (required), lon (required), minutes (required), age, +6 more.

get_current_statusA

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.

Inputs: lat (required), lon (required), age, skinType, +4 more.

get_my_citiesA

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

Inputs: no named parameters.

get_my_historyA

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. Requires OAuth (scope history:read).

Inputs: days.

get_my_profileA

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.

Inputs: no named parameters.

get_sun_timesA

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.

Inputs: lat (required), lon (required), date, timezone.

get_vitamin_d_windowA

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.

Inputs: lat (required), lon (required), age, date, +6 more.

get_vitamin_d_yearA

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.

Inputs: lat (required), lon (required), age, skinType, +4 more.

log_sun_sessionA

Marks a day as sun-confirmed in the signed-in user's history calendar — use when the user says they went (or will have gone) outside for their sun. Defaults to today. Requires OAuth (scope history:write).

Inputs: date, minutes.

search_cityA

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.

Inputs: query (required).

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections.

Loading tool schema changelog…

    TDQS

    A4.3/5.0

    Scored across 10 tools

    Disambiguation5/5

    Each tool targets a distinct function: city lookup, sun times, vitamin D windows (daily/annual), current status, session estimation, and user profile/history. Descriptions explicitly differentiate overlapping areas (e.g., 'for vitamin D questions use the vitamin_d tools instead'). No ambiguity.

    Naming Consistency5/5

    All tool names follow a consistent verb_noun pattern using snake_case: get_my_cities, search_city, get_sun_times, get_vitamin_d_window, get_vitamin_d_year, get_current_status, estimate_sun_session, get_my_profile, get_my_history, log_sun_session. Predictable and clear.

    Tool Count5/5

    10 tools is well-suited for the domain. The set covers location setup, sun data, vitamin D planning across timescales, current status, session estimation, and user management. No unnecessary tools, and the scope is focused.

    Completeness4/5

    The tool surface is comprehensive for vitamin D assistance: city search, sun times, daily/yearly vitamin D windows, current status, session estimation, and user profile/history. Minor gaps exist (no profile update or data deletion), but core workflows are covered.

    Maintenance

    ActivityNo data
    ResponsivenessOutdated data

    Related MCP Connectors

    Related MCP Servers

    • F
      license
      Not graded
      quality
      B
      maintenance
      Enables users to calculate chronotype-aligned sleep schedules, optimize 90-minute ultradian cycles, determine caffeine cutoffs, and plan light exposure for better recovery and circadian alignment.
      7
      -
    • A
      license
      A
      quality
      B
      maintenance
      Enables users to check whether a beach suits a beach day or a surf session today or up to six days ahead, using Open-Meteo weather and marine forecasts scored by deterministic, documented rules. It exposes tools for raw hourly forecast data, suitability scores and verdicts by activity and skill level, and finding the best multi-hour window within a day.
      4
      MIT
    • A
      license
      Not graded
      quality
      Not graded
      maintenance
      Enables users to model cumulative sleep deficits, estimate cognitive impairment using Van Dongen PVT kinetics, audit social jetlag, and generate circadian-safe gradual sleep repayment schedules.
      MIT