Skip to main content
Glama

English version: README.en.md

米桥(Mi Fitness Data Bridge)

Glama score

Local-first data bridge that exports your own 小米运动健康 data to SQLite, JSON, CSV, Python, and MCP-compatible tools.

The 小米运动健康 App is happy to show you your steps, sleep, and heart rate — but never lets you take that data with you. This bridge puts your own data into a SQLite file on your own hard drive.

Trademark notice: 小米, 米家, and Mi Fitness are trademarks of 小米 Corporation. This project is an unofficial community project and is not affiliated with or endorsed by 小米.

The experimental cloud adapter may become unusable at any time because 小米 changes its private APIs. Use it only on accounts and data you are authorized to access.

Verified in practice

Recorded on 2026-07-20 on Windows (Python 3.14) from a commit on the main branch. All data are synthetic and involve no credentials or network access. (Test counts re-checked and updated on 2026-08-17.)

Test suite:

$ python -m pytest -q -p no:cacheprovider
........................................................................ [ 96%]
...                                                                      [100%]
75 passed in 10.27s

End-to-end synthetic demo (examples/synthetic_demo.py first populates the local SQLite cache with synthetic records, then runs the real JSON/CSV export pipeline):

$ python examples/synthetic_demo.py
Seeded synthetic database: C:\Users\<you>\AppData\Local\Temp\mi-fitness-demo-53el7cfh\mi_fitness.db
  daily_activity: 2026-07-15 .. 2026-07-15 (1 day(s))
  sleep: 2026-07-14 .. 2026-07-14 (1 day(s))
  workouts: 2026-07-15 .. 2026-07-15 (1 day(s))
  body_measurements: 2026-07-15 .. 2026-07-15 (1 day(s))

Export completed
  mi_fitness.json
  daily_activity.csv
  sleep.csv
  workouts.csv
  body_measurements.csv
  heart_rate.csv
  spo2.csv
  stress.csv
  abnormal_heart_beat.csv

JSON envelope:
  schema_version: 1.0
  source: mi_fitness_data_bridge
  records.daily_activity: 1 row(s)
  records.sleep: 1 row(s)
  records.workouts: 1 row(s)
  records.body_measurements: 1 row(s)

Sample sleep row (synthetic):
  start_at=2026-07-14T23:20:00 end_at=2026-07-15T07:05:00
  duration_minutes=465 score=86
  stages=[{"stage": "deep", "minutes": 82}, {"stage": "light", "minutes": 271}, {"stage": "rem", "minutes": 88}, {"stage": "awake", "minutes": 24}]

Related MCP server: garmin-givemydata

Merged health-assistant project

The health-assistant project (a local-first personal health dashboard: Strava, sleep, body composition, diet analysis) has been merged into this repository, and its original repository has been archived. The absorbed assets live under the docs/health-assistant/ directory:

  • analytics.py — zero-dependency reference implementation of a training/recovery summary and recommendation engine (7-day training statistics, acute-to-chronic workload ratio, readiness checks, daily training recommendations).

  • coaching_methodology.md — the interpretable cycling coaching, body composition, and sports nutrition methodology behind it.

  • README.md — full migration notes, including the parts intentionally not ported (FastAPI dashboard, Strava OAuth/Webhook pipeline, meal photo analysis) and the reasons.

What this project does

  • Reads 小米运动健康 data through an experimental China-region cloud adapter.

  • Stores normalized records in a local SQLite database.

  • Exports portable JSON or CSV without credentials.

  • Exposes local MCP query tools for personal automation.

  • Provides a reusable connector implementation for downstream projects (e.g., a personal fat-loss advisor).

It deliberately does not provide medical advice, weight-loss guidance, hosted account access, or multi-user cloud services.

Why this bridge?

Before

After

Your health history lives only in the 小米运动健康 App, and the only way to “export” it is taking screenshots.

mi-fitness-bridge sync pulls daily activity, sleep, workouts, body measurements, heart rate, blood oxygen (SpO2), and stress into a normalized local SQLite database.

To answer “how did I sleep last month”, you have to scroll back day by day in the App.

mi-fitness-bridge export --format csv --type sleep --start-date ... --end-date ... outputs a CSV filtered exactly to that interval, which can be opened directly in spreadsheet software.

To let an AI assistant access your health data, you have to hand over your credentials to some hosted service.

mi-fitness-bridge serve exposes local MCP query tools based on your own database; the passToken stays in the OS keychain and is never included in export files.

Supported datasets

  • Daily activity: steps, distance, active calories, and active minutes.

  • Sleep records and sleep stages.

  • Workout records.

  • Body measurements: weight and available body composition fields.

  • Heart-rate samples, including resting heart rate when available.

  • Blood oxygen (SpO2), stress, and abnormal heartbeat events (depending on account/device availability).

Actual availability varies by device, account region, firmware, and 小米 upstream services.

Installation

