Developers & Agents Generated from source Updated 2026-08-01 View as Markdown

nLight.fit MCP tool reference

The server exposes 18 tools, all read-only. Every tool carries annotations.readOnlyHint: true, so a client may run any of them without asking for confirmation.

This page is generated from the running tool catalog. It is the same list tools/list returns.

Tool Catalog Purpose
get_streak Curated Get current and historical streak data for any tracked habit or metric.
get_metric_data Curated Retrieve historical data for any metric with statistics.
get_day_details Curated Get all tracked data for a specific date.
list_columns Curated Get list of all tracked metrics/columns for this user with their descriptions.
get_recovery_context Curated Get WHOOP recovery metrics with context and trends.
analyze_strain_balance Curated Analyze strain-to-recovery balance over time.
get_correlations Curated THE single tool for any 'what affects X', 'why is X changing', 'what's connected to X', or pattern/correlation question - across EVERY data source (WHOOP recovery/HRV/sleep/strain, nutrition, habits, weight, custom metrics, bloodwork labs, AND methylation genetics).
analyze_relationship Curated Compute a rigorous correlation between ANY TWO metrics ON DEMAND, for pairs the nightly engine didn't precompute (get_correlations only has a fixed catalog).
get_lab_data Curated Get the user's bloodwork lab results (biomarkers like testosterone, vitamin D, ApoB, triglycerides, TSH, ferritin, hs-CRP, cholesterol).
get_methylation_data Curated Get the user's methylation genetic test results (a one-time, STABLE genetic profile: genes like MTHFR, COMT, MTR, MTRR, AHCY and their variants).
get_supplements Curated Get the user's supplement regimen: what they take, at what dose, on what schedule, and SINCE WHEN.
get_daily_features Warehouse Retrieve the raw daily feature matrix: each metric in this user's retrieval catalog (call list_metrics for the exact set - it includes their custom columns) as a normalized numeric series plus its z-score against a trailing 30-day baseline.
list_metrics Warehouse List this user's retrieval catalog - every metric get_daily_features can return: ids, labels, units, domains, and whether each is a behavior or an outcome.
get_correlation_edges Warehouse Query the correlation graph directly as structured edges, with the statistics attached (r, partial r, lag, p-value, sample size, tier, and provenance).
get_user_facts Warehouse All-time aggregates per metric: first and last recorded day, min, max, total, current and best streak, and 30/90-day rolling averages.
get_insights Warehouse Precomputed statistical models the nightly engine maintains: readiness scoring, lead-lag relationships, goal ETA with Monte Carlo confidence bands, streak survival curves, training load, HRV baseline, momentum, dose-response curves, changepoint detection and behavioral archetypes.
get_summaries Warehouse Narrative rollups written by the summarization pipeline: period reviews, lab and methylation interpretations, mission analysis, personal records and the cross-module correlation narrative.
get_profile Account The account holder's stated goals and hard constraints: the Mission Statement (the outcome they want, their core goal, its dates, and the commitments they measure themselves against), injuries and allergies, anything they have asked never to be suggested, and what they have already reported worked or failed for them.

Curated tools

These are the same tools the in-app coach uses. They return a conclusion the analysis pipeline already reached, which makes them cheap to call and easy to reason about.

get_streak

Get current and historical streak data for any tracked habit or metric. Use when user asks about streaks, consecutive days, or 'how many days in a row' for ANY metric - especially custom columns the user added themselves. ALWAYS use this for custom/non-standard habits. Supports fuzzy matching: 'alcohol' finds a column labelled 'Dry January', 'sauna' finds 'Heat', etc.

Parameter Type Required Description
metric string Yes The metric to check. Supports: (1) Standard habits: 'vitamins', 'wake7am', 'reading', 'exercise', (2) Custom columns by ID, label, or description keywords. Fuzzy matching handles abbreviations and synonyms.
include_history boolean No If true, include when streak started and previous streak segments. Default: false
{
  "jsonrpc": "2.0",
  "id": 1,
  "method": "tools/call",
  "params": {
    "name": "get_streak",
    "arguments": {
      "metric": "<metric>"
    }
  }
}

get_metric_data

Retrieve historical data for any metric with statistics. Use when user asks about specific values, trends, averages, totals, or comparisons over time. Supports all standard and custom columns. The inline series is capped at the 50 most recent readings - data_points is the true total, returned is how many came back, and stats always covers the full total, so a cited min/max may predate the visible window.

