Skip to main content
Glama
YpsilonTM

Withings MCP Server

by YpsilonTM

Withings MCP Server

Model Context Protocol (MCP) server for the Withings Public API. Query weight, body composition, heart rate, core body temperature, SpO2, activity, sleep, workouts, and ECG recordings from AI clients (Cursor, Claude Desktop, Docker MCP Gateway, etc.).

Features

  • stdio MCP server — works with Docker MCP Gateway / Toolkit catalogs

  • One-shot auth helper — browser OAuth, prints tokens (no always-on auth service)

  • Broad tool set — scale measurements, watch/intraday vitals, sleep, heart/ECG, devices & goals

  • Token refresh — automatic access-token refresh; optional file to persist rotated refresh tokens

  • Structured stderr logging — JSON lines, safe for MCP (stdout stays protocol-only)

Related MCP server: Oura Ring MCP Server

Scale vs watch (important)

Withings splits data by how it was recorded. Empty tool results usually mean you queried the wrong path for that device.

Device

Typical data

Prefer these tools

Scale

Weight, body composition, occasional spot pulse

withings_get_weight, withings_get_body_composition, withings_get_measurements

Watch / activity tracker

Continuous HR, core body temperature, SpO2, steps

withings_get_intraday_activity, or withings_get_heart_rate / withings_get_body_temperature with include_intraday: true; daily rollups via withings_get_activity

Sleep mat / analyzer (if you have one)

Night summaries & series

withings_get_sleep_summary, withings_get_sleep

BPM (if you have one)

Spot blood pressure

withings_get_blood_pressure

Spot vs intraday

  • Spot (getmeas / tools without include_intraday) — discrete measurements when you step on the scale or take a reading. Often empty for watch-only vitals.

  • Intraday (getintradayactivity, max 24h per call) — time series from the watch while you wear it. This is where continuous HR and core_body_temperature live.

Example: “body temp last 24h” from a ScanWatch → use withings_get_body_temperature with include_intraday: true (or withings_get_intraday_activity with data_fields=core_body_temperature), not spot-only temperature types.

Quick start

1. Create a Withings developer app

  1. Open developer.withings.com/dashboard

  2. Create an application

  3. Note Client ID and Client Secret

  4. Register this redirect URI exactly:

http://localhost:8765/callback

2. Obtain a refresh token (one time)

With Docker (recommended):

docker run --rm -p 8765:8765 \
  -e WITHINGS_CLIENT_ID=your_client_id \
  -e WITHINGS_CLIENT_SECRET=your_client_secret \
  ghcr.io/<owner>/withings-mcp:latest auth

Or from source:

npm ci && npm run build
WITHINGS_CLIENT_ID=... WITHINGS_CLIENT_SECRET=... node dist/index.js auth
  1. Open the printed authorize URL in your browser

  2. Log in to Withings and accept

  3. Copy refresh_token from the JSON printed on stdout

Optional: write tokens to a file:

... auth --write ./tokens.json

3. Run the MCP server

docker run -i --rm \
  -e WITHINGS_CLIENT_ID=your_client_id \
  -e WITHINGS_CLIENT_SECRET=your_client_secret \
  -e WITHINGS_REFRESH_TOKEN=your_refresh_token \
  -e WITHINGS_LOG_LEVEL=info \
  ghcr.io/<owner>/withings-mcp:latest

-i is required so the client can speak MCP over stdin/stdout.

Docker MCP Gateway catalog

Add an entry like examples/catalog-entry.yaml to your gateway catalog.yaml, then put secrets in secrets.env:

WITHINGS_CLIENT_ID=...
WITHINGS_CLIENT_SECRET=...
WITHINGS_REFRESH_TOKEN=...

Required for long-lived deployments: mount a writable volume and set WITHINGS_TOKEN_FILE=/data/tokens.json so rotated refresh tokens survive container restarts. Withings rotates refresh tokens on every refresh; without a writable store, auth will break after ~8 hours when the gateway starts a fresh container.

Example volume (homeserver): /home/ypsilon/data/withings:/data

If your GHCR package is private and the gateway host cannot pull it, either grant the host a token with read:packages, or build the image on the host from this repo and keep --pull never (Docker MCP Gateway does this when the image is already local).

Cursor / Claude Desktop

See examples/cursor-mcp.json for a Docker-based mcpServers snippet.

Environment variables

Variable

Required

Description

WITHINGS_CLIENT_ID

Yes

OAuth client ID

WITHINGS_CLIENT_SECRET

Yes

OAuth client secret

WITHINGS_REFRESH_TOKEN

Yes (MCP)

Refresh token from auth (or provide via WITHINGS_TOKEN_FILE)

WITHINGS_TOKEN_FILE

No

Path to persist tokens (default /data/tokens.json if /data exists)

WITHINGS_REDIRECT_PORT

No

Auth callback port (default 8765)

WITHINGS_LOG_LEVEL

No

error | warn | info | debug (default info)

OAuth scopes requested: user.info, user.metrics, user.activity, user.sleepevents.

Tools

Tool

Best for

Notes

withings_get_measure_types

Reference

Static meastype catalog

withings_get_measurements

Scale / spot metrics

Filter with meastypes; not continuous watch vitals

withings_get_weight

Scale

Weight (type 1)

withings_get_body_composition

Scale

Fat, muscle, bone, hydration

withings_get_blood_pressure

BPM / scale spot

Systolic / diastolic / pulse

withings_get_heart_rate

Watch (intraday) or spot

Use include_intraday: true for continuous watch HR

withings_get_body_temperature

Watch (intraday) or spot

Use include_intraday: true for watch core_body_temperature

withings_get_spo2

Spot SpO2

Continuous watch SpO2 → withings_get_intraday_activity (spo2_auto)