git clone https://github.com/shkyyy18/mi-bridge.git mi_fitness_data_bridge
cd mi_fitness_data_bridge
python -m venv .venv

Windows PowerShell:

.\.venv\Scripts\Activate.ps1
pip install -e ".[dev]"

Windows Git Bash:

source .venv/Scripts/activate
pip install -e ".[dev]"

macOS/Linux:

source .venv/bin/activate
pip install -e '.[dev]'

Configuration

A more secure interactive configuration path avoids writing the passToken directly into your shell history:

mi-fitness-bridge setup
mi-fitness-bridge doctor

When available, credentials are stored via the local keyring. Some fallback keyring implementations may not store secrets securely; please understand your OS's keyring behavior before using.

How to get user_id and passToken

This bridge uses 小米 account-level credentials (the same login state as the 米家 App). Use either of the following two methods:

Method 1: manual copy from the browser

  1. Open account.xiaomi.com in your browser and sign in with your 小米 account (the same account as the 小米运动健康 App).

  2. Open Developer Tools (F12) → Application → Cookies → https://account.xiaomi.com.

  3. Copy the values of the userId and passToken cookies and paste them when mi-fitness-bridge setup prompts you.

Method 2: QR-code login tool

Sign in once by scanning a QR code with the open-source mijia-api:

pip install mijiaAPI
python -c "from mijiaAPI import mijiaAPI; mijiaAPI().login()"   # 终端出二维码,用米家 App 扫码

The login state is saved by default at ~/.config/mijia-api/auth.json (on Windows, %USERPROFILE%\.config\mijia-api\auth.json). The userId and passToken inside it can be used directly with this bridge — 小米 account-level credentials work across services, and the bridge uses them to obtain a 小米运动健康 (sid=miothealth) session. Note that auth.json stores credentials in plaintext: after entering the userId and passToken into this bridge (system keychain), it is recommended to delete that file.

Note:

  • The passToken expires; when doctor reports authentication failure, simply re-fetch it using the steps above.

  • For the browser method, sign in from your usual network environment; frequent or off-site operations may trigger 小米 account risk control (slider/SMS verification). If you hit risk control, switch to the QR-code method.

  • Cookie names and the login flow are based on actual testing in 2026-08; they may vary by account region, device, or risk-control policy. 小米 may also adjust its private APIs at any time (see the experimental notice at the top).

  • These two values are equivalent to your account login state. Do not leak them, and do not commit them to Git.

Sync

mi-fitness-bridge sync --start-date 2026-07-01 --end-date 2026-07-15

Or sync only one dataset:

mi-fitness-bridge sync --type sleep --start-date 2026-07-01 --end-date 2026-07-15
mi-fitness-bridge sync --type body_measurements --start-date 2026-07-01 --end-date 2026-07-15

The database defaults to the platform user data directory (determined by platformdirs). sync, export, serve, and doctor all support moving it with the --db flag or the MI_FITNESS_DB_PATH environment variable. Precedence: command line > environment variable > default location. Note that platformdirs does not respond to the LOCALAPPDATA environment variable on Windows; to customize the path, use one of the two methods above:

mi-fitness-bridge sync --db ./data/mi_fitness.db --start-date 2026-07-01 --end-date 2026-07-15
export MI_FITNESS_DB_PATH=./data/mi_fitness.db

Known limitation: incremental sync without a date argument starts from the time of the last local record; upstream corrections or backfills of earlier history are not pulled automatically. If needed, explicitly re-run that interval with an earlier --start-date (idempotent overwrite; no duplicate records are produced).

Export

Generate a portable JSON file:

mi-fitness-bridge export --format json --output exports/mi_fitness.json

Generate one CSV file per dataset:

mi-fitness-bridge export --format csv --output exports/csv

Filter by dataset and date:

mi-fitness-bridge export --format json --type sleep \
  --start-date 2026-07-01 --end-date 2026-07-15 \
  --output exports/sleep.json

Export files never contain the saved 小米 passToken, but they do contain identifying columns such as plaintext user_id — export files are sensitive personal data, so store them carefully. Exported health records are ignored by Git by default.

See Export format for export format details (JSON envelope structure, CSV layout, closed-interval date filtering rules).

MCP service

The compatibility command remains available:

mi-fitness-bridge serve
# legacy alias
mi-fitness-mcp serve

Available tools include connection status, sync, coverage, daily summary, body measurements, sleep, workouts, heart rate, blood oxygen (SpO2), and stress queries, as well as the agent-oriented workout_series workout time-series tool — it automatically downsamples according to the hard max_points cap (fixed time-bucket means, aggregated inside SQLite), and reports downsampled, source_points, returned_points, and method truthfully in the response, while also providing full-precision statistics (avg/min/max/percentiles) and time in heart-rate zones. List/summary tools such as query_workouts and get_daily_summary include data_quality (covered days, missing metrics, last sync time).

Client integration example (configuration JSON for MCP clients such as Claude Code / Codex):