Parameter Type Required Description
metric string Yes The metric to retrieve: 'weight', 'pushUps', 'sitUps', 'healthyEating', 'workoutSession', or any custom column ID/label
time_range today | yesterday | week | month | quarter | year | all No Time period to retrieve. Default: 'month'
include_stats boolean No Include computed statistics (avg, min, max, trend). Default: true
{
  "jsonrpc": "2.0",
  "id": 1,
  "method": "tools/call",
  "params": {
    "name": "get_metric_data",
    "arguments": {
      "metric": "<metric>"
    }
  }
}

get_day_details

Get all tracked data for a specific date. Use when user asks about a particular day, what they did on a date, or needs to verify what was logged.

Parameter Type Required Description
date string Yes Date in YYYY-MM-DD format, or relative: 'today', 'yesterday', 'last night'. Last night is the most recent overnight sleep, resolved in the user's timezone and stamped on the WHOOP wake date.
{
  "jsonrpc": "2.0",
  "id": 1,
  "method": "tools/call",
  "params": {
    "name": "get_day_details",
    "arguments": {
      "date": "<date>"
    }
  }
}

list_columns

Get list of all tracked metrics/columns for this user with their descriptions. Use when unsure what columns exist, need to find the correct column ID, or user asks what they can track. Custom columns include descriptions explaining what they mean (for example, a column labelled 'Dry January' with description 'no alcohol').

Parameter Type Required Description
include_stats boolean No Include basic stats per column (days tracked, last value). Default: false
{
  "jsonrpc": "2.0",
  "id": 1,
  "method": "tools/call",
  "params": {
    "name": "list_columns",
    "arguments": {}
  }
}

get_recovery_context

Get WHOOP recovery metrics with context and trends. Use when user asks about their recovery readiness, HRV, sleep quality, strain, or whether they're recovered enough to work out. Provides recovery zone (green/yellow/red), recent trends, and training recommendations.

Parameter Type Required Description
days_back number No Number of days to analyze for trends. Default: 7
include_recommendations boolean No Include training recommendations based on recovery state. Default: true
date string No Optional YYYY-MM-DD, 'today', 'yesterday', or 'last night'. When set, look up that night (plus the adjacent WHOOP wake-date) instead of treating the most recent day with data as today.
{
  "jsonrpc": "2.0",
  "id": 1,
  "method": "tools/call",
  "params": {
    "name": "get_recovery_context",
    "arguments": {}
  }
}

analyze_strain_balance

Analyze strain-to-recovery balance over time. Use when user asks about overtraining, training load, whether they're pushing too hard, or optimal training intensity. Shows strain vs recovery relationship and identifies imbalances.

Parameter Type Required Description
time_range week | month | quarter No Time period to analyze. Default: 'week'
{
  "jsonrpc": "2.0",
  "id": 1,
  "method": "tools/call",
  "params": {
    "name": "analyze_strain_balance",
    "arguments": {}
  }
}

get_correlations

THE single tool for any 'what affects X', 'why is X changing', 'what's connected to X', or pattern/correlation question - across EVERY data source (WHOOP recovery/HRV/sleep/strain, nutrition, habits, weight, custom metrics, bloodwork labs, AND methylation genetics). Returns known physiology tested on THEIR data (confirmed/contradicted/confounded), discovered patterns, behavior->lab links, and genetics-informed expectations - all with partial-correlation controls and multiple-testing correction, so the numbers are authoritative (don't recompute from raw rows). Use it for WHOOP-specific pattern questions too. When a metric is given, also returns a GRAPH view: the direct edges touching that metric and (depth 2) one-hop mechanistic chains (e.g. sleep -> recovery -> next-day strain capacity).

Parameter Type Required Description
metric string No Optional: filter findings to those involving this metric (fuzzy matched), e.g. 'recovery', 'triglycerides', 'meal quality', 'No Alcohol'. Omit for the full cross-module picture.
status_filter all | confirmed | contradicted | robust No Optional: 'confirmed' for validated physiology, 'contradicted' for surprising deviations or confounded links worth investigating, 'robust' for only the highest-confidence patterns (survived confounder controls + multiple-testing correction). Default: 'all'
depth 1 | 2 No Graph traversal depth when a metric is provided. 1 = direct edges touching the metric (default). 2 = also return one-hop chains (metric -> intermediate -> downstream) for mechanistic storytelling.
{
  "jsonrpc": "2.0",
  "id": 1,
  "method": "tools/call",
  "params": {
    "name": "get_correlations",
    "arguments": {}
  }
}