withings_get_activity

Watch daily totals

Steps, calories, HR zones

withings_get_intraday_activity

Watch continuous vitals

HR, temp, SpO2, steps; ≤24h per call

withings_get_workouts

Watch workouts

Logged sessions

withings_get_sleep_summary

Sleep device / watch nights

Per-night summaries (default 7 days)

withings_get_sleep

Sleep series

High-frequency stages / vitals (default 24h)

withings_list_heart_records

ECG devices

Often empty without ECG hardware

withings_get_heart_ecg

ECG devices

Single signal by signalid

withings_list_devices

Account

Paired devices

withings_get_goals

Account

Goals

Example prompts:

  • “What was my heart rate in the last 24 hours?” → watch intraday HR

  • “Show my core body temperature today.” → watch intraday temp

  • “What did I weigh this morning?” → scale weight

  • “How did I sleep the last 7 nights?” → sleep summary

Logging

All logs go to stderr as one JSON object per line so they appear in docker logs / MCP Gateway without breaking the MCP session on stdout.

# More detail while debugging auth or API errors
-e WITHINGS_LOG_LEVEL=debug

Logged at info: startup config (booleans only), tool name + date range, Withings status, durations.
Never logged: access/refresh tokens, client secret, Authorization headers.

Rate limits

Withings asks partners not to poll more often than about once every 10 minutes per user for sync-style usage. Prefer explicit date ranges when asking the model for historical data.

Development

npm ci
npm run build
npm run auth          # tsx auth helper
npm start             # MCP on stdio (needs env vars)

Build the image locally:

docker build -t withings-mcp:local .
docker run --rm -p 8765:8765 \
  -e WITHINGS_CLIENT_ID -e WITHINGS_CLIENT_SECRET \
  withings-mcp:local auth

Images are published to GHCR on pushes to main and version tags v* via GitHub Actions.

Troubleshooting

Symptom

What to try

Auth callback never completes

Confirm redirect URI is exactly http://localhost:8765/callback; port 8765 free; use -p 8765:8765 with Docker

status=343 / invalid token

Refresh token expired or revoked — re-run auth and update secrets

status=601

Rate limited — back off

Empty weight/composition

No scale sync in range

Empty HR/temp without intraday

Watch data is usually intraday — set include_intraday: true or call withings_get_intraday_activity

Empty data (status=100)

No measurements in range, or device never synced that metric

MCP client hangs / protocol errors

Ensure nothing else writes to stdout; set WITHINGS_LOG_LEVEL=debug and inspect stderr / container logs

License

MIT — see LICENSE.

Disclaimer

This project is not affiliated with Withings. Use only with accounts and data you are authorized to access. Health data is sensitive — store secrets and token files securely.

Available Tools

17 tools
withings_get_activityA

Fetch daily activity summaries from the watch/tracker (steps, distance, calories, HR zones, etc.). Prefer this for day-level watch stats; use withings_get_intraday_activity for minute-level series.

ParametersJSON Schema
NameRequiredDescriptionDefault
offsetNoPagination offset.
enddateymdNoEnd date YYYY-MM-DD. Default: today UTC.
data_fieldsNoComma-separated activity fields. Default: steps,distance,elevation,soft,moderate,intense,active,calories,totalcalories,hr_average,hr_min,hr_max,hr_zone_0,hr_zone_1,hr_zone_2,hr_zone_3
startdateymdNoStart date YYYY-MM-DD. Default: 7 days ago.

TDQS

A4.2/5.0
Behavior3/5

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

No annotations are provided, so the description must carry the burden of behavioral disclosure. It accurately indicates a read operation ('Fetch') and describes the data granularity, but it does not mention authentication requirements, pagination behavior, date boundaries/timezone handling, or any side effects. For a simple read-only tool this is adequate but not thorough.

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

Conciseness5/5

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

Two sentences, no filler, with the core purpose front-loaded and the key alternative mention in the second sentence. Every word earns its place and the structure maximizes scannability for an agent.

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

Completeness4/5

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

For a low-complexity tool with four optional parameters fully documented in the schema and no output schema, the description is nearly complete. It explains what the tool returns, when to use it, and the relevant alternative. Minor gaps like pagination semantics and date-range boundaries are left to the schema, but the guidance is sufficient for correct selection and invocation.

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

Parameters3/5

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

Schema coverage is 100%, with all four parameters having descriptive names, types, and defaults. The description adds a helpful list of example activity fields that align with data_fields, but it does not meaningfully enrich the schema's parameter documentation. Baseline 3 is appropriate since the schema already carries the semantic load.

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?

The description uses a specific verb ('Fetch') and resource ('daily activity summaries from the watch/tracker'), and lists concrete data types such as steps, distance, calories, and HR zones. It clearly differentiates itself from the close sibling withings_get_intraday_activity by emphasizing day-level summaries.

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?

The description explicitly states when to prefer this tool ('day-level watch stats') and directs the agent to the alternative for minute-level series. This is direct, actionable guidance that resolves ambiguity without needing to inspect sibling schemas.

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

withings_get_blood_pressureB

Fetch blood pressure and related spot pulse (diastolic 9, systolic 10, heart rate 11). Typical source: BPM or scale, not continuous watch HR.

ParametersJSON Schema
NameRequiredDescriptionDefault
offsetNoPagination offset from a previous more=true response.
enddateNoEnd unix timestamp (seconds). Default: now.
startdateNoStart unix timestamp (seconds). Default: 24h ago.

TDQS

B3.1/5.0
Behavior2/5

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

With no annotations provided, the description carries the full burden of disclosing behavioral traits. It does not mention authentication requirements, pagination behavior (despite an offset parameter), rate limits, or the return format. The only behavioral hint is the source distinction, which is not a behavioral trait. This is a significant gap for a data-fetching tool.

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

