Skip to main content
Glama
Fino-wind

Vaultbeat MCP Server

Daily health metrics

get_metric
Read-onlyIdempotent

Read daily health metric series like steps, resting heart rate, HRV, or weight; filter by date window, aggregate, or group by day/week/month.

Instructions

Read any one-number-per-day health series: steps, resting HR, HRV, weight, …

series takes ONE name, a LIST of names, or nothing (= every series). Names come from list_metric_series, which also says how much data backs each — call it first rather than guessing. Activity is five series (steps, active_energy, exercise_minutes, stand_minutes, distance_meters); pass them as a list to get the whole day in one call.

days = the newest N days THAT HAVE DATA, per series (not N calendar days). For a CALENDAR window — "last month", "this semester", "July" — pass since / until ("YYYY-MM-DD", either or both) instead; days is then ignored and the reply names the range it used.

aggregation is computed here, not by you: avg / sum / min / max / latest over the window, or none (default) for the per-day points only. sum is refused on state measurements (resting HR, weight, VO2max) — it has no meaning there. granularity = day (default), week (ISO weeks) or month; week/month return buckets aggregated with aggregation (avg when none), each with days_with_data beside days_in_period. period_in_progress: true marks the current, unfinished week/month and clipped_by_window: true the oldest one your days cut through — never compare either against a full period as if it were one. granularity = weekday groups the window by day of the week (Mon..Sun) — the direct answer to "weekends vs weekdays" and to social jet lag. Read its weekday_note: sleep is dated by the morning it ends, so Sat is the Friday-night sleep.

Honesty the reply already does for you, so do not undo it: · On cumulative series (steps, energy, water) today is still accruing — it is marked partial: true and excluded from every aggregate. · excluded_days names days dropped because their data was short (basal energy with the Watch off the wrist, TDEE without basal), with reasons. · Missing days are absent, never zero.

Each series' points (or buckets) is a table: columns names the fields once and every entry of rows is one day (or period) in that order — e.g. columns: ["date", "value", "partial"]. The flags above are columns; a day without one has null there.

Each series carries its own coverage block: quote coverage.days_covered and coverage.span_days beside any number. 🔴 Before saying how far back someone's data goes, read coverage.more_available: true means older days exist that your days left behind — ask for more, or quote coverage.oldest_available. Never report a window as the extent of their data.

Reads YOUR data by default. Pass partner=true for your partner's — of these series only sleep, water and weight (with body composition) can be shared, so every other series comes back empty for a partner by design.

Sleep is here too — duration, timing (bedtime_minutes, wake_minutes, sleep_midpoint_minutes), stages, awakenings, heart/breathing rate while asleep; the nights behind those numbers are get_sleep_nights. Richer kinds have their own tools: workouts, strength, food, notes, symptoms, cycle, and the sex / age / height profile (get_user_profile). Samples within a day (HRV spikes) → get_intraday. Trend / period comparison / correlation → get_metric_trend, compare_metric_periods, correlate_metric_series.

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
daysNo
freshNo
sinceNo
untilNo
seriesNo
partnerNo
aggregationNonone
granularityNoday

Output Schema

TableJSON Schema
NameRequiredDescriptionDefault

No arguments

Schema Changelog

Changes observed during successful MCP inspections.

  1. Addedv0.9.1

TDQS

A4.8/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations only declare read-only/idempotent/non-destructive; the description carries far more. It discloses that aggregation is computed server-side, that sum is refused on state measurements, the semantics of period_in_progress/clipped_by_window, partial:true exclusion from aggregates, excluded_days with reasons, missing days never zeroed, and the partner-sharing allowlist (sleep, water, weight only).

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Long (~450 words), but front-loaded and organized into labeled blocks (series, days, aggregation/granularity, honesty guarantees, output shape, partner, siblings), and nearly every sentence carries operational content. It is on the verbose edge for a tool description, yet the density justifies most of the length.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Despite an output schema existing, the description goes further by explaining the columns/rows table shape, the coverage block, and the more_available warning that prevents misreporting the extent of a user's history. For an 8-parameter, multi-mode tool with 0% schema coverage, nothing an agent needs to call it correctly is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description must compensate, and it does for series, days, since, until, aggregation, granularity and partner — including value formats ('YYYY-MM-DD'), defaults, enum-like options (avg/sum/min/max/latest/none; day/week/month/weekday) and interaction rules (days ignored when since/until given). The one gap is `fresh`, which is never explained anywhere, so coverage is strong but not complete.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

Opens with a specific verb+resource: 'Read any one-number-per-day health series: steps, resting HR, HRV, weight', and immediately draws the boundary against siblings (list_metric_series, get_sleep_nights, get_intraday, get_metric_trend, compare_metric_periods, correlate_metric_series). An agent can route to this tool without opening any other schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicit when-to-use rules: call list_metric_series first rather than guessing names; use days for 'newest N days that have data' versus since/until for a calendar window; pass the five activity series as a list to get a whole day in one call. It also states exclusions and redirects richer kinds (workouts, food, symptoms, cycle, profile, intraday, trends) to their own tools.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.