analyze_relationship

Compute a rigorous correlation between ANY TWO metrics ON DEMAND, for pairs the nightly engine didn't precompute (get_correlations only has a fixed catalog). Use when the user asks whether two specific things relate that aren't already in get_correlations - e.g. 'does my sauna use affect my HRV?', 'is there a link between my late dinners and deep sleep?', 'does creatine correlate with my push-up count?'. Works for daily metric x daily metric (habits, WHOOP, fitness, nutrition, custom columns) and daily behavior x lab marker. Applies the SAME statistical guards as the nightly engine (partial correlation controlling for time trend + sleep, autocorrelation-adjusted significance) so it never just eyeballs raw data. Results on a single fished pair are hypotheses, never 'robust'.

Parameter Type Required Description
metric_a string Yes First metric (the behavior/driver), fuzzy matched. E.g. 'sauna', 'late dinner', 'creatine', 'sleep hours', 'meal quality', 'vitamins'.
metric_b string Yes Second metric (the outcome), fuzzy matched. Can be a daily metric ('HRV', 'recovery', 'push-ups', 'deep sleep') OR a bloodwork marker ('triglycerides', 'vitamin d', 'testosterone').
lag 0 | 1 No Optional day lag for daily x daily: 0 = same day (default search tries both 0 and 1 and reports the stronger). Ignored for lab-marker outcomes.
window integer No Optional lookback window in days (e.g. 90). Omit to use up to a year of data.
{
  "jsonrpc": "2.0",
  "id": 1,
  "method": "tools/call",
  "params": {
    "name": "analyze_relationship",
    "arguments": {
      "metric_a": "<metric_a>",
      "metric_b": "<metric_b>"
    }
  }
}

get_lab_data

Get the user's bloodwork lab results (biomarkers like testosterone, vitamin D, ApoB, triglycerides, TSH, ferritin, hs-CRP, cholesterol). Use when the user asks about their labs, bloodwork, a specific biomarker's value or trend, or hormone/metabolic/cardiovascular health backed by blood tests. Supports fuzzy matching: 'vit d' finds Vitamin D, 'testosterone' finds Total/Free Testosterone. Without a marker, returns a panel overview with precomputed insights.

Parameter Type Required Description
marker string No Biomarker to look up by name or key, e.g. 'vitamin d', 'apob', 'triglycerides', 'free testosterone'. Omit for a full panel overview.
include_history boolean No Include every historical reading (date + value), not just latest and stats. Default: true when a marker is specified.
{
  "jsonrpc": "2.0",
  "id": 1,
  "method": "tools/call",
  "params": {
    "name": "get_lab_data",
    "arguments": {}
  }
}

get_methylation_data

Get the user's methylation genetic test results (a one-time, STABLE genetic profile: genes like MTHFR, COMT, MTR, MTRR, AHCY and their variants). Use when the user asks about their genetics, methylation, a specific gene, why they respond a certain way to caffeine/stress/supplements/B-vitamins, or which bloodwork their genes suggest watching. Genetics is a MODERATOR, not a daily metric - it explains mechanisms and predicts which labs/behaviors matter, and generates hypotheses that get tested in get_correlations. Without a gene, returns the full pathway overview plus genetically-predicted watch-markers (cross-linked to their labs) and genetic priors.

Parameter Type Required Description
gene string No Optional gene symbol to look up, e.g. 'MTHFR', 'COMT', 'MTR'. Omit for the full pathway overview.
{
  "jsonrpc": "2.0",
  "id": 1,
  "method": "tools/call",
  "params": {
    "name": "get_methylation_data",
    "arguments": {}
  }
}

get_supplements

