Skip to main content
Glama

OpenAthlete

让 coding agent 成为真正懂你的 AI 教练。

OpenAthlete 统一佳明(Garmin)与高驰(COROS)的数据和能力,并跨会话记住你的 训练历史、伤病、目标与偏好,让 AI 在完整的个人语境中理解和帮助你。

能帮你做什么

训练与恢复、伤病与风险、比赛目标与战术、营养与装备、数据分析与资料查询…… 都可以直接讨论。它不局限于一套固定命令:凡是你能想到、AI 能结合数据和工具 完成的运动相关需求,都可以先问它。

Related MCP server: intervals-icu-mcp

安装与开始

Kimi Code:在会话中输入:

/plugins install https://github.com/whz14/openathlete

Codex:在终端执行:

codex plugin marketplace add https://github.com/whz14/openathlete && codex plugin add openathlete@openathlete

Claude Code 或其他 MCP 宿主:把这句话发给 agent:

使用 uvx openathlete-mcp 配置 OpenAthlete,并按 https://github.com/whz14/openathlete 的 AGENTS.md 完成初始化。

独立 MCP 包已发布到 PyPI 和 MCP Registry, 可由 agent 按需查询。

首次安装后按宿主要求重载或重启(Kimi Code 使用 /reload),然后另开一个与运动相关的 会话,即可进入初始化向导。环境、MCP、平台授权和偏好设置由 AI 引导或代办, 无需手动编写 MCP 配置。

之后不用背命令。直接问“你能做到什么”“你能不能……”“如何……”,它会说明 能做什么、需要哪些数据或授权,并带着你完成。

使用边界、隐私与风险

  • 需要你自己的 agent 与模型:OpenAthlete 不提供模型订阅或使用额度。分析能力 取决于所选模型,易用性取决于 coding agent、可用工具与数据完整度;AI 可能出错, 重要判断请复核。

  • 数据保存在本机,不等于数据不出机:安装更新会访问代码与依赖下载源,平台查询 和同步会访问对应 API,云端模型会收到随对话上下文发送的训练、健康和记忆数据。 账号凭据由你按向导在本机填写,不要贴进聊天。

  • 平台接口有边界:部分能力使用非官方接口,存在风控、限流和失效风险;数据是否 完整也取决于平台开放能力和你的账号。高驰采用单点登录,同步或授权期间打开高驰 App/网页可能互踢;佳明账号需关闭两步验证(MFA)。

  • 写入与健康边界:课表、计划等写回平台前会先展示内容并经你确认。AI 教练不提供 医疗诊断;出现严重伤病迹象请就医。

反馈与致谢

欢迎通过 Issues 提问题、需求或使用 场景,也欢迎按 贡献指南 提交改进。

感谢 XiaoSiHwang/garmin-sync-coros 提供的佳明→高驰同步基础,以及 garth 提供的 佳明通信能力。

本仓库自有代码以 MIT 发布。面向 coding agent 的完整文档见 AGENTS.md,产品与架构约定见 DESIGN.md。

Available Tools

9 tools
create_workoutB

预览或确认创建单次课表;按 platform 路由 COROS 官方 MCP 或 Garmin API。

NameRequiredDescriptionDefault
workoutYes
confirm_tokenNo

Output Schema

NameRequiredDescription
okYes
dataYes
metaYes
errorNo

TDQS

B3.1/5.0
Behavior3/5

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

With no annotations, the description must carry the full burden; it does disclose two non-obvious traits: a dry-run/preview mode and platform-dependent backend routing (COROS MCP vs Garmin API). However it says nothing about permission requirements, whether a confirm is idempotent, what validation failures look like, or whether an already-created workout causes an error.

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

Conciseness4/5

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

A single compact sentence with the primary action front-loaded and no filler. It is perhaps over-compressed given how much it leaves unexplained, but nothing in it is wasted.

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

Completeness2/5

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

An output schema exists, so return values need not be described, but for a nested-parameter, two-phase creation tool with zero annotation coverage the description is too thin. The preview→confirm handshake and the required workout block shape are the two things an agent most needs and neither is covered.

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

Parameters2/5

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

Schema description coverage is 0% and the schema is a nested object with seven sub-fields, so the description must compensate — but it only gestures at platform routing and never explains confirm_token, date/sport/name/description/blocks semantics, or the block structure. Almost no meaning is added beyond the raw schema.

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