Conciseness3/5

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

The description is short and mostly front-loaded with the primary purpose. However, the inclusion of unexplained numeric identifiers (9, 10, 11) adds confusion without value, and the source note is placed second, which is acceptable but could be clearer. It is concise but not optimally structured for quick agent comprehension.

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

Completeness3/5

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

Given the tool has three optional parameters, no output schema, and no annotations, the description should explain what the returned data contains and any peculiarities. It mentions 'spot pulse' but does not clarify the data structure or the meaning of the numeric identifiers. It also does not address pagination, which is relevant given the offset parameter. This is adequate but leaves room for improvement.

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

Parameters3/5

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

The input schema provides full descriptions for all three parameters (offset, enddate, startdate), so schema coverage is 100%. The description adds no additional meaning about these parameters—it does not explain default behaviors or how they relate to the blood pressure data. Thus, it meets the baseline but does not exceed it.

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

Purpose4/5

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

The description states a clear verb ('Fetch') and resource ('blood pressure and related spot pulse'), making the tool's purpose identifiable. However, the cryptic 'diastolic 9, systolic 10, heart rate 11' likely refers to internal measurement type IDs without explanation, which could confuse an agent. It partially distinguishes from siblings by noting the source (BPM or scale), but does not explicitly differentiate from overlapping tools like withings_get_measurements.

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

Usage Guidelines3/5

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

The note 'Typical source: BPM or scale, not continuous watch HR' gives some context on when to use this tool (for spot readings) and implies it is not for continuous heart rate, which is handled by withings_get_heart_rate. However, it does not name alternative tools or state explicit exclusions, leaving the agent to infer usage conditions.

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

withings_get_body_compositionA

Fetch scale body composition: fat free mass, fat ratio, fat mass, muscle, hydration, bone (types 5,6,8,76,77,88). Typical source: Withings scale.

ParametersJSON Schema
NameRequiredDescriptionDefault
offsetNoPagination offset from a previous more=true response.
enddateNoEnd unix timestamp (seconds). Default: now.
startdateNoStart unix timestamp (seconds). Default: 24h ago.

TDQS

A3.7/5.0
Behavior3/5

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

With no annotations, the description carries the full behavioral burden. It discloses that this is a read ('Fetch') and specifies which measure types are involved, but omits pagination semantics (the offset parameter references a previous 'more=true' response) and the response shape. No annotation contradiction.

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

Conciseness5/5

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

Two short sentences with zero filler: verb and resource up front, then the metric list with type codes, then the source context. Every clause earns its place.

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

Completeness3/5

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

Adequate for a straightforward fetch — it names the metrics and source. But with no output schema and no annotations, the agent is left without pagination flow (how to use offset with the 'more=true' flag) or response structure; the schema covers defaults, yet the overall picture has clear gaps.

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

Parameters3/5

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

Schema description coverage is 100% — offset, enddate, and startdate are all documented with types, units, and defaults. 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.

Purpose5/5

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

States a specific verb and resource ('Fetch scale body composition') and enumerates the exact metrics (fat free mass, fat ratio, fat mass, muscle, hydration, bone) plus their Withings type codes (5,6,8,76,77,88). The metric list and type codes distinguish it from siblings like withings_get_weight and withings_get_measurements.

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

Usage Guidelines3/5

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

'Typical source: Withings scale' implies the tool is for scale-derived body composition data, giving a loose selection cue. However, it never names alternatives, states when-not-to-use, or provides explicit routing among the 16 siblings.

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

withings_get_body_temperatureA

Fetch body temperature. Spot readings (meastypes 12/71/73 via getmeas) come from thermometers or occasional device measures. For Withings watches, set include_intraday=true to fetch continuous core_body_temperature (max 24h window) — that is usually where watch temp lives.

ParametersJSON Schema
NameRequiredDescriptionDefault
offsetNoPagination offset from a previous more=true response.
enddateNoEnd unix timestamp (seconds). Default: now.
startdateNoStart unix timestamp (seconds). Default: 24h ago.
include_intradayNoIf true, also fetch watch intraday core_body_temperature via getintradayactivity (capped to 24h). Recommended for ScanWatch / activity trackers.

TDQS

A4.4/5.0
Behavior4/5

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

With no annotations present, the description carries the behavioral burden. It discloses underlying endpoints (getmeas and getintradayactivity), the 24-hour cap for intraday data, and the source types. A minor gap is the lack of any explicit return-shape or pagination behavior, but this is strong for a read-only fetch.

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

Conciseness5/5

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

Three dense sentences with no filler. The main action is front-loaded, and the nuance about intraday vs. spot readings is delivered efficiently without repeating schema content.

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

Completeness4/5

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

The key invocation decision for this tool — when to set include_intraday and the 24-hour window — is fully covered, and all parameters are documented in the schema. The only meaningful gap is the absence of an output schema or description of the exact response shape, which is minor for a simple measurement fetch.

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 coverage is 100%, so the baseline is 3. The description adds meaning beyond the schema by linking spot readings to specific meastypes and clarifying that watch temperature typically lives in the intraday path. This is a meaningful but not exhaustive enrichment of the parameter semantics.

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?

The description is specific: 'Fetch body temperature' names the resource, and it goes further by distinguishing spot readings (meastypes 12/71/73 via getmeas) from watch intraday core_body_temperature. This clearly separates it from sibling measurement tools.

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

Usage Guidelines4/5

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

The description gives clear contextual guidance: thermometer/occasional device measures provide spot readings, while Withings watches usually need include_intraday=true to get continuous temperature. It stops short of naming an alternative tool explicitly, but the invocation guidance is unambiguous.

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

withings_get_goalsA