Get the user's supplement regimen: what they take, at what dose, on what schedule, and SINCE WHEN. Use when the user asks about supplements, vitamins, their stack, whether something is actually working, what to add or drop, or when a supplement might explain a bloodwork or recovery change. Each entry carries start/stop dates, so this is also how you find out what changed around a given date. Cross-references their genetics (conflicts and gaps), their bloodwork (marker values before vs during), and - most usefully - dailyTrials, which compare daily WHOOP metrics in the weeks before a supplement started against the weeks after, scored against a permutation null so ordinary drift doesn't read as an effect. IMPORTANT: the regimen is self-reported intent with no daily adherence log; trials are observational, can be marked confounded, and must never be stated as proof.

Parameter Type Required Description
supplement string No Optional supplement to look up by name, e.g. 'vitamin d', 'magnesium', 'creatine'. Fuzzy-matched. Omit for the full regimen.
include_history boolean No Include stopped supplements and past doses. Default: false for the full regimen, true when a specific supplement is named.
include_lab_effects boolean No Include marker values before vs during each supplement, for the biomarkers that compound plausibly moves. Default: true. Requires bloodwork on file.
{
  "jsonrpc": "2.0",
  "id": 1,
  "method": "tools/call",
  "params": {
    "name": "get_supplements",
    "arguments": {}
  }
}

Warehouse tools

These exist only over MCP. They return the underlying evidence rather than a verdict, so a client can test a hypothesis the nightly engine never considered. Results are larger; narrow the window or the metric list when you can.

get_daily_features

Retrieve the raw daily feature matrix: each metric in this user's retrieval catalog (call list_metrics for the exact set - it includes their custom columns) as a normalized numeric series plus its z-score against a trailing 30-day baseline. This is the analysis primitive - use it to test your OWN hypotheses (custom lag windows, three-way interactions, subgroup splits, regime changes) rather than reading conclusions someone else drew. Returns columnar data: a date axis plus one array per metric, aligned by index, with null for days that have no value. Optionally set include_labs to attach a SEPARATE last-observation-carried-forward bloodwork block aligned to the same date axis (for eyeballing lab x daily alignment - NOT for correlating: independent N is the number of draws, not days, and each marker is flagged when draws are too few), and include_genetics to attach the static genotype panel as a stratify-only moderator. For a precomputed verdict on whether a relationship is statistically real, use get_correlations instead.

Parameter Type Required Description
from string No Start date YYYY-MM-DD (inclusive). Defaults to 90 days before to.
to string No End date YYYY-MM-DD (inclusive). Defaults to today.
metrics string[] No Metric ids to return, from list_metrics. Omit for all metrics, which is only allowed for windows of 180 days or less. A call may return at most 3000 values in total (days x metrics, doubled when z-scores are included), so asking for everything over a long window is rejected with the numbers to fix it.
include_z boolean No Include z-scores alongside raw values. Default: true.
include_labs boolean No Attach a separate labs block: each bloodwork marker last-observation-carried-forward onto the date axis (no backward fill), with asOf/ageDays/nDraws. Labs are step functions sampled a few times a year - each marker is hard-flagged when nDraws<4 (descriptive only) or nDraws=1 (zero-variance). Never enters values/z, never correlate against days. Default: false.
include_genetics boolean No Attach a genetics envelope: the static genotype panel (affected/normal per gene). A zero-variance moderator to STRATIFY on, never an axis to correlate. Default: false.
{
  "jsonrpc": "2.0",
  "id": 1,
  "method": "tools/call",
  "params": {
    "name": "get_daily_features",
    "arguments": {}
  }
}

list_metrics

List this user's retrieval catalog - every metric get_daily_features can return: ids, labels, units, domains, and whether each is a behavior or an outcome. Includes their own custom columns under domain 'custom', so the set differs per user. Call this before get_daily_features or analyze_relationship to learn the exact ids. Distinct from list_columns, which describes the user-facing tracking table; this describes the analytical schema and includes derived metrics such as _exercise and _sleepHours that have no column of their own. Note that the nightly correlation scan runs over a deliberately narrower curated subset, so a metric listed here may have no precomputed findings in get_correlations.

Parameter Type Required Description
domain string No Filter by domain. The catalog defines exactly these: 'custom', 'fitness', 'habits', 'nutrition', 'whoop'.
role behavior | outcome No Filter by whether the metric is something the user does or something that happens to them.
{
  "jsonrpc": "2.0",
  "id": 1,
  "method": "tools/call",
  "params": {
    "name": "list_metrics",
    "arguments": {}
  }
}