Purpose4/5

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

States a specific verb and resource (create a single workout) plus a preview/confirm distinction, which is more than the name alone conveys. No sibling tool performs creation, so differentiation is implicitly clear, but it never names an alternative explicitly.

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

Usage Guidelines3/5

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

The phrase 'preview or confirm' implies a two-step flow, which is useful routing information, but it never explains how to trigger preview versus confirm (i.e. the role of confirm_token) or when an agent should skip preview and commit directly. No exclusions or prerequisites are given.

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

get_current_planB
Read-only

读取当前日期覆盖的唯一进行中计划及本周日志;v0 不读取平台日程。

NameRequiredDescriptionDefault
dateNo

Output Schema

NameRequiredDescription
okYes
dataYes
metaYes
errorNo

TDQS

B3.4/5.0
Behavior3/5

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

readOnlyHint=true already declares this is a safe read, so the bar is lower. The description adds scope context (single active plan, this week's log, no platform calendar), which is real added value. It does not mention what happens when no plan is in progress or whether the result is empty/null.

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

Conciseness4/5

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

A single compact sentence with the core scope front-loaded and the v0 limitation appended. No filler, though the extreme terseness leaves several points implicit.

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

Completeness3/5

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

An output schema exists, so return-value explanation is not required, and the annotations cover safety. What remains under-specified is the date parameter's role and what the tool returns when no active plan exists — gaps an agent would hit at invocation time.

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

Parameters3/5

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

Only one optional 'date' parameter exists, and schema description coverage is 0%, so the description should clarify it. "读取当前日期覆盖的" hints that the date drives lookup, but it never says the parameter overrides 'today' or what format/behavior applies. Partial compensation only.

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

Purpose4/5

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

The description states a specific verb+resource: reading the single in-progress plan covering the current date plus this week's log. It also scopes the tool by noting it does not read platform calendars, which helps separate it from siblings like get_overview. It stops short of naming which sibling to use for calendar data.

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

Usage Guidelines3/5

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

There is an explicit exclusion ("v0 不读取平台日程"), which tells the agent one case where not to rely on this tool. However, no positive when-to-use guidance and no alternative tool is named for the calendar/schedule case among the siblings (get_overview, query_activities, etc.).

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

get_overviewB

一页查看近期训练、统一负荷、恢复和下一赛事;必要时按覆盖状态增量同步。

NameRequiredDescriptionDefault
daysNo
end_dateNo

Output Schema

NameRequiredDescription
okYes
dataYes
metaYes
errorNo

TDQS

B3.3/5.0
Behavior3/5

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

With no annotations, the description carries the full burden, and it does disclose a meaningful side effect: conditional incremental synchronization driven by coverage status. It does not explain whether this is read-only, what sync failures look like, or the trigger conditions beyond '必要时' (when necessary).

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

Conciseness5/5

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

A single front-loaded sentence that lists the overview contents before the optional sync behavior. There is no filler or repetition.

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

Completeness3/5

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

An output schema exists, so return-value explanation is not required, and the description covers the major dashboard domains plus sync behavior. It still leaves a key gap for a multi-domain overview: it does not define the time window semantics of '近期' (recent) or connect the two date parameters to the displayed data.

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

Parameters2/5

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

Schema description coverage is 0%, and the description never mentions 'days' or 'end_date'. It does not clarify whether the period applies to training, load, recovery, or the next-race lookup, leaving the schema's typed fields to speak for themselves.

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

Purpose4/5

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

The description states a specific verb ('查看' / view) and enumerates the resource components: recent training, unified load, recovery, and next race. This makes it distinguishable from single-domain siblings like get_training_load or get_recovery_status, though it does not explicitly frame itself as an aggregate of those tools.

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

Usage Guidelines3/5

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

It implies usage as a one-page overview and notes that incremental sync happens 'when necessary based on coverage status,' which gives some context. However, it does not say when to choose this tool over query_activities, get_training_load, get_recovery_status, or sync_now.

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

get_recovery_statusA

读取指定日期的静息心率、睡眠 HRV 与缺失项;不生成虚假恢复评分。

NameRequiredDescriptionDefault
dateNo

Output Schema

NameRequiredDescription
okYes
dataYes
metaYes
errorNo

TDQS

A3.5/5.0
Behavior4/5

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

With no annotations, the description carries the burden and does disclose a meaningful behavioral trait: it returns missing-item markers rather than imputing values, and it explicitly refuses to generate a fabricated recovery score. That tells the agent to expect gaps in the data instead of a computed verdict. It does not explicitly state read-only behavior, but '读取' plus the output schema covers most of the remaining ground.

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

Conciseness5/5

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

A single front-loaded sentence that names the returned fields first and the non-behavior second; there is no filler and nothing an agent must read past to act.

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

Completeness3/5

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

An output schema exists, so return values need not be described, and a read-only single-parameter tool is low risk. Still, the omitted-date default and the meaning of '缺失项' (missing items — missing days, missing metrics, or both?) leave gaps that matter for correct invocation.

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

Parameters2/5

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

Schema description coverage is 0% and the description only says 'specified date', which essentially restates the parameter name. Critically, `date` is not required, yet the description never explains the default behavior when it is omitted (today? most recent sync?), nor the expected format or timezone.

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

Purpose4/5

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

The description uses a specific verb ('读取'/read) plus named resources (resting heart rate, sleep HRV, missing items) scoped to a date, which is far more concrete than the tool name alone. It implicitly separates itself from score-producing siblings by stating it does not fabricate a recovery score, but it never names get_overview or get_training_load directly.

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

Usage Guidelines3/5

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

Usage is only implied: an agent can infer this is the tool for pulling raw daily recovery metrics rather than a synthesized score, but there is no explicit 'use this when…' or 'for X use Y instead' guidance. Given eight siblings including get_overview and get_training_load, an explicit routing sentence would have been valuable.

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

get_training_loadC

读取本地 Edwards TRIMP 与 PMC 趋势,并显示锚点和历史覆盖范围。

NameRequiredDescriptionDefault
daysNo
end_dateNo

Output Schema

NameRequiredDescription
okYes
dataYes
metaYes
errorNo

TDQS

C2.8/5.0
Behavior3/5

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

No annotations are provided, so the description carries the full burden. It does add some behavioral context beyond the name: it reads 'local' data and reports anchors plus history coverage range, hinting at data-availability feedback. But it says nothing about behavior with insufficient history, whether results are cached/stale, or auth/data-source requirements.

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

Conciseness4/5

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

A single compact sentence with no filler; the metric names are front-loaded. Slight deduction because the trailing 'anchors and history coverage' clause is unclear to a reader who does not already know the domain.

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

Completeness3/5

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

An output schema exists, so return values need not be explained. However, for a tool with two undocumented parameters and no annotations, the description should at least say what the time window means and whether a sync is required; it leaves those gaps for a read-only analytical tool.

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

Parameters2/5

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

Schema description coverage is 0% for both parameters. The description never mentions 'days' (default 42, range 7–365) or 'end_date', so the agent gets no guidance on the lookback window or the anchor date from the description; 'history coverage range' gestures at the concept but does not explain either parameter.

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

Purpose3/5

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

The description names a specific verb ('读取') and specific resources ('Edwards TRIMP 与 PMC 趋势'), which is more than a restatement of the name. However, the second clause ('显示锚点和历史覆盖范围') is vague, and the tool's relation to siblings like get_overview and get_recovery_status, which likely also surface load/trend data, is not clarified.

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

Usage Guidelines2/5

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

There is no statement of when to call this tool versus get_overview or get_recovery_status, no prerequisites (e.g., does data need to be synced first via sync_now?), and no exclusions. The agent must infer usage purely from the metric names.

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

query_activitiesC

查询 canonical 活动;detail=true 时附结构与细区间,不返回原始 FIT 或本地路径。

NameRequiredDescriptionDefault
daysNo
limitNo
sportNo
detailNo
end_dateNo
start_dateNo

Output Schema

NameRequiredDescription
okYes
dataYes
metaYes
errorNo

TDQS

C2.9/5.0
Behavior3/5

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

No annotations are provided, so the description carries the full behavioral burden. It usefully discloses that detail=true attaches structure and fine intervals and that raw FIT files and local paths are not returned. However, it does not state read-only behavior, permissions, pagination, ordering, or how limits and date ranges affect results.

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

Conciseness4/5

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

The description is a compact single sentence with the core purpose front-loaded and the detail behavior appended. It avoids unnecessary repetition, though the extreme brevity leaves gaps that could be filled without bloating it.

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

Completeness2/5

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

An output schema exists, so return format need not be explained in detail. Still, for a six-parameter query tool with no annotations and 0% schema description coverage, the description is missing too much usage and parameter context to be considered complete.

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

Parameters2/5

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

Schema description coverage is 0%, and the description only explains the detail parameter's effect. It says nothing about days, limit, sport, start_date, or end_date, leaving most of the six parameters undocumented beyond their raw schema types and constraints.

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

Purpose4/5

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

The description states a specific verb and resource: query canonical activities. It also clarifies that detail=true adds structure and fine intervals, making the tool's scope recognizable. It does not explicitly distinguish itself from siblings such as get_training_load or get_recovery_status, but the activity-querying purpose is clear.

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

Usage Guidelines2/5

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

There is no guidance on when to use this tool versus the sibling tools, nor any stated prerequisites or exclusions. The description implies it is the activity-retrieval tool, but an agent must infer all usage context.

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

read_memoryA
Read-only

读取一个白名单记忆文件,或以 list 枚举白名单档案;name/list 必须二选一。

NameRequiredDescriptionDefault
listNo
nameNo

Output Schema

NameRequiredDescription
okYes
dataYes
metaYes
errorNo

TDQS

A3.6/5.0
Behavior4/5

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

Annotations already declare readOnlyHint=true, but the description adds a real behavioral constraint not present in structured fields: access is limited to a whitelist, so only certain names are valid. It does not describe what happens on a non-whitelisted name, but the whitelist disclosure is meaningful context beyond the annotation.

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

Conciseness4/5

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

A single compact sentence with the read/list dichotomy front-loaded and the exclusivity rule trailing as a constraint. Nothing is wasted, though the extreme brevity leaves room for a few more useful facts at little cost.

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

Completeness3/5

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

An output schema exists, so return values need not be explained, and the tool is low-complexity with two optional params. Still, the description never addresses error behavior for a non-whitelisted or missing name, which is the main failure mode an agent would hit.

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

Parameters3/5

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

Schema description coverage is 0%, so the description carries the burden, and it does explain the role of each parameter (name = a memory file to read, list = enumerate whitelist entries) plus their exclusivity. However, it gives no value format for either — no example name, and no hint what the list string should contain — leaving the agent to guess.

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

Purpose4/5

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

States a specific verb+resource (读取记忆文件) and covers both operating modes (read one file, or enumerate via list), which separates it from the write_memory sibling. It does not explicitly contrast itself with write_memory, so it falls just short of full sibling differentiation.

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

Usage Guidelines3/5

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

The description gives one concrete usage rule — name and list are mutually exclusive, choose exactly one — which is genuine routing guidance. It does not say when to use this tool versus write_memory or when a read would fail, so the guidance is implied rather than complete.

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

sync_nowA

立即对活动和日度指标各执行至多一个增量批次;长任务由调用方继续。

NameRequiredDescriptionDefault

No parameters

Output Schema

NameRequiredDescription
okYes
dataYes
metaYes
errorNo

TDQS

A3.9/5.0
Behavior4/5

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

With no annotations, the description carries the burden and does disclose two key behavioral traits: the work is bounded (at most one incremental batch per resource, not a full sync) and completion requires the caller to keep invoking it. It does not mention whether data is mutated locally, permission requirements, or partial-failure behavior, keeping it below a 5.

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

Conciseness5/5

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

A single compact sentence that front-loads the action and its bound, followed by the continuation caveat. Every clause adds operational information; nothing is wasted.

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

Completeness4/5

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

Output schema exists, so return values need not be explained, and with zero parameters the surface is small. The description covers scope and the caller-continuation contract, but omits mutation semantics and concurrency/error behavior that an agent triggering a sync would benefit from.

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

Parameters4/5

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

The tool takes zero parameters, so there is nothing for the description to disambiguate and the baseline of 4 applies. No parameter-related gaps exist.

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

Purpose4/5

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

States a specific action (execute at most one incremental batch each for activities and daily metrics), which clearly distinguishes it from the read-only siblings like query_activities and get_overview. It is clear what the tool does, though the description doesn't explicitly name a sibling alternative.

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

Usage Guidelines3/5

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

"立即" (immediately) implies this is the on-demand trigger versus passive reads, and the note that long tasks are continued by the caller implies repeated invocation is expected. However, there is no explicit statement of when to use this versus the get_* tools or what happens if a sync is already running.

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

write_memoryB

以模板校验、原子替换和可选哈希并发控制写入白名单 Markdown 记忆。

NameRequiredDescriptionDefault
nameYes
contentYes
allow_createNo
expected_sha256No

Output Schema

NameRequiredDescription
okYes
dataYes
metaYes
errorNo

TDQS

B3.2/5.0
Behavior3/5

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

No annotations are provided, so the description carries the full burden. It does disclose meaningful behavior: writes are template-validated, atomic, restricted to a whitelist, and support optimistic concurrency via an optional hash. It does not say whether an existing entry is overwritten or destroyed, what happens on template/whitelist/hash failure, or whether permissions are needed.

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

Conciseness4/5

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

A single dense clause that front-loads the action and then lists the three mechanisms without filler. It is compact, though its density borders on cryptic for a non-Chinese-reading agent, and there is no second sentence clarifying the write target or failure behavior.

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

Completeness3/5

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

The output schema means return values do not need explanation, and atomicity/concurrency are covered. But for a mutation tool with no annotations and 0% schema coverage, the description leaves material gaps: what the template is, what counts as whitelisted, overwrite semantics, and the meaning of allow_create.

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

Parameters3/5

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

Schema coverage is 0%, so the description must compensate for four undocumented parameters. It adds real meaning to expected_sha256 by framing it as optional hash-based concurrency control and implies that name is constrained by the whitelist and content by a template, but allow_create (default false, a significant gate) and the name/content format are not explained.

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

Purpose4/5

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

The description names a specific verb (写入/write) plus the resource and scope (白名单 Markdown 记忆, whitelisted Markdown memory), and the mechanisms (template validation, atomic replacement, hash concurrency) make it clearly distinct from the read-only sibling read_memory. It stops short of naming read_memory or explaining how memory entries relate, so this is clear but not fully differentiated.

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

Usage Guidelines2/5

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

There is no guidance about when to use this tool versus read_memory, or when writing versus creating, and no stated prerequisites such as reading first and supplying expected_sha256. The whitelist mention implies a constraint on names, but no agent-oriented instructions for choosing this tool.

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

Tool Schema Changelog

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

  1. 9 tool updatesv0.1.1
    • First observedcreate_workout
    • First observedget_current_plan
    • First observedget_overview
    • First observedget_recovery_status
    • First observedget_training_load
    • First observedquery_activities
    • First observedread_memory
    • First observedsync_now
    • First observedwrite_memory

TDQS

A3.5/5.0

Scored across 9 tools

Disambiguation4/5

The tools mostly target distinct resources and actions. The only overlap is get_overview, which summarizes training load/recovery and may trigger sync, versus the specialized get_training_load, get_recovery_status, and sync_now; descriptions make the summary-vs-detail boundary clear enough.

Naming Consistency4/5

All names use lowercase snake_case and are predominantly verb_noun patterns such as get_*, query_*, read_*, write_*, and create_*. sync_now is the only non-noun object but remains clear and consistent.

Tool Count5/5

Nine tools is a good fit for a focused athlete-assistant surface. Each tool covers a distinct workflow, and there is no obvious redundancy or missing low-level utility.

Completeness4/5

Core read, sync, memory, and workout-creation workflows are covered. Notable gaps remain around the workout lifecycle (no update/delete and no explicit list/get workout) and plan mutation, though these may be delegated to platform MCPs.

Maintenance

ActivityMaintained
ResponsivenessNo issues

Related MCP Connectors

Related MCP Servers

  • A
    license
    A
    quality
    B
    maintenance
    MCP server that connects AI agents to Intervals.icu, enabling access to training data such as activities, wellness metrics, calendar events, gear, power curves, and custom items. Includes a running coach AI template for automated post-session analysis.
    19
    16 npm
    1
    MIT
  • F
    license
    Not graded
    quality
    C
    maintenance
    MCP server for TrainingPeaks that reads workouts, fitness metrics (CTL/ATL/TSB), and health data, and creates/updates/deletes planned workouts. Enables AI-powered training plan management and automated adjustment based on performance, fatigue, and injury.
    -
  • A
    license
    B
    quality
    A
    maintenance
    An MCP server that gives LLMs access to Garmin Connect data, including training, recovery, sleep, stress, VO2 Max, and running summaries for personalized fitness advice.
    24
    337 PyPI
    1
    MIT