{
  "mcpServers": {
    "mi-bridge": {
      "command": "mi-fitness-bridge",
      "args": ["serve"]
    }
  }
}

Note: serve is a stdio service; it communicates with the client over standard input/output, not an HTTP service. Running it directly in a terminal will look like it is “stuck” — that is it waiting for MCP messages from the client, which is normal. For everyday use, let your MCP client start it with the configuration above.

Use as a Python dependency

The normalized adapter remains available under a compatible module name:

from mi_fitness_mcp.adapters.mi_fitness_cloud import MiFitnessCloudAdapter

Downstream projects should install this package rather than vendor or copy the connector source code.

License

License history: versions released before 2026-08-03 were licensed under MIT (the MIT attribution of the upstream kubulashvili/mi-fitness-mcp and binglua/mi-fitness-mcp-cn is retained in the NOTICE section at the top of LICENSE); new code in the current version is AGPL-3.0-only. See LICENSE and THIRD_PARTY_NOTICES.md for details.

Privacy and security

  • Safeguard the passToken, local database, export files, and logs; do not leak them.

  • Export files do not contain the passToken, but they do contain identifying columns such as plaintext user_id, and are equally sensitive personal data.

  • Do not run this bridge as a public credential proxy.

  • Do not commit real health data or screenshots containing personal metrics.

  • Always use synthetic data in bug reports and documentation.

  • This software is only for personal data access and engineering research, not for diagnosis or treatment.

See SECURITY.md for responsible disclosure and THIRD_PARTY_NOTICES.md for provenance.

Development

pip install -e '.[dev]'
python -m pytest -q -p no:cacheprovider
python -m ruff check src tests

Release

See CHANGELOG.md for version history and docs/release-checklist.md for release and post-release checklist items.

  • garmin-mcp — a local-first MCP service for Garmin data. It shares the agent-safe-series/v1 data contract with this project (time-series downsampling field semantics are byte-for-byte aligned), so the same AI agent can seamlessly consume data from both services.

Support this project

If this tool helped you, give me a star on GitHub.

Available Tools

15 tools
get_connection_statusC

Check connection status

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

C2.6/5.0
Behavior1/5

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

There are no annotations to aid transparency, so the description carries the full burden. It only restates the action without disclosing whether it is read-only, what data it returns, or any potential side effects. This is a tautological statement that adds no behavioral context.

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

Conciseness2/5

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

The description is extremely short, but this is under-specification rather than appropriate conciseness. The single phrase 'Check connection status' simply restates the tool name and does not earn its place by adding valuable information.

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

Completeness2/5

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

For a tool with no output schema and no annotations, the description should at least clarify what 'connection status' refers to, whether it returns a boolean or detailed diagnostics, and whether any side effects occur. The description is too sparse to be complete even for a simple status check.

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

Parameters4/5

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

The tool has zero parameters and the schema already covers everything (100% coverage). There is nothing for the description to explain, and the baseline for 0 parameters is 4.

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

Purpose4/5

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

The description uses a specific verb 'Check' and resource 'connection status', clearly stating the tool's function. However, it does not differentiate from sibling tools like get_sync_status, which might also relate to connection or synchronization.

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

Usage Guidelines2/5

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

No guidance is provided on when to use this tool versus alternatives. There is no mention of appropriate contexts, prerequisites, or exclusions, leaving the agent to guess when this tool 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.

get_daily_summaryC

Get daily activity summary

ParametersJSON Schema
NameRequiredDescriptionDefault
dateNo
end_dateNo
start_dateNo

TDQS

C2/5.0
Behavior2/5

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

With no annotations provided, the description must fully disclose behavior. It only says 'get,' implying a read operation, but does not specify what the summary contains, whether it supports a single date or a range, or any response details. This is insufficient for a tool with no other behavioral metadata.

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

Conciseness2/5

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

The description is a single short sentence, but it is under-specified rather than concise. It does not earn its place as it fails to provide meaningful information beyond the tool's name.

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

Completeness1/5

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

Given the lack of annotations, output schema, and parameter descriptions, this description is critically incomplete. The agent cannot infer what data is returned, how to use the date range, or what the response looks like, making this tool essentially unusable without external knowledge.

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

Parameters1/5

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

Schema coverage is 0%, and the description does not clarify any of the three parameters (date, end_date, start_date). There is no indication of their format, validation, or how they interact (e.g., mutually exclusive or range-based), leaving the agent with no guidance.

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

Purpose3/5

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

The description provides a clear verb and resource ('Get daily activity summary'), but the 'daily' wording conflicts with start_date/end_date parameters that suggest a range. It also does not distinguish this tool from sibling query tools (e.g., query_metric_series) that may also return summaries.

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

Usage Guidelines2/5

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

There is no guidance on when to use this tool over alternatives, nor any mention of appropriate scenarios, date ranges, or prerequisites. The description neither explains its context nor excludes any use cases.

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

get_data_coverageD

