← The evidence ledger
Evidence row 572175
Observed , by probe.mcp/1.
- Kind
- mcp.tools
- About
- endpoint 7a2bb91a-4bea-4021-9775-0c79ba7a4339
- Recorded
- Previous row
- None: the first of its kind about this subject
- Body SHA-256
- 1213abdcb9515b6fd1b215c9165a860d9415eaa76299d086db62c667addc12d1
- Leaf
- 0x48252c1bfc6a387b46cb87a0301e0e3b2690babec8ef01d6d399b712230daaf4
What was observed
{
"count": 15,
"tools": [
{
"description": "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.",
"inputSchema": {
"$schema": "https://json-schema.org/draft/2020-12/schema",
"properties": {
"age": {
"description": "Age in years (synthesis declines with age); omit for adult baseline",
"maximum": 120,
"minimum": 0,
"type": "number"
},
"exposedSkinFraction": {
"description": "Skin exposed: 0.10 face+hands, 0.18 face+arms, 0.25 t-shirt+shorts (default), 0.40 swimsuit",
"maximum": 1,
"minimum": 0.05,
"type": "number"
},
"places": {
"description": "The places to compare, 2 to 5",
"items": {
"properties": {
"elevationM": {
"description": "Ground elevation in metres (UV rises ~8%/km); default sea level",
"maximum": 6000,
"minimum": -100,
"type": "number"
},
"lat": {
"description": "Latitude in decimal degrees",
"maximum": 90,
"minimum": -90,
"type": "number"
},
"lon": {
"description": "Longitude in decimal degrees",
"maximum": 180,
"minimum": -180,
"type": "number"
},
"name": {
"description": "How to label this place in the comparison",
"maxLength": 60,
"minLength": 1,
"type": "string"
},
"timezone": {
"description": "IANA timezone like 'Europe/Madrid'. Strongly recommended — without it all times are UTC",
"maxLength": 64,
"type": "string"
}
},
"required": [
"name",
"lat",
"lon"
],
"type": "object"
},
"maxItems": 5,
"minItems": 2,
"type": "array"
},
"skinType": {
"description": "Fitzpatrick skin type 1 (very fair) to 6 (very dark); default 3",
"maximum": 6,
"minimum": 1,
"type": "integer"
},
"targetIU": {
"description": "Vitamin D target per session in IU; default 1000",
"maximum": 10000,
"minimum": 100,
"type": "number"
}
},
"required": [
"places"
],
"type": "object"
},
"name": "compare_vitamin_d_year"
},
{
"description": "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.",
"inputSchema": {
"$schema": "https://json-schema.org/draft/2020-12/schema",
"properties": {
"age": {
"description": "Age in years (synthesis declines with age); omit for adult baseline",
"maximum": 120,
"minimum": 0,
"type": "number"
},
"exposedSkinFraction": {
"description": "Skin exposed: 0.10 face+hands, 0.18 face+arms, 0.25 t-shirt+shorts (default), 0.40 swimsuit",
"maximum": 1,
"minimum": 0.05,
"type": "number"
},
"lat": {
"description": "Latitude of the place being discussed, so the live estimate uses today's real UV there",
"maximum": 90,
"minimum": -90,
"type": "number"
},
"lon": {
"description": "Longitude, paired with lat",
"maximum": 180,
"minimum": -180,
"type": "number"
},
"placeName": {
"description": "How to label that place in the widget",
"maxLength": 60,
"minLength": 1,
"type": "string"
},
"skinType": {
"description": "Fitzpatrick skin type 1 (very fair) to 6 (very dark); default 3",
"maximum": 6,
"minimum": 1,
"type": "integer"
},
"targetIU": {
"description": "Vitamin D target per session in IU; default 1000",
"maximum": 10000,
"minimum": 100,
"type": "number"
},
"timezone": {
"description": "IANA timezone like 'Europe/Madrid'. Strongly recommended — without it all times are UTC",
"maxLength": 64,
"type": "string"
}
},
"type": "object"
},
"name": "configure_sun_profile"
},
{
"description": "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.",
"inputSchema": {
"$schema": "https://json-schema.org/draft/2020-12/schema",
"properties": {
"age": {
"description": "Age in years (synthesis declines with age); omit for adult baseline",
"maximum": 120,
"minimum": 0,
"type": "number"
},
"date": {
"description": "Date as YYYY-MM-DD; defaults to today",
"pattern": "^\\d{4}-\\d{2}-\\d{2}$",
"type": "string"
},
"elevationM": {
"description": "Ground elevation in metres (UV rises ~8%/km); default sea level",
"maximum": 6000,
"minimum": -100,
"type": "number"
},
"exposedSkinFraction": {
"description": "Skin exposed: 0.10 face+hands, 0.18 face+arms, 0.25 t-shirt+shorts (default), 0.40 swimsuit",
"maximum": 1,
"minimum": 0.05,
"type": "number"
},
"lat": {
"description": "Latitude in decimal degrees",
"maximum": 90,
"minimum": -90,
"type": "number"
},
"lon": {
"description": "Longitude in decimal degrees",
"maximum": 180,
"minimum": -180,
"type": "number"
},
"minutes": {
"description": "Session length in minutes",
"maximum": 600,
"minimum": 1,
"type": "number"
},
"skinType": {
"description": "Fitzpatrick skin type 1 (very fair) to 6 (very dark); default 3",
"maximum": 6,
"minimum": 1,
"type": "integer"
},
"startTime": {
"description": "Local HH:MM the session starts; defaults to the day's best hour",
"pattern": "^\\d{1,2}:\\d{2}$",
"type": "string"
},
"timezone": {
"description": "IANA timezone like 'Europe/Madrid'. Strongly recommended — without it all times are UTC",
"maxLength": 64,
"type": "string"
}
},
"required": [
"lat",
"lon",
"minutes"
],
"type": "object"
},
"name": "estimate_sun_session"
},
{
"description": "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.",
"inputSchema": {
"$schema": "https://json-schema.org/draft/2020-12/schema",
"properties": {
"age": {
"description": "Age in years (synthesis declines with age); omit for adult baseline",
"maximum": 120,
"minimum": 0,
"type": "number"
},
"elevationM": {
"description": "Ground elevation in metres (UV rises ~8%/km); default sea level",
"maximum": 6000,
"minimum": -100,
"type": "number"
},
"exposedSkinFraction": {
"description": "Skin exposed: 0.10 face+hands, 0.18 face+arms, 0.25 t-shirt+shorts (default), 0.40 swimsuit",
"maximum": 1,
"minimum": 0.05,
"type": "number"
},
"lat": {
"description": "Latitude in decimal degrees",
"maximum": 90,
"minimum": -90,
"type": "number"
},
"lon": {
"description": "Longitude in decimal degrees",
"maximum": 180,
"minimum": -180,
"type": "number"
},
"skinType": {
"description": "Fitzpatrick skin type 1 (very fair) to 6 (very dark); default 3",
"maximum": 6,
"minimum": 1,
"type": "integer"
},
"targetIU": {
"description": "Vitamin D target per session in IU; default 1000",
"maximum": 10000,
"minimum": 100,
"type": "number"
},
"timezone": {
"description": "IANA timezone like 'Europe/Madrid'. Strongly recommended — without it all times are UTC",
"maxLength": 64,
"type": "string"
}
},
"required": [
"lat",
"lon"
],
"type": "object"
},
"name": "get_current_status"
},
{
"description": "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).",
"inputSchema": {
"$schema": "https://json-schema.org/draft/2020-12/schema",
"properties": {},
"type": "object"
},
"name": "get_my_cities"
},
{
"description": "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.",
"inputSchema": {
"$schema": "https://json-schema.org/draft/2020-12/schema",
"properties": {
"days": {
"description": "How many recent days to return; default 30",
"maximum": 365,
"minimum": 1,
"type": "integer"
}
},
"type": "object"
},
"name": "get_my_history"
},
{
"description": "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.",
"inputSchema": {
"$schema": "https://json-schema.org/draft/2020-12/schema",
"properties": {},
"type": "object"
},
"name": "get_my_profile"
},
{
"description": "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.",
"inputSchema": {
"$schema": "https://json-schema.org/draft/2020-12/schema",
"properties": {
"age": {
"description": "Age in years (synthesis declines with age); omit for adult baseline",
"maximum": 120,
"minimum": 0,
"type": "number"
},
"days": {
"description": "How many days ahead, 2 to 7; default 5",
"maximum": 7,
"minimum": 2,
"type": "integer"
},
"elevationM": {
"description": "Ground elevation in metres (UV rises ~8%/km); default sea level",
"maximum": 6000,
"minimum": -100,
"type": "number"
},
"exposedSkinFraction": {
"description": "Skin exposed: 0.10 face+hands, 0.18 face+arms, 0.25 t-shirt+shorts (default), 0.40 swimsuit",
"maximum": 1,
"minimum": 0.05,
"type": "number"
},
"lat": {
"description": "Latitude in decimal degrees",
"maximum": 90,
"minimum": -90,
"type": "number"
},
"lon": {
"description": "Longitude in decimal degrees",
"maximum": 180,
"minimum": -180,
"type": "number"
},
"skinType": {
"description": "Fitzpatrick skin type 1 (very fair) to 6 (very dark); default 3",
"maximum": 6,
"minimum": 1,
"type": "integer"
},
"targetIU": {
"description": "Vitamin D target per session in IU; default 1000",
"maximum": 10000,
"minimum": 100,
"type": "number"
},
"timezone": {
"description": "IANA timezone like 'Europe/Madrid'. Strongly recommended — without it all times are UTC",
"maxLength": 64,
"type": "string"
}
},
"required": [
"lat",
"lon"
],
"type": "object"
},
"name": "get_sun_forecast"
},
{
"description": "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.",
"inputSchema": {
"$schema": "https://json-schema.org/draft/2020-12/schema",
"properties": {
"date": {
"description": "Date as YYYY-MM-DD; defaults to today",
"pattern": "^\\d{4}-\\d{2}-\\d{2}$",
"type": "string"
},
"lat": {
"description": "Latitude in decimal degrees",
"maximum": 90,
"minimum": -90,
"type": "number"
},
"lon": {
"description": "Longitude in decimal degrees",
"maximum": 180,
"minimum": -180,
"type": "number"
},
"timezone": {
"description": "IANA timezone like 'Europe/Madrid'. Strongly recommended — without it all times are UTC",
"maxLength": 64,
"type": "string"
}
},
"required": [
"lat",
"lon"
],
"type": "object"
},
"name": "get_sun_times"
},
{
"description": "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.",
"inputSchema": {
"$schema": "https://json-schema.org/draft/2020-12/schema",
"properties": {
"age": {
"description": "Age in years (synthesis declines with age); omit for adult baseline",
"maximum": 120,
"minimum": 0,
"type": "number"
},
"atTime": {
"description": "Local HH:MM the user plans to go out — adds minutesNeeded and UV at that exact time",
"pattern": "^\\d{1,2}:\\d{2}$",
"type": "string"
},
"date": {
"description": "Date as YYYY-MM-DD; defaults to today",
"pattern": "^\\d{4}-\\d{2}-\\d{2}$",
"type": "string"
},
"elevationM": {
"description": "Ground elevation in metres (UV rises ~8%/km); default sea level",
"maximum": 6000,
"minimum": -100,
"type": "number"
},
"exposedSkinFraction": {
"description": "Skin exposed: 0.10 face+hands, 0.18 face+arms, 0.25 t-shirt+shorts (default), 0.40 swimsuit",
"maximum": 1,
"minimum": 0.05,
"type": "number"
},
"lat": {
"description": "Latitude in decimal degrees",
"maximum": 90,
"minimum": -90,
"type": "number"
},
"lon": {
"description": "Longitude in decimal degrees",
"maximum": 180,
"minimum": -180,
"type": "number"
},
"skinType": {
"description": "Fitzpatrick skin type 1 (very fair) to 6 (very dark); default 3",
"maximum": 6,
"minimum": 1,
"type": "integer"
},
"targetIU": {
"description": "Vitamin D target per session in IU; default 1000",
"maximum": 10000,
"minimum": 100,
"type": "number"
},
"timezone": {
"description": "IANA timezone like 'Europe/Madrid'. Strongly recommended — without it all times are UTC",
"maxLength": 64,
"type": "string"
}
},
"required": [
"lat",
"lon"
],
"type": "object"
},
"name": "get_vitamin_d_window"
},
{
"description": "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.",
"inputSchema": {
"$schema": "https://json-schema.org/draft/2020-12/schema",
"properties": {
"age": {
"description": "Age in years (synthesis declines with age); omit for adult baseline",
"maximum": 120,
"minimum": 0,
"type": "number"
},
"elevationM": {
"description": "Ground elevation in metres (UV rises ~8%/km); default sea level",
"maximum": 6000,
"minimum": -100,
"type": "number"
},
"exposedSkinFraction": {
"description": "Skin exposed: 0.10 face+hands, 0.18 face+arms, 0.25 t-shirt+shorts (default), 0.40 swimsuit",
"maximum": 1,
"minimum": 0.05,
"type": "number"
},
"lat": {
"description": "Latitude in decimal degrees",
"maximum": 90,
"minimum": -90,
"type": "number"
},
"lon": {
"description": "Longitude in decimal degrees",
"maximum": 180,
"minimum": -180,
"type": "number"
},
"placeName": {
"description": "The place's name as the user said it — used to caption the chart",
"maxLength": 60,
"minLength": 1,
"type": "string"
},
"skinType": {
"description": "Fitzpatrick skin type 1 (very fair) to 6 (very dark); default 3",
"maximum": 6,
"minimum": 1,
"type": "integer"
},
"targetIU": {
"description": "Vitamin D target per session in IU; default 1000",
"maximum": 10000,
"minimum": 100,
"type": "number"
},
"timezone": {
"description": "IANA timezone like 'Europe/Madrid'. Strongly recommended — without it all times are UTC",
"maxLength": 64,
"type": "string"
}
},
"required": [
"lat",
"lon"
],
"type": "object"
},
"name": "get_vitamin_d_year"
},
{
"description": "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).",
"inputSchema": {
"$schema": "https://json-schema.org/draft/2020-12/schema",
"properties": {
"confirmed": {
"description": "true (default) the user went out; false they had sun but stayed in; null clears the answer",
"type": [
"boolean",
"null"
]
},
"date": {
"description": "Day to set, YYYY-MM-DD; defaults to today",
"pattern": "^\\d{4}-\\d{2}-\\d{2}$",
"type": "string"
},
"minutes": {
"description": "Minutes the user reports having spent in the sun (acknowledged, not stored)",
"maximum": 600,
"minimum": 1,
"type": "number"
}
},
"type": "object"
},
"name": "log_sun_session"
},
{
"description": "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.",
"inputSchema": {
"$schema": "https://json-schema.org/draft/2020-12/schema",
"properties": {
"query": {
"description": "City name, e.g. 'Madrid', 'London', 'Nueva York'",
"maxLength": 80,
"minLength": 1,
"type": "string"
}
},
"required": [
"query"
],
"type": "object"
},
"name": "search_city"
},
{
"description": "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).",
"inputSchema": {
"$schema": "https://json-schema.org/draft/2020-12/schema",
"properties": {
"cityId": {
"description": "City id from search_city, e.g. 'builtin:londres'",
"maxLength": 80,
"type": "string"
},
"from": {
"description": "First day of the stretch, YYYY-MM-DD",
"pattern": "^\\d{4}-\\d{2}-\\d{2}$",
"type": "string"
},
"lat": {
"description": "Latitude, for a place not in the database",
"maximum": 90,
"minimum": -90,
"type": "number"
},
"lon": {
"description": "Longitude, paired with lat",
"maximum": 180,
"minimum": -180,
"type": "number"
},
"to": {
"description": "Last day of the stretch, YYYY-MM-DD; same as `from` for one day",
"pattern": "^\\d{4}-\\d{2}-\\d{2}$",
"type": "string"
}
},
"required": [
"from",
"to"
],
"type": "object"
},
"name": "set_history_location"
},
{
"description": "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.",
"inputSchema": {
"$schema": "https://json-schema.org/draft/2020-12/schema",
"properties": {
"age": {
"anyOf": [
{
"maximum": 120,
"minimum": 0,
"type": "number"
},
{
"type": "null"
}
],
"description": "Age in years, or null for the adult baseline"
},
"exposedSkinFraction": {
"description": "Skin exposed: 0.10 face+hands, 0.18 face+arms, 0.25 t-shirt+shorts (default), 0.40 swimsuit",
"maximum": 1,
"minimum": 0.05,
"type": "number"
},
"skinType": {
"description": "Fitzpatrick skin type 1 (very fair) to 6 (very dark); default 3",
"maximum": 6,
"minimum": 1,
"type": "integer"
},
"targetIU": {
"description": "Vitamin D target per session in IU; default 1000",
"maximum": 10000,
"minimum": 100,
"type": "number"
}
},
"type": "object"
},
"name": "update_my_profile"
}
]
}What the leaf hashes
{"body":"1213abdcb9515b6fd1b215c9165a860d9415eaa76299d086db62c667addc12d1","id":572175,"kind":"mcp.tools","method":"probe.mcp/1","observed_us":1793140613192904,"prev":null,"subject":"7a2bb91a-4bea-4021-9775-0c79ba7a4339","subject_kind":"endpoint"}Proof
Fold these into the leaf in order, hashing each sorted pair with keccak256, to reach the root of (273461 rows).
- 0x48255f75ca9b983ee1ae621cf797ea2acdea5a723af6e109eabe04fcf25981a7
- 0x8129018d6404b3fd44b596eea57c03470d6ce3dac4999a56c9566631c2944f91
- 0x14b2eec1910ebbfaa7a2616ec407f465247c4799f1f38a47b68a155c4fd21ee5
- 0xd586dfc8c08a6c3e4af458ce58089e03024e857fa819b8ce7ef8d2794e0f09b2
- 0xda1a0b2ef9c8927d19417079afe8628a5479645dce806907869aaf601726e85f
- 0x3a933e55d8b469c6a93f1bc0fe6e3a9521656d48b4540eb4f5813a387aeca987
- 0x11ad9ab966321d34634d94c7cc662bc388843f4f39b4e0c2e77cdc4a4f4f3476
- 0xdac38cf9c1ca601809ddb1bf23a8e71fe8300e0f81901ac13dbfe03bb0bee23d
- 0x82842812f8c15586b5f6baa8d79b18771657ad15ed5ad6c9cd1af1c0a454faca
- 0xbcfbbb3d397d362db0caa75be63889de19dd450f1ed28f3c276618257191d9d2
- 0x54a45a3e1f1134ba6b79df5cf2d8890a00d02b63d33f9f5954091bef7c28e130
- 0x84a7deb20d980d7ddf0eb089162b3d962c18f6c0ca46af19476c3066a5b827f3
- 0x836e1796750a28d286ffaa8d273d250fe348c563336bf2d30cfaf1001d95f677
- 0x80ede9e5d428e39db26928b1d08254ff1241f1d7e091fd2e57130fbb4423162b
- 0x2c117b27721eea45f6590fbccb471d21a7b0b079a53f089ecb300c63bdb3aebf
- 0x3ed50f053eca72dfd3a9d45a11935240bfe691e57835c367ddebe2cbc49efe9d
- 0x0e01aa9525097570a6edaf32bfc959de57bf5c24317cf10c0716affea85ca60d
- 0xa20d48798a34aba12eb9c7297722982d910f06c148f5e27ac59307422964a585
- 0x9fc354c0ea3efc3f1b6548bb77ea902a50f2c9647647ea61592efce2bd795699
- Day root
- 0xdd77e5e99da32c3f154180d63e3c3e6fe11e896a2c6896412ef6b5c4bcf7e795
- Chained
- 0x23bb4dfd09f55c15ac3962f53578e02c6114d5bfd9bb451cf8794fb6e2817ef4
- Published
- On Arc Testnet, block 69414147: 0xb2ebd83aafeb765a0ce66e76aefb133ed06606c98038fd56191e2bcd1dcb77b4