Google Health MCP
This server lets AI agents securely read user-authorized Google Health API v4 data (Fitbit, Pixel Watch, partners) locally via OAuth, with tokens never leaving your machine.
Authentication & Setup
Generate an OAuth URL (
google_health_get_auth_url), exchange codes for tokens (google_health_exchange_code) stored locally with0600permissions, and revoke access (google_health_revoke_access).
Health Data Access
List data points (
google_health_list_data_points) — query steps, sleep, heart rate, weight, exercise, etc.Reconcile data streams (
google_health_reconcile_data_points) — merge streams across all-sources, google-wearables, or google-sources.Daily rollup (
google_health_daily_rollup) — aggregate data over civil days.Physical-time rollup (
google_health_rollup) — aggregate over arbitrary time intervals.
User Profile & Identity
Retrieve identity (
google_health_get_identity), profile (google_health_get_profile), and settings like units/timezone (google_health_get_settings).
Summaries & Reports
Daily summary (
google_health_daily_summary) and weekly summary (google_health_weekly_summary) for aggregated health metrics.Wellness context (
google_health_wellness_context) — normalize health data into a standardized shape for recommendation engines, including soreness/injury flags.
Discovery & Diagnostics
Connection status (
google_health_connection_status) — check config, token file, privacy mode, and scope readiness.Data inventory (
google_health_data_inventory) and capabilities (google_health_capabilities) — explore supported types, scopes, and recommended workflows.Agent manifest (
google_health_agent_manifest) — machine-readable install/runtime guide for AI agents.Cache status (
google_health_cache_status) — inspect optional local SQLite cache.Privacy audit (
google_health_privacy_audit) — review privacy posture without exposing secrets.
Privacy & Security
Three privacy modes:
summary,structured(default), andraw.Tokens stored at
~/.google-health-mcp/tokens.json; access tokens, refresh tokens, and client secrets are never returned to the agent.GPS redaction enabled by default.
Allows access to health data from Android devices like Pixel Watch via the Google Health API, including activity, sleep, and health metrics.
Enables reading user-authorized health data from Fitbit devices through the Google Health API, such as steps, sleep, heart rate, and exercise.
Provides tools to read authorized health data from the Google Health API v4, including data from Fitbit, Pixel Watch, and other supported sources.
Click on "Install 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., "@Google Health MCPshow my daily summary for yesterday"
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.
What's new in 0.7.3 (2026-08-03): headless OAuth (
auth --manual) for SSH / containers / WSL · real-account rollup/filter fixes from external testers · opt-inclinicalscopes for ECG/IRN · pins live in Hermes/living-body. Full notes in CHANGELOG.md.
Highest-leverage contribution — real-account coverage
If you have Fitbit, Pixel Watch, Android health data or Google Health API v4 access, the most useful help is a redacted coverage report:
npx -y google-health-mcp-unofficial coverage --live --jsonReview the output, remove anything you do not want public, then post the report
on issue #2 (or a
new issue). The timed proof loop on #21
closed 1/2 — see docs/proof-loop-status.md.
The command is read-only and is designed to omit OAuth secrets, local paths and raw
health measurements. A static preflight is available before OAuth with
coverage --json.
Other ways to help (no account required)
Action | Link |
Star if the project earned it | |
Docs GFI — headless auth walkthrough | |
Compose with other wearables | |
One-command Hermes pack | |
Full registry |
Related MCP server: google-health-mcp-server
HTTP (v2 stateless)
Default is stdio. Optional Streamable HTTP — no session id, JSON responses, loopback only:
npx -y google-health-mcp-unofficial --http
# GET http://127.0.0.1:3000/health
# POST http://127.0.0.1:3000/mcp (sessionless)Env: GOOGLE_HEALTH_MCP_HOST, GOOGLE_HEALTH_MCP_PORT, GOOGLE_HEALTH_MCP_TRANSPORT=http.
Google Health MCP
Local-first MCP server that gives your AI agent user-authorized Google Health API v4 data — Fitbit, Pixel Watch and partners — over OAuth.
Install one connector —
npx -y google-health-mcp-unofficial setupRun it in Claude · Cursor · ChatGPT · Hermes · OpenClaw — see the client examples.
Local-first — your tokens never leave your machine (privacy).
Which connector should I use? — see the front-door guide.
Beta status: Google Health API v4 is live for builders but still evolving. Google's release notes show scope and data-type changes continuing after launch, so this connector stays in early beta and points testers to safe read-only validation paths before public production use.
Unofficial project. Not affiliated with, endorsed by or supported by Google, Fitbit or Alphabet. Not a medical device. Not medical advice.
Why this exists
Google Health API is the successor to Fitbit Web API: new OAuth, new base URL, v4 endpoint schema, standardized data types, reconciled streams and rollups.
This MCP gives agents a clean way to discover the API, check setup, authenticate locally and query data without pasting tokens into prompts or agent configs.
Quickstart in 60 seconds
Create a Google Cloud OAuth client, enable the Google Health API, and add the redirect http://127.0.0.1:3000/callback. Then:
npx -y google-health-mcp-unofficial setup --scope-preset full # writes local config
npx -y google-health-mcp-unofficial auth # OAuth, tokens saved locally
npx -y google-health-mcp-unofficial doctor # verifies you're readydoctor --live calls safe Google Health identity/profile/settings endpoints after auth to prove the API is reachable — the connection proof for this beta. That does not prove Claude Desktop can invoke tools: Desktop validates outputSchema as JSON Schema 2020-12. Use google-health-mcp-unofficial@0.7.6+ (see #23). Full install details (scope presets, MFA, recovery) are in the Install section below.
Try it with your agent
Three things to ask first, based on tools this connector actually ships:
Use google_health_connection_status to check setup, then run
google_health_data_inventory. Tell me which Google Health domains
and scopes I have authorized.Call google_health_daily_summary for today, then google_health_weekly_summary.
Separate observed data from suggestions and stay non-medical.Run google_health_privacy_audit, then summarize exactly what is stored
locally and what would be sent to Google on the next call.Tools
Start here:
google_health_connection_status— local config, token, scope and client readinessgoogle_health_data_inventory— supported domains, scopes, data type naming and agent flowgoogle_health_data_type_coverage— static coverage plan, or explicit live read-only validation for issue #21google_health_daily_summary— daily beta summary from rollups and reconciled streamsgoogle_health_weekly_summary— weekly beta reviewgoogle_health_privacy_audit— what is stored locally and what is sent to Google
The full tool catalog — Google Health API methods, agent manifest, diagnostics and data-type naming notes (kebab-case endpoints, snake_case filters, source families) — lives in docs/tools.md.
Privacy & what runs offline
OAuth tokens are stored locally at
~/.google-health-mcp/tokens.jsonwith0600permissions.Secrets can live in
~/.google-health-mcp/config.jsonorGOOGLE_HEALTH_*environment variables.Tools never return access tokens, refresh tokens or client secrets.
GOOGLE_HEALTH_PRIVACY_MODE=structuredis the default;rawmode is explicit and should be used only for debugging or deep analysis. An agent asking forprivacy_mode=rawis refused unless it passesexplicit_user_intent=true; settingGOOGLE_HEALTH_PRIVACY_MODE=rawyourself is your own call and needs no per-call intent.Structured mode preserves complete upstream physiological fields and future v4 additions while removing identity, location and secret-bearing values.
"Location redaction" means a concrete key list, not a slogan. Coordinate-bearing leaf keys, always dropped in
structuredandsummary(matched ignoring case,_and-, solatitude_e7andlatitudeE7are the same key):startLatitude,startLongitude,start_latlng,endLatitude,endLongitude,end_latlng,latitude,longitude,lat,lon,lng,latlng,coordinates,coordinate,gps,gpx,geoPolylineDTO,map,polyline,summary_polyline,activities-tracker-gps,latitudeE7,longitudeE7,latE7,lngE7,lonE7,startLatitudeE7,startLongitudeE7,endLatitudeE7,endLongitudeE7,lat_deg,lng_deg,lon_deg,latitudeDegrees,longitudeDegreesLocation container keys, dropped as a whole object — with their
address/city/placeIdsiblings and any coordinate spelling this list never anticipated — whenever they hold a place record (an object, or an array containing objects). A container holding only scalars is a label, not a place, and survives:location: ["gym", "home"]stays,location: { latitudeE7: … }does not.location,locations,geoLocation,geoLocations,geo,geoJson,route,routes,position,positions,waypoint,waypoints,trackPoint,trackPoints,placeVisitgoogle_health_privacy_auditreturns both live lists ingps_redacted_keysandgps_redacted_container_keys, andgps_redaction_defaultis measured at call time by pushing a synthetic record through both non-raw modes and scanning the output by key and by coordinate value — it is not a hardcodedtrue.npm run test:redaction-docsfails the build if these two blocks stop matching the code, so the published promise cannot drift from the enforcement list again. Google Health API v4 does not currently document a location/route data type, so this is a forward-compatible guard rather than a patch for an observed leak.Limits of that promise, stated instead of implied. Every line below is proved by a behavioural test (
npm run test:declared-limits) that fails if the behaviour changes; a line marked NOT VERIFIED is a statement no test backs, labelled instead of left to read as a guarantee. A limit written here without a test fails the build:default_mode_is_structured— with noprivacy_modeargument and noGOOGLE_HEALTH_PRIVACY_MODE, every read runs instructured.raw_requires_explicit_user_intent— an agent asking forprivacy_mode=rawis refused withUSER_ACTION_REQUIREDunless it also passesexplicit_user_intent=true.local_raw_default_needs_no_per_call_intent—GOOGLE_HEALTH_PRIVACY_MODE=rawin your own config or environment is honoured on every call with no per-call intent; the gate is about agent escalation, not about the machine owner.raw_is_an_unfiltered_passthrough—rawreturns the upstream payload unchanged; redaction is a property ofstructuredandsummary, never ofraw.structured_drops_identity_and_secret_keys— tokens,authorization, e-mail, names and avatars are dropped at any depth instructured, while physiology and provenance survive.summary_is_never_less_restrictive_than_structured—summarystrips first and summarizes after, so nothingstructureddrops can reappear insummary.summary_flattens_numeric_leaves_to_depth_2—summarypromotes numeric leaves down to depth 2 of the data-type payload intovalue; anything deeper is not reported at all.summary_promotes_unlisted_coordinate_keys— a coordinate key outside the lists above is promoted bysummary, not hidden. The key list is the boundary, not the mode.altitude_and_elevation_are_not_location—altitudeis an official v4 data type (activity_and_fitness) and survives redaction, as doeselevation; an altitude alone does not localize a user.altitude_inside_a_place_container_is_dropped— the same altitude inside a redacted location container dies with the container.location_guard_never_observed_upstream— NOT VERIFIED: Google Health API v4 documents no location/route data type, so no test here has ever seen a real Google payload carrying coordinates. The key list is a forward-compatible guard derived from Google's own encodings, not a measured fix for an observed leak.
Daily rollups use validated civil
YYYY-MM-DDranges; general rollups preserve exact timezone-aware ISO date-times. Invalid or reversed ranges fail before HTTP.support --redactedprints a copy-paste support bundle for GitHub issues without tokens, secrets, local paths or health measurements.support --feedback --jsonprints an anonymous setup-feedback bundle for beta testers and MCP client reports.coverage --live --jsonprints only redacted data-type status and point-count buckets; it never includes raw Google Health payloads.
Authorization model & trust boundary
Google OAuth controls which Google account and health scopes this connector can access. It does not authorize individual MCP callers or tools. The intended deployment is one local user running one trusted MCP host; callers that can reach the same process share its tool catalog and local OAuth grant.
There is currently no per-user, per-agent, API-key or per-tool RBAC layer. The
optional HTTP transport binds to 127.0.0.1 by default and must not be exposed
publicly without standards-compliant MCP authentication, isolated per-user
Google credentials and an explicit authorization policy. See the full
authorization model.
See the full agent demo →
Want to see an agent actually reason over this connector alongside the rest of the stack? The shared, reproducible demo answers the anchor question "Should I train hard today?":
npx -y delx-living-body demodelx-living-body composes whatever connectors it detects locally with rule-based (offline) synthesis — readiness-first and non-medical. For this connector specifically, npx -y google-health-mcp-unofficial doctor --live is the local proof that your Google Health auth is wired correctly.
Beta Testers Wanted
The highest-leverage contribution right now is real setup feedback from Fitbit, Pixel Watch, Android and Google Health API v4 users.
If you can test with a real account:
Run
npx -y google-health-mcp-unofficial doctorand confirm the OAuth flow is clear.Run
npx -y google-health-mcp-unofficial support --feedback --jsonand paste the anonymous bundle into issue #4.Run
npx -y google-health-mcp-unofficial coverage --jsonfor the static coverage plan.After OAuth, run
npx -y google-health-mcp-unofficial coverage --live --jsonand paste the reviewed, redacted report into issue #2.Try
google_health_connection_status,google_health_data_inventoryandgoogle_health_daily_summaryfrom your MCP client.Open an issue for missing data types, confusing setup steps, client-specific friction or privacy concerns.
Do not paste OAuth tokens, client secrets, local paths or personal health measurements into public issues.
Useful links:
Install
Create a Google Cloud OAuth client, enable the Google Health API, and add the local redirect:
http://127.0.0.1:3000/callbackThen run:
npx -y google-health-mcp-unofficial setup --scope-preset full
npx -y google-health-mcp-unofficial auth
npx -y google-health-mcp-unofficial doctorHeadless hosts (servers, SSH, containers, WSL)
auth normally opens a browser and catches the redirect on 127.0.0.1. On a host with no
browser that cannot work. When it detects a headless host — SSH, or no DISPLAY /
WAYLAND_DISPLAY — it switches to pasting the redirect back in:
npx -y google-health-mcp-unofficial auth --manualNon-interactive provisioning:
npx -y google-health-mcp-unofficial auth --print-url
npx -y google-health-mcp-unofficial auth --code "http://127.0.0.1:3000/callback?code=..."See docs/oauth.md for --local-callback, SSH tunnel notes, and
GOOGLE_HEALTH_HEADLESS.
Scope presets keep OAuth consent easier to reason about — basic, activity, sleep and full. The full preset list, the exact read-only scope URLs and the OAuth endpoints live in docs/oauth.md.
If setup gets stuck:
npx -y google-health-mcp-unofficial doctor --fix # repairs local config/token permissions (chmod 600 where supported)
npx -y google-health-mcp-unofficial doctor --live # calls safe identity/profile/settings endpoints to prove the API is reachable
npx -y google-health-mcp-unofficial coverage --live --json # redacted read-only data-type coverage for issue #21
npx -y google-health-mcp-unofficial support --redacted # copy-paste support bundle, no tokens/secrets/measurements
npx -y google-health-mcp-unofficial support --feedback --json # anonymous setup feedback for issue #4Standalone MCP config:
{
"mcpServers": {
"google_health": {
"command": "npx",
"args": ["-y", "google-health-mcp-unofficial"]
}
}
}Hermes
npx -y google-health-mcp-unofficial setup --client hermes --no-auth
npx -y google-health-mcp-unofficial auth
npx -y google-health-mcp-unofficial doctor --client hermes --fix
npx -y google-health-mcp-unofficial doctor --client hermes --live
hermes mcp test google_healthAfter config changes, use /reload-mcp or hermes mcp test google_health. Do not restart the gateway for normal data access.
Development
git clone https://github.com/davidmosiah/google-health-mcp.git
cd google-health-mcp
npm install
npm testLinks
Google Health API: https://developers.google.com/health
Release notes: https://developers.google.com/health/release-notes
REST reference: https://developers.google.com/health/reference/rest
Data types: https://developers.google.com/health/data-types
Migration guide: https://developers.google.com/health/migration
Delx Wellness registry: https://github.com/davidmosiah/delx-wellness
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. Code of Conduct.
Agent-ready yardstick: mcp-scorecard — aim ≥90 on CI.
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 google-health-mcp-unofficial call google_health_connection_status --json '{}'Copy skill/SKILL.md into your agent skills dir.
Available Tools
26 toolsgoogle_health_agent_manifestGoogle Health Agent ManifestARead-onlyIdempotent
Machine-readable install, runtime and client guidance for AI agents. Does not call Google Health 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 | |
| status | Yes | |
| package | Yes | |
| project | Yes | |
| mcp_name | Yes | |
| resources | Yes | |
| unofficial | Yes | |
| agent_rules | Yes | |
| beta_notice | Yes | |
| mutating_tools | 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 the tool is read-only, idempotent, and non-destructive. The description adds meaningful safety-relevant behavior beyond annotations: it does not call Google Health and does not expose secrets. This is useful context for an agent deciding whether invoking the tool is safe.
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 with no filler. Both clauses earn their place: one defines the resource, the other clarifies important boundaries regarding external calls and secrets.
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?
This is a low-complexity tool with two optional enum parameters, an existing output schema, and strong safety annotations. The description adequately conveys the tool's purpose and its non-action boundaries. It does not detail output structure, but that is covered by the output schema.
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%, and the description does not explain either parameter. The client and response_format enums are fairly self-explanatory from their names and allowed values, but the description fails to compensate for the complete lack of schema-level 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 states the tool provides 'machine-readable install, runtime and client guidance for AI agents,' identifying a clear resource and purpose. It also distinguishes itself by explicitly noting it does not call Google Health or expose secrets, though it does not name specific sibling tools.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The phrase 'install, runtime and client guidance' implies the tool is meant for agent setup and configuration, but there is no explicit when-to-use guidance or comparison to alternatives like google_health_quickstart or google_health_onboarding. The intended usage must be inferred rather than stated.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
google_health_cache_statusGoogle Health Cache StatusARead-onlyIdempotent
Show optional local SQLite cache status. Enable with GOOGLE_HEALTH_CACHE=sqlite or GOOGLE_HEALTH_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 signal readOnlyHint, idempotentHint, and non-destructive behavior. The description adds valuable context beyond those: the cache is optional and local SQLite, and it names the environment variables that turn it on. It does not detail the exact status fields, but the output schema exists and the read-only safety profile is well covered by 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 short sentences contain all the core information: what the tool shows and how the optional cache is enabled. There is no fluff, and the primary function is front-loaded. 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?
For a simple read-only status tool, the description plus rich annotations and an output schema is largely sufficient. The main missing piece is explicit routing among the many sibling health-status tools, but that gap is mostly captured under usage guidelines rather than contextual completeness.
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 response_format, and schema description coverage is 0%. However, the input schema fully documents the only parameter through its enum (markdown/json) and default value (markdown), making the parameter's meaning self-sufficient. The description misses a chance to compensate for the lack of schema descriptions, but the agent will not be confused about how to invoke the tool.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a specific verb and resource: 'Show optional local SQLite cache status.' The term 'cache status' clearly distinguishes it from siblings like google_health_connection_status, google_health_data_inventory, and google_health_capabilities. An agent can tell exactly what this tool does without guessing.
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 useful enablement context: 'Enable with GOOGLE_HEALTH_CACHE=sqlite or GOOGLE_HEALTH_CACHE=true.' However, it never explicitly states when to use this tool versus alternatives, nor does it name any sibling as a better choice for other kinds of status checks. Usage is implied but not explicit.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
google_health_capabilitiesGoogle Health MCP CapabilitiesBRead-onlyIdempotent
Explain supported Google Health data, privacy boundaries, beta status and recommended agent workflow.
| Name | Required | Description | Default |
|---|---|---|---|
| response_format | No | markdown |
Output Schema
| Name | Required | Description |
|---|---|---|
| links | Yes | |
| status | Yes | |
| creator | Yes | |
| project | Yes | |
| mcp_name | Yes | |
| auth_model | Yes | |
| unofficial | Yes | |
| beta_notice | Yes | |
| api_boundary | Yes | |
| privacy_modes | Yes | |
| client_aliases | Yes | |
| mutating_tools | No | |
| 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, idempotentHint=true, and destructiveHint=false, and the description's 'Explain' wording is consistent with those. The description adds context about privacy boundaries and beta status, but these are subject-matter details rather than additional behavioral disclosures like auth requirements or rate limits.
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 sentence with no filler, front-loading the core action and then enumerating the specific facets covered. 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?
The description adequately summarizes the tool's content areas and the annotations cover its safety profile, while an output schema exists for return values. However, it lacks guidance for distinguishing this overview tool from closely related siblings and does not mention the response_format parameter, leaving some selection ambiguity.
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 self-documenting through its enum ('markdown'/'json') and default value, so the schema carries the essential meaning even though prose descriptions are absent. The description does not mention the parameter, but for this trivial optional parameter the omission is acceptable.
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, 'Explain,' and names the resource: supported Google Health data, privacy boundaries, beta status, and recommended agent workflow. This clearly states the tool's scope and differentiates it from more specific sibling tools like data_inventory, privacy_audit, and quickstart.
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 say when to use this tool versus alternatives such as google_health_data_inventory, google_health_privacy_audit, or google_health_quickstart. The phrase 'recommended agent workflow' only implies an orientation use case, but there is no direct when-to-use or when-not-to-use guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
google_health_connection_statusGoogle Health Connection StatusARead-onlyIdempotent
Check local Google Health config, token file, Node version, privacy mode, cache readiness and optional MCP client readiness without calling Google APIs 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 | |
| headless | Yes | |
| next_steps | Yes | |
| missing_env | Yes | |
| privacy_mode | Yes | |
| redirect_uri | No | |
| required_env | Yes | |
| client_checks | No | |
| automatic_auth_supported | Yes | |
| ready_for_google_health_api | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly, idempotent, and non-destructive hints. The description adds meaningful behavioral context beyond those annotations by promising no Google API calls and no secret exposure, and by listing exactly what is inspected, which is valuable for an agent deciding whether invocation is safe.
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 entire description is one dense, well-structured sentence with the action verb, targets, and constraints. It front-loads the purpose and includes all essential scope information without any filler or repetition.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple read-only status tool with an output schema and rich annotations, the description covers purpose, offline behavior, and privacy constraints effectively. The main gap is that parameter semantics are left to inference, but the tool remains callable and understandable for an 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 0%, and the description does not explicitly explain either parameter. 'Optional MCP client readiness' only indirectly hints at the client parameter, and response_format is not mentioned at all. The parameter names and enums provide some self-evident meaning, but the description fails to add semantic value for the parameters.
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 opens with the imperative 'Check' and names precise local resources: Google Health config, token file, Node version, privacy mode, cache readiness, and optional MCP client readiness. It also clearly scopes the tool as local-only by stating it does not call Google APIs or expose secrets, distinguishing it from API-facing siblings.
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 conveys a clear use case: local, offline diagnostics of connection state. The explicit 'without calling Google APIs' gives an agent a strong signal to prefer this tool for local checks rather than remote data-access tools, though it does not explicitly name alternatives or when-not-to-use conditions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
google_health_daily_rollupGoogle Health Daily RollupBRead-onlyIdempotent
Aggregate a data type over civil days using Google Health dailyRollUp. Useful for steps, distance, calories, active minutes, weight and heart summaries.
| Name | Required | Description | Default |
|---|---|---|---|
| end_date | No | Exclusive end date as YYYY-MM-DD. Defaults to the next day. | today |
| data_type | No | Google Health data type in kebab case. Supported slugs (call google_health_list_data_types for units and which verbs each supports): active-energy-burned, active-minutes, active-zone-minutes, activity-level, altitude, blood-glucose, body-fat, calories-in-heart-rate-zone, core-body-temperature, daily-heart-rate-variability, daily-heart-rate-zones, daily-oxygen-saturation, daily-respiratory-rate, daily-resting-heart-rate, daily-sleep-temperature-derivations, daily-vo2-max, distance, electrocardiogram, exercise, floors, food, food-measurement-unit, heart-rate, heart-rate-variability, height, hydration-log, irregular-rhythm-notification, nutrition-log, oxygen-saturation, respiratory-rate-sleep-summary, run-vo2-max, sedentary-period, sleep, steps, swim-lengths-data, time-in-heart-rate-zone, total-calories, vo2-max, weight. Other valid v4 kebab-case slugs are also accepted. | steps |
| page_size | No | Page size for daily rollup windows. Must satisfy window_size_days * page_size <= the data type's max rollup duration (90 days for nutrition-log). | |
| page_token | No | ||
| start_date | No | today | |
| privacy_mode | No | Optional per-call privacy override. Defaults to GOOGLE_HEALTH_PRIVACY_MODE or structured. raw returns upstream Google Health JSON. | |
| response_format | No | markdown | |
| window_size_days | No | ||
| data_source_family | No | ||
| explicit_user_intent | No | Required true when privacy_mode=raw (agent escalation of redaction). |
Output Schema
| Name | Required | Description |
|---|---|---|
| data | Yes | |
| endpoint | Yes | |
| privacy_mode | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=true, openWorldHint=true, and destructiveHint=false, so the safety profile is well covered. The description adds a small behavioral detail that aggregation happens over 'civil days' using Google Health dailyRollUp, but it does not describe pagination behavior, date-range semantics, or privacy/redaction behavior beyond what the schema exposes.
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 focused sentence that front-loads the core purpose and then gives concrete use-case examples. No words are wasted, and it is appropriately sized for the level of detail it intends to convey.
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 10 parameters, output schema, and a large sibling family, one sentence is insufficient. The description omits how start_date/end_date relate to civil-day windows, the role of window_size_days and page_size, the privacy_mode/raw behavior, and when to choose this over google_health_rollup or google_health_daily_summary. Although annotations and schema carry some of the burden, the overall context for correct invocation is incomplete.
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 50%, with start_date, page_token, window_size_days, data_source_family, and explicit_user_intent lacking descriptions. The tool description does not compensate for these gaps: it only lists example data types, which are already enumerated in the data_type schema. An agent would not learn the meaning of window_size_days, page_token, or the date semantics from either the description or those parameter schemas.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the operation ('Aggregate a data type over civil days') and identifies the resource and use cases ('steps, distance, calories, active minutes, weight and heart summaries'). It does not explicitly differentiate from close siblings like google_health_rollup or google_health_daily_summary, but the dailyRollUp reference makes the intent reasonably distinct.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The phrase 'Useful for steps, distance, calories, active minutes, weight and heart summaries' implies common use cases but provides no explicit guidance on when to prefer this tool over google_health_rollup, google_health_daily_summary, or google_health_list_data_points. There are no exclusion criteria or alternative tool mentions, so usage guidance remains inferred rather than stated.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
google_health_daily_summaryGoogle Health Daily SummaryBRead-onlyIdempotent
Build a practical daily summary from Google Health rollups and reconciled streams when available. Read-only, beta, non-medical.
| Name | Required | Description | Default |
|---|---|---|---|
| date | No | today | |
| 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?
The annotations already declare readOnly, idempotent, and non-destructive behavior. The description adds useful context beyond the annotations: the tool is beta, non-medical, and dependent on reconciled streams being available. This is meaningful but does not cover failure modes or pagination behavior.
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 exceptionally concise: the first sentence front-loads the purpose and data sources, and the second packs the read-only, beta, and non-medical caveats into a short fragment. No words are wasted.
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 that an output schema exists, the parameter schema covers the optional arguments reasonably well, and annotations communicate safety, the description provides sufficient invocation context. It could be more complete by naming when to prefer this over sibling summary/rollup tools, but that gap is mostly a usage-guidance issue.
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%, and the description does not explain `date`, `timezone`, or `response_format` at all; it fails to compensate for the low schema coverage. The schema itself provides some constraints and defaults, but the description adds no parameter-level meaning.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a clear verb-resource pair—'Build a practical daily summary'—and identifies the data sources ('Google Health rollups and reconciled streams'). This distinguishes it somewhat from raw rollup tools, though it does not explicitly contrast it with google_health_daily_rollup or google_health_weekly_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?
There is no guidance on when to use this tool versus siblings such as google_health_daily_rollup or google_health_weekly_summary. The phrase 'when available' refers to data availability, not tool-selection context, so an agent gets no routing help.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
google_health_data_inventoryGoogle Health Data InventoryARead-onlyIdempotent
Inventory supported Google Health data types, auth scopes, privacy modes and recommended first calls without calling Google APIs.
| 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 readOnlyHint=true, idempotentHint=true, and destructiveHint=false. The description adds the important behavioral detail that it works 'without calling Google APIs', meaning it has no external side effects and is purely informational. This goes beyond the annotations and helps an agent understand the tool's operational profile.
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, tight sentence that front-loads the primary purpose ('Inventory supported Google Health data types') and then appends the additional included categories and the no-API-call qualifier. Every word earns its place; there is no filler or redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The tool has zero required parameters, an output schema, and annotations covering its read-only/idempotent behavior. The description adds the crucial offline nature and enumerates the inventory categories. Nothing essential is missing for a tool of this 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?
The only parameter, response_format, is clearly structured with an enum of 'markdown' and 'json' plus a default, so its meaning is essentially self-evident. However, the schema description coverage is 0% and the tool description does not mention this parameter at all. The description adds no semantic value beyond the schema, though the parameter is simple enough that this is a minor gap.
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 ('Inventory') and clearly names the resource scope: supported Google Health data types, auth scopes, privacy modes, and recommended first calls. It also distinguishes itself from live API calls by adding 'without calling Google APIs', which separates it from siblings like google_health_list_data_types that may make actual API requests.
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 the tool—when you need an offline inventory of data types, scopes, privacy modes, and first calls—but it does not explicitly state when to choose this over alternatives or name sibling tools. There is no exclusion guidance (e.g., 'use list_data_types when you need only data types'), leaving the agent to infer the routing decision.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
google_health_data_type_coverageGoogle Health Data Type CoverageARead-onlyIdempotent
Build a data-type coverage plan from the official Google Health API data-type table, or run explicit live read-only checks against a real OAuth account. Live mode returns only redacted status and point-count buckets, never raw health payloads.
| Name | Required | Description | Default |
|---|---|---|---|
| date | No | today | |
| live | No | Default false. When true, calls read-only Google Health endpoints after OAuth setup and returns only redacted coverage status. | |
| data_types | No | Optional subset of data_type slugs. Omit to validate the full local catalog. | |
| response_format | No | markdown | |
| data_source_family | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| kind | Yes | |
| mode | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, and destructiveHint, so the safety profile is covered. The description adds meaningful behavioral context beyond that: live mode returns only redacted status and point-count buckets, and never raw health payloads. This is valuable privacy-relevant disclosure that an agent would not otherwise know.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two sentences with no wasted words. The primary action is front-loaded, the live mode is introduced as an explicit alternative, and the redaction guarantee earns its place as crucial behavioral context. Every sentence adds distinct value.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a tool with 5 optional parameters and an output schema, the description covers the core purpose, the two execution modes, and the privacy behavior of live mode. It notes the OAuth prerequisite, and the output schema can handle return-value details. It does not define what a 'coverage plan' contains or how data_source_family affects it, but those gaps are partially covered by schema enums and defaults.
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 40%, so the description needs to compensate for undocumented parameters like date, response_format, and data_source_family. The description does not explain any of these; it only alludes to live mode, which the schema's live parameter description already covers more fully. The rich data_types slug list lives in the schema, not the description, so the description adds little parameter-level meaning.
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 action: building a data-type coverage plan from the official Google Health API table or running live read-only checks. It distinguishes itself from sibling tools like google_health_list_data_types and google_health_data_inventory by focusing on 'coverage plan' rather than listing or inventorying data. It does not explicitly name a sibling alternative, so it stops short of a 5.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives clear use context: build a plan from the official table, or run explicit live checks against a real OAuth account. However, it does not explicitly say when to prefer this tool over related siblings such as google_health_data_inventory or google_health_rollup, nor does it state exclusions. The mode guidance is useful but the comparison to alternatives is missing.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
google_health_demoGoogle Health DemoARead-onlyIdempotent
Returns realistic Pixel-Watch-style example payloads of google_health_daily_summary, google_health_wellness_context, and google_health_daily_rollup so agents see the contract before calling real Google Health 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 read-only, idempotent, and non-destructive behavior, so the description only needs to add context beyond that. It does so by clarifying that the tool returns synthetic 'example payloads' rather than real data, and it labels them as 'Pixel-Watch-style' to frame their realistic-but-demo nature.
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 dense sentence that front-loads the operation, names the exact payload types, and gives the purpose with zero filler. Each clause adds necessary information, making it 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?
The description provides a clear high-level picture of what the tool returns and why, which is especially valuable given there is no output schema. It doesn't enumerate the payload structures or mention response format details, but for a read-only demo tool with safety annotations, this level of completeness is adequate.
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%, and the description adds no guidance about the `response_format` parameter, even though it is the only parameter and controls markdown vs JSON output. The parameter is optional and self-explanatory, but the description still fails to compensate for the schema's lack of semantic detail.
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 ('Returns') and resource ('realistic Pixel-Watch-style example payloads') and names the three tools whose contracts it demonstrates. The stated purpose, 'so agents see the contract before calling real Google Health APIs', clearly differentiates this demo tool from the many API-calling siblings.
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 signals when to use it: before calling real Google Health APIs, framing it as a contract-preview/demo tool. It does not spell out exclusions or name alternatives directly, but the intended use is unambiguous given the sibling list and the phrase 'before calling real Google Health APIs'.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
google_health_exchange_codeExchange Google Health OAuth CodeA
Exchange a Google OAuth authorization code for local tokens. Tokens are stored locally with 0600 permissions and are never returned. Gated: requires explicit user intent — agents must not call this autonomously.
| Name | Required | Description | Default |
|---|---|---|---|
| code | Yes | OAuth authorization code, or a full redirect URL containing ?code=... | |
| code_verifier | Yes | PKCE code verifier from google_health_get_auth_url. | |
| 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?
The description goes well beyond the annotations by disclosing that tokens are stored locally with 0600 permissions, are never returned, and that the operation is gated on explicit user intent. This is valuable behavioral context for a security-sensitive tool.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is three sentences with no filler. The primary purpose is front-loaded, followed by essential behavioral disclosure and a decisive usage constraint. Every sentence earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For an OAuth token exchange tool, the description covers the necessary context: what the tool does, where tokens go, what permissions they get, that they are never returned, and that autonomous calls are forbidden. The output schema and parameter schema cover the remaining invocation details.
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 schema already documents the two required parameters, code and code_verifier, and the optional response_format has an enum plus default. The description adds no parameter-specific meaning, but the schema covers the important inputs adequately, so the agent can still invoke the tool correctly.
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-resource pair: 'Exchange a Google OAuth authorization code for local tokens.' This clearly differentiates it from sibling tools like google_health_get_auth_url and makes the tool's role in the OAuth flow 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 explicitly states a critical usage restriction: 'requires explicit user intent — agents must not call this autonomously.' It does not name alternative tools, but it gives a clear and strong condition for when the tool must not be used.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
google_health_get_auth_urlGet Google Health OAuth URLARead-onlyIdempotent
Generate a Google OAuth authorization URL for Google Health API. 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 Google Health 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 | |
| code_verifier | Yes | PKCE code verifier. Pass this to google_health_exchange_code. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false, which fully cover the safety profile. The description adds no additional behavioral detail, but it also does not contradict the annotations, so a baseline score 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 wasted words. The core purpose is front-loaded, and the usage condition is stated immediately after, making the description easy to parse and act on.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a zero-required-parameter tool with an output schema and safety annotations, the description is nearly complete: it states what the tool does and when to call it. It could optionally mention the next step of exchanging the code, but that is inferable from the sibling tool list.
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%, with state and scopes already documented in the schema and response_format having an enum and default. The description does not add parameter-level meaning, but the schema carries most of the semantic weight. This is adequate but not enhanced.
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 'Generate' and the specific resource: a Google OAuth authorization URL for the Google Health API. This distinguishes it from sibling tools like google_health_exchange_code or google_health_connection_status, which handle different steps.
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 says to use this tool first when no local token exists, providing a clear condition and ordering. It does not explicitly name alternatives or when-not-to-use scenarios, but the condition is specific enough for an agent to route correctly.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
google_health_get_identityGet Google Health IdentityARead-onlyIdempotent
Get the Google Health identity mapping for the authenticated user. Useful for Fitbit-to-Google migrations.
| Name | Required | Description | Default |
|---|---|---|---|
| privacy_mode | No | Optional per-call privacy override. Defaults to GOOGLE_HEALTH_PRIVACY_MODE or structured. raw returns upstream Google Health JSON. | |
| response_format | No | markdown | |
| explicit_user_intent | No | Required true when privacy_mode=raw (agent escalation of redaction). |
Output Schema
| Name | Required | Description |
|---|---|---|
| data | Yes | |
| endpoint | Yes | |
| privacy_mode | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, and destructiveHint=false, so the safety profile is well covered. The description adds the identity-mapping scope and migration context, but no further behavioral details such as output shape or privacy-mode effects beyond what the schema provides.
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 tight sentences with no filler. The primary action is front-loaded, and the migration-use context is stated efficiently.
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 strong annotations, an output schema, and zero required parameters, the description is largely sufficient. It could be slightly more complete by mentioning the optional parameters or clarifying the distinction from profile-related tools, but nothing essential is missing for basic invocation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool description provides no parameter-level meaning. Schema coverage is only 67%, leaving response_format undocumented in the schema, and the description does not fill that gap or clarify how privacy_mode or explicit_user_intent affect the call.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the verb 'Get' and the specific resource 'Google Health identity mapping for the authenticated user.' This distinguishes it from profile/settings tools, though it does not explicitly name a sibling or contrast itself with a close alternative.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It provides a concrete use context: 'Useful for Fitbit-to-Google migrations.' However, it does not state when not to use this tool, nor does it name alternative sibling tools that 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.
google_health_get_profileGet Google Health ProfileARead-onlyIdempotent
Get authenticated user profile details from Google Health. Requires profile scope.
| Name | Required | Description | Default |
|---|---|---|---|
| privacy_mode | No | Optional per-call privacy override. Defaults to GOOGLE_HEALTH_PRIVACY_MODE or structured. raw returns upstream Google Health JSON. | |
| response_format | No | markdown | |
| explicit_user_intent | No | Required true when privacy_mode=raw (agent escalation of redaction). |
Output Schema
| Name | Required | Description |
|---|---|---|
| data | Yes | |
| endpoint | Yes | |
| privacy_mode | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already establish read-only, idempotent, and non-destructive behavior. The description adds the auth scope requirement, which is genuinely useful beyond annotations. It does not disclose other behavioral details such as redaction or privacy-mode effects, but the output schema and parameter descriptions partially cover those, so the added value lands at an adequate, not exceptional, level.
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 with no redundancy. The core purpose is front-loaded and the scope prerequisite is told in one additional sentence. 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 low complexity (zero required parameters, no nested objects), rich annotations, and presence of an output schema, the description is mostly sufficient. The main gap is the lack of sibling differentiation, especially against google_health_profile_get, but nothing critical about invoking the tool is missing.
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 adds no parameter-level detail; the schema provides descriptions for privacy_mode and explicit_user_intent, and response_format has a default and enum. With schema coverage around 67%, the description does not compensate for the half-documented response_format parameter, but the enum values are largely self-explanatory, so the 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 clearly states the action ('Get'), the resource ('authenticated user profile details'), and the source ('Google Health'), so an agent can infer the tool's basic purpose. However, it does not distinguish this from the nearly identically named sibling 'google_health_profile_get', so it stops short of full sibling differentiation.
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 'Requires profile scope' note provides a useful prerequisite and implies this is the tool for retrieving the authenticated user's profile. There is no explicit guidance about when to prefer this over alternatives such as google_health_profile_get, google_health_get_identity, or google_health_get_settings, leaving selection among siblings to inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
google_health_get_settingsGet Google Health SettingsARead-onlyIdempotent
Get authenticated user settings such as units and timezone. Requires settings scope.
| Name | Required | Description | Default |
|---|---|---|---|
| privacy_mode | No | Optional per-call privacy override. Defaults to GOOGLE_HEALTH_PRIVACY_MODE or structured. raw returns upstream Google Health JSON. | |
| response_format | No | markdown | |
| explicit_user_intent | No | Required true when privacy_mode=raw (agent escalation of redaction). |
Output Schema
| Name | Required | Description |
|---|---|---|
| data | Yes | |
| endpoint | Yes | |
| privacy_mode | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, and non-destructive behavior. The description adds meaningful context by requiring a specific settings scope and specifying that these are settings for the authenticated user, which goes beyond what annotations alone communicate.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two short sentences deliver the core purpose and the key prerequisite with no filler. The most important information is front-loaded and 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?
For a simple read-only settings getter with an output schema and safety annotations, the description is nearly complete: it names the resource, gives examples, and states the required scope. It does not discuss the optional privacy/format parameters, but the input schema documents those adequately.
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%, and the description adds little parameter-specific meaning: it never mentions privacy_mode, response_format, or explicit_user_intent. However, the schema itself documents two parameters well and the third is self-explanatory from its enum and default, so the description does not need to compensate heavily.
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 and resource: 'Get authenticated user settings' and gives concrete examples ('units and timezone'). This clearly differentiates it from sibling tools like identity/profile/status tools, even without naming them.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives useful context ('authenticated user settings') and a prerequisite ('Requires settings scope'), but does not explicitly state when to use this tool versus any alternative. Usage guidance is implied rather than explicit.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
google_health_list_data_pointsList Google Health Data PointsCRead-onlyIdempotent
Query detailed data points for a Google Health data type. Use kebab-case endpoint data types, e.g. steps, sleep, heart-rate.
| Name | Required | Description | Default |
|---|---|---|---|
| filter | No | Optional Google AIP-160 filter expression. Use snake_case field names in filters. | |
| data_type | No | Google Health data type in kebab case. Supported slugs (call google_health_list_data_types for units and which verbs each supports): active-energy-burned, active-minutes, active-zone-minutes, activity-level, altitude, blood-glucose, body-fat, calories-in-heart-rate-zone, core-body-temperature, daily-heart-rate-variability, daily-heart-rate-zones, daily-oxygen-saturation, daily-respiratory-rate, daily-resting-heart-rate, daily-sleep-temperature-derivations, daily-vo2-max, distance, electrocardiogram, exercise, floors, food, food-measurement-unit, heart-rate, heart-rate-variability, height, hydration-log, irregular-rhythm-notification, nutrition-log, oxygen-saturation, respiratory-rate-sleep-summary, run-vo2-max, sedentary-period, sleep, steps, swim-lengths-data, time-in-heart-rate-zone, total-calories, vo2-max, weight. Other valid v4 kebab-case slugs are also accepted. | steps |
| page_size | No | ||
| page_token | No | ||
| privacy_mode | No | Optional per-call privacy override. Defaults to GOOGLE_HEALTH_PRIVACY_MODE or structured. raw returns upstream Google Health JSON. | |
| response_format | No | markdown | |
| explicit_user_intent | No | Required true when privacy_mode=raw (agent escalation of redaction). |
Output Schema
| Name | Required | Description |
|---|---|---|
| data | Yes | |
| endpoint | Yes | |
| privacy_mode | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly, openWorld, idempotent, and non-destructive behavior, so the safety profile is covered. However, the description adds no behavioral context such as pagination behavior, privacy mode effects, or output format defaults, beyond what the schema already states.
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 with no filler. The primary action is front-loaded, and the kebab-case instruction is relevant and immediately actionable.
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?
This tool has seven parameters, a privacy-mode escalation requirement, and pagination support. The description only addresses the data_type parameter format and does not help the agent understand pagination, response format selection, or raw privacy mode semantics, making it incomplete for a tool of this 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?
The schema already documents data_type, privacy_mode, and explicit_user_intent, and the description only repeats kebab-case guidance with examples already present in the schema enum. Parameters like page_size, page_token, and response_format have no description coverage, and the description does not compensate for that gap.
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 identifies a specific action ('Query detailed data points') and a specific resource ('Google Health data type'). It does not explicitly compare with sibling tools, but 'detailed data points' distinguishes it from rollup-style siblings.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives format guidance for data_type but no explicit guidance on when to use this tool versus siblings like google_health_daily_rollup, google_health_rollup, or google_health_list_data_types. There is no mention of alternatives or exclusions, so the agent must infer usage from the tool name.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
google_health_list_data_typesList Google Health Data TypesARead-onlyIdempotent
List the canonical kebab-case data_type slugs accepted by the data point, reconcile and rollup tools, with each slug's unit, OAuth scope family, and which endpoint verbs (list/reconcile/rollup) support it. Call this before list_data_points, reconcile_data_points, daily_rollup or rollup to choose a valid data_type instead of guessing a slug. Static metadata; does not call Google APIs.
| Name | Required | Description | Default |
|---|---|---|---|
| response_format | No | markdown |
Output Schema
| Name | Required | Description |
|---|---|---|
| kind | Yes | |
| note | Yes | |
| count | Yes | |
| source | Yes | |
| data_types | Yes | |
| generated_at | Yes | |
| official_source | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate read-only, idempotent, and non-destructive behavior, but the description adds the crucial context that this is 'static metadata; does not call Google APIs.' This tells the agent there are no network side effects, auth requirements, or external state changes, which goes beyond what the annotations alone convey.
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 tightly packed sentences with no filler: it states what the tool lists, when to call it, and the key behavioral caveat. The most important purpose information is front-loaded, and every sentence earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a zero-required-parameter tool with a simple output schema and detailed annotations, the description is complete. It covers the tool's purpose, its scope, the fields returned, the dependent tools it supports, and its non-network static behavior. There is no meaningful missing context an agent would need to call it correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema description coverage is 0%, so the description does not mention the single response_format parameter. However, the parameter is fully constrained by its enum of 'markdown' and 'json' with a default of 'markdown', making its semantics self-evident without additional description. The description omits it, but the schema itself is sufficient for the agent to invoke the tool correctly.
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 names the exact resource ('canonical kebab-case data_type slugs') and the specific details returned (unit, OAuth scope family, endpoint verb support), making the tool's purpose immediately clear. It also distinguishes itself from the sibling data-related tools by stating it lists accepted slugs rather than fetching data. The verb 'List' plus the precise resource leaves no ambiguity.
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 instructs when to call this tool: 'before list_data_points, reconcile_data_points, daily_rollup or rollup.' It also explains the intended benefit, 'to choose a valid data_type instead of guessing a slug,' which gives the agent a clear decision rule for using it ahead of dependent tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
google_health_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 google_health_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 mark the tool readOnly, idempotent, and non-destructive; the description reinforces that with 'does NOT persist anything' and adds the cross-connector profile-sharing behavior. This extra state-model context helps the agent reason about data consistency, with no contradiction of 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?
Three sentences, front-loaded with the return value and zero filler. The connector list in the final sentence is long but earned, because it communicates a key cross-connector behavior.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a zero-required-param read tool with no output schema, the description supplies the essential return content, non-persistence guarantee, and the follow-up update tool. It is complete enough to call, though a bit more detail on response_format behavior would round it out.
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 locale or response_format at all, and schema coverage is only 50% (response_format has no schema description). The enum values are self-explanatory, but the tool description adds no guidance about defaults or how these params shape the output, so it fails to compensate for the coverage gap.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a concrete verb ('Return') and a precise resource: 'the 11-question onboarding flow plus the current profile state and missing fields.' This clearly distinguishes it from read siblings like google_health_get_profile (which lacks the onboarding flow) and from the write sibling google_health_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?
The sentence 'Pair with google_health_profile_update once the user answers' gives an explicit sequencing rule that routes the agent to the correct sibling after this call. It does not, however, spell out when to prefer this over profile_get/get_profile or state exclusions, so it stops short of full when/when-not coverage.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
google_health_privacy_auditGoogle Health Privacy AuditARead-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 | |
| gps_redacted_keys | 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 | |
| gps_redacted_container_keys | Yes | |
| local_config_secure_permissions | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover read-only, idempotent, and non-destructive behavior. The description adds a meaningful behavioral guarantee: it returns posture without revealing secret values, and it enumerates the inspected scopes (privacy, cache, token-path, env-presence), which goes 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?
The description is a single sentence with no filler. It front-loads the primary action and result, then adds the critical safety qualifier, making it both concise and well-structured.
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, read-only/idempotent annotations, and only one optional self-documenting parameter, the description provides enough for an agent to invoke the tool correctly. The main missing piece, explicit sibling differentiation, is a usage-guideline concern rather than a completeness gap for calling the tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, and the description does not mention the response_format parameter at all. The parameter is optional and well-constrained by the enum and default (markdown/json), so the omission is not severe, but the description still adds no semantic value for the parameter.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description names a specific verb ('Return'), resource ('local privacy, cache, token-path and env-presence posture'), and an explicit constraint ('without revealing secret values'). This makes its purpose immediately clear and distinguishes it from sibling health/status tools as a privacy audit rather than a connectivity or rollup tool.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description clearly implies use when a local privacy/cache/token-path audit is needed, but it does not explicitly state when to prefer this tool over the many sibling google_health tools. No exclusions, prerequisites, or alternative tool names are mentioned, so selection guidance is left to inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
google_health_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?
Annotations already mark it read-only, idempotent, and non-destructive. The description adds useful behavioral context: the local file path, the exact content categories returned, and a strong guarantee that it NEVER contains OAuth tokens or API secrets. 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?
Three short sentences, with the action and path front-loaded, the return contents summarized in one list, and a decisive safety warning. Every sentence carries useful information; no filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple one-optional-parameter read tool with no output schema, the description covers what is read, where it lives, what it returns, and what it never contains. It does not address missing-file behavior or explain how response_format changes output, but the schema covers the parameter and these are minor gaps.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The only parameter, response_format, is optional and fully constrained by its enum and default in the schema, so the agent can interpret it without help. However, description-level schema coverage is 0% and the description itself says nothing about response_format, so no additional parameter meaning is contributed.
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 specifies a clear verb and resource ('Read the shared Delx Wellness profile from ~/.delx-wellness/profile.json') and lists the returned fields. It does not explicitly distinguish itself from the similarly named sibling google_health_get_profile, so it misses the strict sibling-differentiation bar for a 5.
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: call it when you need the Delx profile contents, and the warning that it never contains OAuth tokens suggests when not to use it for secrets. However, it provides no explicit when-to-use/when-not-to-use guidance and does not mention alternatives like google_health_get_profile or google_health_profile_update.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
google_health_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?
Beyond the annotations, the description discloses the write target, the explicit_user_intent gating with USER_ACTION_REQUIRED behavior, and write-time rejection of secret-like fields. This gives the agent the safety-relevant side effects it needs.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three dense sentences, front-loaded with the core action and then behavioral constraints and use cases. Every sentence carries distinct information with no filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For an open, nested patch tool with no output schema, the description plus schema covers what to write, where it is persisted, the mandatory intent flag, and the fields that are rejected. response_format is self-explanatory from its enum and default, so no further return-value detail is needed.
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 67%, so the schema handles patch and explicit_user_intent. The description adds meaning by enumerating the intended top-level patch keys (profile, goals, devices, training, nutrition, preferences, safety, notes) and recordable domain content, though it does not detail response_format semantics.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a precise action ('Persist a partial patch') and a concrete resource ('~/.delx-wellness/profile.json'), with domain fields to write. The update action is clearly distinct from the many get/list/auth sibling tools.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The phrase 'Use to record preferred name, goals, devices, training context...' gives clear when-to-use context. It does not explicitly name alternatives or exclusion conditions, though secrecy rejection and explicit-intent requirement delimit misuse.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
google_health_quickstartGoogle Health 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 Google Health?'
| Name | Required | Description | Default |
|---|---|---|---|
| response_format | No | markdown |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already establish read-only, idempotent, non-destructive behavior. The description adds beyond that by revealing the tool is adaptive ('Adapts to current state') and that it is for the human user, not the agent. These are useful behavioral details not present 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?
Three short sentences, each adding distinct value: what it is, how it adapts, and when to call it. The most actionable trigger is front-loaded at the end but clearly emphasized. There is no redundant or filler content.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple tool with one optional parameter and no output schema, the description covers the core purpose, adaptive behavior, and call trigger. The only notable gap is the absence of any guidance on the response_format parameter, though the schema's enum and default limit the ambiguity.
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%, and the description does not mention response_format at all. The schema provides an enum and default, so the parameter is somewhat self-explanatory, but the description adds no extra meaning and does not compensate for 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 states a specific verb and resource: 'setup walkthrough for the human user' with a concrete structure ('3-step'). It also provides a trigger phrase, 'Call this first when the user asks 'how do I connect Google Health?'', which clearly differentiates this from sibling tools like get_auth_url or connection_status.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It gives an explicit when-to-use condition ('Call this first when the user asks...'). However, it does not explicitly name alternatives or state when NOT to use this tool, so it falls just short of the top score.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
google_health_reconcile_data_pointsReconcile Google Health Data PointsBRead-onlyIdempotent
Read a reconciled stream for one data type across sources. Supports all-sources, google-wearables and google-sources data source families.
| Name | Required | Description | Default |
|---|---|---|---|
| filter | No | Optional Google AIP-160 filter expression. Use snake_case field names in filters. | |
| data_type | No | Google Health data type in kebab case. Supported slugs (call google_health_list_data_types for units and which verbs each supports): active-energy-burned, active-minutes, active-zone-minutes, activity-level, altitude, blood-glucose, body-fat, calories-in-heart-rate-zone, core-body-temperature, daily-heart-rate-variability, daily-heart-rate-zones, daily-oxygen-saturation, daily-respiratory-rate, daily-resting-heart-rate, daily-sleep-temperature-derivations, daily-vo2-max, distance, electrocardiogram, exercise, floors, food, food-measurement-unit, heart-rate, heart-rate-variability, height, hydration-log, irregular-rhythm-notification, nutrition-log, oxygen-saturation, respiratory-rate-sleep-summary, run-vo2-max, sedentary-period, sleep, steps, swim-lengths-data, time-in-heart-rate-zone, total-calories, vo2-max, weight. Other valid v4 kebab-case slugs are also accepted. | steps |
| page_size | No | ||
| page_token | No | ||
| privacy_mode | No | Optional per-call privacy override. Defaults to GOOGLE_HEALTH_PRIVACY_MODE or structured. raw returns upstream Google Health JSON. | |
| response_format | No | markdown | |
| data_source_family | No | ||
| explicit_user_intent | No | Required true when privacy_mode=raw (agent escalation of redaction). |
Output Schema
| Name | Required | Description |
|---|---|---|
| data | Yes | |
| endpoint | Yes | |
| privacy_mode | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already mark this as read-only, open-world, idempotent, and non-destructive; the description's 'Read' is consistent with those attributes. It adds the notion of a reconciled stream across sources, but does not disclose behavior like pagination, privacy-mode effects, or how reconciliation differs from raw listing. With annotations covering the safety profile, this is acceptable but not rich.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is exceptionally concise: two sentences, front-loaded with the core verb and object, followed by the supported source families. There is no filler or repetition.
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 core purpose is clear, and the presence of an output schema reduces the need to explain return values. However, for a tool with 8 parameters, the description does not clarify selection versus list_data_points/rollup, and several parameters remain semantically under-specified. It is adequate but not fully complete for an agent encountering this tool in a large sibling set.
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 exactly 50%, so the description is expected to compensate for undocumented parameters. It partially does by listing the three data source family values in prose, but it adds nothing about page_size, page_token, response_format, or default privacy behavior. The description provides marginal value over the schema but does not fill the coverage gap completely.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states a specific action ('Read') and a specific resource ('a reconciled stream for one data type across sources'), which is not a tautology of the title. It also lists the supported data source families, adding concrete scope. However, it does not explicitly differentiate itself from siblings like google_health_list_data_points or google_health_rollup.
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 no guidance on when to use this tool versus alternatives. It does not mention google_health_list_data_points, google_health_rollup, or any exclusion criteria, leaving the agent to infer selection without support.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
google_health_revoke_accessRevoke Google Health OAuth AccessADestructive
Revoke the current Google OAuth grant and delete the local token file. Use only when the user explicitly wants to disconnect Google Health. Gated: requires explicit user intent — agents must not call this autonomously.
| 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 mark the tool destructive (destructiveHint: true) and non-read-only (readOnlyHint: false), and the description matches by disclosing exactly what is destroyed: the OAuth grant and the local token file. It adds the gating requirement that explicit user intent is necessary, making the irreversible consequences and autonomy restriction clear. 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?
Three short sentences, front-loaded with the action, then the user-intent condition and the autonomy prohibition. Every sentence earns its place; no filler or repetition of schema details.
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 simple two-parameter schema, rich annotations, and an output schema, the description covers what the tool does, what it deletes, and the strict invocation condition. It is complete enough for an agent to decide whether and how to call it, and no return-value documentation is needed.
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 schema covers explicit_user_intent well (must be true, prevents autonomous revocation), and the description echoes that guard, but the description adds no detail about response_format and does not clarify that explicit_user_intent should be treated as effectively mandatory despite the schema listing zero required parameters. At 50% schema coverage, the description only partially compensates, so this is adequate rather than strong.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a specific verb ('Revoke'), names the exact resource ('current Google OAuth grant'), and adds the local side effect ('delete the local token file') that separates it from read-only/auth-flow siblings like google_health_get_auth_url or google_health_connection_status. The title reinforces 'Revoke Google Health OAuth Access', so an agent can confidently identify this as the disconnect tool.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description is explicit about the only allowed trigger: 'Use only when the user explicitly wants to disconnect Google Health.' It also states a hard prohibition: 'agents must not call this autonomously.' It does not name alternative tools for reconnecting or checking status, which prevents a full 5, but the when/when-not guidance is unambiguous.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
google_health_rollupGoogle Health Physical-Time RollupCRead-onlyIdempotent
Aggregate a data type over physical time intervals using Google Health rollUp.
| Name | Required | Description | Default |
|---|---|---|---|
| end_time | Yes | ISO 8601 date-time with timezone, e.g. 2026-05-01T00:00:00Z | |
| data_type | No | Google Health data type in kebab case. Supported slugs (call google_health_list_data_types for units and which verbs each supports): active-energy-burned, active-minutes, active-zone-minutes, activity-level, altitude, blood-glucose, body-fat, calories-in-heart-rate-zone, core-body-temperature, daily-heart-rate-variability, daily-heart-rate-zones, daily-oxygen-saturation, daily-respiratory-rate, daily-resting-heart-rate, daily-sleep-temperature-derivations, daily-vo2-max, distance, electrocardiogram, exercise, floors, food, food-measurement-unit, heart-rate, heart-rate-variability, height, hydration-log, irregular-rhythm-notification, nutrition-log, oxygen-saturation, respiratory-rate-sleep-summary, run-vo2-max, sedentary-period, sleep, steps, swim-lengths-data, time-in-heart-rate-zone, total-calories, vo2-max, weight. Other valid v4 kebab-case slugs are also accepted. | steps |
| page_size | No | ||
| page_token | No | ||
| start_time | Yes | ISO 8601 date-time with timezone, e.g. 2026-05-01T00:00:00Z | |
| window_size | No | Duration in protobuf seconds format, e.g. 3600s. | 3600s |
| privacy_mode | No | Optional per-call privacy override. Defaults to GOOGLE_HEALTH_PRIVACY_MODE or structured. raw returns upstream Google Health JSON. | |
| response_format | No | markdown | |
| data_source_family | No | ||
| explicit_user_intent | No | Required true when privacy_mode=raw (agent escalation of redaction). |
Output Schema
| Name | Required | Description |
|---|---|---|
| data | Yes | |
| endpoint | Yes | |
| privacy_mode | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The annotations already establish that this is read-only, idempotent, and non-destructive, so the description does not need to cover side effects. It adds the basic aggregation-over-physical-time behavior, which is useful context, but it leaves out pagination, privacy-mode behavior, and windowing semantics that would help the agent understand the call's full behavior.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is one tight sentence with the core verb front-loaded, which is easy to scan. 'using Google Health rollUp' is slightly redundant given the tool name, but there is no fluff or unnecessary elaboration.
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?
This is a 10-parameter aggregation tool with a rich output schema and many siblings, but the description gives no operational context about privacy_mode=raw, data_source_family, pagination, or how it differs from google_health_daily_rollup. The output schema reduces the need to document return values, but the surrounding behavior is still underdescribed.
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 10 parameters and only 60% schema description coverage, the description should compensate for undocumented parameters such as page_size, page_token, response_format, and data_source_family. The description only vaguely implies data_type and time-interval concepts, adding little meaning beyond what the input schema already documents.
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 action ('Aggregate') and resource ('a data type over physical time intervals'), which gives the agent a clear sense of what the tool does. The phrase 'physical time intervals' helps distinguish it from daily-rollup siblings, though it does not name an alternative explicitly. It is not a tautology: it adds the concept of aggregation over physical time beyond the title.
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?
There is no guidance on when to use this tool versus google_health_daily_rollup, google_health_list_data_points, or the summary tools. The description implies a use case but gives no exclusions, prerequisites, or alternative routing, leaving the agent to infer when this is the right choice.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
google_health_weekly_summaryGoogle Health Weekly ReviewARead-onlyIdempotent
Build a weekly Google Health scorecard with activity, sleep, heart context and missing-data awareness. Read-only, beta, 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 declare readOnly, idempotent, openWorld, and non-destructive behavior. The description adds valuable context beyond those: beta status, non-medical scope, and missing-data awareness. These disclose important behavioral traits 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?
A single, front-loaded sentence that starts with the primary action and resource, then adds content scope and caveats. Every clause earns its place, with no repetition of schema details or padding.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The tool is moderately simple, has an output schema, and its annotations already cover the safety profile. The description supplies scope, content, and important caveats. The main gap is the lack of explicit sibling routing, but that is more of a usage-guideline shortcoming than a completeness failure.
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 discuss parameters, but the schema provides descriptions for days, timezone, and compare_days. The only undocumented parameter, response_format, is self-explanatory through its enum values and default. With 75% schema coverage, the description is not required to compensate heavily.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific action and resource: 'Build a weekly Google Health scorecard' with explicit content areas (activity, sleep, heart context, missing-data awareness). The word 'weekly' plus 'scorecard' clearly differentiates it from sibling tools like google_health_daily_summary and google_health_rollup.
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 useful usage context such as 'Read-only, beta, non-medical', but does not explicitly name alternatives or conditions like 'use daily_summary for day-level details'. The intended usage is implied rather than stated, so an agent must infer when this tool is preferable to its many siblings.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
google_health_wellness_contextGoogle Health Wellness ContextBRead-onlyIdempotent
Normalize Google Health activity/sleep context into the shared wellness_context shape for recommendation engines.
| Name | Required | Description | Default |
|---|---|---|---|
| days | No | Lookback window for normalized Google Health 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?
Annotations already cover the safety profile (readOnlyHint, idempotentHint, openWorldHint, destructiveHint=false), lowering the burden on the description. The description adds that output is normalized into a shared shape, but does not disclose how missing data is handled, whether Google Health authentication is involved, or what happens for empty inputs. There is no annotation contradiction.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single focused sentence with no filler. It front-loads the action, the source data, and the normalization target, making it easy to scan and understand.
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 presence of an output schema and strong annotations covers return-shape and safety details that the description would otherwise need to state. However, the one-line description leaves ambiguity about how the normalization works, what inputs are meaningful, and how this tool relates to the many sibling Google Health tools. It is minimally adequate but not fully self-sufficient.
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 33% of parameters (days and timezone) have schema descriptions, and the tool description does not mention any of the six parameters. It fails to compensate for undocumented parameters like notes, soreness, injury_flags, and response_format, leaving their intended semantics largely to inference from names and default 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 uses a specific verb ('Normalize') and names both the input resource ('Google Health activity/sleep context') and the output target ('shared wellness_context shape'). It is distinct from sibling retrieval/summary tools because it describes a transformation, though it does not explicitly name or differentiate itself from alternatives.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The phrase 'for recommendation engines' gives an implied use context, but the description does not explain when to choose this tool over related siblings like google_health_rollup, google_health_daily_summary, or google_health_data_inventory. No exclusions, prerequisites, or alternative routing guidance is provided.
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.
26 tool updates
v0.7.7- Changed
google_health_agent_manifest2 fields changed- changed
Input schema / $schemaPrevious value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema" - changed
Output schema / $schemaPrevious value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
- Changed
google_health_cache_status2 fields changed- changed
Input schema / $schemaPrevious value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema" - changed
Output schema / $schemaPrevious value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
- Changed
google_health_capabilities2 fields changed- changed
Input schema / $schemaPrevious value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema" - changed
Output schema / $schemaPrevious value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
- Changed
google_health_connection_status2 fields changed- changed
Input schema / $schemaPrevious value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema" - changed
Output schema / $schemaPrevious value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
- Changed
google_health_daily_rollup2 fields changed- changed
Input schema / $schemaPrevious value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema" - changed
Output schema / $schemaPrevious value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
- Changed
google_health_daily_summary2 fields changed- changed
Input schema / $schemaPrevious value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema" - changed
Output schema / $schemaPrevious value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
- Changed
google_health_data_inventory2 fields changed- changed
Input schema / $schemaPrevious value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema" - changed
Output schema / $schemaPrevious value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
- Changed
google_health_data_type_coverage2 fields changed- changed
Input schema / $schemaPrevious value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema" - changed
Output schema / $schemaPrevious value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
- Changed
google_health_demo1 field changed- changed
Input schema / $schemaPrevious value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
- Changed
google_health_exchange_code4 fields changed- changed
Input schema / $schemaPrevious value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema" - added
Input schema / properties / code_verifierAdded value: +{ + "description": "PKCE code verifier from google_health_get_auth_url.", + "minLength": 1, + "type": "string" +} - changed
Input schema / requiredPrevious value: -[ - "code" -]New value: +[ + "code", + "code_verifier" +] - changed
Output schema / $schemaPrevious value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
- Changed
google_health_get_auth_url4 fields changed- changed
Input schema / $schemaPrevious value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema" - changed
Output schema / $schemaPrevious value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema" - added
Output schema / properties / code_verifierAdded value: +{ + "description": "PKCE code verifier. Pass this to google_health_exchange_code.", + "type": "string" +} - changed
Output schema / requiredPrevious value: -[ - "auth_url", - "redirect_uri", - "scopes", - "next_step" -]New value: +[ + "auth_url", + "redirect_uri", + "scopes", + "code_verifier", + "next_step" +]
- Changed
google_health_get_identity2 fields changed- changed
Input schema / $schemaPrevious value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema" - changed
Output schema / $schemaPrevious value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
- Changed
google_health_get_profile2 fields changed- changed
Input schema / $schemaPrevious value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema" - changed
Output schema / $schemaPrevious value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
- Changed
google_health_get_settings2 fields changed- changed
Input schema / $schemaPrevious value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema" - changed
Output schema / $schemaPrevious value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
- Changed
google_health_list_data_points2 fields changed- changed
Input schema / $schemaPrevious value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema" - changed
Output schema / $schemaPrevious value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
- Changed
google_health_list_data_types2 fields changed- changed
Input schema / $schemaPrevious value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema" - changed
Output schema / $schemaPrevious value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
- Changed
google_health_onboarding1 field changed- changed
Input schema / $schemaPrevious value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
- Changed
google_health_privacy_audit2 fields changed- changed
Input schema / $schemaPrevious value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema" - changed
Output schema / $schemaPrevious value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
- Changed
google_health_profile_get1 field changed- changed
Input schema / $schemaPrevious value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
- Changed
google_health_profile_update1 field changed- changed
Input schema / $schemaPrevious value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
- Changed
google_health_quickstart1 field changed- changed
Input schema / $schemaPrevious value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
- Changed
google_health_reconcile_data_points2 fields changed- changed
Input schema / $schemaPrevious value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema" - changed
Output schema / $schemaPrevious value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
- Changed
google_health_revoke_access2 fields changed- changed
Input schema / $schemaPrevious value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema" - changed
Output schema / $schemaPrevious value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
- Changed
google_health_rollup4 fields changed- changed
Input schema / $schemaPrevious value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema" - changed
Input schema / properties / end_time / 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\\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)))$" - changed
Input schema / properties / start_time / 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\\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)))$" - changed
Output schema / $schemaPrevious value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
- Changed
google_health_weekly_summary2 fields changed- changed
Input schema / $schemaPrevious value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema" - changed
Output schema / $schemaPrevious value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
- Changed
google_health_wellness_context2 fields changed- changed
Input schema / $schemaPrevious value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema" - changed
Output schema / $schemaPrevious value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
17 tool updates
v0.7.3- Added
google_health_cache_status - Added
google_health_connection_status - Added
google_health_daily_rollup - Added
google_health_daily_summary - Changed
google_health_get_identity1 field changed- added
Input schema / properties / explicit_user_intentAdded value: +{ + "description": "Required true when privacy_mode=raw (agent escalation of redaction).", + "type": "boolean" +}
- Changed
google_health_get_profile1 field changed- added
Input schema / properties / explicit_user_intentAdded value: +{ + "description": "Required true when privacy_mode=raw (agent escalation of redaction).", + "type": "boolean" +}
- Added
google_health_get_settings - Added
google_health_list_data_points - Added
google_health_onboarding - Added
google_health_privacy_audit - Added
google_health_profile_get - Added
google_health_profile_update - Added
google_health_reconcile_data_points - Added
google_health_revoke_access - Added
google_health_rollup - Added
google_health_weekly_summary - Added
google_health_wellness_context
15 tool updates
v0.5.3- Removed
google_health_cache_status - Removed
google_health_connection_status - Removed
google_health_daily_rollup - Removed
google_health_daily_summary - Removed
google_health_get_settings - Removed
google_health_list_data_points - Removed
google_health_onboarding - Removed
google_health_privacy_audit - Removed
google_health_profile_get - Removed
google_health_profile_update - Removed
google_health_reconcile_data_points - Removed
google_health_revoke_access - Removed
google_health_rollup - Removed
google_health_weekly_summary - Removed
google_health_wellness_context
15 tool updates
v0.5.1- Changed
google_health_agent_manifest2 fields changed- added
Output schema / properties / mutating_toolsAdded value: +{ + "additionalProperties": false, + "properties": { + "enabled": { + "type": "boolean" + }, + "policy": { + "type": "string" + }, + "scope_preset": { + "type": "string" + }, + "write_scope": { + "type": "string" + } + }, + "required": [ + "enabled", + "write_scope", + "scope_preset", + "policy" + ], + "type": "object" +} - changed
Output schema / requiredPrevious value: -[ - "project", - "mcp_name", - "client", - "unofficial", - "status", - "beta_notice", - "package", - "oauth", - "recommended_first_calls", - "standard_tools", - "resources", - "hermes", - "agent_rules", - "troubleshooting", - "links" -]New value: +[ + "project", + "mcp_name", + "client", + "unofficial", + "status", + "beta_notice", + "package", + "oauth", + "recommended_first_calls", + "standard_tools", + "resources", + "mutating_tools", + "hermes", + "agent_rules", + "troubleshooting", + "links" +]
- Changed
google_health_cache_status1 field changed- added
Output schema / properties / http_cacheAdded value: +{ + "additionalProperties": false, + "properties": { + "bypass_env_var": { + "type": "string" + }, + "default_ttl_seconds": { + "maximum": 9007199254740991, + "minimum": 0, + "type": "integer" + }, + "hit_count": { + "maximum": 9007199254740991, + "minimum": 0, + "type": "integer" + }, + "hit_rate": { + "maximum": 1, + "minimum": 0, + "type": "number" + }, + "miss_count": { + "maximum": 9007199254740991, + "minimum": 0, + "type": "integer" + }, + "size": { + "maximum": 9007199254740991, + "minimum": 0, + "type": "integer" + } + }, + "required": [ + "size", + "hit_count", + "miss_count", + "hit_rate", + "default_ttl_seconds", + "bypass_env_var" + ], + "type": "object" +}
- Changed
google_health_capabilities2 fields changed- added
Output schema / properties / auth_model / properties / write_scopesAdded value: +{ + "items": { + "type": "string" + }, + "type": "array" +} - added
Output schema / properties / mutating_toolsAdded value: +{ + "additionalProperties": false, + "properties": { + "planned": { + "items": { + "type": "string" + }, + "type": "array" + }, + "policy": { + "type": "string" + }, + "scope_preset": { + "type": "string" + } + }, + "required": [ + "policy", + "scope_preset", + "planned" + ], + "type": "object" +}
- Changed
google_health_connection_status2 fields changed- added
Output schema / properties / oauth / properties / nutrition_write_readyAdded value: +{ + "type": "boolean" +} - changed
Output schema / properties / oauth / requiredPrevious value: -[ - "recommended_scopes", - "granted_scopes", - "missing_recommended_scopes", - "scope_status", - "activity_tools_ready", - "profile_tools_ready" -]New value: +[ + "recommended_scopes", + "granted_scopes", + "missing_recommended_scopes", + "scope_status", + "activity_tools_ready", + "profile_tools_ready", + "nutrition_write_ready" +]
- Changed
google_health_daily_rollup1 field changed- changed
Input schema / properties / data_type / descriptionPrevious value: -"Google Health data type in kebab case, e.g. steps, sleep, heart-rate, daily-resting-heart-rate."New value: +"Google Health data type in kebab case. Supported slugs (call google_health_list_data_types for units and which verbs each supports): active-energy-burned, active-minutes, active-zone-minutes, activity-level, altitude, blood-glucose, body-fat, calories-in-heart-rate-zone, core-body-temperature, daily-heart-rate-variability, daily-heart-rate-zones, daily-oxygen-saturation, daily-respiratory-rate, daily-resting-heart-rate, daily-sleep-temperature-derivations, daily-vo2-max, distance, electrocardiogram, exercise, floors, food, food-measurement-unit, heart-rate, heart-rate-variability, height, hydration-log, irregular-rhythm-notification, nutrition-log, oxygen-saturation, respiratory-rate-sleep-summary, run-vo2-max, sedentary-period, sleep, steps, swim-lengths-data, time-in-heart-rate-zone, total-calories, vo2-max, weight. Other valid v4 kebab-case slugs are also accepted."
- Added
google_health_data_type_coverage - Added
google_health_demo - Changed
google_health_list_data_points1 field changed- changed
Input schema / properties / data_type / descriptionPrevious value: -"Google Health data type in kebab case, e.g. steps, sleep, heart-rate, daily-resting-heart-rate."New value: +"Google Health data type in kebab case. Supported slugs (call google_health_list_data_types for units and which verbs each supports): active-energy-burned, active-minutes, active-zone-minutes, activity-level, altitude, blood-glucose, body-fat, calories-in-heart-rate-zone, core-body-temperature, daily-heart-rate-variability, daily-heart-rate-zones, daily-oxygen-saturation, daily-respiratory-rate, daily-resting-heart-rate, daily-sleep-temperature-derivations, daily-vo2-max, distance, electrocardiogram, exercise, floors, food, food-measurement-unit, heart-rate, heart-rate-variability, height, hydration-log, irregular-rhythm-notification, nutrition-log, oxygen-saturation, respiratory-rate-sleep-summary, run-vo2-max, sedentary-period, sleep, steps, swim-lengths-data, time-in-heart-rate-zone, total-calories, vo2-max, weight. Other valid v4 kebab-case slugs are also accepted."
- Added
google_health_list_data_types - Added
google_health_onboarding - Added
google_health_profile_get - Added
google_health_profile_update - Added
google_health_quickstart - Changed
google_health_reconcile_data_points1 field changed- changed
Input schema / properties / data_type / descriptionPrevious value: -"Google Health data type in kebab case, e.g. steps, sleep, heart-rate, daily-resting-heart-rate."New value: +"Google Health data type in kebab case. Supported slugs (call google_health_list_data_types for units and which verbs each supports): active-energy-burned, active-minutes, active-zone-minutes, activity-level, altitude, blood-glucose, body-fat, calories-in-heart-rate-zone, core-body-temperature, daily-heart-rate-variability, daily-heart-rate-zones, daily-oxygen-saturation, daily-respiratory-rate, daily-resting-heart-rate, daily-sleep-temperature-derivations, daily-vo2-max, distance, electrocardiogram, exercise, floors, food, food-measurement-unit, heart-rate, heart-rate-variability, height, hydration-log, irregular-rhythm-notification, nutrition-log, oxygen-saturation, respiratory-rate-sleep-summary, run-vo2-max, sedentary-period, sleep, steps, swim-lengths-data, time-in-heart-rate-zone, total-calories, vo2-max, weight. Other valid v4 kebab-case slugs are also accepted."
- Changed
google_health_rollup1 field changed- changed
Input schema / properties / data_type / descriptionPrevious value: -"Google Health data type in kebab case, e.g. steps, sleep, heart-rate, daily-resting-heart-rate."New value: +"Google Health data type in kebab case. Supported slugs (call google_health_list_data_types for units and which verbs each supports): active-energy-burned, active-minutes, active-zone-minutes, activity-level, altitude, blood-glucose, body-fat, calories-in-heart-rate-zone, core-body-temperature, daily-heart-rate-variability, daily-heart-rate-zones, daily-oxygen-saturation, daily-respiratory-rate, daily-resting-heart-rate, daily-sleep-temperature-derivations, daily-vo2-max, distance, electrocardiogram, exercise, floors, food, food-measurement-unit, heart-rate, heart-rate-variability, height, hydration-log, irregular-rhythm-notification, nutrition-log, oxygen-saturation, respiratory-rate-sleep-summary, run-vo2-max, sedentary-period, sleep, steps, swim-lengths-data, time-in-heart-rate-zone, total-calories, vo2-max, weight. Other valid v4 kebab-case slugs are also accepted."
19 tool updates
v0.1.3- First observed
google_health_agent_manifest - First observed
google_health_cache_status - First observed
google_health_capabilities - First observed
google_health_connection_status - First observed
google_health_daily_rollup - First observed
google_health_daily_summary - First observed
google_health_data_inventory - First observed
google_health_exchange_code - First observed
google_health_get_auth_url - First observed
google_health_get_identity - First observed
google_health_get_profile - First observed
google_health_get_settings - First observed
google_health_list_data_points - First observed
google_health_privacy_audit - First observed
google_health_reconcile_data_points - First observed
google_health_revoke_access - First observed
google_health_rollup - First observed
google_health_weekly_summary - First observed
google_health_wellness_context
TDQS
Scored across 26 tools
Multiple tools overlap in purpose: connection_status, privacy_audit, and cache_status all touch local config/cache/token readiness; data_inventory, list_data_types, data_type_coverage, and capabilities all describe supported data types/scopes. The get_profile vs profile_get pair is especially easy to confuse because one is a Google Health profile and the other is a local Delx wellness profile.
All tools share the google_health_ prefix and use snake_case, but beyond that the pattern is mixed: verb-first names (get_profile, list_data_points, revoke_access) coexist with noun-first names (profile_get, profile_update) and pure noun names (capabilities, quickstart, data_inventory). This is readable but not a consistent verb_noun convention.
At 26 tools, the server crosses the threshold where the set becomes heavy. Many tools are narrow status/help/metadata endpoints (cache_status, privacy_audit, capabilities, agent_manifest, quickstart, demo) that could reasonably be consolidated into fewer, broader tools without losing capability.
The tool surface covers the main lifecycle for this domain: OAuth setup, identity/profile/settings reads, data type discovery, data point listing, reconciliation, rollups, summaries, local profile persistence, and access revocation. Minor gaps exist (e.g., no explicit token-refresh tool, no update for Google Health settings), but they are unlikely to block the core read-only Google Health workflow.
Maintenance
Related MCP Connectors
Hosted MCP server with managed OAuth for 15+ toolkits: Google Workspace, Fitbit, Oura, Kalshi, etc.
Hosted MCP server for the Healthie EHR & telehealth API: patients, appointments, charting, tasks.
MCP server for Withings health data — sleep, activity, heart, and body metrics.
Hosted MCP server for Cliniko — patients, appointments, availability, and invoices for AI agents.
Related MCP Servers
- AlicenseBqualityAmaintenanceLocal-first MCP server that connects AI agents to your Fitbit activity, sleep, heart-rate, HRV, SpO2 and weight data.33854MIT
- AlicenseAqualityCmaintenanceMCP server to read daily activity, sleep, heart rate, and body metrics from Google Health API, allowing AI assistants like Claude to access your health data. Optionally syncs health metrics to an Obsidian vault.5MIT
- AlicenseNot gradedqualityDmaintenanceSelf-hosted MCP server that aggregates personal health data from Google Health, Oura, and Withings into a single, provider-attributed interface with configurable source of truth preferences.MIT
- AlicenseCqualityBmaintenanceA local-first, model-agnostic MCP server that stores personal health data in a SQLite file and provides analysis-ready views for any AI client to log, retrieve, and reason over health records.79MIT