Get data coverage

ParametersJSON Schema
NameRequiredDescriptionDefault
data_typesNo

TDQS

D1.3/5.0
Behavior1/5

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

No annotations are provided, and the description does not disclose any behavioral traits such as side effects, permissions, data sources, or return behavior. The agent is left completely in the dark about what happens when this tool is invoked.

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

Conciseness2/5

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

The description is a single sentence, but it is under-specified rather than concise. It omits essential information, so brevity is not a virtue here; the description does not earn its place as a meaningful explanation.

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

Completeness1/5

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

With no output schema, no annotations, and a minimal parameter schema, the description is the only source of context. It is severely incomplete, failing to explain what 'data coverage' returns, what data_types control, and how this relates to sibling tools.

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

Parameters1/5

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

The schema has one parameter, data_types, which is an array of strings. However, the description provides zero explanation of what 'data types' means in this context, and schema description coverage is 0%. The description fails to compensate for the undocumented parameter.

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

Purpose1/5

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

The description 'Get data coverage' simply restates the tool name without elaborating on what data coverage is or what it pertains to. No specific verb or resource beyond the name itself is provided, making it tautological and unhelpful.

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

Usage Guidelines2/5

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

The description offers no context about when to use this tool compared to alternatives like sync_data, get_sync_status, or query_* tools. There are no prerequisites, exclusions, or recommended scenarios mentioned.

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

get_profileB

Get user profile information

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

B3.1/5.0
Behavior2/5

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

No annotations are provided, so the description carries the full burden of behavioral disclosure. It only states 'Get user profile information' without revealing what fields are returned, whether it accesses the current user or requires authentication, or any potential side effects. For a simple read operation, this is minimal but insufficiently transparent.

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

Conciseness5/5

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

The description is a single, straightforward sentence with no filler words. It is front-loaded and efficient, earning a perfect score for conciseness and structure.

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

Completeness2/5

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

With no output schema and no annotations, the description is expected to explain what the tool returns. It merely says 'user profile information' without specifying which fields or the response format. This leaves an AI agent uncertain about the data structure and completeness, making the contextual information inadequate.

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

Parameters4/5

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

The input schema has zero parameters, so the baseline is 4. The description does not need to explain parameter semantics since there are none. It correctly avoids adding irrelevant parameter information.

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

Purpose4/5

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

The description specifies a clear verb ('Get') and resource ('user profile information'), which matches the tool name. While it does not explicitly distinguish from sibling tools, the resource is distinct enough (no other profile-related tool exists among siblings), making the purpose fairly clear.

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

Usage Guidelines2/5

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

No guidance is provided on when to use this tool versus alternatives. The description simply states what it does without mentioning contexts, prerequisites, or exclusions. Given the presence of many sibling tools, this lack of usage direction is a notable gap.

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

get_sync_statusC

Get background synchronization status

ParametersJSON Schema
NameRequiredDescriptionDefault
sync_idYes

TDQS

C2.9/5.0
Behavior2/5

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

No annotations are provided, so the description carries full burden. It implies a read operation but does not state that it is read-only, whether authentication is needed, or what the returned status looks like. It only restates the tool's purpose without behavioral context.

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

Conciseness5/5

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

The description is a single concise phrase with no redundant words. It is front-loaded with the action and resource, making it easy to parse.

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

Completeness2/5

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

For a tool with one parameter and no annotations or output schema, this description is too minimal. It lacks information about what status values are possible, how to get sync_id, and what the response contains. A user cannot effectively use the tool without more context.

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

Parameters1/5

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

Schema description coverage is 0% for the only parameter 'sync_id'. The description does not explain what sync_id refers to, how to obtain it, or its format. It adds no semantic value beyond the schema, which is already empty.

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

Purpose5/5

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

The verb 'Get' and resource 'background synchronization status' clearly state what the tool does. It distinguishes from siblings like get_connection_status (connection vs sync status) and sync_data (trigger vs retrieve status).

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

Usage Guidelines2/5

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

The description provides no guidance on when to use this tool versus alternatives. There is no mention of prerequisites, context, or scenarios where this is preferred over get_connection_status or sync_data. Only implied usage.

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

query_abnormal_heart_beatC

Query abnormal heart beat events

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNo
end_dateYes
start_dateYes

TDQS

C2.6/5.0
Behavior2/5

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

With no annotations, the description carries the full burden of behavioral disclosure. It indicates a read-only query but does not disclose any behavioral traits such as required permissions, response format, date range handling, or limitations. This is a significant gap.

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

Conciseness4/5

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

The description is a single, direct sentence with no filler. It is appropriately brief and front-loaded, though it sacrifices valuable detail for brevity.

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

Completeness2/5

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

Given no annotations and no output schema, the description should provide more context about response structure, parameter constraints, and usage. It falls short, leaving the agent to infer critical details and increasing the risk of incorrect invocation.

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

Parameters1/5

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

