Vitamin D Explorer
Server Details
Hosted MCP server for solar vitamin D. Six public tools, no account needed: find a city, sun times and golden hour, the synthesis window for a day, the whole year of viable months at a latitude, whether right now is a good moment from live UV, and what a sun session produced. Four more read a signed-in user profile, cities and sun history over OAuth 2.1. Built on NOAA solar geometry, a Madronich clear-sky UV model with ozone, MED by Fitzpatrick skin type, and live Open-Meteo data.
- Status
- Healthy
- Uptime
- 99.4% over 79 days
- Last Tested
- Transport
- Streamable HTTP · MCP 2025-11-25
- URL
- ChatGPT
- –
- Claude
- –
TDQS
Scored across 15 tools
The descriptions actively partition the tool set by time horizon (current status, next-few-days forecast, single-day window, whole-year, multi-city compare), and each entry explicitly tells the agent when NOT to use it. Potentially confusable pairs like get_vitamin_d_year vs compare_vitamin_d_year and configure_sun_profile vs update_my_profile are each framed by distinct intent (interactive form vs persisted save; one place vs many). estimate_sun_session is also separated from get_vitamin_d_window by 'how much did I get in N minutes' vs 'when is the window'.
Every tool follows snake_case verb_noun: get_/set_/update_/configure_/search_/compare_/estimate_/log_. The get_my_* prefix cleanly marks OAuth-scoped personal tools, while get_vitamin_d_*/get_sun_* mark public computation tools — a consistent and informative convention.
15 tools sits at the top of the well-scoped band, and each one earns its place: a public solar-analysis family, a small personal-data CRUD family, and city lookup. The time-horizon tools exist specifically to avoid per-date probing, so they add efficiency rather than redundancy.
Coverage is strong: city search, profile read/write, interactive profile config, history read/write and location correction, plus current/forecast/daily/yearly/comparative solar analysis and session estimation. Minor gaps exist around favorites management (get_my_cities returns favorites but no tool adds or removes one) and reverse geocoding from coordinates, both workable around.
Available Tools
15 toolscompare_vitamin_d_yearAInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
| age | No | Age in years (synthesis declines with age); omit for adult baseline | |
| places | Yes | The places to compare, 2 to 5 | |
| skinType | No | Fitzpatrick skin type 1 (very fair) to 6 (very dark); default 3 | |
| targetIU | No | Vitamin D target per session in IU; default 1000 | |
| exposedSkinFraction | No | Skin exposed: 0.10 face+hands, 0.18 face+arms, 0.25 t-shirt+shorts (default), 0.40 swimsuit |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden and does disclose the return contents: months with sun, exact season span, viable days per year, and a rankedByViableDays ordering, for war-free planning. It does not state that this is a pure read/compute with no side effects or persistence, which is the one meaningful gap.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three sentences, front-loaded with the core capability, then the return shape, then the sibling routing. The quoted example question ('Madrid vs Berlin vs Oslo...') is illustrative but slightly decorative rather than informative.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
No output schema exists, yet the description sketches the response shape (per-place months, season span, viable days, ranking), which is the critical missing structured info. Combined with full param coverage this is nearly complete; only side-effect/read-only semantics are unstated.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so age, skinType, targetIU, exposedSkinFraction and place fields are already fully documented in the schema. The description only restates the 2-to-5 places constraint, adding no syntax or defaults beyond structured data. Baseline 3.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (compare) and resource (vitamin D year) with an explicit cardinality bound (2 to 5 places) and an output-oriented framing ('side by side in ONE call'). It is clearly distinguishable from the sibling get_vitamin_d_year, which it names.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly states when to prefer this tool: 'Use this instead of calling get_vitamin_d_year once per city'. It also gives the exclusivity reason ('only this tool can draw the years on a shared axis'), which tells the agent when the sibling is insufficient.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
configure_sun_profileAInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
| age | No | Age in years (synthesis declines with age); omit for adult baseline | |
| lat | No | Latitude of the place being discussed, so the live estimate uses today's real UV there | |
| lon | No | Longitude, paired with lat | |
| skinType | No | Fitzpatrick skin type 1 (very fair) to 6 (very dark); default 3 | |
| targetIU | No | Vitamin D target per session in IU; default 1000 | |
| timezone | No | IANA timezone like 'Europe/Madrid'. Strongly recommended — without it all times are UTC | |
| placeName | No | How to label that place in the widget | |
| exposedSkinFraction | No | Skin exposed: 0.10 face+hands, 0.18 face+arms, 0.25 t-shirt+shorts (default), 0.40 swimsuit |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the burden and does disclose key behavior: this is a UI form, values update live, results come back into conversation, and nothing is auto-available to other tools unless passed explicitly. It does not say whether selections are persisted to a profile, or what happens on cancel/dismiss.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three tight sentences (~65 words), front-loaded with the action and its payload, then the trigger conditions, then the downstream hand-off. Nothing is redundant with the title or schema.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For an eight-param, fully documented, zero-annotation tool with no output schema, the description covers purpose, triggers, and result flow adequately. The remaining gaps — persistence semantics and optional pre-fill behavior — are real but secondary for a form-display tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the baseline is 3, and the schema already explains ranges, units, and defaults well. The description adds nothing about the four non-collected parameters (lat, lon, timezone, placeName) used for the live estimate, and its 'four values' framing understates an eight-parameter schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific action (show an interactive form) and enumerates the four values it collects, so the agent knows what it gets. It does not differentiate itself from the similar-sounding siblings get_my_profile / update_my_profile, leaving the persisted-profile vs. transient-form distinction implicit.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives three concrete triggers — values unknown, user wants to change them, or prefer this over asking one at a time in conversation — plus an explicit follow-up ('pass those values explicitly to the other tools afterwards'). No exclusions or contrast with update_my_profile, which is the one sibling that could plausibly be chosen instead.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
estimate_sun_sessionAInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
| age | No | Age in years (synthesis declines with age); omit for adult baseline | |
| lat | Yes | Latitude in decimal degrees | |
| lon | Yes | Longitude in decimal degrees | |
| date | No | Date as YYYY-MM-DD; defaults to today | |
| minutes | Yes | Session length in minutes | |
| skinType | No | Fitzpatrick skin type 1 (very fair) to 6 (very dark); default 3 | |
| timezone | No | IANA timezone like 'Europe/Madrid'. Strongly recommended — without it all times are UTC | |
| startTime | No | Local HH:MM the session starts; defaults to the day's best hour | |
| elevationM | No | Ground elevation in metres (UV rises ~8%/km); default sea level | |
| exposedSkinFraction | No | Skin exposed: 0.10 face+hands, 0.18 face+arms, 0.25 t-shirt+shorts (default), 0.40 swimsuit |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden and does disclose the return payload (IU with physiological cap, average UV, clear-sky minutes-to-sunburn) and the defaulting behaviour for start time ('the day's best hour'). The 'clear-sky' qualifier is valuable behavioural context about result fidelity. It never states explicitly that the call is read-only/does not persist anything, which is the remaining gap for a no-annotation tool.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three sentences, front-loaded with the user question it answers, then inputs, then outputs. The quoted-question framing is slightly verbose but earns its place by mapping natural language intents to the tool; no filler sentences.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 10-parameter tool with no output schema, the description usefully enumerates the return fields and notes the two key defaulting behaviours, which is what an agent needs to call it and interpret results. It leaves the timezone/UTC pitfall entirely to the schema, so it is strong but not exhaustive.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so every parameter is already documented with units, ranges, and defaults. The description only restates two of them (start time default, session minutes) and adds no syntax or interpretation beyond the schema, so the baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (estimate) and resource (sun session outcome) and enumerates exactly what is computed: vitamin D IU, average UV, and clear-sky minutes-to-sunburn. The framing distinguishes it from siblings that log a session (log_sun_session) or report a window (get_vitamin_d_window) without naming them, but the output set makes the role unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly routes the two user intents: 'how much did I get / can I get in X minutes' and 'how long without burning'. It does not name when-not-to-use or point at specific siblings such as log_sun_session for recording an actual session, so it stops short of full alternative routing.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_current_statusAInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
| age | No | Age in years (synthesis declines with age); omit for adult baseline | |
| lat | Yes | Latitude in decimal degrees | |
| lon | Yes | Longitude in decimal degrees | |
| skinType | No | Fitzpatrick skin type 1 (very fair) to 6 (very dark); default 3 | |
| targetIU | No | Vitamin D target per session in IU; default 1000 | |
| timezone | No | IANA timezone like 'Europe/Madrid'. Strongly recommended — without it all times are UTC | |
| elevationM | No | Ground elevation in metres (UV rises ~8%/km); default sea level | |
| exposedSkinFraction | No | Skin exposed: 0.10 face+hands, 0.18 face+arms, 0.25 t-shirt+shorts (default), 0.40 swimsuit |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the disclosure burden and does well on the important point: it names the live Open-Meteo UV/cloud data source and the clear-sky model fallback when unreachable, which is real behavioral context an agent cannot get from the schema. It omits latency, failure/caching behavior, and any note that this is a non-mutating computation, which keeps it short of a 5.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single front-loaded sentence that answers what the tool does, what data backs it, what it falls back to, and what it returns, with no filler. The parenthetical fallback note is terse and load-bearing.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For an 8-parameter computational tool with full schema coverage and no output schema, the description supplies the return-value summary (UV index, minutes needed, window times) and data-source caveat, which is enough to call it correctly. A slightly fuller statement of what an 'unreachable' response looks like would close the remaining gap.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% and all 8 parameters are richly documented with ranges and defaults, so the schema already does the parameter work. The description adds nothing parameter-specific beyond 'at a location', meeting the baseline 3 for high-coverage schemas.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb+resource+scope: whether RIGHT NOW is a good moment for vitamin D synthesis, plus what it returns (current UV index, minutes needed, window open/close). The temporal 'RIGHT NOW' framing implicitly separates it from forecast/window siblings like get_sun_forecast and get_vitamin_d_window, but no sibling is named, so an agent must infer the boundary.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage is implied by the 'right now' phrasing (use this for present conditions, other tools for future windows or yearly comparisons), but the description never states when to pick this over estimate_sun_session or get_vitamin_d_window. No explicit alternatives or exclusions are given.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_my_citiesAInspect
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).
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden, and it does disclose the key operational fact an agent needs: OAuth with scope profile:read. Read-only semantics are only implied by "get". Nothing is said about error behavior (e.g., unauthenticated calls), rate limits, or what the payload looks like.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single front-loaded sentence that leads with what is returned and closes with the auth prerequisite. No filler, though "ready to feed into the public tools" is slightly marketing-flavored rather than operational.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
No output schema and no annotations, so the description must explain the return value; it only loosely characterizes it (cities with coordinates and timezones) without indicating structure (per-city array? single current city plus list?), or behavior for users with no saved cities. Adequate to attempt a call, but incomplete for interpreting the result.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool takes zero parameters, so there is nothing to disambiguate and the baseline is 4. The description correctly implies no inputs are needed.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource (get the signed-in user's current + favorite cities) and pre-empts confusion with search_city by scoping it to the authenticated user's own data. It stops short of naming the sibling it contrasts with, so the differentiation is implied rather than explicit.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
"Ready to feed into the public tools" hints at a follow-up workflow (compare_vitamin_d_year, get_sun_times, etc.), which is useful implied usage. But there is no explicit when/when-not guidance versus get_my_profile or search_city, and no statement about what happens when the user has no favorites.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_my_historyAInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
| days | No | How many recent days to return; default 30 |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the burden well: it discloses the OAuth scope history:read and, importantly, the negative semantics that a date missing from records means nothing was measured rather than insufficient sun — a distinction that prevents a real misinterpretation. The trailing sentence about rendering a tappable calendar is ambiguous about whether tapping writes data, which keeps it from a 5.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded and dense with genuinely useful content — the payload summary, the missing-record caveat, and the auth scope all earn their place. However, the `from`/`to` clause is wasted (and wrong) text that forces the agent to reconcile the description against the schema.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a single-parameter read tool with no output schema, the description covers most of what an agent needs: scope, auth, and the interpretation of absent records. The gap is that it never explains the actual `days` window semantics (how far back, what the 365 cap means for the response), substituting a nonexistent date range instead.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The description references `from` and `to` date boundaries, but the schema exposes a single `days` integer with a default of 30 and a 1-365 range — no `from`/`to` parameters exist. This actively misleads the agent about the input shape. The schema's 100% coverage of `days` prevents a lower score, but the invented parameters are a substantive defect.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific resource and owner: the signed-in user's sun history from the app calendar, plus the three things it contains (viable days, confirmed days, current streak). That is distinguishable from siblings such as get_vitamin_d_year or get_current_status without opening either schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage is implied by scope ('the signed-in user's... history') rather than stated: there is no explicit 'use this when X, use sibling Y when Z', even though compare_vitamin_d_year and get_current_status sit adjacent. The OAuth scope note is a useful precondition but not routing guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_my_profileAInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations exist, so the description carries the full burden, and it does most of it: it discloses the OAuth requirement and the exact scope (profile:read), and lists the returned fields in lieu of a missing output schema. It does not state what happens when no profile is saved or when the token lacks the scope, which is the remaining gap.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, front-loaded with purpose and scope, then the auth prerequisite, then the usage rule. Every clause carries information an agent needs and nothing is repeated from structured fields.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no annotations and no output schema, the description compensates well by naming the fields returned and the auth scope. Only failure/empty-profile behavior is unaddressed, which is a minor omission for a zero-parameter read.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Zero parameters, so there is nothing to disambiguate; the description correctly spends no words on inputs and instead describes the resource returned. Baseline 4 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb+resource ('The signed-in user's saved Vitamin D profile') and enumerates exactly what is returned: skin type, exposed-skin default, age, target IU, current city. This clearly distinguishes it from update_my_profile, get_my_cities, and get_my_history.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly says 'Call this FIRST for any personal question, then pass its values to the public tools instead of asking the user' – giving both ordering guidance and the alternative behavior (re-asking the user). No inference required.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_sun_forecastAInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
| age | No | Age in years (synthesis declines with age); omit for adult baseline | |
| lat | Yes | Latitude in decimal degrees | |
| lon | Yes | Longitude in decimal degrees | |
| days | No | How many days ahead, 2 to 7; default 5 | |
| skinType | No | Fitzpatrick skin type 1 (very fair) to 6 (very dark); default 3 | |
| targetIU | No | Vitamin D target per session in IU; default 1000 | |
| timezone | No | IANA timezone like 'Europe/Madrid'. Strongly recommended — without it all times are UTC | |
| elevationM | No | Ground elevation in metres (UV rises ~8%/km); default sea level | |
| exposedSkinFraction | No | Skin exposed: 0.10 face+hands, 0.18 face+arms, 0.25 t-shirt+shorts (default), 0.40 swimsuit |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden and does disclose the data source (live Open-Meteo forecast), the per-day result shape, and the presence of a bestDay aggregate. It does not cover failure modes (polar night, forecast outage, null bestDay) or confirm read-only/network-dependency behavior, leaving a moderate gap for a 9-param external-data tool.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
One front-loaded paragraph that leads with what it returns and ends with the routing rule. The three quoted example questions are slightly verbose but earn their place by disambiguating from the single-date sibling.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description usefully enumerates the return fields and the bestDay aggregate, and the 100%-covered input schema handles parameters. It is complete enough to invoke correctly, though error/edge-case behavior for a live external forecast is unaddressed.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% and the schema is unusually rich, documenting defaults and semantics for age, skinType, targetIU, days, elevationM, exposedSkinFraction, and timezone. The description adds no parameter-level detail beyond 'at a location', so the baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb+resource (multi-day vitamin D sun forecast via live Open-Meteo) and enumerates the per-day outputs: peak UV, average cloud cover, synthesis window, minutes needed, and bestDay. It explicitly distinguishes itself from the sibling get_vitamin_d_window, so an agent can route correctly without opening schemas.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives explicit when-to-use triggers ('which day this week should I go out', 'will it be better tomorrow', 'when's my next chance') and an explicit anti-pattern: don't call get_vitamin_d_window once per date. The alternative and the condition that selects it are both named.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_sun_timesAInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
| lat | Yes | Latitude in decimal degrees | |
| lon | Yes | Longitude in decimal degrees | |
| date | No | Date as YYYY-MM-DD; defaults to today | |
| timezone | No | IANA timezone like 'Europe/Madrid'. Strongly recommended — without it all times are UTC |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden and usefully discloses that the tool handles midnight sun and polar night. It also describes the returned sun-time concepts, though it does not explicitly state read-only behavior or response formatting.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is compact and front-loads the returned values before adding edge-case handling and the alternative-tool note. Every sentence contributes useful selection context.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The definition is nearly complete for a read-only sun-times tool with full schema coverage and no output schema: it lists outputs, edge cases, and a key alternative. The main omission is that the description itself does not mention the important timezone recommendation, though the schema does.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so lat, lon, date, and timezone are already documented in the schema. The description adds only the high-level notion of 'location and date' and does not add syntax or timezone guidance beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description names the exact resource and outputs: sunrise, sunset, solar noon, civil dawn/dusk, golden hour, and day length for a location and date. It also distinguishes the tool from vitamin D-oriented siblings, so an agent can identify its purpose without opening the schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It explicitly says to use the vitamin_d tools for vitamin D questions, which is a clear usage exclusion. However, it does not distinguish this tool from nearby sun-related siblings such as get_sun_forecast or estimate_sun_session.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_vitamin_d_windowAInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
| age | No | Age in years (synthesis declines with age); omit for adult baseline | |
| lat | Yes | Latitude in decimal degrees | |
| lon | Yes | Longitude in decimal degrees | |
| date | No | Date as YYYY-MM-DD; defaults to today | |
| atTime | No | Local HH:MM the user plans to go out — adds minutesNeeded and UV at that exact time | |
| skinType | No | Fitzpatrick skin type 1 (very fair) to 6 (very dark); default 3 | |
| targetIU | No | Vitamin D target per session in IU; default 1000 | |
| timezone | No | IANA timezone like 'Europe/Madrid'. Strongly recommended — without it all times are UTC | |
| elevationM | No | Ground elevation in metres (UV rises ~8%/km); default sea level | |
| exposedSkinFraction | No | Skin exposed: 0.10 face+hands, 0.18 face+arms, 0.25 t-shirt+shorts (default), 0.40 swimsuit |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden and does disclose important behavior: what the tool returns, the synthesisPossible=false edge case when the sun never gets high enough, and what atTime adds. It does not explicitly state that the tool is read-only or side-effect-free, though that is strongly implied by the get-style output description.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is front-loaded with purpose and uses three efficient sentences with no filler. The first sentence is dense and carries several concepts at once, but every sentence earns its place by covering purpose, edge-case behavior, and sibling routing.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given ten parameters, no annotations, and no output schema, the description gives enough completeness: it explains the core return semantics, the false edge case, and the usage boundary against the year-scale sibling. The input schema already covers parameter defaults and constraints at 100%.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already documents all ten parameters thoroughly. The description reinforces atTime and target IU but largely duplicates schema semantics rather than adding new meaning, so the baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a precise verb-and-resource purpose: the solar vitamin D synthesis window for one specific day at a location for a personal profile. It enumerates the key outputs (UV threshold, best hour, clear-sky minutes, atTime-specific minutes) and distinguishes this single-day tool from the year-scale sibling by name.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It gives explicit when-to-use guidance: single-day questions only. It also names the alternative (get_vitamin_d_year) and the exact condition that should route the agent there, including the anti-pattern of calling this once per date.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_vitamin_d_yearAInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
| age | No | Age in years (synthesis declines with age); omit for adult baseline | |
| lat | Yes | Latitude in decimal degrees | |
| lon | Yes | Longitude in decimal degrees | |
| skinType | No | Fitzpatrick skin type 1 (very fair) to 6 (very dark); default 3 | |
| targetIU | No | Vitamin D target per session in IU; default 1000 | |
| timezone | No | IANA timezone like 'Europe/Madrid'. Strongly recommended — without it all times are UTC | |
| placeName | No | The place's name as the user said it — used to caption the chart | |
| elevationM | No | Ground elevation in metres (UV rises ~8%/km); default sea level | |
| exposedSkinFraction | No | Skin exposed: 0.10 face+hands, 0.18 face+arms, 0.25 t-shirt+shorts (default), 0.40 swimsuit |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations exist, so the description carries the full burden; it partly does so by disclosing the result shape (monthsWithSun, solidMonths, exactViableSpan, summary) and the semantics of partial months via byMonth[].viableDays. It stops short of cost/latency or precision caveats and says nothing about how optional profile parameters change results.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the one-call whole-year scope, then two sentences that each earn their place: one defines the output fields, one routes usage. No filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With nine parameters, no annotations and no output schema, the description compensates by explaining the four key return fields and their edge semantics. It remains silent on what the optional physiological parameters change, which is the main remaining gap.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already explains all nine parameters, including defaults for skinType, targetIU and exposedSkinFraction. The description adds no parameter-level meaning, so the baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb+resource+scope: 'The WHOLE YEAR of solar vitamin D for a location in a single call.' It also explicitly distinguishes itself from the sibling get_vitamin_d_window, so an agent can separate the two without opening either schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives an explicit when-to-use list (months, seasons, winter/summer, 'when during the year can I…') and an explicit when-not ('never probe individual dates with get_vitamin_d_window for that'), naming the alternative and the condition that selects it.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
log_sun_sessionAInspect
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).
| Name | Required | Description | Default |
|---|---|---|---|
| date | No | Day to set, YYYY-MM-DD; defaults to today | |
| minutes | No | Minutes the user reports having spent in the sun (acknowledged, not stored) | |
| confirmed | No | true (default) the user went out; false they had sun but stayed in; null clears the answer |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the burden and does well: it discloses that this mutates the user's history calendar, requires OAuth with scope history:write, and defaults the date to today. It stops short of saying whether an existing answer is overwritten, whether the call is idempotent, or what is returned.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three short sentences with zero filler, front-loading the action and then the value semantics and auth requirement. Every sentence carries distinct information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a zero-required-parameter mutation with no output schema, the description covers action, value states, date default, and auth scope — enough to invoke correctly. Only the overwrite/return behavior is left unstated, which is a minor gap.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so all three parameters are already documented, including the tri-state confirmed value and the today default. The description restates those semantics faithfully but adds no format or edge-case detail beyond the schema, so the baseline of 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a concrete verb and resource: 'Sets a day's answer in the signed-in user's history calendar', which is clearly distinguishable from read-oriented siblings like get_my_history or get_current_status. It does not name an alternative sibling explicitly, so it falls short of a 5.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The three-value breakdown (went out / had sun but stayed in / clear the answer) effectively guides which value to send, which is implied usage guidance. However, there is no statement about when to prefer this tool over siblings such as estimate_sun_session or set_history_location, nor any exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
search_cityAInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
| query | Yes | City name, e.g. 'Madrid', 'London', 'Nueva York' |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations, so the description carries the full burden. It usefully discloses the returned fields and that all six app languages are accepted, but says nothing about no-match behavior, fuzzy vs exact matching, result limits, or whether multiple matches are returned.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single sentence: the lookup action, the returned data, and the downstream use are all front-loaded with no filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description appropriately enumerates return values, and one required string parameter needs little more. The main gap is failure/ambiguity behavior on unmatched or duplicate city names.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, giving a baseline of 3, and the description adds meaning beyond it by stating the query accepts any of the app's six languages. It does not discuss the 80-character cap or matching rules, which the schema also omits.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Find a city ... by name') plus the exact payload it yields (coordinates, IANA timezone, elevation), which no sibling tool provides. An agent can tell immediately that this is the lookup-prerequisite tool in the set.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
'feed those into the other tools' clearly frames this as the prerequisite step before forecast/sun-times/profile calls. It stops short of naming which sibling to call next or stating when to skip it (e.g. when a city id is already known).
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
set_history_locationAInspect
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).
| Name | Required | Description | Default |
|---|---|---|---|
| to | Yes | Last day of the stretch, YYYY-MM-DD; same as `from` for one day | |
| lat | No | Latitude, for a place not in the database | |
| lon | No | Longitude, paired with lat | |
| from | Yes | First day of the stretch, YYYY-MM-DD | |
| cityId | No | City id from search_city, e.g. 'builtin:londres' |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the burden well: it discloses an OAuth requirement and scope (history:write), that this is a write to past-dated data, and that only location is changed while the 'went outside' flag is untouched. It omits whether a correction can be re-applied or undone and what happens for days outside the history range, so not a full 5.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Four sentences, front-loaded with the effect and followed by the trigger, the input options, and the auth constraint — no filler. It is slightly dense with inline tool/field references, but each sentence contributes.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 5-parameter past-dated mutation with no annotations and no output schema, the description covers auth scope, side-effect boundaries, and how to source the cityId. It leaves return/confirmation behavior and edge cases for out-of-range dates unstated, a minor gap since no output schema exists.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the baseline is 3; the description adds real meaning by expressing the either/or choice between a cityId from search_city and a lat/lon pair, a mutual-exclusivity relationship the flat schema does not encode. It does not spell out error behavior when both or neither are supplied.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Records where the signed-in user was over a range of past days') and names the observable it resolves ('their history stops assuming'). It is clearly distinguishable from get_my_history, which it references as the tool that exposes the assumed days.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives an explicit trigger — the user corrects a stretch — and ties it to a concrete signal (`locationAssumed` from get_my_history) plus a UI affordance (history calendar correction stretches). It also names the prerequisite lookup tool search_city for obtaining a cityId.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
update_my_profileAInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
| age | No | Age in years, or null for the adult baseline | |
| skinType | No | Fitzpatrick skin type 1 (very fair) to 6 (very dark); default 3 | |
| targetIU | No | Vitamin D target per session in IU; default 1000 | |
| exposedSkinFraction | No | Skin exposed: 0.10 face+hands, 0.18 face+arms, 0.25 t-shirt+shorts (default), 0.40 swimsuit |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description usefully discloses the OAuth scope (profile:write) and the exact write boundary (four values only, favourites/cities/history untouched). However, for a partial-update tool where all four params are optional, it never says whether an omitted field preserves the stored value or resets to the schema default — a material ambiguity for a mutation.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two tight sentences: the action and its persistence effect come first, then the auth requirement, then the write-boundary caveat. No filler and nothing buried.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Auth and write scope are covered and no output schema is needed, but the description omits update semantics (overwrite vs. merge, what happens to an existing value when a field is null) and any indication of what the call returns, which matters for a mutation with zero annotations.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% and each parameter already carries ranges, defaults and even the 0.10/0.18/0.25/0.40 skin-fraction mapping, so the description only restates field names. Baseline 3 applies; it adds no semantics beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Specific verb+resource ('Save the ... synthesis profile ... to their account') with the exact writable fields enumerated, making it unmistakably the write counterpart to get_my_profile and distinguishable from configure_sun_profile or set_history_location.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It states the downstream effect ('so the app and every later call use them') and explicitly excludes favourites, cities and history, which routes those needs to siblings. It stops short of naming the sibling tool to use for those excluded concerns, only ruling them out.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
15 tool updates
- Changed
compare_vitamin_d_year3 fields changed- changed
Input schema / $schemaPrevious value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema" - removed
Input schema / additionalPropertiesRemoved value: -false - removed
Input schema / properties / places / items / additionalPropertiesRemoved value: -false
- Changed
configure_sun_profile2 fields changed- changed
Input schema / $schemaPrevious value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema" - removed
Input schema / additionalPropertiesRemoved value: -false
- Changed
estimate_sun_session2 fields changed- changed
Input schema / $schemaPrevious value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema" - removed
Input schema / additionalPropertiesRemoved value: -false
- Changed
get_current_status2 fields changed- changed
Input schema / $schemaPrevious value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema" - removed
Input schema / additionalPropertiesRemoved value: -false
- Changed
get_my_cities1 field changed- changed
Input schema / $schemaPrevious value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
- Changed
get_my_history2 fields changed- changed
Input schema / $schemaPrevious value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema" - removed
Input schema / additionalPropertiesRemoved value: -false
- Changed
get_my_profile1 field changed- changed
Input schema / $schemaPrevious value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
- Changed
get_sun_forecast2 fields changed- changed
Input schema / $schemaPrevious value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema" - removed
Input schema / additionalPropertiesRemoved value: -false
- Changed
get_sun_times2 fields changed- changed
Input schema / $schemaPrevious value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema" - removed
Input schema / additionalPropertiesRemoved value: -false
- Changed
get_vitamin_d_window2 fields changed- changed
Input schema / $schemaPrevious value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema" - removed
Input schema / additionalPropertiesRemoved value: -false
- Changed
get_vitamin_d_year2 fields changed- changed
Input schema / $schemaPrevious value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema" - removed
Input schema / additionalPropertiesRemoved value: -false
- Changed
log_sun_session2 fields changed- changed
Input schema / $schemaPrevious value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema" - removed
Input schema / additionalPropertiesRemoved value: -false
- Changed
search_city2 fields changed- changed
Input schema / $schemaPrevious value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema" - removed
Input schema / additionalPropertiesRemoved value: -false
- Changed
set_history_location2 fields changed- changed
Input schema / $schemaPrevious value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema" - removed
Input schema / additionalPropertiesRemoved value: -false
- Changed
update_my_profile2 fields changed- changed
Input schema / $schemaPrevious value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema" - removed
Input schema / additionalPropertiesRemoved value: -false
1 tool update
- Added
set_history_location
1 tool update
- Added
get_sun_forecast
1 tool update
- Changed
get_vitamin_d_year1 field changed- added
Input schema / properties / placeNameAdded value: +{ + "description": "The place's name as the user said it — used to caption the chart", + "maxLength": 60, + "minLength": 1, + "type": "string" +}
4 tool updates
- Added
compare_vitamin_d_year - Added
configure_sun_profile - Changed
log_sun_session2 fields changed- added
Input schema / properties / confirmedAdded value: +{ + "description": "true (default) the user went out; false they had sun but stayed in; null clears the answer", + "type": [ + "boolean", + "null" + ] +} - changed
Input schema / properties / date / descriptionPrevious value: -"Day to confirm, YYYY-MM-DD; defaults to today"New value: +"Day to set, YYYY-MM-DD; defaults to today"
- Added
update_my_profile
10 tool updates
- First observed
estimate_sun_session - First observed
get_current_status - First observed
get_my_cities - First observed
get_my_history - First observed
get_my_profile - First observed
get_sun_times - First observed
get_vitamin_d_window - First observed
get_vitamin_d_year - First observed
log_sun_session - First observed
search_city
Related MCP Servers
- AlicenseNot gradedqualityCmaintenanceRemote MCP server that lets AI assistants read tracked competitive intelligence — competitor news, reviews, website changes, social posts and ads — and act on it by managing projects, competitors, battle cards, reports and canvases. Every answer carries a source and a date, and write actions only publish when explicitly shared.MIT
- AlicenseCqualityCmaintenanceCompetitor Monitor AI - MCP server providing AI-powered tools and automation by MEOK AI Labs112 npm58 PyPIMIT
- AlicenseAqualityCmaintenanceEnables brand visibility monitoring across major AI platforms like ChatGPT, Claude, Gemini, and Perplexity. It allows users to track visibility scores, analyze competitor data, and receive actionable insights to improve AI-generated brand recommendations.1623 npm1MIT

industrylens-mcpofficial
AlicenseNot gradedqualityBmaintenanceBrowse IndustryLens's published competitive-intelligence reports and head-to-head competitor comparisons from any AI agent — real, source-backed data.MIT
Glama MCP Gateway
Add one secure layer between your agents and this server.