Get health goals configured in the Withings account (e.g. steps, weight, sleep targets), if the user has set any.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A3.8/5.0
Behavior2/5

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

No annotations are provided, so the description carries the full burden of behavioral disclosure. It only hints at conditional behavior with 'if the user has set any' but does not state what happens when no goals exist (e.g., empty array vs error), nor does it mention authentication, rate limits, or response structure. This leaves significant behavioral ambiguity for a tool with no annotation safety net.

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

Conciseness5/5

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

The description is a single concise sentence of 16 words, front-loaded with the core action 'Get health goals' and followed by clarifying examples. Every word earns its place, with no filler or redundancy.

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

Completeness4/5

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

Given the tool's low complexity (zero parameters, no output schema, no nested objects), the description covers the core purpose and the conditional 'if the user has set any'. It does not specify the return format, but for a simple getter, this is a minor gap. The lack of annotations is partially compensated by the clarity of the purpose.

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?

The tool accepts zero parameters, so there are no parameter semantics to explain. The description meaningfully clarifies the lack of required inputs by focusing entirely on the return concept (health goals), which aligns with the baseline of 4 for parameterless tools.

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?

The description clearly states the verb 'Get' and the specific resource 'health goals configured in the Withings account', with concrete examples (steps, weight, sleep targets). This makes it readily distinguishable from sibling tools that fetch measurements or activity data, even without naming them explicitly.

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

Usage Guidelines3/5

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

The phrase 'if the user has set any' implies when the tool is relevant (there are goals to retrieve), but no explicit guidance is given about when to choose this tool over siblings like withings_get_measurements or withings_get_sleep. Usage is primarily inferable from the tool name and description rather than stated.

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

withings_get_heart_ecgA

Fetch a single ECG waveform/signal by signalid from withings_list_heart_records. Only useful when withings_list_heart_records returned recordings (ECG-capable device). Not for continuous watch heart rate.

ParametersJSON Schema
NameRequiredDescriptionDefault
signalidYesECG signal id returned by withings_list_heart_records.

TDQS

A4.2/5.0
Behavior3/5

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

With no annotations, the description carries the full burden. It states the operation is a fetch (read-only) and the data type (ECG waveform), which is useful. However, it does not mention response format, potential errors, or any special requirements like authentication or device capability beyond the implicit 'ECG-capable device.' It adds context but leaves gaps, so a 3 is appropriate.

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

Conciseness5/5

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

Two sentences, zero fluff. The main action is front-loaded, followed by a critical condition and an exclusion. Every sentence earns its place; it is efficient and easy to scan.

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

Completeness4/5

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

For a single-parameter fetch tool, the description covers the key context: when it is applicable, what it is not for, and the parameter source. It does not describe the output format, but given the tool name and description imply a waveform, the agent can infer the return type. It is complete enough for correct invocation.

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

Parameters3/5

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

Schema description coverage is 100% because the only parameter, signalid, has a clear description: 'ECG signal id returned by withings_list_heart_records.' The tool description does not add meaning beyond the schema; it merely restates that it fetches by signalid. Baseline 3 applies since the schema already documents the parameter.

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?

The description states a specific verb ('Fetch'), a specific resource ('ECG waveform/signal'), and the key parameter ('signalid'). It also explicitly differentiates from siblings by noting it is not for continuous watch heart rate, which sets it apart from withings_get_heart_rate.

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?

The description gives a clear precondition: 'Only useful when withings_list_heart_records returned recordings (ECG-capable device).' It also states an explicit exclusion: 'Not for continuous watch heart rate,' which implies the alternative tool. This is explicit when/when-not guidance.

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

withings_get_heart_rateA

Fetch heart rate. Spot readings (meastype 11 via getmeas) come from scale/BPM when you take a measurement. For Withings watches, set include_intraday=true (or use withings_get_intraday_activity) for continuous HR — that is usually where watch HR lives (max 24h window).

ParametersJSON Schema
NameRequiredDescriptionDefault
offsetNoPagination offset from a previous more=true response.
enddateNoEnd unix timestamp (seconds). Default: now.
startdateNoStart unix timestamp (seconds). Default: 24h ago.
include_intradayNoIf true, also fetch continuous watch heart_rate via getintradayactivity (capped to 24h). Recommended for ScanWatch / activity trackers.

TDQS

A4.4/5.0
Behavior4/5

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

With no annotations, the description carries the full burden. It discloses the data source (spot readings via getmeas), the 24h cap on intraday HR, and where watch HR actually lives. It does not mention pagination behavior hinted by the offset parameter, but the core behavioral nuance is covered.

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

Conciseness5/5

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

Three tight sentences, front-loaded with the core action. Every sentence carries information about data source, mode, or alternative routing, with no filler.

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

Completeness4/5

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

The description is sufficiently complete given the schema covers parameters and no output schema exists. It explains the key spot-vs-continuous distinction and the max window. It doesn't compare against withings_list_heart_records or withings_get_heart_ecg, but the core routing decision is well covered.

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

Parameters3/5

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

All four parameters are documented in the schema (100% coverage), so the baseline is 3. The description adds useful context around include_intraday (that it fetches continuous watch HR and is capped at 24h), but does not add much for offset, startdate, or enddate beyond their schema descriptions.

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?

The description opens with a clear verb and resource: 'Fetch heart rate.' It then distinguishes spot readings (meastype 11 via getmeas from scale/BPM) from continuous watch HR, which separates it from siblings like withings_get_intraday_activity and withings_list_heart_records.

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?

It explicitly explains when to use this tool versus the alternative: for watch/continuous HR, set include_intraday=true or use withings_get_intraday_activity. It also clarifies that plain use returns spot readings only from measurements on a scale/BPM device.

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

withings_get_intraday_activityA