Schema description coverage is 0% and the description provides no explanation of parameters. The schema lists start_date, end_date, and limit, but the description does not clarify their semantics, formats, or defaults, offering no added value beyond the raw schema.

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

Purpose4/5

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

The description clearly identifies a query operation for a distinct resource ('abnormal heart beat events'), which differentiates it from sibling tools like query_heart_rate and query_metric_series. However, it lacks detail on the nature of 'abnormal' events, so it is not maximally specific.

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

Usage Guidelines2/5

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

The description provides no explicit guidance on when to use this tool versus alternatives. The usage is only implied by the name, with no mention of alternatives or exclusions, such as when query_heart_rate would be more appropriate.

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

query_body_measurementsD

Query body measurements

ParametersJSON Schema
NameRequiredDescriptionDefault
metricsNo
end_dateYes
start_dateYes
latest_onlyNo

TDQS

D1.5/5.0
Behavior1/5

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

With no annotations provided, the description carries the full burden of behavioral disclosure. It only states 'Query body measurements' and gives no information about return formats, data granularity, side effects, read-only status, or any other behavioral aspects. The description is essentially non-informative beyond the tool name.

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

Conciseness2/5

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

At four words, the description is under-specified rather than appropriately concise. It lacks even the basic structure needed to convey a clear meaning, sacrificing all substantive content for brevity. The description does not earn its place because it provides zero informational value beyond the tool name.

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

Completeness1/5

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

Given the tool has four parameters, no output schema, and no annotations, the description is completely inadequate. It does not explain what body measurements are included, how date ranges work, what metrics are available, or what 'latest_only' means. An agent would be left guessing about the tool's full behavior and required inputs.

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

Parameters1/5

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

The schema has four parameters (metrics, end_date, start_date, latest_only) with zero descriptions. The description adds no meaning to any of these parameters, failing to compensate for the 0% schema description coverage. It does not explain date format, allowed metric values, or the effect of latest_only, leaving all parameter semantics unexplained.

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

Purpose2/5

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

The description 'Query body measurements' is a tautology, restating the tool name verbatim without adding any new information about what the tool does, what kind of body measurements it retrieves, or how it differs from sibling tools like query_metric_series or query_heart_rate. It names a verb and resource but provides no distinct purpose clarification.

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

Usage Guidelines2/5

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

There is no guidance on when to use this tool versus alternatives. No mention of prerequisites, typical use cases, or exclusions. The sibling tools include multiple measurement queries, and this description does nothing to differentiate them, leaving the agent without direction for tool selection.

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

query_heart_rateC

Query heart rate samples

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNo
end_dateYes
start_dateYes
sample_typeNo

TDQS

C2.1/5.0
Behavior1/5

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

With no annotations, the description carries the full burden of behavioral disclosure, but it provides none. It does not mention return format, pagination, filtering behavior, or whether it is read-only. The description simply restates the tool's name and offers no behavioral context.

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

Conciseness2/5

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

The description is extremely short, but this is under-specification, not conciseness. A tool with four parameters and no other context requires more than a single phrase to be useful. Every word is wasted because no additional meaning is conveyed.

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

Completeness1/5

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

Given the tool's complexity (4 parameters, no output schema, no annotations) and the presence of sibling query tools, the description is woefully incomplete. It offers no return value information, parameter semantics, or usage context, making it impossible for an agent to correctly invoke or select the tool.

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

Parameters1/5

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

Schema description coverage is 0%, so the description must compensate by explaining parameter meanings, but it does not. No parameter such as start_date, end_date, sample_type, or limit is mentioned, leaving the agent completely dependent on the schema's minimal field names.

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

Purpose4/5

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

The description 'Query heart rate samples' clearly identifies the verb and resource, distinguishing it from related query tools like query_sleep or query_workouts. However, it does not explicitly differentiate itself from potentially overlapping tools like query_metric_series, so it is clear but not fully distinguished.

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

Usage Guidelines2/5

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

No guidance is provided on when to use this tool versus alternatives. There are no exclusions, alternatives, or contextual hints. The only implied usage is that it queries heart rate data, which is not enough to guide selection among many similar query tools.

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

query_metric_seriesD

Query metric series

ParametersJSON Schema
NameRequiredDescriptionDefault
metricYes
end_dateYes
start_dateYes
aggregationNo
granularityNo

TDQS

D1.3/5.0
Behavior1/5

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

No annotations are provided, and the description contains no behavioral details. There is no mention of read-only behavior, side effects, pagination, response format, or any constraints. The description carries the full burden for transparency and completely fails to disclose any behavioral traits beyond the act of querying.

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

Conciseness2/5

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

The description is only three words, which is extremely concise, but the brevity is a symptom of under-specification rather than efficiency. It does not earn its place since it merely parrots the tool name without contributing semantic value. A concise description should still convey purpose and context.

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

Completeness1/5

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