get_correlation_edges

Query the correlation graph directly as structured edges, with the statistics attached (r, partial r, lag, p-value, sample size, tier, and provenance). Use this when you want to filter, sort or traverse relationships yourself - for example every edge above a given effect size, or the mechanistic chain connecting two metrics. get_correlations returns the same underlying analysis as prose aimed at a person; this returns rows aimed at a program.

Parameter Type Required Description
metric string No Focus the graph on one metric (fuzzy matched on id and label). Omit to return all edges.
depth 1 | 2 No With metric: 1 returns direct edges, 2 also returns one-hop chains through an intermediate metric. Default: 1.
min_abs_r number No Drop edges whose absolute correlation is below this, 0-1.
tier robust | probable | hypothesis | confounded No Keep only edges of this confidence tier. 'robust' survived multiple-testing correction, confounder controls and a split-half stability check; 'probable' is nominally significant after controls; 'hypothesis' is everything weaker; 'confounded' means the raw relationship collapsed once time and sleep were controlled for, so it must not be reported as a direct effect.
limit number No Maximum edges to return, strongest first. Default: 100.
{
  "jsonrpc": "2.0",
  "id": 1,
  "method": "tools/call",
  "params": {
    "name": "get_correlation_edges",
    "arguments": {}
  }
}

get_user_facts

All-time aggregates per metric: first and last recorded day, min, max, total, current and best streak, and 30/90-day rolling averages. Use this to ground a claim about a personal record or a lifetime trend without pulling the full history. Much cheaper than get_daily_features when the question is about extremes or streaks rather than day-to-day shape.

Parameter Type Required Description
metrics string[] No Restrict to these metric ids. Omit for all.
{
  "jsonrpc": "2.0",
  "id": 1,
  "method": "tools/call",
  "params": {
    "name": "get_user_facts",
    "arguments": {}
  }
}

get_insights

Precomputed statistical models the nightly engine maintains: readiness scoring, lead-lag relationships, goal ETA with Monte Carlo confidence bands, streak survival curves, training load, HRV baseline, momentum, dose-response curves, changepoint detection and behavioral archetypes. Ask for specific sections rather than the whole document - it is large.

Parameter Type Required Description
sections string[] No Sections to return, e.g. ['goalEta','changepoints']. Omit to receive the list of available sections plus a size estimate for each, which is the cheapest way to decide what to ask for.
{
  "jsonrpc": "2.0",
  "id": 1,
  "method": "tools/call",
  "params": {
    "name": "get_insights",
    "arguments": {}
  }
}

get_summaries

Narrative rollups written by the summarization pipeline: period reviews, lab and methylation interpretations, mission analysis, personal records and the cross-module correlation narrative. Useful for recovering what was happening in a period, or the qualitative context around a numeric change you found in the feature matrix.

Parameter Type Required Description
type string No Summary type, e.g. 'weekly_summary', 'monthly_summary', 'unified_correlations', 'lab_insights'. Call without this argument first to get the exact types that exist for this user, with counts.
from string No Earliest period key to include, e.g. 2026-W03 or 2026-01.
to string No Latest period key to include.
limit number No Maximum summaries to return, most recent first. Default: 12.
{
  "jsonrpc": "2.0",
  "id": 1,
  "method": "tools/call",
  "params": {
    "name": "get_summaries",
    "arguments": {}
  }
}

Account tools

These return what the account holder has said about themselves rather than anything measured: the Mission Statement they are working toward, and the injuries, allergies and exclusions any recommendation has to respect. Read before advising. Name and free-form notes are deliberately never exposed.

get_profile

The account holder's stated goals and hard constraints: the Mission Statement (the outcome they want, their core goal, its dates, and the commitments they measure themselves against), injuries and allergies, anything they have asked never to be suggested, and what they have already reported worked or failed for them. Call this BEFORE offering any recommendation. Every other tool on this server reports what happened to this person; this is the only one that reports what they are trying to do and what would harm them - so a training or nutrition suggestion made without it can contradict an injury or an allergy on file. Self-reported free text, so treat it as intent and constraint, never as an observation or as evidence of progress.

Takes no arguments.

{
  "jsonrpc": "2.0",
  "id": 1,
  "method": "tools/call",
  "params": {
    "name": "get_profile",
    "arguments": {}
  }
}