Fetch high-resolution watch/tracker series for up to 24 hours: heart_rate, core_body_temperature, spo2_auto, steps, HRV, etc. This is the main source for continuous vitals from a Withings watch (not the scale). Withings returns at most 24 hours per call.

ParametersJSON Schema
NameRequiredDescriptionDefault
enddateNoEnd unix timestamp. Default: now.
startdateNoStart unix timestamp. Default: 24h ago.
data_fieldsNoComma-separated fields. Default: steps,elevation,calories,distance,heart_rate,spo2_auto,rr,duration,stroke,pool_lap,rmssd,sdnn1,hrv_quality,core_body_temperature,chest_movement_rate

TDQS

A4.1/5.0
Behavior3/5

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

With no annotations, the description carries the burden and does disclose useful behavior: series are high-resolution, limited to 24 hours per call, and come from a watch rather than a scale. However, it does not explain the return format, units, timestamps, error behavior, or what happens if the requested range exceeds 24 hours.

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

Conciseness5/5

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

Two sentences with no filler. The first sentence front-loads the action, resource, and examples; the second adds the key source distinction and limitation. Every clause earns its place.

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

Completeness3/5

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

The tool has no output schema and no annotations, so the description is the only source for return-behavior context. While it conveys the series nature and the 24-hour cap, it omits details such as the response structure, how to handle ranges longer than 24 hours, and whether returned values have particular units. This leaves meaningful gaps for a data-fetching tool.

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 descriptions already cover all three parameters, providing a baseline of 3. The description adds meaning by clarifying the 24-hour call limit, which directly affects how startdate and enddate should be used, and it offers an illustrative list of accepted data_fields beyond the schema string.

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?

The description uses a specific verb ('Fetch'), names the resource ('watch/tracker series'), and lists concrete data fields such as heart_rate and core_body_temperature. It also distinguishes the tool from scale-based measurements by explicitly saying it is for a Withings watch, not the scale, which separates it from several sibling tools.

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

Usage Guidelines4/5

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

The description gives clear context: use this for continuous vitals from a watch, not the scale. It implies this is the main tool for high-resolution series rather than single measurements, but it does not explicitly name alternatives or state when to prefer sibling tools like withings_get_heart_rate or withings_get_spo2.

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

withings_get_measurementsA

Fetch spot/scale health measurements via getmeas (weight, composition, BP, spot HR/temp/SpO2, etc.). Optionally filter by meastypes. Values are decoded (value * 10^unit). This is NOT the main source for continuous watch vitals — use withings_get_intraday_activity (or withings_get_heart_rate / withings_get_body_temperature with include_intraday=true) for those.

ParametersJSON Schema
NameRequiredDescriptionDefault
offsetNoPagination offset from a previous more=true response.
enddateNoEnd unix timestamp (seconds). Default: now.
meastypesNoSpot measurement type IDs to include. Omit for all. Use withings_get_measure_types for the catalog. Continuous watch metrics are not in this list.
startdateNoStart unix timestamp (seconds). Default: 24h ago.

TDQS

A4.2/5.0
Behavior3/5

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

There are no annotations, so the description carries the full behavioral disclosure burden. It adds valuable decoding semantics (value * 10^unit), but it does not disclose response shape, pagination behavior, or read-only/safety characteristics beyond the word 'Fetch'.

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

Conciseness5/5

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

Three sentences with no filler: core function first, then filtering, then value decoding, then key negative guidance. The most important scoping is front-loaded.

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

Completeness4/5

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

Combined with a richly described schema (defaults, meastype catalog reference, offset semantics), the description covers purpose, routing, and decoding. The main gap is the absence of an output schema or a description of the response envelope, though the offset parameter hints at pagination.

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

Parameters3/5

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

Input schema coverage is 100%, so the baseline is 3. The description adds little beyond enumerating example measurement categories and saying meastypes can filter; it does not expand on startdate/enddate defaults or offset semantics, which the schema already covers.

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?

States a specific action and resource: fetching spot/scale health measurements via getmeas, with example categories (weight, composition, BP, spot HR/temp/SpO2). It also distinguishes itself by explicitly saying it is NOT the main source for continuous watch vitals and names alternatives.

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?

Gives a clear when-to-use context (spot/scale measurements optionally filtered by meastypes) and an explicit when-not clause with explicit alternative siblings: withings_get_intraday_activity, withings_get_heart_rate, and withings_get_body_temperature with include_intraday=true. This is strong routing guidance beyond the schema.

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

withings_get_measure_typesA

List known Withings measurement type IDs used by getmeas (weight, BP, SpO2, spot temperature, etc.). No API call. For continuous watch vitals (HR, core temp, SpO2), prefer withings_get_intraday_activity instead of these spot types.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A4.7/5.0
Behavior4/5

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

With no annotations, the description carries the full behavioral burden and does it well: 'No API call' is a significant behavioral disclosure. It also clarifies that these are spot measurement types rather than continuous watch vitals, which helps the agent set expectations about the data.

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

Conciseness5/5

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

Two sentences deliver purpose, an important behavioral note, and an alternative tool in that order. Every sentence adds value and there is no filler.

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?

For a zero-parameter static listing tool, the description covers what it returns, that it makes no API call, and when to prefer a sibling tool. Nothing essential is missing for an agent to select and invoke it correctly.

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?

The tool has zero parameters and schema coverage is 100%, so there is nothing for the description to add about individual arguments. The baseline for zero-parameter tools is 4, and the description appropriately avoids inventing parameter details.

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?

The description uses a specific verb ('List') and a concrete resource ('Withings measurement type IDs used by getmeas'), giving the agent a clear idea of what the tool returns. It also differentiates itself from the large sibling set by noting it is a static catalog, not a data-fetching tool.

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?