This tool has 5 parameters, 3 enums, no output schema, and no annotations. The description only says 'Query metric series', which is far from sufficient. It does not explain what a metric series is, how to specify it, what the returned data looks like, or any constraints. Essential context for successful invocation is entirely missing.

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

Parameters1/5

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

Schema description coverage is 0%, meaning the schema itself provides no explanations for parameters. The description adds zero information about metric, date ranges, aggregation, or granularity. It does not help the agent understand parameter purposes or relationships, such as how start_date and end_date define the series interval.

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

Purpose2/5

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

The description 'Query metric series' directly restates the tool name (query_metric_series) without adding specificity. It identifies the verb and general resource but fails to indicate which metrics are involved, how the series is defined, or how it differs from sibling query tools like query_heart_rate or query_sleep. This is tautological and uninformative.

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

Usage Guidelines1/5

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 alternatives. The sibling tools include many query_* variants, yet the description provides no context, use cases, or exclusions. An agent is left to guess which tool fits a given metric query.

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

query_sleepC

Query sleep sessions

ParametersJSON Schema
NameRequiredDescriptionDefault
end_dateYes
start_dateYes
include_napsNo

TDQS

C2.1/5.0
Behavior1/5

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

With no annotations, the description carries the full burden of behavioral disclosure, but 'Query sleep sessions' only implies a read-only operation. It does not mention whether naps are included, how sessions are defined, what output is returned, or any side effects. This is insufficient for a tool with three parameters and no output schema.

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

Conciseness2/5

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

The description is a single short sentence, but it is under-specified rather than concise in a helpful way. It lacks essential detail, making it closer to a placeholder than an efficient explanation.

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

Completeness1/5

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

Given the tool has three parameters, no output schema, and no annotations, the description is severely incomplete. It does not explain how the tool behaves, what inputs are required, or what results to expect, making it inadequate for reliable tool selection and invocation.

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

Parameters1/5

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

Schema description coverage is 0%, so the description must compensate by explaining the parameters. It provides no information about start_date, end_date, or include_naps, leaving the agent with no semantic meaning beyond raw schema names.

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

Purpose4/5

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

The description clearly identifies the resource ('sleep sessions') and differentiates from sibling tools that query other metrics like heart rate or workouts. However, it lacks scope details (e.g., date range vs. all sessions, or whether it returns summaries or raw sessions), making it slightly less specific than an ideal purpose statement.

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

Usage Guidelines2/5

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

No guidance is provided on when to use this tool versus alternatives. The name implies sleep-related queries, but there is no explicit context, prerequisites, or exclusions, leaving the agent to infer usage from the tool name alone.

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

query_spo2C

Query blood oxygen saturation samples

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNo
end_dateYes
start_dateYes

TDQS

C2.6/5.0
Behavior2/5

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

No annotations are provided, and the description only says 'query', which implies a read-only operation without explicit confirmation. It does not disclose behaviors like return format, pagination, rate limits, or side effects.

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

Conciseness4/5

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

The description is a single sentence, concise and front-loaded. It earns its place by clarifying the resource, though it is sparse on details, which is a separate issue from conciseness.

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

Completeness2/5

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

The description is too minimal for a tool with no output schema and no annotations. It does not explain what 'samples' means, how date filtering works, or what the response contains, making it incomplete for effective use.

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

Parameters1/5

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

The description provides no information about the parameters (start_date, end_date, limit). With schema description coverage at 0%, the description was expected to compensate but does not, leaving parameter meaning entirely to the schema.

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

Purpose4/5

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

The description clearly states the tool queries blood oxygen saturation samples, using a specific verb and resource. It distinguishes from siblings by naming the unique resource (SpO2), though it does not explicitly contrast with other query tools.

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

Usage Guidelines2/5

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

No guidance is provided on when to use this tool versus alternatives, such as query_metric_series or other query tools. The description only states the function without any context or exclusions.

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

query_stressC

Query stress samples

ParametersJSON Schema
NameRequiredDescriptionDefault
levelNo
limitNo
end_dateYes
start_dateYes

TDQS

C2.1/5.0
Behavior1/5

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

The description discloses no behavioral traits. It does not state whether the operation is read-only, what the response format looks like, whether pagination is supported, or any side effects. With no annotations, the description carries the full burden and fails entirely here.

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

Conciseness2/5

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

At only three words, the description is under-specified rather than appropriately concise. It lacks any sentence structure that conveys necessary context for a tool with four parameters, so brevity comes at the cost of usefulness.

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

Completeness1/5

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

The description is completely inadequate given the tool's complexity: no annotations, no output schema, four parameters, and two required fields. A bare phrase like 'Query stress samples' leaves the agent without essential information about tool capabilities, constraints, or expected results.

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

Parameters1/5

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

Schema description coverage is 0%, yet the description adds no explanation of the parameters (start_date, end_date, level, limit). The tool requires two date parameters and has a level enum, but the description does not clarify their meaning or usage, so it does not compensate for the lack of schema documentation.

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

