amazfit-mcp
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., "@amazfit-mcpWhat was my sleep and readiness for yesterday?"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
Amazfit MCP
A Model Context Protocol server that gives any MCP-capable AI agent read access to your Zepp / Amazfit data: workouts with decoded GPS/HR/pace/power tracks, per-km splits and HR zones, daily activity and sleep stages, readiness/HRV, PAI, stress, blood oxygen, and devices.
It logs in to the Zepp cloud through Zepp's web-app login flow (the same one
user.zepp.com uses), so it does not sign your phone's Zepp app out. No
phone, root, or Bluetooth required.
Tools
Tool | Returns |
| Login state, user id, whether the session came from the token cache, workout count |
| Bound watches/bands with model name, firmware, active flag |
| Compact workout summaries: sport, start/end, duration, distance, pace or speed, calories, HR, elevation, cadence, stride, power, training effect/load, VO2max, device. Swims add SWOLF/strokes/laps |
| Totals per day/week/month/year (and sport): count, hours, km, calories, elevation, training load, weighted avg HR |
| Summary + time in HR zones, per-km splits (pace, avg HR), first-vs-second-half HR/speed/power drift |
| Decoded, downsampled time series: lat/lon, altitude, HR, speed, distance, cadence, stride, power, stroke rate |
| Per-day steps, distance, calories, goal, and sleep (bed/wake time, deep/light/REM/awake, score, resting HR) |
| Per-day readiness (score, overnight HRV, sleeping RHR, baselines, physical/mental recovery), PAI, stress, overnight SpO2/ODI |
Dates are ISO YYYY-MM-DD in local time. Workout sport names come from Zepp's
numeric type codes; unmapped codes show as unknown (type N). Add them to
SPORT_NAMES in normalize.py.
Related MCP server: zepp-mcp
Requirements
Python 3.12+
A Zepp / Amazfit account (email + password login)
Setup
git clone https://github.com/fjuliofontes/amazfit-mcp.git
cd amazfit-mcp
uv sync # install dependencies
cp .env.example .env # then add your Zepp credentials to .env
uv run python test_connection.py # exercise every tool live
uv run pytest # offline unit testsConfiguration
Settings are read from environment variables, loaded from the .env next to
server.py:
ZEPP_EMAIL=you@example.com
ZEPP_PASSWORD=your-zepp-password
# optional
ZEPP_COUNTRY=US # login country code; change if login fails
ZEPP_TIMEZONE=Europe/Lisbon # default: machine local time
ZEPP_DEVICE_NAMES=10289411=My Band # name devices missing from the built-in table
ZEPP_TOKEN_CACHE=~/.cache/amazfit-mcp/auth.json # or "off".env is listed in .gitignore and is never committed.
Connecting an AI agent
Add the server to your agent's MCP configuration — for example Claude Desktop
(claude_desktop_config.json), Claude Code (.mcp.json), or Cursor. Replace
/path/to/amazfit-mcp with the absolute path to your clone:
{
"mcpServers": {
"amazfit": {
"command": "uv",
"args": [
"run",
"--directory",
"/path/to/amazfit-mcp",
"python",
"server.py"
]
}
}
}uv run --directory sets the working directory so the server loads credentials
from that folder's .env. If you prefer to pass credentials inline instead, add
an "env" block (not recommended for shared or committed config files):
"env": {
"ZEPP_EMAIL": "you@example.com",
"ZEPP_PASSWORD": "your-zepp-password"
}Security
Credentials live only in your local
.env, which is git-ignored. Never commit real credentials, and avoid inlining them in MCP config files that may be shared or version-controlled.The login token is cached at
~/.cache/amazfit-mcp/auth.jsonwith0600permissions so restarts don't log in again. An expired token is replaced automatically. SetZEPP_TOKEN_CACHE=offto keep it in memory only.Device Bluetooth auth keys returned by the API are never exposed to the agent.
All traffic is over HTTPS. Error messages never include credentials.
Notes
Login uses the web-app identity (
com.huami.webapp). The previoushuami-token-based login registered as an Android phone and signed the phone app out.The track decoder (
decoder.py) and device table (known_devices.py) are shared withdreeve-zepp-connector, where each field's encoding was reverse-engineered and verified against Zepp's own FIT exports.Workout history is paged 500 at a time (via
count; Zepp ignoreslimit) and cached for 5 minutes.HTTP 429s and connection errors are retried with exponential backoff.
Credits
Originally forked from drfittri/zepp-mcp by Mohd Fittri Fahmi. Thanks for the starting point.
Web-app login flow from effectpears/zepp-downloader.
Track decoding based on rolandsz/Mi-Fit-and-Zepp-workout-exporter and mireq/MiFitDataExport, extended in
dreeve-zepp-connector.Data-call headers adapted from
huami-token.
License
Disclaimer
This is an unofficial client that uses a reverse-engineered Zepp cloud API. It is not affiliated with or endorsed by Zepp Health / Huami. Use it with your own account and at your own risk.
Available Tools
8 toolsget_daily_summaryA
Per-day steps, distance, calories, step goal, and last night's sleep: bedtime, wake time, total/deep/light/REM/awake minutes, sleep score, and resting HR. ISO YYYY-MM-DD dates; defaults to the last 7 days. include_sleep_stages adds the timeline of individual sleep stages.
| Name | Required | Description | Default |
|---|---|---|---|
| to_date | No | ||
| from_date | No | ||
| include_sleep_stages | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the burden. It discloses date handling (ISO format, default last 7 days) and optional sleep stages flag. However, it does not mention potential rate limits, auth requirements, or that it is a read-only operation, though the read-only nature is implicit.
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 paragraph that lists metrics and key behaviors efficiently. It is front-loaded with the main output and then adds date and flag details. No wasted words, but a bulleted format could improve scannability.
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 a simple schema with only 3 optional parameters and an output schema. The description covers the main output fields and the parameter semantics, making it adequate for an agent to call correctly. Minor gaps include not specifying the exact output structure, but the output schema likely covers that.
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. It explains that dates are ISO YYYY-MM-DD and defaults to last 7 days, but does not clarify which parameter is 'from' vs 'to' (though names are self-explanatory). It also explains include_sleep_stages, but not the exact format of output.
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 retrieves per-day health and sleep data, listing specific metrics (steps, distance, calories, sleep stages). It distinguishes itself from siblings by focusing on daily summary, whereas siblings like get_workout_detail or get_health_metrics target other data types.
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 use for daily summaries and mentions date range defaults and optional sleep stages. It does not explicitly state when not to use it or name alternatives, but the context of siblings makes the distinction clear enough.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_devicesA
Watches/bands/rings bound to the account, with model name (when known), firmware, and whether they're currently active.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the transparency burden. It discloses the output scope and fields, but does not explicitly state that the operation is read-only, whether authentication is required, or any rate-limit/error behavior. For a simple getter this is adequate but not fully 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?
A single, front-loaded sentence that conveys the resource, scope, and key output fields without any filler or repetition.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a parameterless list operation with an output schema, the description is complete: it states the account-bound scope and the meaningful output fields. No additional invocation details are needed.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool has zero parameters, so there is no parameter burden. The schema coverage is 100% and the description adds helpful context about what the returned list contains, meeting the baseline for parameterless tools.
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 (devices bound to the account) and specifies the returned attributes (model name, firmware, active status). This distinguishes it from sibling tools focused on workouts, summaries, and 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 given about when to use this tool versus alternatives such as zepp_status or get_health_metrics. The intended use is implied by the name and content, but there are no explicit selection criteria or exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_health_metricsA
Daily recovery and health metrics, one entry per date: - readiness: readiness score, overnight HRV + baseline, sleeping resting HR + baseline, physical/mental recovery, skin-temp and breathing scores - pai: weekly & daily PAI, minutes in low/medium/high HR zones - stress: avg/min/max stress and % time relaxed/normal/medium/high - spo2: overnight blood-oxygen score and desaturation index (ODI)
metrics: subset of ["readiness", "pai", "stress", "spo2"] (default all).
ISO YYYY-MM-DD dates; defaults to the last 7 days.
include_stress_series adds 5-minute stress readings (verbose).| Name | Required | Description | Default |
|---|---|---|---|
| metrics | No | ||
| to_date | No | ||
| from_date | No | ||
| include_stress_series | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the behavioral disclosure burden. It does well by stating daily granularity, what each metric category includes, the default date range, and the effect of include_stress_series. It omits error/rate-limit behavior, but the output schema likely covers return shape.
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 compact, front-loaded with the core concept, and uses bulleted lists and short parameter notes. Every sentence earns its place with no redundant filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given no annotations and an existing output schema, the description covers the essential inputs and high-level outputs well. It could add an explicit example or state when not to use it, but nothing critical is missing for correctly invoking this read-style 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%, yet the description compensates thoroughly: metrics are explained as a subset with a default, dates are specified as ISO YYYY-MM-DD with a 7-day default, and include_stress_series is explained as adding 5-minute stress readings. All four parameters receive meaningful 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 identifies a specific resource — daily recovery and health metrics — and enumerates the four metric families (readiness, pai, stress, spo2). It does not explicitly contrast with sibling tools like get_daily_summary or summarize_workouts, so it misses the top score 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 provides clear operational context: one entry per date, a subset of metrics can be requested, ISO dates default to the last 7 days, and include_stress_series adds verbose data. It does not state when not to use the tool or mention alternatives, but the context is unambiguous.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_workout_detailA
Full analysis of one workout: the summary fields plus time in each HR zone, per-kilometer splits (pace + avg HR), first-half vs second-half HR/speed/power drift, and which per-sample track fields exist (fetch those with get_workout_track).
| Name | Required | Description | Default |
|---|---|---|---|
| trackid | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description must carry the behavioral disclosure burden. It does reveal that the tool only reports which per-sample track fields exist and defers actual track fetching to get_workout_track, which is a valuable boundary. However, it never states that the operation is read-only, how expensive it might be, or what happens on invalid trackids, leaving some behavioral ambiguity for an agent.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single dense sentence that front-loads the core purpose ('Full analysis of one workout') before enumerating contents and ending with a pointer to the sibling. Every clause adds information and there is no filler or repetition.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema and no annotations, the description must convey return semantics itself. It names the major result categories (HR zones, splits, drift, track-field existence) and clarifies the boundary with get_workout_track. It omits error handling, response shape, and any mention of performance, but for a single-parameter read/introspection tool the coverage is largely sufficient.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema provides only a bare 'trackid' name with zero description coverage, so the description needs to compensate. It does imply that trackid selects 'one workout', which adds meaning beyond the raw schema. Still, it never explicitly defines trackid as the workout identifier, nor gives format or validation rules, so compensation is partial rather than thorough.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with 'Full analysis of one workout' – a specific verb, resource, and scope. It enumerates concrete contents (HR zones, splits, drift, track-field existence) and explicitly distinguishes itself from get_workout_track by directing track-data fetches there, making sibling differentiation 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?
The description clearly implies this tool is for deep analysis of a single workout, as opposed to listing or summarizing. It also names get_workout_track as the alternative for fetching per-sample track fields. However, it does not explicitly state when not to use this tool versus the other siblings like list_workouts or summarize_workouts, so the guidance is clear but not exhaustive.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_workout_trackA
Decoded per-sample time series for one workout, downsampled to at most
max_points evenly spaced points (t_s = seconds from start).
Possible fields (only those recorded are returned): lat, lon, altitude_m,
hr, speed_kmh, distance_m, cadence_spm, stride_cm, power_w,
stroke_rate_spm. Pass `fields` to limit output, e.g. ["hr", "speed_kmh"].| Name | Required | Description | Default |
|---|---|---|---|
| fields | No | ||
| trackid | Yes | ||
| max_points | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full behavioral burdenasi. It discloses downsampling to at most max_points evenly spaced points, the meaning of t_s, that only recorded fields are returned, and that fields limits output. It does not cover errors or auth, but for a read-oriented tool this is strong 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?
Three tight sentences front-load the core behavior, then enumerate possible fields and filtering. There is no filler, and every sentence adds usable 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?
The description covers the essential behavior, field semantics, and sampling rules. It lacks an explicit return-shape statement, which matters since no output schema exists, but the 'per-sample time series' framing plus the field list gives enough for an agent to invoke and interpret the response 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?
Schema description coverage is 0%, so the description must compensate. It clearly explains fields with allowed values and an example, and max_points with its downsampling behavior. The trackid parameter is not explicitly described, though its role is reasonably inferable from the tool name and 'one workout'.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb and resource: 'Decoded per-sample time series for one workout'. This clearly distinguishes it from sibling tools like summarize_workouts and get_workout_detail, which by their names imply aggregate or summary data rather than raw time 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?
The description implies usage context by emphasizing per-sample time series and optional field filtering, but it does not explicitly state when to prefer this tool over get_workout_detail or list_workouts. There are no exclusions or alternative routing, so the guidance is inferred rather than stated.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_workoutsA
List workouts, newest first, as compact summaries: sport, start/end, duration, distance, pace/speed, calories, HR, elevation, cadence, power, training effect/load, VO2max, device. Swims include SWOLF/strokes/laps.
from_date/to_date: optional ISO YYYY-MM-DD bounds (inclusive, local time).
sport: optional case-insensitive substring filter, e.g. "run", "cycling",
"swim". limit: max items returned (default 30).
Legs of a multisport event carry `part_of` = the parent's trackid.
Use `trackid` with get_workout_detail / get_workout_track.| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | ||
| sport | No | ||
| to_date | No | ||
| from_date | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
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, and it excels: it states ordering (newest first), output format (compact summaries with field list), filtering semantics (inclusive dates, local time, case-insensitive substring), default limit, and the special `part_of` attribute for multisport events. It also explains how to link to detail tools, leaving no hidden behavior.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is front-loaded with the core action and output fields, then efficiently covers parameters in a compact block, followed by a special-case note and routing instruction. Every sentence adds value—there is no filler or redundancy. The structure is logical and easy to scan, making it both concise and informative.
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 four parameters, an output schema, and no annotations, the description is fully complete. It covers all parameter behaviors, output characteristics (including swim-specific fields), special cases (multisport legs), and cross-tool usage. The output schema already defines the return structure, so the description needn't repeat it; nothing an agent needs to call the tool correctly is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema provides zero descriptions, so the description must fully document parameters. It does so comprehensively: from_date/to_date are defined as optional ISO YYYY-MM-DD bounds (inclusive, local time), sport is a case-insensitive substring filter with examples, and limit is the max items with default 30. Every parameter's meaning, format, and default are spelled out, exceeding what the schema alone could convey.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a precise verb and resource: 'List workouts, newest first, as compact summaries'. It enumerates the exact fields returned, making the tool's scope unmistakable and distinguishing it from detail tools like get_workout_detail or aggregation tools like summarize_workouts. The phrase 'compact summaries' also clarifies the level of detail, leaving no ambiguity about what the tool does.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly instructs the agent to use the returned `trackid` with get_workout_detail / get_workout_track for further detail, effectively routing the user to the appropriate sibling tools. It also notes special handling for multisport legs, which guides correct usage. While it doesn't explicitly contrast with every sibling, the mention of detail tools and the emphasis on listing makes the intended use clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
summarize_workoutsA
Training totals per period: count, hours, km, calories, elevation, training load, and duration-weighted avg HR.
group_by: "day", "week" (ISO week), "month", "year", or "all".
by_sport: split each period per sport (default true).
from_date/to_date: optional ISO YYYY-MM-DD bounds; defaults to the last
12 weeks. sport: optional substring filter.
Multisport parents are skipped; their individual legs are counted.| Name | Required | Description | Default |
|---|---|---|---|
| sport | No | ||
| to_date | No | ||
| by_sport | No | ||
| group_by | No | week | |
| from_date | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full behavioral burden. It discloses a non-obvious aggregation rule ('Multisport parents are skipped; their individual legs are counted') and states the default 12-week date window. It could add a note about read-only guarantees or empty-result behavior, but the disclosed traits are valuable and non-obvious.
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 tightly structured: a summary line, one line per parameter, and one final behavioral note. No filler or redundant phrasing. It front-loads the core purpose before parameter details.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The tool has 5 optional parameters and an output schema, so the description need not explain return values. It covers all parameters, defaults, date formats, the default range, and a critical edge case (multisport handling). Nothing an agent needs to call this tool correctly is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must fully compensate. It does: every parameter is explained with its allowed values (group_by options), default (by_sport=true), format (ISO dates), and meaning (sport substring filter). This is exemplary compensation for an empty schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a precise verb and resource ('Training totals per period') and enumerates the exact metrics computed (count, hours, km, calories, etc.), making it unmistakably an aggregation tool. This clearly separates it from sibling tools that list workouts or return details/tracks for individual activities.
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 very clear functional context: it summarizes workouts by period with grouping and sport-splitting options. It does not explicitly name alternatives or state when not to use it, but the aggregation purpose is so unambiguous that an agent can infer the right use case.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
zepp_statusA
Check the Zepp cloud connection: user id, whether the session came from the token cache or a fresh login, and how many workouts are on record.
| 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 burden. It explains what state information is returned but does not explicitly state whether the tool performs network I/O, may trigger a fresh login, or is strictly read-only. The mention of 'token cache or a fresh login' raises ambiguity about 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single front-loaded sentence that states the action and lists the exact outputs. No filler, no repetition, and every phrase adds meaning, making it highly scannable for an agent.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a zero-parameter, low-complexity status tool without an output schema, the description covers the main return values. It lacks an explicit return shape, but the named fields (user id, session source, workout count) are sufficient for an agent to understand the result.
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 schema coverage is trivially 100%, so a baseline of 4 applies. The description adds no parameter details because there are none to document, which is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a specific verb and resource ('Check the Zepp cloud connection') and enumerates the exact data items it returns: user id, session source (token cache vs fresh login), and workout count. This clearly distinguishes it from sibling tools that handle workouts, devices, and 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?
The description implies when to use it: when you need to verify the Zepp cloud connection or see session status. However, it does not explicitly name alternatives or state conditions for when not to use this tool versus a sibling, leaving the routing implicit.
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.
8 tool updates
v0.1.0- First observed
get_daily_summary - First observed
get_devices - First observed
get_health_metrics - First observed
get_workout_detail - First observed
get_workout_track - First observed
list_workouts - First observed
summarize_workouts - First observed
zepp_status
TDQS
Scored across 8 tools
Each tool targets a distinct resource or data view: connection status, devices, aggregated workout summaries, workout lists, individual workout detail, raw track data, daily activity/sleep, and health metrics. Even within the workout domain, list/detail/track/summarize have clear boundaries reinforced by the descriptions.
Most tools follow a consistent get_/list_/summarize_ snake_case pattern (e.g., get_devices, list_workouts, summarize_workouts). The only minor deviation is zepp_status, which uses a noun-style name rather than a verb-prefixed one.
Eight tools is a well-scoped set for a health/fitness data server. Each tool covers a distinct aspect of the domain without redundancy or bloat, and the count sits comfortably in the ideal range.
The tool surface covers the main Zepp/Amazfit data domains well: connection, devices, workouts (list/detail/track/aggregate), daily activity, sleep, and health metrics. Minor gaps exist, such as lack of body-composition data or continuous 24/7 heart-rate retrieval, but agents can still accomplish core health-data workflows.
Maintenance
Related MCP Connectors
Connect any AI agent to 1,000+ apps and 27,000+ actions through one remote MCP server (OAuth).
Garmin data in Claude & ChatGPT via the Garmin Health API. OAuth sign-in, no password sharing.
Connect your health, fitness, nutrition, sleep, and wearable data to your AI assistant.
- freddyOAuthcoach.freddy
Connect your wearables, rings and training apps, then ask your AI about your own health data.
Related MCP Servers
- AlicenseNot gradedqualityBmaintenanceExposes personal health data (recovery, sleep, strain, etc.) as MCP tools for AI agents to query and analyze.3MIT
- AlicenseAqualityAmaintenanceMCP server that reads Zepp/Amazfit health and workout data, exposing tools for daily summaries, sleep, heart rate, and workout details to any MCP client.83MIT
- AlicenseNot gradedqualityCmaintenanceGives any MCP-compatible AI assistant secure, read-only access to your personal Strava fitness data, including activities, segments, routes, gear, and more through natural language.MIT
- FlicenseNot gradedqualityCmaintenanceEnables MCP clients to access Zepp/Amazfit health and fitness data such as steps, sleep, heart rate, workouts, and user profile information via tools.-