Withings MCP
This local-first MCP server securely connects AI agents to Withings health data (body composition, sleep, activity, heart) while keeping OAuth tokens on your machine. Capabilities include:
Health data retrieval: Body measures (weight, fat%, muscle, bone, water), daily activity (steps, calories, distance), workouts, sleep summaries/detail, and heart records (ECG, BP).
Wellness summaries: Generate daily and weekly summaries with trends, comparisons, bottleneck analysis, and personalized action plans; normalized wellness context for recommendation engines.
Authentication management: Generate OAuth URLs, exchange codes for local tokens, revoke access, and check connection status—all without exposing secrets.
Discovery & metadata: Inspect supported data domains, required scopes, privacy modes, recommended first calls, and access machine-readable manifests and demo payloads for AI agents.
User profile: Read/update a shared Delx Wellness profile (goals, devices, preferences) across connectors, with a guided onboarding flow.
Privacy & security: Three privacy modes (summary, structured, raw) with redaction of GPS/secrets; optional SQLite read-through cache; local token storage with restrictive permissions.
AI integration: Built for MCP clients (Claude, Cursor, Hermes) with dedicated tool prefix, direct access, and no gateway restart required.
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 MCPget my daily summary for today"
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.
⚡ One-command install with Delx Wellness for Hermes:
npx -y delx-wellness-hermes setup— preconfigures this connector and the other 8 in a dedicated Hermes profile.Or wire it standalone into Claude Desktop / Cursor / ChatGPT Desktop — see the install section below.
HTTP (v2 stateless)
Default is stdio. Optional Streamable HTTP — no session id, JSON responses, loopback only:
npx -y withings-mcp-unofficial --http
# GET http://127.0.0.1:3000/health
# POST http://127.0.0.1:3000/mcp (sessionless)Env: WITHINGS_MCP_HOST, WITHINGS_MCP_PORT, WITHINGS_MCP_TRANSPORT=http.
Local-first MCP server that connects AI agents to your Withings body, sleep, activity and heart data.
Unofficial project. Not affiliated with, endorsed by or supported by Withings. Withings is a trademark of its respective owner. Use this only with your own Withings account and in line with the Withings Public API terms.
Built by David Mosiah for people who use Claude, Cursor, Hermes, OpenClaw or other MCP-compatible agents to think about body composition, sleep and long-term health trends — without copy-pasting numbers from the Withings app.
Part of Delx Wellness, a registry of local-first wellness MCP connectors.
If this connector helps your agent workflow, please star the repo. Stars make the project easier for other AI builders to discover and help Delx keep shipping local-first wellness infrastructure.
Related MCP server: Fitbit MCP
Why this exists
Withings has the longest-running consumer body-composition and sleep ecosystem (smart scales, Sleep Analyzer, ScanWatch). The data is rich — punctual weight + body fat + muscle mass measurements, sleep stages, ECG-grade heart records — but the Withings Public API uses a signed-token OAuth flow that's heavier than most consumer APIs.
This package handles the signed OAuth dance locally, normalizes responses, and exposes Withings through the Model Context Protocol. Tokens never leave your machine. Privacy-mode defaults keep raw payloads opt-in.
Setup in 60 seconds
You'll need a Withings app (create one here) with redirect URI http://127.0.0.1:3000/callback.
npx -y withings-mcp-unofficial setup # interactive: paste client id + secret
npx -y withings-mcp-unofficial auth # opens browser, captures the OAuth code
npx -y withings-mcp-unofficial doctor # verifies you're readyRecommended scopes:
user.activity user.metricsThen add this to your MCP client config:
{
"mcpServers": {
"withings": {
"command": "npx",
"args": ["-y", "withings-mcp-unofficial"]
}
}
}For Claude Desktop, run setup --client claude and the snippet is written for you.
Note: Withings OAuth authorization codes are short-lived (a few minutes). Don't pause between approving the consent screen and
withings_exchange_coderunning.
Try it with your agent
Three things to ask first:
Use withings_connection_status to check setup, then run withings_daily_summary.
Give me a 5-line wellness brief for today.Call withings_weekly_summary with response_format=json. Identify my biggest
sleep/body bottleneck and give me a next-week plan.Use the withings_body_sleep_investigation prompt, after=2026-04-01.
Walk me through what changed in body composition + sleep.Data availability
This package uses the official Withings Public API. When this README says raw, it means the upstream Withings JSON for a supported endpoint — not raw device sensor streams.
Data | Available | Notes |
Body measures (weight, fat %, muscle, bone, water) | ✓ | Requires |
Daily activity (steps, calories, distance, intensity) | ✓ | Requires |
Workouts + sport metadata | ✓ | Requires |
Sleep summaries (duration, stages, efficiency, HR) | ✓ | Requires |
Sleep detail records | ✓ | When the device exposes them |
Heart records (ECG, BP, etc.) | ✓ | Requires |
Continuous sensor telemetry | — | Not exposed by Withings Public API |
Tools
Start with these:
withings_connection_status— verify local setup before calling Withingswithings_data_inventory— inventory supported data domains, scopes, privacy modes and recommended first calls without calling Withings APIs.withings_daily_summary— body, sleep, activity and heart brief for todaywithings_weekly_summary— scorecard, comparison vs prior week, next-week plan
Auth & diagnostics
withings_capabilities,withings_agent_manifest,withings_privacy_audit,withings_cache_statuswithings_get_auth_url,withings_exchange_code,withings_revoke_access
Body & metrics
withings_list_body_measures— punctual weight/composition records. Useafter/beforeasYYYY-MM-DDor ISO 8601 for large histories; the server sends Withingsstartdate/enddate(Unix seconds) upstream and caps returned records withlimit.Date filters are action-aware:
getactivity/getworkouts/ sleepgetsummarysend civilstartdateymd/enddateymd;getmeas, sleep detail, and heart list keep epochstartdate/enddate. Offset ISO instants keep their exact epoch conversion on epoch-style actions.withings_list_heart— heart records when device/plan permit
Activity
withings_list_activity— daily activity summarieswithings_list_workouts— logged workouts
Sleep
withings_list_sleep_summary— daily sleep summaries with HR/stage fieldswithings_list_sleep— detailed sleep records
Prompts
withings_daily_checkin— practical daily health and body check-inwithings_weekly_review— review trends across body, sleep, activitywithings_body_sleep_investigation— investigate body measures + sleep together
Resources
withings://capabilities,withings://agent-manifestwithings://latest/activity,withings://latest/sleepwithings://summary/daily,withings://summary/weekly
Privacy & security
OAuth tokens are stored in
~/.withings-mcp/tokens.jsonwith0600permissions and are never returned by tools.Withings uses a signed-request OAuth flow — the package handles signing locally; client secrets never reach the MCP client.
The server never prints access or refresh tokens.
WITHINGS_PRIVACY_MODEdefaults tostructured. Raw Withings JSON is opt-in viarawmode or per-call override.Structured mode preserves complete upstream physiological fields, including future Withings additions, while removing GPS and secret-bearing values.
withings_revoke_accessclears local tokens; full account-side token revocation depends on your Withings plan.The MCP client never sees access or refresh tokens.
This is not medical advice. Withings exposes data that may resemble medical signals (ECG, blood pressure) but this server is for personal AI workflows, not diagnosis or treatment.
Configuration
setup writes most of these into ~/.withings-mcp/config.json (0600). Manual env override is supported:
WITHINGS_CLIENT_ID=…
WITHINGS_CLIENT_SECRET=…
WITHINGS_REDIRECT_URI=http://127.0.0.1:3000/callback
# Optional
WITHINGS_SCOPES="user.activity user.metrics"
WITHINGS_PRIVACY_MODE=structured # summary | structured | raw
WITHINGS_CACHE=sqlite # optional read-through cache
WITHINGS_TOKEN_PATH=~/.withings-mcp/tokens.json
WITHINGS_CACHE_PATH=~/.withings-mcp/cache.sqliteHermes / remote setup
npx -y withings-mcp-unofficial setup --client hermes --no-auth
npx -y withings-mcp-unofficial auth # run locally if browser auth is needed
npx -y withings-mcp-unofficial doctor --client hermes
hermes mcp test withingsAfter Hermes config changes, use /reload-mcp or hermes mcp test withings. Don't restart the gateway for normal data access.
If browser OAuth has to happen on a different machine than Hermes, run auth locally and copy ~/.withings-mcp/tokens.json to the server with chmod 600.
Requirements
Node.js 20+
A Withings app at https://account.withings.com/partner/dashboard_oauth2 with redirect URI
http://127.0.0.1:3000/callback
Development
git clone https://github.com/davidmosiah/withings-mcp.git
cd withings-mcp
npm install
npm test
npm run buildTest with MCP Inspector:
npx @modelcontextprotocol/inspector node dist/index.jsLinks
Docs site: https://wellness.delx.ai/connectors/withings
Legacy docs: https://withingsmcp.vercel.app/
Delx Wellness registry: https://github.com/davidmosiah/delx-wellness
Connector quality standard: https://github.com/davidmosiah/delx-wellness/blob/main/docs/connector-quality-standard.md
Withings Public API docs: https://developer.withings.com/api-reference/
See also
The full Delx Wellness connector library:
Provider | Package | Repo |
WHOOP | ||
Oura | ||
Garmin | ||
Strava | ||
Fitbit | ||
Withings | ||
Apple Health | ||
Polar | ||
Nourish (nutrition) |
One-command setup for Hermes — preconfigures every connector above plus wellness skills + onboarding: delx-wellness-hermes.
📧 Contact & Support
📨 support@delx.ai — general questions, integration help, partnerships
🐛 Bug reports / feature requests — GitHub Issues
🐦 Updates — @delx369 on X
🌐 Site — wellness.delx.ai
License
MIT — see LICENSE.
Disclaimer
This software is provided as-is. It is not a medical device, does not provide medical advice, and should not be used for diagnosis or treatment. Withings exposes data that may resemble medical signals (ECG, blood pressure, body composition) — always consult qualified professionals for medical concerns.
Skill or MCP
Same package, two doors. MCP registers tools on stdio/HTTP. The skill can drive the same tools through the CLI when the client has no MCP:
npx -y withings-mcp-unofficial call withings_connection_status --json '{}'Copy skill/SKILL.md into your agent skills dir.
Available Tools
23 toolswithings_agent_manifestWithings Agent ManifestARead-onlyIdempotent
Machine-readable install, runtime and client guidance for AI agents. Does not call Withings or expose secrets.
| Name | Required | Description | Default |
|---|---|---|---|
| client | No | generic | |
| response_format | No | markdown |
Output Schema
| Name | Required | Description |
|---|---|---|
| links | Yes | |
| oauth | Yes | |
| client | Yes | |
| hermes | Yes | |
| package | Yes | |
| project | Yes | |
| mcp_name | Yes | |
| resources | Yes | |
| unofficial | Yes | |
| agent_rules | Yes | |
| standard_tools | Yes | |
| troubleshooting | Yes | |
| recommended_first_calls | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate read-only, idempotent, non-destructive behavior. The description adds value by explicitly stating it 'does not call Withings or expose secrets', confirming no external side effects or security risks beyond what annotations show.
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 extremely concise with two sentences: the first defines the purpose, and the second clarifies constraints. Every word adds value, and no extraneous information is present.
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 simplicity (optional parameters, no required fields, output schema present), the description covers core purpose and safety. However, it could be more complete by mentioning the parameters or the structure of the manifest output, even though output schema exists.
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 0%, but the description fails to explain the two parameters ('client' and 'response_format') or their enums. While parameter names and defaults offer some self-evidence, the description does not clarify their purpose, which is necessary given the lack of 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 clearly states the tool provides 'Machine-readable install, runtime and client guidance for AI agents' with a specific verb and resource. It distinguishes itself from siblings by explicitly noting it 'Does not call Withings or expose secrets', setting it apart from data retrieval or action 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 implies the tool is for obtaining configuration guidance but does not explicitly state when to use it over alternatives like withings_capabilities or withings_cache_status. No usage exclusions or context are provided, leaving the agent to infer from the name and siblings.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
withings_cache_statusWithings Cache StatusARead-onlyIdempotent
Show optional local SQLite cache status. Enable with WITHINGS_CACHE=sqlite or WITHINGS_CACHE=true.
| Name | Required | Description | Default |
|---|---|---|---|
| response_format | No | markdown |
Output Schema
| Name | Required | Description |
|---|---|---|
| path | Yes | |
| enabled | Yes | |
| entries | Yes | |
| http_cache | No | |
| newest_cached_at | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate read-only and idempotent behavior. The description adds context about enabling caching via environment variables, which is a behavioral prerequisite not captured in annotations.
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 extremely concise with two sentences, front-loading the core purpose and adding a practical note about enabling the cache. No redundant information.
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?
While the tool is simple and has an output schema, the description leaves ambiguity about what the status output actually contains (e.g., enabled/disabled, size, etc.) and does not clarify behavior when cache is not enabled.
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 description does not mention the 'response_format' parameter at all. With 0% schema description coverage, the description should compensate but fails to add any meaning beyond the schema's enum values.
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 'Show' and resource 'optional local SQLite cache status', and distinguishes it from sibling tools which focus on other functionalities like connection status or 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?
No guidance is provided on when to use this tool versus alternatives. The description only explains what it does and how to enable the cache, but does not specify scenarios where checking cache status is appropriate.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
withings_capabilitiesWithings MCP CapabilitiesARead-onlyIdempotent
Explain supported Withings data, privacy boundaries, recommended agent workflow and project links.
| Name | Required | Description | Default |
|---|---|---|---|
| response_format | No | markdown |
Output Schema
| Name | Required | Description |
|---|---|---|
| links | Yes | |
| creator | Yes | |
| project | Yes | |
| mcp_name | Yes | |
| auth_model | Yes | |
| unofficial | Yes | |
| api_boundary | Yes | |
| privacy_modes | Yes | |
| client_aliases | Yes | |
| supported_data | Yes | |
| contribution_paths | Yes | |
| recommended_agent_flow | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, destructiveHint=false, and idempotentHint=true. The description adds context about explaining data, privacy, and workflow, but it does not disclose additional behavioral traits beyond what annotations provide. No contradiction with annotations.
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 that front-loads the verb 'Explain' and includes all key elements: data, privacy boundaries, workflow, and links. Every word earns its place with no 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?
For a simple informational tool with a single optional parameter and an output schema, the description sufficiently covers what the tool does. It could optionally mention that it is for the agent to understand capabilities, but it is already complete enough for its 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 only parameter ('response_format') is an enum with values 'markdown' and 'json', and it is self-explanatory from its name and enum values. Although schema description coverage is 0%, the parameter is trivial, and the description does not need to elaborate further. The description adds marginal value over the schema.
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 tool's purpose: 'Explain supported Withings data, privacy boundaries, recommended agent workflow and project links.' It uses a specific verb ('Explain') and resource ('capabilities'), and it distinguishes itself from sibling tools that focus on specific data or actions.
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 implies usage for understanding the tool's capabilities and context, but it does not explicitly state when to use this tool versus alternatives or provide exclusions. It meets the minimum viable standard but lacks explicit guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
withings_connection_statusWithings Connection StatusARead-onlyIdempotent
Check local Withings config, token file, Node version, privacy mode, cache readiness and optional MCP client readiness without calling Withings or exposing secrets.
| Name | Required | Description | Default |
|---|---|---|---|
| client | No | generic | |
| response_format | No | markdown |
Output Schema
| Name | Required | Description |
|---|---|---|
| ok | Yes | |
| node | Yes | |
| cache | Yes | |
| oauth | Yes | |
| token | Yes | |
| client | No | |
| config | Yes | |
| next_steps | Yes | |
| missing_env | Yes | |
| privacy_mode | Yes | |
| redirect_uri | No | |
| required_env | Yes | |
| client_checks | No | |
| ready_for_withings_api | Yes | |
| automatic_auth_supported | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare read-only, idempotent, non-destructive behavior. The description adds valuable insight: it explicitly states that the tool does not call Withings or expose secrets, which goes beyond the annotations to clarify what it does NOT do.
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 sentence that efficiently conveys the tool's purpose and scope. It is front-loaded and contains no verbose or redundant phrases.
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?
While the description covers the main purpose and the output schema likely handles return values, the omission of parameter semantics reduces completeness. For a tool with 0% schema description coverage, the description should explain the parameters to be fully informative.
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 0% for the two parameters. The description fails to explain the purpose of the 'client' and 'response_format' parameters, leaving a significant gap. The parameter names are somewhat self-explanatory, but the description should explicitly link them to the tool's behavior.
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 clearly specifies that the tool checks local Withings config, token file, Node version, privacy mode, cache readiness, and optional MCP client readiness, all without external calls or exposing secrets. This distinguishes it from siblings that perform API calls or other specific checks.
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 implies when to use this tool (checking local connection status without external calls), but does not explicitly state when not to use it or name specific alternatives. However, the context is clear enough for an AI agent to differentiate from siblings.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
withings_daily_summaryWithings Daily Wellness SummaryBRead-onlyIdempotent
Build a practical daily summary from Withings activity, sleep and body/heart data when available. Read-only and non-medical.
| Name | Required | Description | Default |
|---|---|---|---|
| days | No | Lookback window for recent training context. | |
| timezone | No | IANA timezone used only for display, e.g. America/New_York. | UTC |
| response_format | No | markdown |
Output Schema
| Name | Required | Description |
|---|---|---|
| kind | Yes | |
| generated_at | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already provide readOnlyHint, openWorldHint, idempotentHint, destructiveHint. The description adds 'Read-only and non-medical', which is consistent but adds minimal extra context. No 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?
The description is two short sentences, front-loaded with the main action. Every word is meaningful with no fluff.
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 gives a reasonable overview but lacks details on data availability handling, expected output structure (though output schema exists), and specific use cases. Adequate but could be improved.
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 description does not elaborate on any of the three parameters (days, timezone, response_format). With schema coverage at 67%, the description adds no additional meaning beyond what the schema already provides.
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 'Build' and the resource 'daily summary', and specifies the data sources (activity, sleep, body/heart). It distinguishes from sibling tools like withings_list_activity and withings_weekly_summary by focusing on a consolidated summary.
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 does not explicitly state when to use this tool versus alternatives. While it mentions 'when available', it lacks guidance on scenarios where raw data listings or weekly summaries might be more appropriate.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
withings_data_inventoryWithings Data InventoryARead-onlyIdempotent
Inventory supported Withings data domains, auth scope requirements, privacy boundary and recommended first calls. Does not call Withings APIs or expose user data.
| Name | Required | Description | Default |
|---|---|---|---|
| response_format | No | markdown |
Output Schema
| Name | Required | Description |
|---|---|---|
| auth | No | |
| kind | Yes | |
| links | Yes | |
| notes | Yes | |
| scopes | Yes | |
| source | Yes | |
| totals | Yes | |
| mcp_name | Yes | |
| categories | Yes | |
| unofficial | Yes | |
| first_tools | Yes | |
| api_boundary | No | |
| generated_at | Yes | |
| privacy_modes | Yes | |
| data_access_model | Yes | |
| recommended_agent_flow | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly, idempotent, non-destructive. Description adds that it does not call Withings APIs or expose user data, providing extra safety context beyond annotations. No contradictions.
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: first states what it does, second clarifies what it does not. No wasted words. Front-loaded with action verb.
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 metadata inventory tool, description covers purpose, scope, and safety boundaries. Output format is presumably defined in the output schema, which is present but not shown. Complete for its intended simple use.
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?
Only one parameter (response_format) with enum and default. Schema has 0% description coverage, and tool description does not mention the parameter. However, the parameter is self-explanatory given its name and enum values.
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 verb 'inventory' clearly indicates this tool returns a list/metadata. It specifies exactly what is inventoried: supported data domains, auth scope requirements, privacy boundary, and recommended first calls. This distinguishes it from sibling tools that fetch actual user data or perform other actions.
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?
Description mentions 'recommended first calls', implying it should be used before data retrieval tools. It does not explicitly state when not to use or name alternatives, but the context of being a metadata tool makes usage clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
withings_demoWithings DemoARead-onlyIdempotent
Returns realistic example payloads of withings_daily_summary, withings_wellness_context, and withings_list_body_measures so agents see the contract before calling real Withings APIs.
| Name | Required | Description | Default |
|---|---|---|---|
| response_format | No | markdown |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and destructiveHint=false. The description adds context about returning example payloads, but does not disclose any additional behavioral traits beyond what annotations provide.
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?
A single, front-loaded sentence that is clear and concise with no wasted words.
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 demo tool with one parameter and no output schema, the description adequately explains its purpose and value (previewing contracts). It could mention that no authentication is needed, but annotations already indicate safety.
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 0%, and the description does not add any meaning beyond the schema for the single parameter. The baseline is 3.
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 what the tool does: returns realistic example payloads of three specific Withings tools. It distinguishes itself from the many sibling tools that are real API endpoints.
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 implies usage before calling real Withings APIs to preview payloads. While it doesn't explicitly say when not to use, the purpose is distinct enough among siblings.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
withings_exchange_codeExchange Withings OAuth CodeA
Exchange a Withings OAuth authorization code for local tokens using Withings signed request flow. Tokens are stored locally and never returned. Requires explicit user action: the user must complete browser OAuth and supply the authorization code (agents must not invent codes).
| Name | Required | Description | Default |
|---|---|---|---|
| code | Yes | OAuth authorization code, or a full redirect URL containing ?code=... | |
| response_format | No | markdown |
Output Schema
| Name | Required | Description |
|---|---|---|
| ok | Yes | |
| note | Yes | |
| scope | No | |
| expires_at | No | |
| token_path | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations indicate mutability and non-idempotence. The description adds critical behavioral context: tokens are stored locally and never returned, and the exchange uses a signed request flow. No contradiction with annotations.
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 well-structured sentences: the first states purpose and method, the second provides a critical usage constraint. No wasted words, all information 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?
For an OAuth token exchange tool with an output schema present, the description adequately covers the core behavior (exchange, store, no return) and the need for user-supplied code. Minor omissions (e.g., overwrite behavior for existing tokens) are acceptable given the tool's relative simplicity.
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 50%. The description adds meaning for the 'code' parameter by requiring it to come from user action, but provides no additional information for 'response_format'. It compensates partially but not fully for the missing parameter 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 uses a specific verb ('Exchange') and clearly identifies the resource ('OAuth authorization code for local tokens'). It distinguishes well from sibling tools like withings_get_auth_url (which provides the URL) and withings_revoke_access (which revokes tokens).
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 requires user action ('the user must complete browser OAuth') and warns agents not to invent codes. It provides clear context on when to use the tool, though it does not explicitly mention when not to use it or name alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
withings_get_auth_urlGet Withings OAuth URLARead-onlyIdempotent
Generate a Withings OAuth authorization URL. Use this first when no local token exists.
| Name | Required | Description | Default |
|---|---|---|---|
| state | No | Optional OAuth state value generated by the caller. | |
| scopes | No | Optional scope override. Defaults to read-only Withings scopes used by this server. | |
| response_format | No | markdown |
Output Schema
| Name | Required | Description |
|---|---|---|
| scopes | Yes | |
| auth_url | Yes | |
| next_step | Yes | |
| redirect_uri | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, and destructiveHint, so the description does not need to repeat these. It adds usage context but no further behavioral details beyond what annotations provide.
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 concise sentences with no wasted words. Front-loaded with the core action and usage context.
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 existence of an output schema and annotations, the description is minimally adequate. It covers the initial step of OAuth but does not elaborate on next steps or the output format. Sufficient for a simple tool but not rich.
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 67% (moderate), but the description provides no additional parameter meaning. The input schema already has descriptions for state and scopes, yet response_format has only enum/default without description, and the description does not compensate for this missing info.
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 'Generate a Withings OAuth authorization URL' with a specific verb and resource, and distinguishes it from siblings by noting 'Use this first when no local token exists.'
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 context by specifying 'Use this first when no local token exists,' implying when to use it and suggesting an ordering relative to other tools like withings_exchange_code. However, it does not explicitly name alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
withings_list_activityWithings Daily ActivityBRead-onlyIdempotent
List Withings daily activity summaries. Requires user.activity scope.
| Name | Required | Description | Default |
|---|---|---|---|
| page | No | Withings page number. | |
| after | No | Inclusive start bound. Converted to Withings startdate (epoch) or startdateymd (YYYY-MM-DD) per action. | |
| limit | No | Upstream page-size hint and local output cap used for pagination safety. | |
| before | No | Inclusive end bound. Converted to Withings enddate (epoch) or enddateymd (YYYY-MM-DD) per action. | |
| all_pages | No | Fetch multiple pages up to max_pages. | |
| max_pages | No | Maximum pages to fetch when all_pages is true. | |
| privacy_mode | No | Optional per-call privacy override. Defaults to WITHINGS_PRIVACY_MODE or structured. raw returns upstream Withings JSON. summary minimizes sensitive health and profile details. | |
| response_format | No | markdown |
Output Schema
| Name | Required | Description |
|---|---|---|
| count | Yes | |
| empty | No | |
| records | Yes | |
| warning | No | |
| endpoint | Yes | |
| has_more | Yes | |
| next_page | No | |
| privacy_mode | Yes | |
| pages_fetched | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false, covering the safety profile. The description adds the permission requirement (user.activity scope), which is useful but minimal. It does not disclose pagination behavior, data freshness, or any edge cases, so it adds some value beyond annotations but not rich context.
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 extremely concise—two sentences with no fluff. The purpose is front-loaded and the scope requirement is valuable. However, given the tool's complexity, a bit more context could be warranted, but the brevity is not a flaw in itself.
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 tool with 8 parameters and many sibling list tools, this description is inadequate. It doesn't explain what 'daily activity summaries' entail, how pagination works, or how it differs from other list tools. The output schema covers return values, but the tool's role and selection criteria are missing, leaving a significant gap.
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 88%, so the schema already documents most parameters in detail. The description adds nothing about parameters, such as how 'after' and 'before' work or what 'privacy_mode' does. With high coverage, the baseline of 3 is appropriate; the description neither helps nor hurts.
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 'List' and the resource 'Withings daily activity summaries', which is clear and specific. It distinguishes from siblings like list_workouts and list_sleep by naming 'activity', though it doesn't explicitly contrast with them. The purpose is unambiguous.
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 a prerequisite (user.activity scope) but gives no guidance on when to choose this tool over alternatives like list_workouts or list_body_measures. There is no explicit context for typical use cases or exclusions, leaving the agent to infer when this tool is appropriate.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
withings_list_body_measuresWithings Body MeasuresARead-onlyIdempotent
List Withings punctual measurements such as weight and body composition. Requires user.metrics scope. Not medical advice.
| Name | Required | Description | Default |
|---|---|---|---|
| page | No | Withings page number. | |
| after | No | Inclusive start bound. Converted to Withings startdate (epoch) or startdateymd (YYYY-MM-DD) per action. | |
| limit | No | Upstream page-size hint and local output cap used for pagination safety. | |
| before | No | Inclusive end bound. Converted to Withings enddate (epoch) or enddateymd (YYYY-MM-DD) per action. | |
| all_pages | No | Fetch multiple pages up to max_pages. | |
| max_pages | No | Maximum pages to fetch when all_pages is true. | |
| privacy_mode | No | Optional per-call privacy override. Defaults to WITHINGS_PRIVACY_MODE or structured. raw returns upstream Withings JSON. summary minimizes sensitive health and profile details. | |
| response_format | No | markdown |
Output Schema
| Name | Required | Description |
|---|---|---|
| count | Yes | |
| empty | No | |
| records | Yes | |
| warning | No | |
| endpoint | Yes | |
| has_more | Yes | |
| next_page | No | |
| privacy_mode | Yes | |
| pages_fetched | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, openWorldHint, idempotentHint, and non-destructive. The description adds the scope requirement and a safety disclaimer, which is useful context beyond annotations. However, it does not mention pagination behavior, privacy_mode handling, or return format, though these are partially covered by the schema. Given the annotation coverage, 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 with no fluff. The core purpose is front-loaded, followed by two essential caveats. Every word 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?
Given the rich schema (8 parameters, all described, output schema present) and strong annotations, the description is sufficient for an agent to understand the tool's purpose and call it correctly. It misses a bit of detail on output format or privacy, but those are in the schema. Overall, it's complete enough for the tool's complexity.
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 88%, so most parameters are already described. The description itself adds no parameter-specific details beyond what the schema provides. Baseline 3 is correct because the schema does the heavy lifting.
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 ('List'), a specific resource ('Withings punctual measurements'), and gives concrete examples ('weight and body composition'). This clearly distinguishes it from sibling tools like withings_list_activity or withings_list_sleep.
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 only mentions a prerequisite (requires user.metrics scope) and a disclaimer (not medical advice), but gives no guidance on when to choose this tool over alternatives. It does not explicitly mention sibling tools or conditions for preferring one over another.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
withings_list_heartWithings Heart RecordsARead-onlyIdempotent
List Withings heart records where available. Requires user.metrics scope. Not medical advice.
| Name | Required | Description | Default |
|---|---|---|---|
| page | No | Withings page number. | |
| after | No | Inclusive start bound. Converted to Withings startdate (epoch) or startdateymd (YYYY-MM-DD) per action. | |
| limit | No | Upstream page-size hint and local output cap used for pagination safety. | |
| before | No | Inclusive end bound. Converted to Withings enddate (epoch) or enddateymd (YYYY-MM-DD) per action. | |
| all_pages | No | Fetch multiple pages up to max_pages. | |
| max_pages | No | Maximum pages to fetch when all_pages is true. | |
| privacy_mode | No | Optional per-call privacy override. Defaults to WITHINGS_PRIVACY_MODE or structured. raw returns upstream Withings JSON. summary minimizes sensitive health and profile details. | |
| response_format | No | markdown |
Output Schema
| Name | Required | Description |
|---|---|---|
| count | Yes | |
| empty | No | |
| records | Yes | |
| warning | No | |
| endpoint | Yes | |
| has_more | Yes | |
| next_page | No | |
| privacy_mode | Yes | |
| pages_fetched | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, openWorldHint=true, idempotentHint=true, and destructiveHint=false, so the safety profile is covered. The description adds meaningful context beyond annotations: the 'Requires user.metrics scope' auth requirement and the 'where available' caveat indicating that heart data may not always be present. It also includes a 'Not medical advice' disclaimer. These go beyond the structured metadata, though it does not detail pagination or rate-limit behavior, which are minor given the annotation coverage.
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 three sentences with zero waste. The purpose is front-loaded, and the auth requirement and disclaimer follow. Every sentence earns its place; it is appropriately sized for a list tool with rich schema metadata.
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 8 parameters and an output schema, and annotations cover safety, so the description need not repeat those. However, it lacks explicit usage guidance relative to sibling tools (e.g., when to choose heart records over sleep or activity lists) and does not mention pagination behavior beyond what schema hints imply. The description is minimal but adequate given the structured metadata; still, the missing usage context leaves a gap for a tool with many siblings.
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 88% (7 of 8 parameters have descriptions), so the schema already documents the parameters thoroughly. The description adds no parameter-specific information, which is acceptable given the high coverage. Per the rubric, baseline is 3 when schema coverage is high, and the description does not compensate beyond that.
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 ('List') and resource ('Withings heart records'), and adds the qualifier 'where available' to indicate conditional availability. It clearly differentiates from sibling list tools like withings_list_body_measures and withings_list_activity by naming the specific data type. The purpose is unambiguous.
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 a clear context: it requires the user.metrics scope and notes that heart records may not always be available. However, it does not explicitly state when to use this tool over alternatives (e.g., for heart rate data specifically) nor when not to use it. With many sibling list tools, more explicit routing would be helpful, but the scope requirement gives some usage guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
withings_list_sleepWithings Sleep DetailARead-onlyIdempotent
List detailed Withings sleep data where available. Requires user.activity scope. Not medical advice.
| Name | Required | Description | Default |
|---|---|---|---|
| page | No | Withings page number. | |
| after | No | Inclusive start bound. Converted to Withings startdate (epoch) or startdateymd (YYYY-MM-DD) per action. | |
| limit | No | Upstream page-size hint and local output cap used for pagination safety. | |
| before | No | Inclusive end bound. Converted to Withings enddate (epoch) or enddateymd (YYYY-MM-DD) per action. | |
| all_pages | No | Fetch multiple pages up to max_pages. | |
| max_pages | No | Maximum pages to fetch when all_pages is true. | |
| privacy_mode | No | Optional per-call privacy override. Defaults to WITHINGS_PRIVACY_MODE or structured. raw returns upstream Withings JSON. summary minimizes sensitive health and profile details. | |
| response_format | No | markdown |
Output Schema
| Name | Required | Description |
|---|---|---|
| count | Yes | |
| empty | No | |
| records | Yes | |
| warning | No | |
| endpoint | Yes | |
| has_more | Yes | |
| next_page | No | |
| privacy_mode | Yes | |
| pages_fetched | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, and destructiveHint false, covering the safety profile. The description adds useful context beyond annotations: the required 'user.activity' scope, the caveat that data may not always be available ('where available'), and a medical disclaimer. This provides meaningful behavioral insight without contradicting the annotations.
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 extremely concise, consisting of three short sentences that front-load the primary purpose, then add the scope requirement and a disclaimer. There is zero fluff; 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?
With an output schema present and high schema coverage, the description does not need to explain return formats or parameters. It covers the essential purpose, scope prerequisite, and data availability caveat. It lacks explicit sibling differentiation, but that is minor given the schema's richness and annotations.
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 88%, so the schema already documents all parameters thoroughly (e.g., 'after' and 'before' explain conversion to epoch). The tool description adds no parameter-level information, which is acceptable given the high schema coverage. 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 ('List'), resource ('detailed Withings sleep data'), and a condition ('where available'). It clearly distinguishes from the sibling tool withings_list_sleep_summary by emphasizing 'detailed', making the tool's purpose unambiguous.
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 implies usage through the phrase 'where available' and mentions a required scope, but it does not explicitly state when to use this tool over alternatives like withings_list_sleep_summary or when not to use it. No exclusion or alternative routing is provided.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
withings_list_sleep_summaryWithings Sleep SummariesBRead-onlyIdempotent
List Withings sleep summaries with common sleep fields. Requires user.activity scope. Not medical advice.
| Name | Required | Description | Default |
|---|---|---|---|
| page | No | Withings page number. | |
| after | No | Inclusive start bound. Converted to Withings startdate (epoch) or startdateymd (YYYY-MM-DD) per action. | |
| limit | No | Upstream page-size hint and local output cap used for pagination safety. | |
| before | No | Inclusive end bound. Converted to Withings enddate (epoch) or enddateymd (YYYY-MM-DD) per action. | |
| all_pages | No | Fetch multiple pages up to max_pages. | |
| max_pages | No | Maximum pages to fetch when all_pages is true. | |
| privacy_mode | No | Optional per-call privacy override. Defaults to WITHINGS_PRIVACY_MODE or structured. raw returns upstream Withings JSON. summary minimizes sensitive health and profile details. | |
| response_format | No | markdown |
Output Schema
| Name | Required | Description |
|---|---|---|
| count | Yes | |
| empty | No | |
| records | Yes | |
| warning | No | |
| endpoint | Yes | |
| has_more | Yes | |
| next_page | No | |
| privacy_mode | Yes | |
| pages_fetched | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, openWorldHint, idempotentHint, and destructiveHint=false, covering the safety profile. The description adds the scope requirement and a disclaimer, which is useful but minimal. It does not disclose any additional behavioral traits (e.g., how privacy_mode works, pagination behavior) beyond what annotations provide.
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 zero fluff. The purpose, scope, and disclaimer are front-loaded and each 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?
Given the tool has 8 parameters, an output schema, and many sibling tools, the description is quite sparse. It does not explain how this differs from withings_list_sleep or when to use it, and it leaves the meaning of 'common sleep fields' undefined. However, the schema and output schema carry substantial information, so it is not severely incomplete, but it could do more to orient the agent.
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 88%, so the schema already documents all parameters in detail. The description adds no parameter-specific meaning, so it rests at the baseline 3 for high 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?
States a specific verb and resource ('List Withings sleep summaries'), which is clear. However, it does not differentiate from sibling tools like withings_list_sleep or withings_list_workouts; the name and description imply a summary variant but without explicit distinction, so it loses a point.
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 only notes the required scope ('user.activity') and a disclaimer ('Not medical advice'), but provides no guidance on when to choose this tool over alternatives, no exclusions, and no context about whether to prefer this over withings_list_sleep or other list tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
withings_list_workoutsWithings WorkoutsBRead-onlyIdempotent
List Withings workouts. Requires user.activity scope.
| Name | Required | Description | Default |
|---|---|---|---|
| page | No | Withings page number. | |
| after | No | Inclusive start bound. Converted to Withings startdate (epoch) or startdateymd (YYYY-MM-DD) per action. | |
| limit | No | Upstream page-size hint and local output cap used for pagination safety. | |
| before | No | Inclusive end bound. Converted to Withings enddate (epoch) or enddateymd (YYYY-MM-DD) per action. | |
| all_pages | No | Fetch multiple pages up to max_pages. | |
| max_pages | No | Maximum pages to fetch when all_pages is true. | |
| privacy_mode | No | Optional per-call privacy override. Defaults to WITHINGS_PRIVACY_MODE or structured. raw returns upstream Withings JSON. summary minimizes sensitive health and profile details. | |
| response_format | No | markdown |
Output Schema
| Name | Required | Description |
|---|---|---|
| count | Yes | |
| empty | No | |
| records | Yes | |
| warning | No | |
| endpoint | Yes | |
| has_more | Yes | |
| next_page | No | |
| privacy_mode | Yes | |
| pages_fetched | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, and destructiveHint false, covering the safety profile. The description adds the authentication requirement of 'user.activity scope', which is useful and not in the annotations. However, it does not describe pagination behavior or return format details, though an output schema exists to cover that.
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, front-loaded sentence that states the core action and a key requirement with no fluff. It is appropriately concise for a list tool, though it omits usage context, which is a completeness issue rather than a conciseness problem.
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 an output schema and well-documented parameters, the description is minimally adequate. It does not explicitly mention pagination or date filtering, but these are covered in the schema. Given the tool has 8 parameters and no required fields, a bit more context on how to combine them could help, but it is not severely lacking.
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 88%, meaning most parameters are documented in the schema itself. The description adds no additional parameter semantics beyond what the schema already provides, so it does not compensate for the small uncovered portion. Given the high schema coverage, a baseline score of 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 clear action ('List') and a specific resource ('Withings workouts'), distinguishing it from sibling tools that handle other data types like activity or sleep. It is unambiguous about what the tool retrieves, though it does not elaborate on the content of a workout beyond the name.
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 provided on when to use this tool versus alternatives such as withings_list_activity or withings_daily_summary. The only contextual hint is the required scope, which is a prerequisite, not a usage scenario. There is no mention of typical use cases, exclusions, or when to prefer another tool.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
withings_onboardingDelx Wellness Onboarding FlowARead-onlyIdempotent
Return the 11-question onboarding flow plus the current profile state and missing fields. Read-only — does NOT persist anything. Pair with withings_profile_update once the user answers. Cross-connector: the same profile is shared by every Delx Wellness MCP (whoop, garmin, oura, fitbit, strava, polar, withings, apple-health, samsung-health, google-health, nourish, cycle-coach, cgm, air).
| Name | Required | Description | Default |
|---|---|---|---|
| locale | No | Onboarding locale. Defaults to en. | |
| response_format | No | markdown |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, destructiveHint=false, and idempotentHint=true. The description reinforces with 'Read-only — does NOT persist anything' and adds cross-connector sharing behavior, providing useful context beyond annotations without 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?
Three front-loaded sentences with zero wasted words: the first states core functionality and read-only nature, the second provides pairing instructions, and the third adds cross-connector context. 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?
Given the tool's moderate complexity (2 optional params, no output schema), the description adequately covers the return type (11-question flow, profile state, missing fields) and side effects (read-only, cross-connector). It lacks detail on the exact structure of the response but is sufficient for an AI agent to understand what to expect.
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?
With 50% schema description coverage (locale has description, response_format does not), the description does not add any parameter-specific information. The schema already covers the enum values and defaults, so the description offers no additional value for parameter semantics, meeting the baseline for this coverage level.
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 it returns the 11-question onboarding flow plus current profile state and missing fields, using the verb 'Return'. It distinguishes itself from siblings by specifying pairing with withings_profile_update and cross-connector profile sharing, making its purpose unmistakable.
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 explicit usage guidance: 'Pair with withings_profile_update once the user answers.' It also implies when to use (to get onboarding flow and profile) and alludes to alternatives via sibling context. However, it does not explicitly state when not to use or list alternatives, which would raise the score to 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
withings_privacy_auditWithings Privacy AuditBRead-onlyIdempotent
Return local privacy, cache, token-path and env-presence posture without revealing secret values.
| Name | Required | Description | Default |
|---|---|---|---|
| response_format | No | markdown |
Output Schema
| Name | Required | Description |
|---|---|---|
| notes | Yes | |
| project | Yes | |
| cache_path | Yes | |
| token_path | Yes | |
| unofficial | Yes | |
| stdout_safe | Yes | |
| cache_enabled | Yes | |
| config_source | Yes | |
| secret_env_vars | Yes | |
| local_config_path | Yes | |
| local_config_exists | Yes | |
| raw_payloads_opt_in | Yes | |
| privacy_mode_default | Yes | |
| required_env_present | Yes | |
| gps_redaction_default | Yes | |
| redacted_key_patterns | Yes | |
| local_config_secure_permissions | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, and destructiveHint. The description adds the behavioral guarantee of not revealing secret values, and lists the categories of information returned, which adds context beyond the annotations.
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?
Single sentence, front-loaded with the key purpose, no unnecessary words. Every part adds 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?
With output schema present and annotations, the description is minimally viable but does not explain what 'local privacy, cache, token-path, env-presence posture' entails. A brief expansion would improve understanding for new users.
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 0% for the only parameter (response_format). The description does not mention this parameter or explain that it controls output format (markdown vs json). The agent must infer from the enum and default alone, which is insufficient.
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 tool returns 'local privacy, cache, token-path and env-presence posture' without revealing secrets. The verb 'Return' specifies output, and the scope is distinct from sibling tools like withings_cache_status or withings_profile_get.
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 explicit guidance on when to use this tool vs alternatives like withings_cache_status. The description implies a privacy-focused use case but does not provide when-to-use or when-not-to-use criteria.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
withings_profile_getGet Delx Wellness ProfileARead-onlyIdempotent
Read the shared Delx Wellness profile from ~/.delx-wellness/profile.json. Returns preferred name, goals, devices, training/nutrition/exercise/agent preferences and safety flags. NEVER contains OAuth tokens or API secrets. Read-only.
| Name | Required | Description | Default |
|---|---|---|---|
| response_format | No | markdown |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Adds value beyond annotations by specifying file location and confirming absence of secrets, complementing readOnlyHint annotations.
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 focused sentences, front-loaded with action, followed by content and safety note; no 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?
Adequate for a simple read-only tool with one parameter; lists returned fields but omits structure details or error scenarios.
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?
Description does not mention the response_format parameter despite 0% schema coverage, leaving agents to infer from the enum and default.
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?
Clearly states it reads a specific file and returns specific fields, distinguishing it from write/update siblings like withings_profile_update.
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?
Implies usage through 'Read the shared Delx Wellness profile' but does not explicitly compare to siblings or state when not to use.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
withings_profile_updateUpdate Delx Wellness ProfileA
Persist a partial patch to ~/.delx-wellness/profile.json. Requires explicit_user_intent=true (otherwise returns USER_ACTION_REQUIRED). Rejects secret-like fields (oauth, token, secret, password, cookie, refresh, api_key, session) at write time. Use to record preferred name, goals, devices, training context, nutrition context, exercise preferences, agent preferences, and safety flags.
| Name | Required | Description | Default |
|---|---|---|---|
| patch | Yes | Partial WellnessProfileDocument patch. Top-level keys: profile, goals, devices, training, nutrition, preferences, safety, notes. | |
| response_format | No | markdown | |
| explicit_user_intent | No | Must be true to persist. Prevents accidental writes from agent inference. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Adds significant behavioral context beyond annotations: describes that secret-like fields are rejected at write time and that the operation requires explicit user intent. Annotations only indicate non-read-only and non-destructive, so description fills gaps.
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?
Concise and well-structured: front-loaded with action and path, followed by conditions, restrictions, and use cases. No superfluous sentences.
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?
Covers all key aspects: what it does, required parameters, behavioral constraints, and typical use cases. No output schema exists, so return value description is not needed. Complete enough for a write operation.
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?
Adds meaning beyond the input schema by explaining that the patch is partial and lists the top-level keys. Also clarifies the required condition for explicit_user_intent. Schema coverage is 67%, and description compensates well.
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?
Clearly states it persists a partial patch to a specific file, with an explicit verb and resource. Lists the categories of fields that can be updated, distinguishing it from sibling tools like withings_profile_get which is read-only.
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?
Provides the condition that explicit_user_intent must be true, but does not explicitly guide when to use this tool versus alternatives (e.g., when to create vs update vs other operations).
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
withings_quickstartWithings QuickstartARead-onlyIdempotent
Personalized 3-step setup walkthrough for the human user. Adapts to current state (env vars set? token present? what's next?). Call this first when the user asks 'how do I connect Withings?'
| Name | Required | Description | Default |
|---|---|---|---|
| response_format | No | markdown |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false, so the safety profile is clear. The description adds value by highlighting that the walkthrough adapts to environment variables and token presence, which is useful behavioral context beyond annotations.
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 front-load the key information (purpose and usage). Could potentially be more concise by removing parenthetical questions, but overall it's efficient.
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 is a walkthrough with no output schema, the description adequately conveys its purpose and adaptability. However, it could be improved by briefly describing what the walkthrough returns or how the response format parameter affects it.
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 0%, so the description must compensate, but it does not mention the only parameter (response_format) at all. The parameter has a default and enum, but no guidance on its meaning or use.
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 it's a personalized 3-step setup walkthrough for connecting Withings, with a verb (walkthrough) and specific resource (setup with Withings). It distinguishes from siblings by specifying it's the first call for setup queries.
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 says 'Call this first when the user asks "how do I connect Withings?"' and mentions it adapts to current state, providing clear when-to-use guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
withings_revoke_accessClear Withings Local AccessADestructive
Delete the local Withings token file. Withings token revocation support varies by app/API plan, so this tool only clears local access. Gated by explicit_user_intent: true (requires explicit user intent).
| Name | Required | Description | Default |
|---|---|---|---|
| response_format | No | markdown | |
| explicit_user_intent | No | Must be true after the user explicitly asked to disconnect. Prevents agents from revoking autonomously. |
Output Schema
| Name | Required | Description |
|---|---|---|
| ok | Yes | |
| note | Yes | |
| token_path | Yes | |
| local_tokens_cleared | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate destructiveness (destructiveHint: true), and the description adds context by specifying that it deletes the local token file and that it only clears local access (not full API revocation). This provides valuable behavioral insight beyond the annotations.
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 long, covering key points: the action, its scope (local-only), and the gating condition. No extraneous information, highly efficient.
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 two parameters (one with enum), destructive nature, and presence of an output schema, the description covers the main behavioral aspects and the gating condition. It does not explain return values, but the output schema likely covers that, 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 50%, with only explicit_user_intent having a description. The tool description reinforces the gating role of explicit_user_intent but does not address the response_format parameter. Therefore, it partially compensates for the missing schema description.
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 action ('Delete the local Withings token file') and the specific resource, distinguishing it from sibling tools like 'withings_connection_status' or 'withings_cache_status'. It also clarifies the limitation of local-only clearing, making its purpose unambiguous.
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 mentions the gating by explicit_user_intent but does not provide explicit guidance on when to use this tool versus alternatives. It notes that revocation support varies, but no alternatives or conditions for use are stated beyond requiring user intent.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
withings_weekly_summaryWithings Weekly Wellness ReviewARead-onlyIdempotent
Build a weekly Withings scorecard with sleep, activity, body measures, bottlenecks and actions. Read-only and non-medical.
| Name | Required | Description | Default |
|---|---|---|---|
| days | No | Recent analysis window in days. | |
| timezone | No | IANA timezone used only for display, e.g. America/New_York. | UTC |
| compare_days | No | Prior comparison window in days. Use 0 to disable comparison. | |
| response_format | No | markdown |
Output Schema
| Name | Required | Description |
|---|---|---|
| kind | Yes | |
| generated_at | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already provide readOnlyHint, idempotentHint, etc. The description adds non-medical disclaimer and summarizes the content, providing extra behavioral context without 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?
The description is brief (two sentences) and front-loaded with the main purpose. No unnecessary words, though it could be slightly more structured with bullet points.
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 presence of output schema and annotations, the description is adequate but lacks guidance on when to prefer this over related siblings. It does not explain how the scorecard is generated or any limitations.
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 75%, with all four parameters having descriptions. The tool description does not add further parameter-specific details, 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 clearly states it builds a weekly scorecard including sleep, activity, body measures, bottlenecks, and actions. It uses a specific verb 'build' and resource 'weekly scorecard', distinguishing it from daily summary or other 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 mentions 'Read-only and non-medical' but does not explicitly state when to use this tool over alternatives like withings_daily_summary. No guidance on when not to use or preferred contexts.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
withings_wellness_contextWithings Wellness ContextARead-onlyIdempotent
Normalize Withings sleep and activity load into the shared wellness_context shape for recommendation engines.
| Name | Required | Description | Default |
|---|---|---|---|
| days | No | Lookback window for normalized Withings wellness context. | |
| notes | No | ||
| soreness | No | ||
| timezone | No | IANA timezone used only for display, e.g. America/New_York. | UTC |
| injury_flags | No | ||
| response_format | No | markdown |
Output Schema
| Name | Required | Description |
|---|---|---|
| notes | Yes | |
| source | Yes | |
| soreness | Yes | |
| generated_at | Yes | |
| injury_flags | Yes | |
| recent_training_load | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The annotations already declare readOnlyHint, openWorldHint, idempotentHint as true, and destructiveHint as false, covering the safety profile. The description adds the context of normalization but does not disclose any additional behavioral traits beyond what the annotations provide. No contradictions.
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 sentence of 14 words, front-loaded with the key verb 'Normalize'. Every word is meaningful, with no filler or redundant information. It achieves maximum conciseness.
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 complexity (normalization, 6 parameters, output schema present), the description is brief. It does not explain what the shared wellness_context shape contains, but an output schema exists to document returns. The tool's role among many siblings is somewhat clear but could be more complete regarding when to choose this normalization tool over raw data retrieval.
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 only 33% (2 of 6 parameters have descriptions). The description does not provide any parameter-level information; it does not mention or explain parameters like notes, soreness, injury_flags, or response_format. The value added over the schema is minimal, and the low coverage demands more compensation.
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 'Normalize' and identifies the resource 'Withings sleep and activity load' and the target 'shared wellness_context shape'. It clearly distinguishes this tool from sibling tools that retrieve raw data (e.g., withings_list_sleep, withings_list_activity) or summaries (e.g., withings_daily_summary).
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 hints at the use case ('for recommendation engines') but does not provide explicit guidance on when to use this tool versus alternatives, nor does it state when not to use it. Sibling tools like withings_weekly_summary or withings_list_sleep are not mentioned for differentiation.
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.
6 tool updates
v0.5.4- Changed
withings_list_activity2 fields changed- added
Output schema / properties / emptyAdded value: +{ + "type": "boolean" +} - added
Output schema / properties / warningAdded value: +{ + "type": "string" +}
- Changed
withings_list_body_measures2 fields changed- added
Output schema / properties / emptyAdded value: +{ + "type": "boolean" +} - added
Output schema / properties / warningAdded value: +{ + "type": "string" +}
- Changed
withings_list_heart2 fields changed- added
Output schema / properties / emptyAdded value: +{ + "type": "boolean" +} - added
Output schema / properties / warningAdded value: +{ + "type": "string" +}
- Changed
withings_list_sleep2 fields changed- added
Output schema / properties / emptyAdded value: +{ + "type": "boolean" +} - added
Output schema / properties / warningAdded value: +{ + "type": "string" +}
- Changed
withings_list_sleep_summary2 fields changed- added
Output schema / properties / emptyAdded value: +{ + "type": "boolean" +} - added
Output schema / properties / warningAdded value: +{ + "type": "string" +}
- Changed
withings_list_workouts2 fields changed- added
Output schema / properties / emptyAdded value: +{ + "type": "boolean" +} - added
Output schema / properties / warningAdded value: +{ + "type": "string" +}
14 tool updates
v0.4.11- Added
withings_cache_status - Added
withings_capabilities - Added
withings_connection_status - Added
withings_demo - Added
withings_exchange_code - Added
withings_get_auth_url - Changed
withings_list_activity6 fields changed- changed
Input schema / properties / after / descriptionPrevious value: -"Only return Withings records after this time. Converted to Withings startdate."New value: +"Inclusive start bound. Converted to Withings startdate (epoch) or startdateymd (YYYY-MM-DD) per action." - removed
Input schema / properties / after / formatRemoved value: -"date-time" - changed
Input schema / properties / after / patternPrevious value: -"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"New value: +"^\\d{4}-\\d{2}-\\d{2}([Tt ]\\d{2}:\\d{2}(:\\d{2})?(\\.\\d+)?([Zz]|[+-]\\d{2}:?\\d{2})?)?$" - changed
Input schema / properties / before / descriptionPrevious value: -"Only return Withings records before this time. Converted to Withings enddate."New value: +"Inclusive end bound. Converted to Withings enddate (epoch) or enddateymd (YYYY-MM-DD) per action." - removed
Input schema / properties / before / formatRemoved value: -"date-time" - changed
Input schema / properties / before / patternPrevious value: -"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"New value: +"^\\d{4}-\\d{2}-\\d{2}([Tt ]\\d{2}:\\d{2}(:\\d{2})?(\\.\\d+)?([Zz]|[+-]\\d{2}:?\\d{2})?)?$"
- Changed
withings_list_body_measures6 fields changed- changed
Input schema / properties / after / descriptionPrevious value: -"Only return Withings records after this time. Converted to Withings startdate."New value: +"Inclusive start bound. Converted to Withings startdate (epoch) or startdateymd (YYYY-MM-DD) per action." - removed
Input schema / properties / after / formatRemoved value: -"date-time" - changed
Input schema / properties / after / patternPrevious value: -"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"New value: +"^\\d{4}-\\d{2}-\\d{2}([Tt ]\\d{2}:\\d{2}(:\\d{2})?(\\.\\d+)?([Zz]|[+-]\\d{2}:?\\d{2})?)?$" - changed
Input schema / properties / before / descriptionPrevious value: -"Only return Withings records before this time. Converted to Withings enddate."New value: +"Inclusive end bound. Converted to Withings enddate (epoch) or enddateymd (YYYY-MM-DD) per action." - removed
Input schema / properties / before / formatRemoved value: -"date-time" - changed
Input schema / properties / before / patternPrevious value: -"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"New value: +"^\\d{4}-\\d{2}-\\d{2}([Tt ]\\d{2}:\\d{2}(:\\d{2})?(\\.\\d+)?([Zz]|[+-]\\d{2}:?\\d{2})?)?$"
- Added
withings_list_heart - Changed
withings_list_sleep6 fields changed- changed
Input schema / properties / after / descriptionPrevious value: -"Only return Withings records after this time. Converted to Withings startdate."New value: +"Inclusive start bound. Converted to Withings startdate (epoch) or startdateymd (YYYY-MM-DD) per action." - removed
Input schema / properties / after / formatRemoved value: -"date-time" - changed
Input schema / properties / after / patternPrevious value: -"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"New value: +"^\\d{4}-\\d{2}-\\d{2}([Tt ]\\d{2}:\\d{2}(:\\d{2})?(\\.\\d+)?([Zz]|[+-]\\d{2}:?\\d{2})?)?$" - changed
Input schema / properties / before / descriptionPrevious value: -"Only return Withings records before this time. Converted to Withings enddate."New value: +"Inclusive end bound. Converted to Withings enddate (epoch) or enddateymd (YYYY-MM-DD) per action." - removed
Input schema / properties / before / formatRemoved value: -"date-time" - changed
Input schema / properties / before / patternPrevious value: -"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"New value: +"^\\d{4}-\\d{2}-\\d{2}([Tt ]\\d{2}:\\d{2}(:\\d{2})?(\\.\\d+)?([Zz]|[+-]\\d{2}:?\\d{2})?)?$"
- Changed
withings_list_sleep_summary6 fields changed- changed
Input schema / properties / after / descriptionPrevious value: -"Only return Withings records after this time. Converted to Withings startdate."New value: +"Inclusive start bound. Converted to Withings startdate (epoch) or startdateymd (YYYY-MM-DD) per action." - removed
Input schema / properties / after / formatRemoved value: -"date-time" - changed
Input schema / properties / after / patternPrevious value: -"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"New value: +"^\\d{4}-\\d{2}-\\d{2}([Tt ]\\d{2}:\\d{2}(:\\d{2})?(\\.\\d+)?([Zz]|[+-]\\d{2}:?\\d{2})?)?$" - changed
Input schema / properties / before / descriptionPrevious value: -"Only return Withings records before this time. Converted to Withings enddate."New value: +"Inclusive end bound. Converted to Withings enddate (epoch) or enddateymd (YYYY-MM-DD) per action." - removed
Input schema / properties / before / formatRemoved value: -"date-time" - changed
Input schema / properties / before / patternPrevious value: -"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"New value: +"^\\d{4}-\\d{2}-\\d{2}([Tt ]\\d{2}:\\d{2}(:\\d{2})?(\\.\\d+)?([Zz]|[+-]\\d{2}:?\\d{2})?)?$"
- Changed
withings_list_workouts6 fields changed- changed
Input schema / properties / after / descriptionPrevious value: -"Only return Withings records after this time. Converted to Withings startdate."New value: +"Inclusive start bound. Converted to Withings startdate (epoch) or startdateymd (YYYY-MM-DD) per action." - removed
Input schema / properties / after / formatRemoved value: -"date-time" - changed
Input schema / properties / after / patternPrevious value: -"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"New value: +"^\\d{4}-\\d{2}-\\d{2}([Tt ]\\d{2}:\\d{2}(:\\d{2})?(\\.\\d+)?([Zz]|[+-]\\d{2}:?\\d{2})?)?$" - changed
Input schema / properties / before / descriptionPrevious value: -"Only return Withings records before this time. Converted to Withings enddate."New value: +"Inclusive end bound. Converted to Withings enddate (epoch) or enddateymd (YYYY-MM-DD) per action." - removed
Input schema / properties / before / formatRemoved value: -"date-time" - changed
Input schema / properties / before / patternPrevious value: -"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"New value: +"^\\d{4}-\\d{2}-\\d{2}([Tt ]\\d{2}:\\d{2}(:\\d{2})?(\\.\\d+)?([Zz]|[+-]\\d{2}:?\\d{2})?)?$"
- Added
withings_privacy_audit - Added
withings_revoke_access
9 tool updates
v0.4.8- Removed
withings_cache_status - Removed
withings_capabilities - Removed
withings_connection_status - Removed
withings_demo - Removed
withings_exchange_code - Removed
withings_get_auth_url - Removed
withings_list_heart - Removed
withings_privacy_audit - Removed
withings_revoke_access
6 tool updates
v0.4.7- Changed
withings_list_activity3 fields changed- changed
Input schema / properties / after / descriptionPrevious value: -"Only return Withings records after this time. Converted to an Withings start_date."New value: +"Only return Withings records after this time. Converted to Withings startdate." - changed
Input schema / properties / before / descriptionPrevious value: -"Only return Withings records before this time. Converted to an Withings end_date."New value: +"Only return Withings records before this time. Converted to Withings enddate." - changed
Input schema / properties / limit / descriptionPrevious value: -"Local page-size hint used for pagination safety."New value: +"Upstream page-size hint and local output cap used for pagination safety."
- Changed
withings_list_body_measures3 fields changed- changed
Input schema / properties / after / descriptionPrevious value: -"Only return Withings records after this time. Converted to an Withings start_date."New value: +"Only return Withings records after this time. Converted to Withings startdate." - changed
Input schema / properties / before / descriptionPrevious value: -"Only return Withings records before this time. Converted to an Withings end_date."New value: +"Only return Withings records before this time. Converted to Withings enddate." - changed
Input schema / properties / limit / descriptionPrevious value: -"Local page-size hint used for pagination safety."New value: +"Upstream page-size hint and local output cap used for pagination safety."
- Changed
withings_list_heart3 fields changed- changed
Input schema / properties / after / descriptionPrevious value: -"Only return Withings records after this time. Converted to an Withings start_date."New value: +"Only return Withings records after this time. Converted to Withings startdate." - changed
Input schema / properties / before / descriptionPrevious value: -"Only return Withings records before this time. Converted to an Withings end_date."New value: +"Only return Withings records before this time. Converted to Withings enddate." - changed
Input schema / properties / limit / descriptionPrevious value: -"Local page-size hint used for pagination safety."New value: +"Upstream page-size hint and local output cap used for pagination safety."
- Changed
withings_list_sleep3 fields changed- changed
Input schema / properties / after / descriptionPrevious value: -"Only return Withings records after this time. Converted to an Withings start_date."New value: +"Only return Withings records after this time. Converted to Withings startdate." - changed
Input schema / properties / before / descriptionPrevious value: -"Only return Withings records before this time. Converted to an Withings end_date."New value: +"Only return Withings records before this time. Converted to Withings enddate." - changed
Input schema / properties / limit / descriptionPrevious value: -"Local page-size hint used for pagination safety."New value: +"Upstream page-size hint and local output cap used for pagination safety."
- Changed
withings_list_sleep_summary3 fields changed- changed
Input schema / properties / after / descriptionPrevious value: -"Only return Withings records after this time. Converted to an Withings start_date."New value: +"Only return Withings records after this time. Converted to Withings startdate." - changed
Input schema / properties / before / descriptionPrevious value: -"Only return Withings records before this time. Converted to an Withings end_date."New value: +"Only return Withings records before this time. Converted to Withings enddate." - changed
Input schema / properties / limit / descriptionPrevious value: -"Local page-size hint used for pagination safety."New value: +"Upstream page-size hint and local output cap used for pagination safety."
- Changed
withings_list_workouts3 fields changed- changed
Input schema / properties / after / descriptionPrevious value: -"Only return Withings records after this time. Converted to an Withings start_date."New value: +"Only return Withings records after this time. Converted to Withings startdate." - changed
Input schema / properties / before / descriptionPrevious value: -"Only return Withings records before this time. Converted to an Withings end_date."New value: +"Only return Withings records before this time. Converted to Withings enddate." - changed
Input schema / properties / limit / descriptionPrevious value: -"Local page-size hint used for pagination safety."New value: +"Upstream page-size hint and local output cap used for pagination safety."
23 tool updates
v0.4.6- First observed
withings_agent_manifest - First observed
withings_cache_status - First observed
withings_capabilities - First observed
withings_connection_status - First observed
withings_daily_summary - First observed
withings_data_inventory - First observed
withings_demo - First observed
withings_exchange_code - First observed
withings_get_auth_url - First observed
withings_list_activity - First observed
withings_list_body_measures - First observed
withings_list_heart - First observed
withings_list_sleep - First observed
withings_list_sleep_summary - First observed
withings_list_workouts - First observed
withings_onboarding - First observed
withings_privacy_audit - First observed
withings_profile_get - First observed
withings_profile_update - First observed
withings_quickstart - First observed
withings_revoke_access - First observed
withings_weekly_summary - First observed
withings_wellness_context
TDQS
Scored across 23 tools
Several tools overlap around setup and explanation (withings_capabilities, withings_data_inventory, withings_agent_manifest, withings_quickstart, withings_connection_status, withings_privacy_audit), making it hard for an agent to pick the right one. list_sleep_summary vs list_sleep also require careful reading to distinguish, though most data tools have distinct targets.
All tools share the withings_ prefix and lower_snake_case, which helps, but verb patterns vary widely: list_, get_, exchange_, revoke_ are used, while other tools are bare nouns like capabilities, demo, daily_summary, or wellness_context. This mixed style is readable but not predictably verb-driven.
23 tools is within the heavy range. Many meta/intropsection tools (capabilities, inventory, manifest, demo, connection_status, privacy_audit) overlap and could be consolidated, though the data and profile tools are each reasonably scoped. The count feels larger than necessary for the core functionality.
Core Withings data domains (body measures, activity, workouts, sleep, heart) are covered with list tools plus aggregated daily/weekly summaries, and auth/profile lifecycle is complete. Some possible Withings data types like blood pressure are missing, and there's no single-item get/delete for health records, but those are minor gaps for a read-only health data server.
Maintenance
Related MCP Connectors
MCP server for Withings health data — sleep, activity, heart, and body metrics.
Multi-tenant hosted MCP server for Oura Ring — 21 read-only tools, OAuth per user.
Governed personal world model and memory for your AI agent. Pair once, connect over MCP.
Hosted MCP server for Cliniko — patients, appointments, availability, and invoices for AI agents.
Related MCP Servers
- AlicenseBqualityAmaintenanceA local-first MCP server that enables AI agents to read user-authorized Google Health API v4 data from Fitbit, Pixel Watch, and partners via OAuth, with tokens never leaving the machine.26372 npm57MIT
- AlicenseBqualityAmaintenanceLocal-first MCP server that connects AI agents to your Fitbit activity, sleep, heart-rate, HRV, SpO2 and weight data.33110 npm4MIT
- AlicenseBqualityAmaintenanceLocal-first MCP server that connects AI agents to your Garmin sleep, HRV, Body Battery, stress, training readiness and activities, keeping tokens on your machine.42193 npm12MIT
- AlicenseNot gradedqualityAmaintenanceA Model Context Protocol (MCP) server that brings your Withings health data into Claude, allowing natural conversation access to sleep patterns, body measurements, workouts, heart data, and more.42MIT