Purpose4/5

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

The description uses the specific verb 'Query' and identifies the resource as 'stress samples', which distinguishes it from sibling tools that query other data types (e.g., heart rate, sleep). However, it is not fully explicit about what constitutes a 'sample' or the exact scope, so it falls 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.

Usage Guidelines2/5

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. There is no mention of prerequisites, intended use cases, or exclusions, leaving the agent without context for tool selection.

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

query_workoutsD

Query workouts

ParametersJSON Schema
NameRequiredDescriptionDefault
end_dateYes
start_dateYes
min_durationNo
activity_typesNo
min_distance_kmNo

TDQS

D1.5/5.0
Behavior1/5

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

No annotations exist, so the description must disclose behavior. It only uses the generic verb 'query', which adds no insight into date-range requirements, output format, pagination, or read-only semantics.

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

Conciseness2/5

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

The description is extremely short but under-specified. This is not effective conciseness; it omits all useful information while taking up almost no space.

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

Completeness1/5

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

Given five parameters, no output schema, and a sibling tool likely covering workout dynamics, the description is completely inadequate for correct selection or invocation. It provides no context about required date range or optional filters.

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

Parameters1/5

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

Schema description coverage is 0%, and the description offers no explanation of the five parameters. The agent gets only names and types for start_date, end_date, min_duration, activity_types, and min_distance_km, with no units or format details.

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

Purpose2/5

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

The description 'Query workouts' is a tautology that restates the tool name. It provides no detail about scope, filtering, or what distinguishes this from sibling tools like 'workout_series'.

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

Usage Guidelines2/5

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

No guidance is provided on when to use this tool versus alternatives such as workout_series or query_metric_series. There is no mention of required inputs or typical use cases.

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

sync_dataC

Synchronize Mi Fitness data

ParametersJSON Schema
NameRequiredDescriptionDefault
end_dateNo
backgroundNo
data_typesNo
start_dateNo
force_full_syncNo

TDQS

C2.1/5.0
Behavior1/5

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

No annotations are provided, so the description must fully disclose behavioral traits. It only says 'synchronize' without explaining side effects, such as whether it overwrites existing data, is asynchronous, requires authentication, or has rate limits. The tool appears to be a mutation/action, but none of these critical behaviors are disclosed, leaving the agent completely uninformed.

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

Conciseness2/5

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

The description is a single short sentence, which is efficient in length, but it is under-specified. It lacks any structural elements like usage examples, parameter summaries, or behavioral notes that would justify its brevity. The information provided is too minimal to be considered adequately concise; it is simply incomplete.

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

Completeness1/5

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

Given the tool's complexity (5 parameters, no annotations, no output schema, no schema coverage), the description is severely incomplete. It doesn't explain return values, sync behavior, or how to use the parameters, and it fails to provide any relationship to sibling tools. This is inadequate for an agent to select and invoke the tool effectively.

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

Parameters1/5

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

With 5 parameters and 0% schema description coverage, the description was expected to compensate for the lack of parameter documentation. It does not mention start_date, end_date, data_types, background, or force_full_sync, nor does it provide any hints about their meanings or formats. The agent cannot infer what each parameter does from the description alone.

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

Purpose4/5

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

The description 'Synchronize Mi Fitness data' clearly states the action (synchronize) and the resource (Mi Fitness data). It distinguishes from sibling tools, which are mostly query/get operations for specific data types or connection status. However, it doesn't clarify the direction of sync (e.g., pulling from Mi Fitness or pushing to it) or the exact scope, so it's specific but not fully elaborated.

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

Usage Guidelines2/5

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

There is no guidance on when to use this tool versus alternatives. It doesn't mention that this is for triggering a sync while get_sync_status should be used for checking status, or that query tools should be used for reading data. The description offers no context about typical use cases or prerequisites, providing no usage guidance.

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

workout_seriesA