The description explicitly names when to avoid this tool ('For continuous watch vitals... prefer withings_get_intraday_activity instead of these spot types'), providing a direct alternative. This gives clear routing guidance beyond merely stating what the tool does.

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

withings_get_sleepA

Fetch high-frequency sleep stage and vital series for a time window (Sleep get): stages, HR, respiration, snoring, HRV, etc. Default range is the last 24 hours. Prefer withings_get_sleep_summary for multi-night overviews; use this for detailed series within a night. Typical sources: Sleep Analyzer / Sleep Mat, or watch sleep tracking.

ParametersJSON Schema
NameRequiredDescriptionDefault
enddateNoEnd unix timestamp (seconds). Default: now.
startdateNoStart unix timestamp (seconds). Default: 24h ago.
data_fieldsNoComma-separated series fields. Default: hr,rr,snoring,sdnn_1,rmssd,hrv_quality,mvt_score,chest_movement_rate

TDQS

A4.4/5.0
Behavior4/5

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

With no annotations present, the description carries the behavioral disclosure burden. It adds useful context beyond the raw operation: the default 24-hour time window, the high-frequency/nightly-scope behavior, and typical source devices. It does not mention limits or output volume, but the notable traits are disclosed.

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

Conciseness5/5

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

Three short sentences, each earning its place: the core behavior, the default range, the sibling differentiation, and context about typical sources. Key information is front-loaded with no filler or redundant restatement of the tool name.

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

Completeness4/5

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

For a simple tool with three optional, fully documented parameters, the description plus schema covers the essential invocation details. The only minor gap is a lack of explicit return-structure or data-format details, but the described series fields give a reasonable expectation.

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

Parameters3/5

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

Schema description coverage is 100%, so the schema already fully documents startdate, enddate, and data_fields including defaults. The description reinforces the 24-hour default and mentions series fields, but adds no parameter semantics beyond what the schema provides, so baseline 3 is appropriate.

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?

The description states a specific verb ('Fetch'), a precise resource ('high-frequency sleep stage and vital series'), and the data categories ('stages, HR, respiration, snoring, HRV'). It clearly differentiates itself from withings_get_sleep_summary, so an agent can distinguish it from its closest sibling 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.

Usage Guidelines5/5

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

The description gives explicit routing guidance: 'Prefer withings_get_sleep_summary for multi-night overviews; use this for detailed series within a night.' This tells the agent both when to use this tool and when to avoid it in favor of a named alternative.

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

withings_get_sleep_summaryA

Fetch per-night sleep summaries (score, stages, HR/RR stats, snoring, etc.). Default range is the last 7 days. Typical sources: Sleep Analyzer / Sleep Mat, or watch sleep tracking. For minute-level detail within a night, use withings_get_sleep.

ParametersJSON Schema
NameRequiredDescriptionDefault
enddateymdNoEnd date YYYY-MM-DD. Default: today UTC.
lastupdateNoOnly return nights updated after this unix timestamp. When set, date range params are omitted.
data_fieldsNoComma-separated fields. Default includes score, stages, HR/RR.
startdateymdNoStart date YYYY-MM-DD. Default: 7 days ago.

TDQS

A4.2/5.0
Behavior3/5

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

With no annotations, the description carries the full burden. It adds useful behavior: default range of 7 days, typical data sources, and summary-level granularity. However, it does not explicitly state that the operation is read-only, whether it can be called with no parameters, or what happens when no data exists. These are clear gaps for an unannotated tool.

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

Conciseness5/5

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

Three short sentences with no filler. The purpose is front-loaded, followed by default behavior, source context, and a clear pointer to the sibling. Every sentence earns its place.

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

Completeness4/5

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

For a simple read-style tool with fully documented parameters, the description covers the primary use case, default range, sources, and the main alternative. It is slightly incomplete in that it doesn't address response shape or edge cases, but the absence of annotations and output schema make those gaps minor rather than critical.

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

Parameters3/5

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 four parameters. The description adds a small amount of context by mentioning the default 7-day range and default fields (score, stages, HR/RR), but these largely mirror the schema defaults. No significant semantic value beyond the schema is added.

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?

The description opens with a specific verb and resource: 'Fetch per-night sleep summaries' followed by concrete data categories (score, stages, HR/RR stats, snoring). It clearly differentiates from the sibling withings_get_sleep by specifying 'per-night' and pointing to minute-level detail as the sibling's scope.

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?

The final sentence explicitly states when to use the alternative: 'For minute-level detail within a night, use withings_get_sleep.' It also gives default range context (last 7 days) and indicates this tool is for summaries, making the selection decision explicit.

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

withings_get_spo2A

Fetch spot SpO2 measurements (meastype 54) from getmeas. For continuous watch SpO2, prefer withings_get_intraday_activity with spo2_auto.

ParametersJSON Schema
NameRequiredDescriptionDefault
offsetNoPagination offset from a previous more=true response.
enddateNoEnd unix timestamp (seconds). Default: now.
startdateNoStart unix timestamp (seconds). Default: 24h ago.

TDQS

A4.2/5.0
Behavior3/5

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

There are no annotations, so the description carries the burden of behavioral disclosure. 'Fetch' implies a read-only operation, and mentioning 'from getmeas' plus meastype 54 adds useful implementation context. However, it does not describe pagination behavior, response format, or any caveats, so the transparency is adequate but incomplete.

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

Conciseness5/5

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

Two tightly written sentences with no filler. The primary purpose is front-loaded, and the routing guidance to the alternative tool is included without bloating the description.

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

Completeness4/5

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

For a simple read-only fetch tool with all parameters documented in the schema and a clear alternative, the description is nearly complete. It could optionally mention the response shape or pagination behavior since there is no output schema, but the agent has enough information to call the tool correctly.

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

