Withings MCP Server
Click on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@Withings MCP ServerWhat was my sleep score last night?"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
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
authhelper — 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 |
|
Watch / activity tracker | Continuous HR, core body temperature, SpO2, steps |
|
Sleep mat / analyzer (if you have one) | Night summaries & series |
|
BPM (if you have one) | Spot blood pressure |
|
Spot vs intraday
Spot (
getmeas/ tools withoutinclude_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 andcore_body_temperaturelive.
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
Create an application
Note Client ID and Client Secret
Register this redirect URI exactly:
http://localhost:8765/callback2. 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 authOr from source:
npm ci && npm run build
WITHINGS_CLIENT_ID=... WITHINGS_CLIENT_SECRET=... node dist/index.js authOpen the printed authorize URL in your browser
Log in to Withings and accept
Copy
refresh_tokenfrom the JSON printed on stdout
Optional: write tokens to a file:
... auth --write ./tokens.json3. 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 |
| Yes | OAuth client ID |
| Yes | OAuth client secret |
| Yes (MCP) | Refresh token from |
| No | Path to persist tokens (default |
| No | Auth callback port (default |
| No |
|
OAuth scopes requested: user.info, user.metrics, user.activity, user.sleepevents.
Tools
Tool | Best for | Notes |
| Reference | Static meastype catalog |
| Scale / spot metrics | Filter with |
| Scale | Weight (type 1) |
| Scale | Fat, muscle, bone, hydration |
| BPM / scale spot | Systolic / diastolic / pulse |
| Watch (intraday) or spot | Use |
| Watch (intraday) or spot | Use |
| Spot SpO2 | Continuous watch SpO2 → |
| Watch daily totals | Steps, calories, HR zones |
| Watch continuous vitals | HR, temp, SpO2, steps; ≤24h per call |
| Watch workouts | Logged sessions |
| Sleep device / watch nights | Per-night summaries (default 7 days) |
| Sleep series | High-frequency stages / vitals (default 24h) |
| ECG devices | Often empty without ECG hardware |
| ECG devices | Single signal by |
| Account | Paired devices |
| 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=debugLogged 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 authImages 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 |
| Refresh token expired or revoked — re-run |
| Rate limited — back off |
Empty weight/composition | No scale sync in range |
Empty HR/temp without intraday | Watch data is usually intraday — set |
Empty data ( | No measurements in range, or device never synced that metric |
MCP client hangs / protocol errors | Ensure nothing else writes to stdout; set |
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 toolswithings_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.
| Name | Required | Description | Default |
|---|---|---|---|
| offset | No | Pagination offset. | |
| enddateymd | No | End date YYYY-MM-DD. Default: today UTC. | |
| data_fields | No | Comma-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 | |
| startdateymd | No | Start date YYYY-MM-DD. Default: 7 days ago. |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| offset | No | Pagination offset from a previous more=true response. | |
| enddate | No | End unix timestamp (seconds). Default: now. | |
| startdate | No | Start unix timestamp (seconds). Default: 24h ago. |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| offset | No | Pagination offset from a previous more=true response. | |
| enddate | No | End unix timestamp (seconds). Default: now. | |
| startdate | No | Start unix timestamp (seconds). Default: 24h ago. |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| offset | No | Pagination offset from a previous more=true response. | |
| enddate | No | End unix timestamp (seconds). Default: now. | |
| startdate | No | Start unix timestamp (seconds). Default: 24h ago. | |
| include_intraday | No | If true, also fetch watch intraday core_body_temperature via getintradayactivity (capped to 24h). Recommended for ScanWatch / activity trackers. |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| signalid | Yes | ECG signal id returned by withings_list_heart_records. |
TDQS
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.
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.
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.
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.
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.
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).
| Name | Required | Description | Default |
|---|---|---|---|
| offset | No | Pagination offset from a previous more=true response. | |
| enddate | No | End unix timestamp (seconds). Default: now. | |
| startdate | No | Start unix timestamp (seconds). Default: 24h ago. | |
| include_intraday | No | If true, also fetch continuous watch heart_rate via getintradayactivity (capped to 24h). Recommended for ScanWatch / activity trackers. |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| enddate | No | End unix timestamp. Default: now. | |
| startdate | No | Start unix timestamp. Default: 24h ago. | |
| data_fields | No | Comma-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
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| offset | No | Pagination offset from a previous more=true response. | |
| enddate | No | End unix timestamp (seconds). Default: now. | |
| meastypes | No | Spot measurement type IDs to include. Omit for all. Use withings_get_measure_types for the catalog. Continuous watch metrics are not in this list. | |
| startdate | No | Start unix timestamp (seconds). Default: 24h ago. |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full 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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| enddate | No | End unix timestamp (seconds). Default: now. | |
| startdate | No | Start unix timestamp (seconds). Default: 24h ago. | |
| data_fields | No | Comma-separated series fields. Default: hr,rr,snoring,sdnn_1,rmssd,hrv_quality,mvt_score,chest_movement_rate |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| enddateymd | No | End date YYYY-MM-DD. Default: today UTC. | |
| lastupdate | No | Only return nights updated after this unix timestamp. When set, date range params are omitted. | |
| data_fields | No | Comma-separated fields. Default includes score, stages, HR/RR. | |
| startdateymd | No | Start date YYYY-MM-DD. Default: 7 days ago. |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| offset | No | Pagination offset from a previous more=true response. | |
| enddate | No | End unix timestamp (seconds). Default: now. | |
| startdate | No | Start unix timestamp (seconds). Default: 24h ago. |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| offset | No | Pagination offset from a previous more=true response. | |
| enddate | No | End unix timestamp (seconds). Default: now. | |
| startdate | No | Start unix timestamp (seconds). Default: 24h ago. |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| offset | No | Pagination offset. | |
| enddateymd | No | End date YYYY-MM-DD. Default: today UTC. | |
| data_fields | No | Optional workout data fields (e.g. calories,hr_average,hr_min,hr_max,distance,steps,elevation). | |
| startdateymd | No | Start date YYYY-MM-DD. Default: 7 days ago. |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| offset | No | Pagination offset. | |
| enddate | No | End unix timestamp (seconds). Default: now. | |
| startdate | No | Start unix timestamp (seconds). Default: 30 days ago. |
TDQS
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.
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.
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.
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.
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.
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.
17 tool updates
v1.0.0- First observed
withings_get_activity - First observed
withings_get_blood_pressure - First observed
withings_get_body_composition - First observed
withings_get_body_temperature - First observed
withings_get_goals - First observed
withings_get_heart_ecg - First observed
withings_get_heart_rate - First observed
withings_get_intraday_activity - First observed
withings_get_measure_types - First observed
withings_get_measurements - First observed
withings_get_sleep - First observed
withings_get_sleep_summary - First observed
withings_get_spo2 - First observed
withings_get_weight - First observed
withings_get_workouts - First observed
withings_list_devices - First observed
withings_list_heart_records
TDQS
Scored across 17 tools
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.
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.
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.
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
Related MCP Connectors
Read wearables and lab health data — sleep, activity, workouts, timeseries, lab tests and orders.
- freddyOAuthcoach.freddy
Connect your wearables, rings and training apps, then ask your AI about your own health data.
MCP server for Withings health data — sleep, activity, heart, and body metrics.
Connect your health, fitness, nutrition, sleep, and wearable data to your AI assistant.
Related MCP Servers
- FlicenseNot gradedqualityCmaintenanceEnables 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-
- FlicenseNot gradedqualityNot gradedmaintenanceEnables 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.-
- AlicenseAqualityBmaintenanceEnables access to Withings Health API data including body measurements, activity tracking, sleep analysis, workouts, and heart rate monitoring through OAuth2 authentication.81MIT
- AlicenseCqualityCmaintenanceProvides access to body composition data from Renpho smart scales, enabling users to query weight, BMI, body fat percentage, muscle mass, and other health metrics with trend analysis over customizable time periods.66MIT