Get an agent-safe, auto-downsampled time series for a workout metric (contract agent-safe-series/v1). Points carry numeric t offsets in seconds from start_time. Always reports downsampled/source_points/returned_points/method plus full-resolution summary stats; never returns more than max_points points. For cross-activity comparison of time_in_zone, pass reference_max_hr (e.g. the athlete's known max HR); otherwise each activity is normalized to its own max and zone distributions are not comparable across activities.

ParametersJSON Schema
NameRequiredDescriptionDefault
metricNoheart_rate
max_pointsNoHard cap on returned points (server-enforced)
resolutionNoRequested bucket size in seconds; increased automatically when needed to stay within max_points
workout_idYes
reference_max_hrNoOptional caller-provided reference max heart rate (bpm) used to normalize time_in_zone; pass a consistent value when comparing zone distributions across activities

TDQS

A4.7/5.0
Behavior5/5

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

With no annotations provided, the description carries the full burden of behavioral disclosure. It discloses auto-downsampling, the hard limit on returned points ('never returns more than max_points points'), the reporting of downsampled/source_points/returned_points/method plus summary stats, and numeric t offsets in seconds. It also explains the normalization behavior and the effect of reference_max_hr, providing rich context beyond a simple API call.

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

Conciseness5/5

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

The description is three sentences long, front-loaded with the primary purpose, and every sentence carries essential information. There is no redundancy or filler. It covers behavior, constraints, and the key usage caveat about reference_max_hr efficiently.

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

Completeness5/5

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

Given the tool's moderate complexity, lack of output schema, and 5 parameters, the description is remarkably complete. It explains the return format (points with t offsets, summary stats), the downsampling behavior, the max_points constraint, and the cross-activity normalization caveat. No significant gaps are evident for an agent to select and invoke the tool correctly.

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

Parameters4/5

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

Schema description coverage is 60%, and the description adds meaningful semantics for key parameters: reference_max_hr ('used to normalize time_in_zone... pass a consistent value when comparing zone distributions'), max_points ('Hard cap on returned points (server-enforced)' is in schema, but description reinforces 'never returns more than max_points'), and resolution ('increased automatically when needed to stay within max_points' is in schema, but description adds 'auto-downsampled'). It does not elaborate on workout_id or metric beyond schema, but those are straightforward. The description adds value beyond the schema for the most nuanced parameters.

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

Purpose5/5

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

The description clearly states the tool's purpose: 'Get an agent-safe, auto-downsampled time series for a workout metric.' It identifies a specific verb (get), resource (time series for workout metric), and unique differentiators (agent-safe, auto-downsampled, contract version). It also distinguishes from sibling tools by focusing on the downsampling behavior and cross-activity normalization, which is not mentioned for query_heart_rate or query_metric_series.

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

Usage Guidelines4/5

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

The description provides clear context for when to use the tool, especially regarding reference_max_hr: 'For cross-activity comparison of time_in_zone, pass reference_max_hr... otherwise each activity is normalized to its own max and zone distributions are not comparable across activities.' It implies usage for workout metric time series, but does not explicitly name alternatives or state when not to use the tool. This is a clear context without explicit exclusions, aligning with a score of 4.

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

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections.

  1. 15 tool updatesv0.3.0
    • First observedget_connection_status
    • First observedget_daily_summary
    • First observedget_data_coverage
    • First observedget_profile
    • First observedget_sync_status
    • First observedquery_abnormal_heart_beat
    • First observedquery_body_measurements
    • First observedquery_heart_rate
    • First observedquery_metric_series
    • First observedquery_sleep
    • First observedquery_spo2
    • First observedquery_stress
    • First observedquery_workouts
    • First observedsync_data
    • First observedworkout_series

TDQS

C2.6/5.0

Scored across 15 tools

Disambiguation4/5

Most tools have distinct purposes: sync vs. status, profile vs. daily summary, and each query_* targets a specific data type (heart rate, sleep, workouts, etc.). However, query_metric_series overlaps conceptually with the specific query tools, and its relationship to them is not fully clear from descriptions alone.

Naming Consistency4/5

The majority follow a clear get_/query_ + noun pattern (e.g., get_profile, query_sleep), and sync_data continues the verb_noun style. The one outlier is workout_series, which is a noun phrase and breaks the consistent convention.

Tool Count4/5

Fifteen tools is at the upper bound of the well-scoped range but still reasonable for covering connection, sync, profile, and diverse fitness metrics. The inclusion of both generic and specific query tools creates mild redundancy, but overall the count is not excessive.

Completeness5/5

The tool set covers the full spectrum of fitness data access: connection, synchronization, profile, daily summaries, raw metrics (heart rate, SpO2, stress), workouts, sleep, and body measurements. It includes both data retrieval and sync management, with no obvious dead ends for typical use cases.

Maintenance

ActivityActive
ResponsivenessWithin a week

Related MCP Connectors

Related MCP Servers

  • A
    license
    C
    quality
    B
    maintenance
    Enables reading and syncing Xiaomi Mi Fitness health data (steps, heart rate, sleep, workouts) from the Chinese cloud region to a local SQLite database via MCP tools.
    10
    10
    MIT
  • A
    license
    Not graded
    quality
    A
    maintenance
    Downloads all your Garmin health and fitness data into a local SQLite database and exposes 45 MCP tools for AI analysis, enabling assistants to query sleep, training load, HRV, and more.
    146
    AGPL 3.0
  • A
    license
    Not graded
    quality
    C
    maintenance
    Self-hosted MCP server that syncs Xiaomi fitness data to SQLite and provides authenticated tools to query health metrics (steps, sleep, HR, etc.) for AI assistants like Grok.
    GPL 3.0
  • F
    license
    A
    quality
    B
    maintenance
    Provides a unified MCP interface to a personal health database, enabling AI agents to sync lifting workouts from Hevy, log food intake against a catalog, and run read-only SQL queries to cross-reference training and nutrition data.
    6
    1
    -