Sport Health MCP
Sport Health MCP
로컬 우선(Local-first)의 华为 운동 건강 분석 MCP Server입니다. 사용자가 한 번만
HUAWEI_HEALTH_* 개인 데이터 내보내기 패키지를 제공하면 Agent가 운동 성과, 운동 중 생리
지표, 운동 전후 건강 배경을 읽을 수 있으며, 필요에 따라 과거 날씨와 대기질 정보를 보강할 수 있습니다.
이 프로젝트는 운동 복기를 위한 것으로, 의료 진단이나 치료 조언을 제공하지 않습니다.
현재 기능
华为 개인 데이터 내보내기 디렉터리 및 핵심 JSON 파일을 식별합니다.
华为 비표준 JSON 숫자 키를 내결함성 있게 파싱합니다.
운동 요약, GPS 트랙, 심박수, 걸음 수, 속도, 고도, 훈련 부하를 파싱합니다.
운동 전날, 당일, 다음 날의 심박수, 안정 시 심박수, HRV, 스트레스, 혈중 산소, 수면 단계를 집계합니다.
Open-Meteo의 과거 날씨 및 대기질 API를 호출하고 응답을 로컬에 캐시합니다.
MCP를 통해 페이징 데이터 도구와 리포트 포렌식 팩을 제공합니다.
Related MCP server: mcp-takeout-googlefit
설치
Python 3.11 이상을 사용하고 프로젝트 디렉터리에 가상 환경을 만들 것을 권장합니다:
python -m venv .venv
.\.venv\Scripts\Activate.ps1
python -m pip install -e ".[dev]"华为 내보내기 패키지는 번들링되거나 커밋되지 않으며, .gitignore는 모든 HUAWEI_HEALTH_* 디렉터리를 기본적으로 무시합니다.
로컬 확인
프로젝트 디렉터리에 HUAWEI_HEALTH_* 폴더가 하나만 있으면 자동으로 인식됩니다:
sport-health-inspect inspect
sport-health-inspect list명시적으로 지정할 수도 있습니다:
sport-health-inspect --export-dir "D:\HealthData\HUAWEI_HEALTH_xxx" listMCP Server 시작
로컬 Agent는 stdio를 권장합니다:
$env:SPORT_HEALTH_EXPORT_DIR="D:\HealthData\HUAWEI_HEALTH_xxx"
sport-health-mcpMCP 클라이언트 설정의 핵심적인 형태는 다음과 같습니다. 실제 필드명은 클라이언트에 따라 다르므로 해당 클라이언트 문서를 기준으로 하세요:
{
"mcpServers": {
"sport-health": {
"command": "C:\\sport-health-mcp\\.venv\\Scripts\\sport-health-mcp.exe",
"env": {
"SPORT_HEALTH_EXPORT_DIR": "D:\\HealthData\\HUAWEI_HEALTH_xxx"
}
}
}
}MCP 클라이언트에 등록
MCP stdio를 지원하는 클라이언트에 앞서 언급한 command와 env 설정을 추가하고 저장한 뒤 클라이언트를 재시작하세요. 클라이언트마다 설정 파일의 위치나 상위 필드명이 다를 수 있으므로 해당 클라이언트 문서를 따르세요.
여러 Agent에서 사용
같은 컴퓨터: MCP
stdio를 지원하는 각 Agent는 같은 Server를 시작할 수 있지만, 해당 Agent의 설정 형식에 맞게 한 번 등록해야 합니다.다른 사용자의 컴퓨터: 이 프로젝트를 설치하고 자신의
HUAWEI_HEALTH_*데이터 패키지를 내보낸 뒤, 설정의 명령어와 데이터 디렉터리를 자신의 절대 경로로 바꾸세요.웹 클라이언트나 cloud Agent: 사용자 컴퓨터의 로컬
stdio프로세스에 접근할 수 없습니다. 이러한 클라이언트를 지원하려면 인증이 포함된 Streamable HTTP 배포를 별도로 제공하고, 암호화 업로드, 사용자 격리, 데이터 삭제, 개인정보 준수 체계도 함께 설계해야 합니다.
프로젝트는 작성자의 华为 데이터 패키지를 공유하지 않습니다. MCP Server는 범용적인 프로그램이며, 각 사용자의 데이터는 사용자 자신의 컴퓨터에 저장됩니다.
MCP 도구
inspect_huawei_export: 데이터 패키지의 무결성을 검사합니다.list_activities: 운동 목록을 표시합니다.get_activity_summary: 단일 운동 요약을 조회합니다.get_activity_track: GPS 트랙을 페이지로 나누어 조회합니다.get_activity_samples: 심박수, 걸음 수, 속도, 고도 샘플을 페이지로 나누어 조회합니다.get_health_context: 운동 전후 여러 날의 건강 배경을 조회합니다.get_activity_environment: 과거 환경 데이터를 가져와 캐시합니다.get_report_evidence_pack: Agent가 리포트를 작성할 때 사용하는 결정적 증거 패키지를 생성합니다.get_report_contract: 고정된 리포트 구성, 길이, 작성 규칙을 가져옵니다.
Agent는 먼저 list_activities를 호출한 뒤 activity_id를 고르고, 우선적으로
get_report_evidence_pack을 호출하며, 반환된 report_contract를 엄격히 준수하는 것을 권장합니다. 고정된 형식에는 핵심 판단, 운동 성과 분석, 신체 반응, 훈련 조언만을 담고, 기기 앱이 이미 보여준 전체 지표를 되풀이하지 않아야 합니다. 원본 곡선이나 트랙을 봐야 할 때만 목록 상세 도구를 호출하세요.
테스트
테스트 프레임워크를 설치하지 않고 표준 라이브러리 테스트를 실행할 수 있습니다:
$env:PYTHONPATH="src"
python -m unittest discover -s tests -v테스트는 코드로 만든 합성 운동 기록만 사용하며, 개인화된 내보내기 데이터에 의존하거나 포함하지 않습니다.
개인정보 보호 경계
원본 건강 데이터는 기본적으로 원격 자산인 컴퓨터에서만 읽습니다.
환경 보강 도구만 네트워크에 접속하며, 경로의 중심점과 날짜, 시간 범위만 전송합니다.
MCP 도구는 읽기 전용이며, 华为 내보내기 파일을 수정하지 않습니다.
로그나 문제 보고서를 외부에 공개하기 전에, 좌표, 시간, 기기 식별자, 건강 지표를 반드시 제거해야 합니다.
소스 코드를 배포하기 전에 작업 디렉터리를 통째로 압축하지 마세요. 대신 버전 관리 내보내기나 빌드 아티팩트 배포로 게시하여, 이미 무시된 개인 데이터 디렉터리까지 패키징되지 않도록 하세요.
오픈소스 라이선스
이 프로젝트는 MIT License를 사용합니다. 보안 취약점을 보고하기 전에 SECURITY.md를 읽어 주시고, 참고 이슈에 실제 건강 데이터, GPS 트랙, 환경 캐시, 또는 로컬 경로가 포함된 로그를 업로드하지 마세요.
제3자 서비스 및 상표
환경 데이터는 Open-Meteo에서 제공되며, 데이터는 CC BY 4.0을 따릅니다. 표시할 때 출처와 라이선스를 반드시 표기해야 합니다.
Open-Meteo의 무료 API는 비상업적 용도에만 사용할 수 있으며 호출 한도가 적용됩니다. 상업적 이용을 원한다면 공식 상업 인터페이스를 사용하거나 공식 라이선스에 따라 직접 구축하세요. 자세한 내용은 Open-Meteo Terms를 참고하세요.
이 프로젝트는 독립된 커뮤니티 프로젝트로, 华为 공식과는 재휴, 인가, 보증 관계가 없습니다. 관련 제품명과 상표는 각자 권리자에게 귀속됩니다.
Available Tools
9 toolsget_activity_environmentB
Fetch cached historical weather and air-quality context from Open-Meteo.
| Name | Required | Description | Default |
|---|---|---|---|
| activity_id | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full behavioral disclosure burden. It does usefully disclose that data is cached and historical, which implies it may be stale or not fetched live, but it does not describe cache-miss behavior, freshness limits, or whether any network call occurs.
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 with no wasted words, and the core purpose is front-loaded. It is compact and easy to scan.
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 is simple enough that the description is mostly adequate, but it omits any contextual bridge to the sibling tools and leaves the sole parameter unexplained. The presence of an output schema reduces the need to explain the return value, yet this still feels minimal rather than complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The description does not mention activity_id at all, and schema description coverage is 0%. The parameter name is reasonably interpretable, but the description adds no semantic guidance beyond the schema and does not compensate for the missing schema descriptions.
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 clear verb and resource: 'Fetch cached historical weather and air-quality context from Open-Meteo.' It is specific enough to be understood as distinct from sibling tools like get_health_context, though it does not explicitly call out that distinction.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides no guidance about when to use this tool instead of alternatives. Given siblings like get_health_context and get_activity_summary, an agent receives no signal about which one fits a given need.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_activity_samplesA
Get paginated heart_rate, cadence, speed, altitude, or pace samples.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | ||
| metric | No | ||
| offset | No | ||
| activity_id | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the transparency burden. It usefully states that results are paginated, which indicates offset/limit-driven behavior, and 'Get' signals read-only usage. However, it does not disclose what happens when the optional 'metric' parameter is null, nor does it mention ordering, boundaries, or rate-limit 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 a single concise sentence with no jargon or required words. 'Get paginated' is front-loaded, and the metric list is compact. Every word earns its place.
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?
An output schema exists, so the response shape is not a concern. Yet the description still omits important invocation context: there is no statement about what null metric means, how pagination limits/offsets work, or any model limits on limit. This is likely to be usable in many cases but leaves crucial optionality unstated.
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 does add semantic value for the metric parameter by listing possible sample types, but it does not explain the default null behavior, how limit/offset interact for pagination, or whether metric values are case/index-sensitive. The parameter list is therefore partially clarified but not fully covered.
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 is specific and immediate: it uses the verb 'Get' with a clear resource ('paginated ... samples') and lists the exact metric types supported. This makes the purpose unmistakable and differentiates it from sibling tools like get_activity_summary and get_activity_track.
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 this tool—when you need paginated raw activity samples—but it never explicitly says when to prefer it over alternatives such as get_activity_summary or get_activity_track. The agent must infer routing from the tool name and sibling names rather than from direct guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_activity_summaryC
Get normalized summary metrics for one activity.
| Name | Required | Description | Default |
|---|---|---|---|
| activity_id | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description must explain behavior. The word 'normalized' hints at data transformation, but it is undefined, and there is no mention of side effects, data source, permissions, or edge cases.
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 one short sentence that immediately states the purpose. There no filler, redundancy, or repetition of 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?
Despite having an output schema, the description omits any context about how activity_id is used, what normalized metrics are, and how this tool fits among eight siblings. This is minimal for an agent deciding whether to call this 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 coverage is 0%, so the description must compensate for the activity_id parameter. It only says 'for one activity,' which confirms the parameter identifies a single activity, but it does not explain the format, source, or how to obtain it.
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?
Describes a clear action (Get) on a specific resource (activity summary metrics) for a single activity. It differentiates from sibling tools like get_activity_track and get_activity_samples through the word 'summary', though it does not explicitly name those alternatives.
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 explicit guidance on when to use this tool versus its siblings. The description implies usage for obtaining summary metrics of one activity, but it does not state what to use for other needs or exclude alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_activity_trackA
Get a paginated GPS track with timestamps and altitude for one activity.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | ||
| offset | No | ||
| activity_id | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the behavioral burden. It does reveal that the result is paginated and scoped to one activity, which is meaningful. However, it does not describe error behavior, auth requirements, rate limits, or what happens when an activity_id is invalid.
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 conveys the core resource, pagination behavior, and relevant data fields. There is no redundant information or 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?
The tool is simple and has an output schema, so the description does not need to enumerate return values. Still, it lacks usage guidance and explicit details about pagination behavior or error cases, which are left to inference.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema has 0% description coverage, so the description must help interpret parameters. 'Paginated' implies limit and offset are pagination controls, and 'one activity' matches activity_id. But the description does not explain ordering, maximum limit, or the exact units or format expected.
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?
States a specific verb and resource: 'Get a paginated GPS track with timestamps and altitude for one activity.' This is unambiguous and clearly distinguishes the tool from siblings like list_activities and get_activity_summary.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance is given about when to choose this tool over alternatives such as get_activity_samples or get_activity_environment. There are no conditions, exclusions, or known alternatives mentioned.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_health_contextA
Get daily health summaries around an activity, including sleep, HRV, stress, heart rate, and SpO2.
| Name | Required | Description | Default |
|---|---|---|---|
| days_after | No | ||
| activity_id | Yes | ||
| days_before | 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 full burden for behavioral context. The verb 'get' and the word 'summaries' indicate a read-only operation and the scope of data, but the description does not disclose behavior around missing health data, the meaning of the surrounding window, or any rate/consistency expectations.
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 compact sentence that leads with the action and resource, and adds a relevant list of health metrics without unnecessary elaboration. Every word contributes to the tool's purpose.
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 simple three-parameter tool with an output schema available, the description covers the central intent and the health metrics reasonably well. It still leaves the exact day-range behavior and data-availability edge cases to inference, but these are not severe omissions given the schemas and defaults.
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 does not explicitly explain activity_id, days_before, or days_after. However, 'around an activity' adds some meaning to the before/after window and the default values in the schema are reasonably self-explanatory, so it is more than a tautology but still not a full parameter explanation.
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 verb 'get' and the specific resource: 'daily health summaries around an activity', and lists the included health indicators (sleep, HRV, stress, heart rate, SpO2). This makes it distinct from several siblings like get_activity_track or get_activity_environment, though it does not explicitly name a sibling within the text.
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 phrase 'around an activity' provides a plausible context for when to use the tool, but no explicit when-to-use or when-not-to-use guidance is present. There is no mention of when to choose this over get_activity_summary or get_activity_samples, so the decision is left to inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_report_contractA
Return the stable structure and writing rules for end-user activity reports.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
There are no annotations, so the description carries the full responsibility. It clearly says the tool 'returns' a structure and rules, which implies a non-mutating retrieval. However, it doesn't disclose any details about the return format, version, caching behavior, or permissions required, though this is less critical for a 0-parameter read-like tool.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is one sentence of 11 words, front-loaded, with no filler or repeated information. It captures the essential behavior as precisely as possible for a simple contract-retrieval tool.
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 zero parameters and the presence of an output schema, the description is complete enough for a simple contract lookup. The main gap is that it doesn't frame the relation to sibling tools such as get_report_evidence_pack, but that's a usage-guidance concern rather than a core completeness failure.
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 no parameters with an empty schema, so the description cannot need to add anything beyond what the schema already states. The baseline of 4 for 0-parameter tools is appropriate; nothing is unfilled.
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 ('Return') with a concrete resource ('stable structure and writing rules for end-user activity reports'), which strongly communicates the tool's deliverable. It distinguishes itself from all siblings (activity data, evidence packs) by focusing on the report contract itself.
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 usage context or when-to-use/when-not-to-use guidance is provided. The description doesn't mention when to use this instead of siblings like get_report_evidence_pack or get_activity_summary, so the agent must infer from the tool's name and description alone.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_report_evidence_packA
Build deterministic facts, context, flags, and guidance for a post-activity Agent report.
| Name | Required | Description | Default |
|---|---|---|---|
| activity_id | Yes | ||
| include_environment | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries more behavioral weight. It adds one useful behavior detail: the result is deterministic, meaning the generated evidence pack is reproducible. However, it does not explain important behavioral aspects such as whether this is a read-only/resource-consuming operation, whether it can fail, or what 'flags' semantically imply for the 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 sentence that is concise, front-loaded with the core action, and contains no filler. The tradeoff is that brevity omits some needed behavioral details, but the text that is present earns its place.
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 output schema exists, so return values are not required in the description. Even so, the description lacks parameter-level guidance, clear exclusions, and deeper behavioral context. It is minimally usable but not fully complete for an agent that must decide among several related activity/report tools.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description was expected to compensate, and it does not explain either parameter. Still, activity_id is clearly the identifier of the target activity, and include_environment is self-descriptive enough to infer its boolean intent, giving the parameter semantics a modest baseline.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses the specific verb 'Build' and names a concrete deliverable ('deterministic facts, context, flags, and guidance for a post-activity Agent report'), so the tool's basic purpose is clear. It does not fully distinguish itself from report-related siblings like get_activity_summary or get_report_contract, so it falls short of a 5.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The phrase 'for a post-activity Agent report' provides a clear, explicit use context: call this after an activity when generating an Agent report. It does not name alternative siblings, exclude related tools, or state when not to use it, but it does convey a direct context rather than leaving usage entirely implicit.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
inspect_huawei_exportA
Check the configured Huawei export and report available source-file counts.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the burden of behavioral disclosure. 'Check' and 'report' imply a read-only inspection that returns counts rather than file contents, which is helpful, but it doesn't explicitly state side effects, required configuration, or error/edge-case 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 one concise front-loaded sentence. It delivers the action, resource, and result with no filler or unclear phrasing.
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 parameters, an output schema, and a clear read-oriented purpose, the description is mostly complete. It could be slightly stronger with explicit guidance on what 'configured' means or what the counts are used for, but an agent can likely call it correctly as-is.
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 takes zero parameters and the schema confirms this, so there is no parameter-semantic burden on the description. A score of 4 aligns with the baseline for zero-parameter 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 states a specific action ('Check') and a clear resource ('configured Huawei export') along with the concrete outcome ('report available source-file counts'). This distinguishes it from the sibling activity/health/report tools.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage context is implicitly clear: an agent should call this when it needs to verify the Huawei export and know how many source files are available. However, there is no explicit guidance on when not to use it or how it compares to the sibling tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_activitiesA
List imported activities. Optionally filter by running, walking, cycling, fitness, or workout.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | ||
| sport_type | 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 behavioral disclosure burden. The verb 'list' implies a read-only operation and the filter values add useful context, but the description does not explain default limit behavior, what a null sport_type returns, pagination, or response 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 a single sentence that front-loads the primary action and resource, then adds the key filtering detail. There is no filler or redundant repetition of the schema.
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 simple list tool with no required parameters and an output schema, the description is largely sufficient: it says what is listed and how to filter. Some context is left implicit, such as default limit behavior and when a caller should switch to the detail getter tools, but the schema and sibling names cover part of that gap.
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 no descriptions for its parameters, so the description adds value by enumerating the valid sport_type filter values: running, walking, cycling, fitness, or workout. However, it does not clarify the 'limit' parameter or how filtering interacts with it.
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 operation ('List') and resource ('imported activities'), and gives concrete filter categories. It is distinguishable from the sibling get_activity_* tools because it describes a list view rather than a specific activity detail, though it does not explicitly contrast with those tools.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies the tool is for listing imported activities and optionally filtering them by sport type. It does not explicitly say when to use this tool versus get_activity_summary, get_activity_track, or other siblings, nor does it provide exclusion cases.
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.
9 tool updates
v0.1.0- First observed
get_activity_environment - First observed
get_activity_samples - First observed
get_activity_summary - First observed
get_activity_track - First observed
get_health_context - First observed
get_report_contract - First observed
get_report_evidence_pack - First observed
inspect_huawei_export - First observed
list_activities
TDQS
Scored across 9 tools
Each tool maps cleanly to a distinct resource or data type: Huawei source inspection, activity listing, activity summary, GPS track, samples, health context, weather environment, report evidence, and report contract. Even the health context and activity environment tools are clearly separated by source and intent.
Most tools follow a clear get_<object> pattern, such as get_activity_summary, get_activity_track, and get_report_contract. The deviations are minor: list_activities uses list instead of get, and inspect_huawei_export uses inspect, but all are still recognizable, verb-first names.
Nine tools is a well-scoped surface for an activity and report analysis server. Each tool represents a meaningful step in the workflow—from inspecting source files, listing and retrieving activity data, adding health/environment context, and producing report evidence and contract rules.
The tool set forms a complete read-only pipeline for activity reporting: find source files, list activities, fetch summary, track, samples, health context, environmental context, and then produce evidence and contract for the final agent report. There are no obvious dead ends or missing operations within this server's reporting-focused scope.
Maintenance
Related MCP Connectors
PDF, photo, email, and file comparison evidence checks with plain-language reports.
- SomviaOAuthapp.somvia
Apple Health training load, recovery, HRV and workout detail for Claude, ChatGPT and any MCP client.
Read wearables and lab health data — sleep, activity, workouts, timeseries, lab tests and orders.
Authenticated public evidence search, verification, research jobs, exports, and webhooks.
Related MCP Servers
- AlicenseAqualityAmaintenanceLocal-first MCP server that reads Apple Health export files (export.xml/zip) and exposes activity, sleep, HRV, and workout data to AI agents, keeping all data on your machine.18136 npm2MIT
- FlicenseAqualityBmaintenanceEnables AI assistants to read and analyze Google Fit exported data (activities, daily metrics, workouts, sleep) from Google Takeout, providing tools for queries, resources, and coaching prompts.6-
- AlicenseNot gradedqualityBmaintenanceEnables AI clients to query and analyze Huawei Health data, including training records, sleep, heart rate, and athletic performance, through 14 MCP tools without third-party servers.3MIT
- FlicenseAqualityCmaintenanceEnables local analysis of unstructured documents (PDF, DOCX, PPTX, SVG, PNG) by extracting text and structure with citation anchors, and verifies summaries against source material before a human approves saving a report.9-