Mi Fitness MCP CN
This server allows you to sync, query, and analyze Xiaomi Mi Fitness health data (China region) through a local SQLite cache exposed via MCP tools.
Check Connection Status (
get_connection_status): Verify that your Mi Fitness account credentials and cloud connection are working properly.Sync Data (
sync_data): Pull Mi Fitness cloud data into a local SQLite database, with options for date range, specific data types, and full/incremental sync. Supported types include daily activity, heart rate, sleep, workouts, body measurements, resting heart rate, SpO2, stress, and abnormal heart beat events.Get User Profile (
get_profile): Retrieve your Mi Fitness account profile information.Get Daily Summary (
get_daily_summary): View aggregated daily activity summaries (steps, distance, calories) for a specific date or date range.Query Metric Series (
query_metric_series): Fetch time-series data for metrics (steps, distance, active calories, weight) with configurable aggregation (sum/avg/min/max/latest) and granularity (day/week/month).Query Heart Rate (
query_heart_rate): Retrieve heart rate samples filtered by date range and sample type (resting, active, passive, or workout).Query Body Measurements (
query_body_measurements): Access body composition data such as weight, BMI, body fat percentage, muscle mass, and water percentage, with an option to retrieve only the latest reading.Query Sleep Sessions (
query_sleep): Analyze sleep records for a date range, with an option to include or exclude naps.Query Workouts (
query_workouts): Retrieve workout records filtered by date, activity type, minimum duration, or minimum distance.Get Data Coverage (
get_data_coverage): Check which data types have been synced and what date ranges are available locally.
Provides tools for reading and syncing health data from Xiaomi's Mi Fitness cloud, including daily activity, heart rate, sleep, workouts, and body measurements.
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 MCP CNshow my steps for today"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
Mi Fitness MCP CN
小米运动健康 / Mi Fitness 数据本地 MCP Server。
本项目基于 kubulashvili/mi-fitness-mcp 修改,增加中国区小米健康云适配,并补充睡眠与运动记录同步能力。
非小米官方项目,仅用于读取和分析你自己的健康数据。数据默认同步到本地 SQLite。
功能
读取小米运动健康云端数据
本地 SQLite 缓存
MCP Server 支持
支持中国区:
--region cn支持数据类型:
daily_activity:步数、距离、活动卡路里heart_rate:心率采样sleep:睡眠记录workouts:运动记录body_measurements:体重 / 身体成分,视账号数据而定
Related MCP server: Mi Fitness MCP
已逆向验证的接口
健康数据接口
POST https://hlth.io.mi.com/app/v1/data/get_fitness_data_by_time常用 key:
steps
calories
heart_rate
weight
sleep睡眠请求示例:
{
"start_time": 1767225600,
"end_time": 1782086399,
"key": "sleep"
}运动记录接口
POST https://hlth.io.mi.com/app/v1/data/get_sport_records_by_time请求示例:
{
"start_time": 1767225600,
"end_time": 1782086399,
"limit": 50
}返回字段通常包含:
sport_records
has_more
next_key每条运动记录的 value 是 JSON 字符串,包含 start_time、end_time、duration、distance、calories、avg_hrm、max_hrm 等字段。
安装
git clone git@github.com:binglua/mi-fitness-mcp-cn.git
cd mi-fitness-mcp-cn
python -m venv .venv
source .venv/bin/activate
pip install -e '.[dev]'如果当前环境没有系统 keyring,可安装:
pip install keyrings.alt注意:keyrings.alt 可能以明文文件方式保存凭据。
配置
需要从 https://account.xiaomi.com 登录后的 Cookie 中获取:
userIdpassToken
中国区账号建议:
mi-fitness-mcp setup \
--mode mi_fitness_cloud \
--user-id "<userId>" \
--pass-token "<passToken>" \
--region cn检查连接:
mi-fitness-mcp doctor同步数据
同步全部可探测数据:
mi-fitness-mcp sync --start-date 2026-01-01 --end-date 2026-06-21按类型同步:
mi-fitness-mcp sync --type daily_activity --start-date 2026-01-01 --end-date 2026-06-21
mi-fitness-mcp sync --type heart_rate --start-date 2026-01-01 --end-date 2026-06-21
mi-fitness-mcp sync --type sleep --start-date 2026-01-01 --end-date 2026-06-21
mi-fitness-mcp sync --type workouts --start-date 2026-01-01 --end-date 2026-06-21
mi-fitness-mcp sync --type body_measurements --start-date 2026-01-01 --end-date 2026-06-21启动 MCP Server
mi-fitness-mcp serveClaude Desktop 配置示例:
{
"mcpServers": {
"mi-fitness": {
"command": "mi-fitness-mcp",
"args": ["serve"]
}
}
}MCP 工具
get_connection_statussync_dataget_profileget_daily_summaryquery_metric_seriesquery_heart_ratequery_body_measurementsquery_sleepquery_workoutsget_data_coverage
本地数据库
默认位置:
~/.local/share/mi-fitness-mcp/mi_fitness.db主要表:
daily_activity
heart_rate_samples
sleep_sessions
workouts
body_measurements
sync_state安全说明
passToken是敏感凭据,不要泄露。不要提交本地配置、数据库、keyring 文件。
如果 token 泄露,建议退出小米账号并重新登录刷新。
免责声明
本项目与小米公司无关。请仅用于读取和分析你自己的健康数据。
新增健康指标
本分支额外逆向并验证了以下小米运动健康云端 key,并已接入 CLI 同步、本地 SQLite 缓存和 MCP 查询工具:
resting_heart_rate:静息心率,合并到query_heart_rate(sample_type="resting")。spo2:血氧饱和度,CLI 类型spo2,MCP 工具query_spo2。stress:压力值,CLI 类型stress,MCP 工具query_stress。abnormal_heart_beat:异常心跳事件,CLI 类型abnormal_heart_beat,MCP 工具query_abnormal_heart_beat。
示例:
mi-fitness-mcp sync --type spo2 --start-date 2026-06-01 --end-date 2026-06-22
mi-fitness-mcp sync --type stress --start-date 2026-06-01 --end-date 2026-06-22
mi-fitness-mcp sync --type abnormal_heart_beat --start-date 2026-06-01 --end-date 2026-06-22License
MIT
Available Tools
10 toolsget_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 | ||
| start_date | No | ||
| end_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.
query_body_measurementsD
Query body measurements
| Name | Required | Description | Default |
|---|---|---|---|
| start_date | Yes | ||
| end_date | Yes | ||
| metrics | No | ||
| 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 |
|---|---|---|---|
| start_date | Yes | ||
| end_date | Yes | ||
| sample_type | No | ||
| limit | No |
TDQS
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.
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.
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.
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.
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.
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
| Name | Required | Description | Default |
|---|---|---|---|
| metric | Yes | ||
| start_date | Yes | ||
| end_date | Yes | ||
| granularity | No | ||
| aggregation | 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_sleepC
Query sleep sessions
| Name | Required | Description | Default |
|---|---|---|---|
| start_date | Yes | ||
| end_date | Yes | ||
| include_naps | No |
TDQS
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.
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.
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.
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.
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.
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_workoutsD
Query workouts
| Name | Required | Description | Default |
|---|---|---|---|
| start_date | Yes | ||
| end_date | Yes | ||
| activity_types | No | ||
| min_duration | No | ||
| min_distance_km | No |
TDQS
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.
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.
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.
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.
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.
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_dataD
Synchronize Mi Fitness data
| Name | Required | Description | Default |
|---|---|---|---|
| data_types | No | ||
| start_date | No | ||
| end_date | No | ||
| force_full_sync | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided. Description fails to disclose any behavioral traits: side effects, destructive nature, required connectivity, or whether it overwrites data. For a sync tool, this is a critical gap.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Single sentence is concise but under-specified. The brevity is not efficient because it omits essential information; it is merely short.
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 4 parameters, no output schema, and no annotations, the description is severely incomplete. Missing information about data types, date formats, sync mechanics, and expected outcomes makes the tool unsafe and unusable for an AI agent.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%. Description says nothing about what 'data_types', 'start_date', 'end_date', or 'force_full_sync' represent, format requirements, or default behavior. Adds zero value beyond schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Description states 'Synchronize Mi Fitness data', which is a tautology. It does not distinguish the tool from siblings (all get/query tools), nor does it specify what synchronization entails (push/pull/bidirectional). Minimal purpose clarity.
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 on when to use this tool vs alternatives. No context about prerequisites, ideal invocation timing, or scenarios where sync is appropriate. Completely absent.
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.
10 tool updates
v0.1.0- First observed
get_connection_status - First observed
get_daily_summary - First observed
get_data_coverage - First observed
get_profile - First observed
query_body_measurements - First observed
query_heart_rate - First observed
query_metric_series - First observed
query_sleep - First observed
query_workouts - First observed
sync_data
TDQS
Scored across 10 tools
Each tool targets a distinct aspect of fitness data (e.g., connection, daily summary, heart rate, sleep, workouts), with no overlapping purposes. Agents can easily differentiate them.
All tools follow a consistent verb_noun pattern (get_/query_/sync_) with clear prefixes for type of operation, making them predictable and easy to navigate.
10 tools is well-scoped for a fitness data server, covering essential data types without being overwhelming or too sparse.
The tool set covers core fitness data areas (profile, activity, sleep, heart rate, workouts) and includes sync functionality. Minor gaps like nutrition or stress data exist, but the surface is largely complete for typical use.
Maintenance
Related MCP Connectors
- SomviaOAuthapp.somvia
Private Apple Health metrics and workout detail for ChatGPT, Claude, and any MCP client.
MCP server for Withings health data — sleep, activity, heart, and body metrics.
Collect Apple Health data from your wearables through the Context app and query it via MCP
Multi-tenant hosted MCP server for Oura Ring — 21 read-only tools, OAuth per user.
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
- AlicenseCqualityCmaintenanceMCP server for Mi Fitness cloud data. Provides a local SQLite-backed server to sync and query daily activity, heart rate, and body measurements.125MIT
- 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
- AlicenseCqualityAmaintenanceProvides local MCP tools to query your own Xiaomi Mi Fitness health data (sleep, workouts, heart rate, etc.) stored in a local SQLite database, enabling AI assistants to access personal health records without exposing credentials.1519AGPL 3.0