Mi Fitness MCP
Provides tools to sync and serve Mi Fitness cloud data, including daily activity (steps, distance, calories), heart rate, and body measurements (weight, BMI, body composition metrics).
Click on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@Mi Fitness MCPShow my daily activity for the last 14 days"
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.
Mi Fitness MCP
MCP server for Mi Fitness data.
This project provides a local SQLite-backed MCP server for Mi Fitness cloud data.
Current data coverage
Confirmed with the current cloud flow:
daily activity
steps
distance
active calories
heart rate
body measurements
weight
BMI
fat, water, bone, and muscle metrics
visceral fat
basal metabolism
official Xiaomi workout sessions
sport/category, duration, distance, calories, pace, cadence, speed, elevation
heart-rate zones, training effect/load, recovery time, VO2 max when supplied
Not yet supported:
sleep. The available endpoint and payload contract have not been confirmed, so sleep is intentionally not advertised or synchronized yet.
Related MCP server: Mi Fitness MCP CN
Install
python -m venv .venv
source .venv/bin/activate
pip install -e '.[dev]'Setup
You need:
userIdpassToken
Typical flow:
Open
https://account.xiaomi.comSign in to your Xiaomi account
Open browser DevTools
Inspect cookies for
account.xiaomi.comCopy
userIdandpassToken
Configure the server. The interactive prompt hides passToken and stores credentials in the
system keyring:
mi-fitness-mcp setup --mode mi_fitness_cloud --user-id "<userId>" --region ru
mi-fitness-mcp doctorFor automation, prefer --pass-token-stdin or MI_FITNESS_PASS_TOKEN. The legacy
--pass-token argument remains available for backward compatibility but is deprecated because
command-line arguments may be visible in shell history and process listings.
Xiaomi accounts may be hosted in regional Mi Fitness backends. ru remains the default for
compatibility, while the adapter can discover and persist another accepted global/EU region such
as de, i2, sg, or us. This does not change the Xiaomi userId + passToken login flow.
For local endpoint exploration there is also a probe script:
uv run python probe_mifitness.py --user-id "<userId>"The probe prompts for passToken without echo. For automation, provide
MI_FITNESS_USER_ID and MI_FITNESS_PASS_TOKEN, or use --pass-token-stdin with a
protected input source. Secret command-line arguments are intentionally unsupported.
Use
mi-fitness-mcp sync --start-date 2025-04-01 --end-date 2025-05-31
mi-fitness-mcp serveMCP client config
Example Claude Desktop config:
{
"mcpServers": {
"mi-fitness": {
"command": "mi-fitness-mcp",
"args": ["serve"]
}
}
}Example prompts
Show my daily activity for the last 14 daysHow has my resting heart rate changed this month?Summarize my latest body measurementsShow my running workouts from the last 30 daysSummarize workout volume by sport or ISO weekCompare this month's workout totals with last monthWhat were my longest-distance and fastest-pace workout records?Sync my latest Mi Fitness data
MCP tools
get_connection_statussync_dataget_profileget_daily_summaryquery_metric_seriesquery_heart_ratequery_body_measurementsquery_workoutssummarize_workoutsget_workout_recordscompare_workout_periodsget_data_coverage
Existing tool names, argument semantics, and status: ok|error response envelopes remain
backward compatible. Sync reports successful and failed data types separately; a partial sync
returns ok, while a sync where every requested type fails returns error.
Commands
mi-fitness-mcp --help
mi-fitness-mcp setup --help
mi-fitness-mcp doctor
mi-fitness-mcp sync --help
mi-fitness-mcp serveDevelopment
uv run ruff check .
uv run pytest -q
uv run python -m buildThe current test suite contains 89 tests and reports 78% statement coverage. CI runs on Python
3.11, 3.12, and 3.13, keeps HTTP tests offline with respx, and installs the built wheel in a
clean environment before checking mi-fitness-mcp --help.
Configuration compatibility
SQLite schema changes use the existing versioned migration runner; existing tables and data are preserved.
busy_timeoutconfigures SQLite lock waiting in milliseconds and defaults to5000.auto_sync_on_start,stale_after_minutes,store_raw_payloads,default_lookback_days, andlogs_pathare retained for config-file compatibility but are deprecated no-ops.
Troubleshooting
Connection: failedverify
userIdandpassTokenverify the configured region; global/EU accounts may resolve to another backend
Credentials not foundrun
setupagain
syncreturns no datatry another date range
verify that the data actually exists in Mi Fitness cloud
Security
passTokenis stored via the system keyringuserIdis masked in CLI and MCP diagnostics;passTokenis never printeddo not commit
.env, local config files, or real credentialsrotate tokens if they were pasted into chats or shell history
Disclaimer
This is an unofficial project and is not affiliated with Xiaomi.
Available Tools
12 toolscompare_workout_periodsC
Compare workout totals between two date ranges
| Name | Required | Description | Default |
|---|---|---|---|
| first_end_date | Yes | ||
| second_end_date | Yes | ||
| first_start_date | Yes | ||
| second_start_date | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden of disclosure. It does not state whether the operation is read-only, what the return format is, or any caveats about data aggregation. The verb 'compare' implies a read-only action, but no behavioral traits are explicitly disclosed.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, focused sentence with no waste. It is front-loaded and easy to parse. However, given the complexity of four parameters and no annotations, a slightly more structured form (e.g., adding a sentence about return values) would be valuable.
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 no output schema, no annotations, and 0% schema coverage, the description is too sparse to be complete. It lacks information about the return value, date format, and what 'totals' means (e.g., count, duration, calories). It also provides no guidance on when to use this versus sibling tools.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%. The description mentions 'two date ranges', which maps to the four date parameters, but it does not explain the format, semantics of start vs end, or how 'totals' relate to the parameters. The parameter names are self-descriptive, but the description does not compensate for the complete lack of schema-level documentation.
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 the specific verb 'compare' with the resource 'workout totals' and scopes it to two date ranges. This clearly distinguishes it from siblings like query_workouts or summarize_workouts, though it could be more explicit about what metrics are calculated.
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?
Usage is implied by the purpose: use this when you need to compare workout totals across two periods. However, the description does not explicitly state when to use it over alternatives like summarize_workouts or query_workouts, nor does it provide exclusion criteria.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_connection_statusC
Check connection status
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
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.
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.
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.
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.
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.
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
| Name | Required | Description | Default |
|---|---|---|---|
| date | No | ||
| end_date | No | ||
| start_date | No |
TDQS
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.
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.
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.
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.
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.
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
| Name | Required | Description | Default |
|---|---|---|---|
| data_types | No |
TDQS
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.
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.
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.
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.
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.
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
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden of behavioral disclosure. It only 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.
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.
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.
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.
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.
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_workout_recordsC
Get personal workout records for a date range
| Name | Required | Description | Default |
|---|---|---|---|
| end_date | Yes | ||
| start_date | Yes | ||
| activity_type | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden for behavioral disclosure. It only says 'Get', implying a read operation, but does not disclose what exactly is returned, whether activity_type filtering is supported, ordering, pagination, or any side effects. This is minimal and leaves significant uncertainty.
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 clear sentence with no filler or redundant phrasing. It is appropriately front-loaded with the main action and scope. It is slightly terse, but conciseness itself is strong; lack of detail is more a completeness concern.
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 3 parameters, no annotations, and no output schema, yet the description offers only a one-line summary. It does not explain return values, parameter constraints, or how this tool relates to sibling tools. It is inadequate for an agent to select and invoke the tool correctly without additional inference.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate for parameter meaning, but it only vaguely references 'a date range'. It does not explain start_date/end_date format or semantics, and it completely omits the optional activity_type parameter. Some context is provided for the date parameters, but not enough.
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 gets personal workout records filtered by date range, with a specific verb ('Get') and resource ('workout records'). However, it does not distinguish this tool from the sibling `query_workouts`, which likely serves a similar purpose, so it misses the full 5 for 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 description implies the tool is used when a date-range-filtered list of personal workout records is needed, but it gives no explicit guidance on when to choose this over `query_workouts`, `summarize_workouts`, or `compare_workout_periods`. No alternatives or exclusions are mentioned, so guidance remains implicit.
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
| Name | Required | Description | Default |
|---|---|---|---|
| metrics | No | ||
| end_date | Yes | ||
| start_date | Yes | ||
| latest_only | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden of behavioral disclosure. 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.
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.
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.
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.
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.
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
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | ||
| end_date | Yes | ||
| start_date | Yes | ||
| sample_type | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are present, so the description carries the full burden of behavioral disclosure. It only states the action without revealing return format, date range handling, filtering, or any side effects. It implies a read-only operation but adds no substantive transparency.
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 short sentence with no redundancy, making it concise. However, it is under-specified for a tool with four parameters and no other documentation, sacrificing necessary context for brevity.
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 no output schema, no parameter semantics, and no usage guidance, the description is incomplete. It does not explain what the query returns, how to specify filtering, or when to use it, leaving significant gaps for the agent.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Input schema has 0% description coverage, and the description does not mention any parameters. It fails to explain start_date, end_date, limit, or sample_type, leaving the agent with only raw property names and no semantic 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 uses a specific verb 'query' and a specific resource 'heart rate samples', clearly stating the tool's function. However, it does not differentiate from sibling tools like query_metric_series or query_body_measurements, which may also retrieve health metrics.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance is provided on when to use this tool versus alternatives. The description lacks any context about use cases, prerequisites, or exclusions, giving the agent no decision support 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_metric_seriesD
Query metric series
| Name | Required | Description | Default |
|---|---|---|---|
| metric | Yes | ||
| end_date | Yes | ||
| start_date | Yes | ||
| aggregation | No | ||
| granularity | No |
TDQS
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.
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.
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.
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.
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.
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_workoutsC
Query official Xiaomi workout sessions
| Name | Required | Description | Default |
|---|---|---|---|
| end_date | Yes | ||
| start_date | Yes | ||
| min_duration | No | ||
| activity_types | No | ||
| min_distance_km | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden of behavioral disclosure. It only states 'Query official Xiaomi workout sessions,' implying a read operation but offering no detail on return format, pagination, rate limits, or authentication requirements.
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 short sentence, which is concise in length but under-specified. It fails to convey essential information, making it more of a stub than a useful description. Every sentence should earn its place; this one does not.
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 five parameters, no annotations, no output schema, and multiple sibling tools, the description is severely incomplete. It does not address filtering, required inputs, output structure, or how it relates to other workout-related tools.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, and the description adds no parameter meaning beyond the schema. The five parameters (start_date, end_date, min_duration, activity_types, min_distance_km) are entirely unexplained, forcing the agent to guess their semantics and formats.
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 queries workout sessions, identifying the verb and resource. However, it does not distinguish this from sibling tools like get_workout_records or query_metric_series, which could overlap in functionality.
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 lacks context about intended use cases, prerequisites, or exclusions, leaving the agent to infer usage from the name alone.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
summarize_workoutsB
Summarize workout volume by sport or ISO week
| Name | Required | Description | Default |
|---|---|---|---|
| end_date | Yes | ||
| group_by | No | ||
| start_date | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries full responsibility for disclosing behavior, but it only states the aggregation operation. It does not mention return format, read-only status, date handling, or side effects, leaving significant behavioral aspects undisclosed.
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, directly states the action, and contains no redundant words. It is appropriately sized and front-loaded with the verb.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given no output schema, no annotations, and a very brief description, the tool lacks details on return values, the precise meaning of 'workout volume' (distance, duration, etc.), and date range behavior. This would hinder an agent from correctly invoking the tool without additional context.
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 meaning by mapping 'sport' to activity_type and 'ISO week' to week, clarifying the group_by parameter. However, it does not explain start_date/end_date formats or semantics. With 0% schema coverage, this partial compensation earns a middle score.
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 ('Summarize') with a clear resource ('workout volume') and grouping dimensions ('by sport or ISO week'). It distinguishes itself from siblings like query_workouts (which retrieves records) and compare_workout_periods (which compares periods) by indicating it provides an aggregated 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?
No guidance is provided on when to use this tool versus alternatives such as query_workouts or get_daily_summary. The description lacks explicit use cases, prerequisites, or exclusions, leaving selection to inference.
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
| Name | Required | Description | Default |
|---|---|---|---|
| end_date | No | ||
| data_types | No | ||
| start_date | No | ||
| force_full_sync | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden of behavioral disclosure. 'Synchronize Mi Fitness data' gives no information about what happens to existing data, whether the operation is destructive, requires authentication, or has rate limits. This is a severe lack of transparency for a mutation-like 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 only a short phrase, so it is technically concise, but it is under-specified. It adds very little value beyond the tool name and lacks substantive content, making it more of an under-specification than a model of conciseness.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a tool with 4 parameters, no annotations, and no output schema, the description is drastically incomplete. It provides no context about invocation effects, expected outcomes, or parameter relationships, making it inadequate for an agent to use 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 defines 4 parameters with 0% coverage in the description. The description does not explain any parameter semantics, and there is no compensation for this gap. Users are left with no idea what end_date, data_types, start_date, or force_full_sync mean in context.
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 uses the verb 'Synchronize' with a specific resource ('Mi Fitness data'), which distinguishes it from sibling tools that are all query/read operations. However, 'synchronize' is somewhat vague as it doesn't specify the direction or scope of the sync, so it falls short of a perfect 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?
There is no explicit guidance on when to use this tool versus the sibling query tools. The name and the read-only nature of the siblings imply it's for populating/updating data, but the description never states this, provides prerequisites, or mentions alternatives.
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.
12 tool updates
v0.2.0- First observed
compare_workout_periods - First observed
get_connection_status - First observed
get_daily_summary - First observed
get_data_coverage - First observed
get_profile - First observed
get_workout_records - First observed
query_body_measurements - First observed
query_heart_rate - First observed
query_metric_series - First observed
query_workouts - First observed
summarize_workouts - First observed
sync_data
TDQS
Scored across 12 tools
Most tools are clearly distinct, but `get_workout_records` vs `query_workouts` could be confused (personal vs official workouts). Also `query_metric_series` is somewhat generic and may overlap with `query_heart_rate` and `query_body_measurements`.
All tool names follow a verb_noun structure, but there is a mix of `get_` and `query_` prefixes (both meaning retrieval). This is a minor deviation from a perfectly uniform pattern.
12 tools is well within the ideal 3-15 range and each tool serves a distinct purpose for a fitness data server, covering connection, sync, profile, summaries, metrics, workouts, and data coverage.
The toolset offers broad coverage for retrieving and analyzing fitness data, including raw series, summaries, workouts, and comparisons. Minor gaps could include sleep tracking or goal management, but they are not obviously required for the stated purpose.
Maintenance
Related MCP Connectors
MCP server for Withings health data — sleep, activity, heart, and body metrics.
Remote MCP server for training, nutrition, wellness, and performance data with OAuth 2.0.
Multi-tenant hosted MCP server for Oura Ring — 21 read-only tools, OAuth per user.
MCP server providing attendance data queries via the CloudTime API.
Related MCP Servers
- AlicenseBqualityBmaintenanceMCP server that provides local caching, sync, and tools for Zepp Life health data including steps, sleep, heart rate, workouts, and body measurements, supporting both file exports and cloud session access.1010MIT
- AlicenseCqualityBmaintenanceEnables 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.1010MIT
- AlicenseNot gradedqualityCmaintenanceSelf-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
- AlicenseAqualityBmaintenanceMCP server for reading and querying Garmin Connect data, including activities, strength history, recovery, trends, and optionally creating workouts.12MIT