Parameters3/5

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

Schema description coverage is 100%, so the parameters (offset, enddate, startdate) are already fully documented in the schema. The description adds no new parameter-level semantics, which matches the baseline of 3 for high schema coverage.

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?

Description states a specific verb ('Fetch'), a specific resource ('spot SpO2 measurements'), and the precise meastype 54. It also differentiates from the continuous watch SpO2 sibling tool, so an agent can immediately tell what this tool is for.

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?

Explicitly gives the alternative tool (withings_get_intraday_activity with spo2_auto) and the exact condition that should route the agent there ('continuous watch SpO2'). This leaves no ambiguity about when to choose this tool over its sibling.

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

withings_get_weightB

Fetch scale weight measurements (meastype 1). Typical source: Withings scale.

ParametersJSON Schema
NameRequiredDescriptionDefault
offsetNoPagination offset from a previous more=true response.
enddateNoEnd unix timestamp (seconds). Default: now.
startdateNoStart unix timestamp (seconds). Default: 24h ago.

TDQS

B3.4/5.0
Behavior3/5

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

With no annotations, the description carries the behavioral burden. 'Fetch' signals a read operation and 'meastype 1' documents the internal filter, which is useful. However, it does not disclose output shape, pagination behavior, or any rate-limit or side-effect caveats; for a simple read tool this is minimally sufficient but not rich.

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

Conciseness5/5

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

The description is one short, front-loaded sentence that states the core purpose, with a brief contextual note about the source device. Every word earns its place and there is no padding.

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

Completeness4/5

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

For a simple read-only tool with zero required parameters and fully documented schemas, the essentials are covered. The main missing context is a brief routing note that explains when to prefer this tool over the many sibling measurement tools.

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

Parameters3/5

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

Schema description coverage is 100% for all three optional parameters, so the baseline is 3. The description adds no per-parameter meaning beyond what the schema already provides, though the fixed 'meastype 1' detail is relevant context for interpreting what the parameters affect.

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

Purpose4/5

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

Description names a clear verb ('Fetch') and resource ('scale weight measurements'), and anchors it to Withings meastype 1. This is enough to distinguish it from siblings like blood pressure, heart rate, or temperature tools, though it does not explicitly contrast it with the broader withings_get_measurements sibling.

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

Usage Guidelines2/5

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

No guidance is given on when to use this tool versus alternatives. 'Typical source: Withings scale' provides a little context, but there are no exclusions, no conditions, and no mention of sibling tools such as get_body_composition or get_measurements. An agent must infer usage entirely from the name and short description.

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

withings_get_workoutsA

Fetch logged workouts from the watch/activity tracker for a date range (default last 7 days). Includes session type, duration, and optional metrics like calories, HR, distance, steps.

ParametersJSON Schema
NameRequiredDescriptionDefault
offsetNoPagination offset.
enddateymdNoEnd date YYYY-MM-DD. Default: today UTC.
data_fieldsNoOptional workout data fields (e.g. calories,hr_average,hr_min,hr_max,distance,steps,elevation).
startdateymdNoStart date YYYY-MM-DD. Default: 7 days ago.

TDQS

A3.8/5.0
Behavior3/5

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

Annotations are absent, so the description carries the burden. It discloses the default 7-day range and optional metric fields, but does not mention pagination behavior, response shape, or what happens when no workouts exist. It provides some transparency but not full behavioral disclosure.

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

Conciseness5/5

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

Two sentences with no wasted words. The main purpose and defaults are front-loaded, and the optional metrics are listed efficiently. Every clause contributes value.

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

Completeness4/5

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

For a read-only fetch tool with no required parameters, no output schema, and no annotations, the description covers the essential behavior: source, default range, and available metrics. It could explicitly mention pagination or comma-separated data_fields, but the schema already documents the parameters, so the description is nearly complete.

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

Parameters3/5

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

Schema description coverage is 100%, so the schema fully documents all four parameters. The description adds the default range ('last 7 days') and example data_fields values, which are small additions. It does not compensate for anything missing since the schema already covers the parameter meanings.

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?

The description states the verb 'Fetch', the resource 'logged workouts', and the source 'watch/activity tracker', with a date range default. It clearly distinguishes this from sibling tools like withings_get_activity by emphasizing the workout-log focus.

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

Usage Guidelines3/5

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

The description gives default date-range context and mentions optional metrics, which implies when it is used. However, it does not explicitly explain when to prefer this tool over sibling tools like withings_get_activity or withings_get_measurements, so usage guidance is only partially provided.

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

withings_list_devicesA

List Withings devices paired to the authorized account (e.g. Scale, Activity Tracker, Sleep Monitor). Useful to see which data sources exist before querying.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A4.2/5.0
Behavior3/5

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

With no annotations provided, the description carries the full burden of behavioral disclosure. 'List' implies a read-only operation, and the description adds context about account binding and the purpose of the call. However, it does not explicitly state that the operation is safe, idempotent, or free of side effects, nor does it mention auth or error behavior. The verb covers the most important trait but the description doesn't fully embrace the responsibility.

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

Conciseness5/5

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

The description is two sentences with no wasted words. The core claim is front-loaded, the examples improve comprehension, and the usage hint follows naturally. Every sentence earns its place.

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

Completeness4/5

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

For a zero-parameter, no-output-schema tool, this description is nearly complete: it says what is listed, whose account is involved, gives examples, and explains why the tool is useful. It could mention that no arguments are required or describe the response shape, but those are minor given the schema and simplicity. It fully equips an agent to select and invoke the tool correctly.

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?

The tool has zero parameters and 100% schema coverage, so the parameter semantics are effectively complete by definition. With no parameters to document, the description's mention of returned device types adds context without being necessary. Baseline for zero parameters is 4, and nothing here pushes it lower.

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?

The description uses a specific verb ('List') and names the exact resource ('Withings devices paired to the authorized account'), with concrete examples of device types. It clearly distinguishes this tool from the many data-query sibling tools by focusing on device discovery rather than data retrieval.

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

Usage Guidelines4/5

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

The description provides clear timing guidance: use it 'before querying' to see which data sources exist. It does not explicitly name alternatives, but none of the siblings serve the same discovery purpose, so the implicit context is sufficient. It lacks an explicit when-not-to-use clause, keeping it just below a perfect score.

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

withings_list_heart_recordsA

List ECG / heart recordings (Heart v2 list), including AFib classification metadata. Requires an ECG-capable device (e.g. ScanWatch ECG / BeamO). Often empty if the user only has a scale + non-ECG tracker. Default range: last 30 days. Use withings_get_heart_rate with include_intraday for continuous watch HR instead.

ParametersJSON Schema
NameRequiredDescriptionDefault
offsetNoPagination offset.
enddateNoEnd unix timestamp (seconds). Default: now.
startdateNoStart unix timestamp (seconds). Default: 30 days ago.

TDQS

A4.2/5.0
Behavior4/5

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

With no annotations, the description carries the behavioral disclosure burden. It provides meaningful traits: device prerequisite, common empty-result scenario, default 30-day range, and AFib metadata in the response. The verb 'List' implies read-only behavior, but the description does not explicitly state pagination behavior or what a returned record contains beyond AFib metadata, so it is slightly incomplete.

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

Conciseness5/5

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

The description is compact and front-loaded: purpose first, then prerequisites, empty-result context, default range, and alternative tool. Every sentence adds useful decision-making information without redundancy or filler.

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

Completeness4/5

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

For a simple list tool with no required parameters and full schema coverage, the description covers prerequisites, typical emptiness, defaults, and a relevant alternative. It is slightly incomplete in not clarifying the relationship to withings_get_heart_ecg or describing pagination/return structure, but the essentials for correct invocation are present.

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

Parameters3/5

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

The input schema already describes all three parameters with 100% coverage, including defaults for startdate and enddate. The description mostly restates the default 30-day range and adds no significant parameter-level meaning beyond the schema, so it stays at the baseline for fully documented schemas.

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

Purpose4/5

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

The description clearly states a specific verb ('List'), resource ('ECG / heart recordings'), and endpoint identity ('Heart v2 list'), plus the notable output detail of AFib classification metadata. It does not explicitly distinguish itself from the similarly named sibling withings_get_heart_ecg, so while the purpose is clear, differentiation from all close siblings is incomplete.

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?

The description explicitly names an alternative tool (withings_get_heart_rate with include_intraday) for continuous watch HR, gives a clear device prerequisite (ECG-capable device), and notes when results are likely empty. This gives an agent concrete guidance on when to choose this tool versus another.

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.

  1. 17 tool updatesv1.0.0
    • First observedwithings_get_activity
    • First observedwithings_get_blood_pressure
    • First observedwithings_get_body_composition
    • First observedwithings_get_body_temperature
    • First observedwithings_get_goals
    • First observedwithings_get_heart_ecg
    • First observedwithings_get_heart_rate
    • First observedwithings_get_intraday_activity
    • First observedwithings_get_measure_types
    • First observedwithings_get_measurements
    • First observedwithings_get_sleep
    • First observedwithings_get_sleep_summary
    • First observedwithings_get_spo2
    • First observedwithings_get_weight
    • First observedwithings_get_workouts
    • First observedwithings_list_devices
    • First observedwithings_list_heart_records

TDQS

A3.8/5.0

Scored across 17 tools

Disambiguation3/5

Several tools overlap: withings_get_measurements overlaps with the weight, body composition, blood pressure, SpO2, temperature, and heart rate getters, and withings_get_intraday_activity overlaps with continuous HR/temperature retrieval. The descriptions do a good job of clarifying boundaries, but the sheer number of closely related data-query tools creates some selection ambiguity.

Naming Consistency5/5

All tools follow the consistent withings_<verb>_<noun> pattern using snake_case, with list_ reserved for collection enumeration and get_ for data retrieval. Even if some object names vary in specificity, the pattern is predictable and easy to infer.

Tool Count4/5

At 17 tools, the server is slightly above the ideal 3-15 range, but the count is reasonable for the breadth of Withings health data domains. A few redundant measurement-specific wrappers around withings_get_measurements add bulk, but each tool still maps to a meaningful API use case.

Completeness4/5

The server covers the major Withings data domains well: devices, daily activity, intraday vitals, workouts, sleep summaries and detailed sleep, scale measurements, ECG, and goals. Minor gaps exist—such as no explicit user/profile retrieval and no write/update capabilities—but those are largely outside the apparent read-only scope.

Maintenance

ActivityMaintained
ResponsivenessNo issues

Related MCP Connectors

Related MCP Servers

  • F
    license
    Not graded
    quality
    C
    maintenance
    Enables retrieval of health data from Withings smart scales including weight measurements and comprehensive body composition metrics like fat mass, muscle mass, and hydration levels. Supports multiple users, unit preferences, and OAuth authentication for secure access to personal health data.
    2
    -
  • F
    license
    Not graded
    quality
    Not graded
    maintenance
    Enables AI assistants to access and analyze Oura Ring health data including sleep, readiness, activity, and stress metrics. Supports customizable queries, correlation analysis, and visualization capabilities for comprehensive health insights.
    -
  • A
    license
    A
    quality
    B
    maintenance
    Enables access to Withings Health API data including body measurements, activity tracking, sleep analysis, workouts, and heart rate monitoring through OAuth2 authentication.
    8
    1
    MIT