mcpField
H
Hevy MCP Server

Hevy MCP Server

本地服务
github.com/chrisdoc文件与存储5285 天前更新

关于 Hevy MCP Server

这是一个开源 MCP 服务,通过 Hevy API 让 AI 助手读取、分析、创建和更新训练数据。它提供托管 Streamable HTTP 和本地 stdio 两种连接方式,涵盖训练、计划、动作及身体测量数据。

主要功能

  1. 01读取并分析训练记录
  2. 02创建和更新训练数据
  3. 03管理计划和文件夹
  4. 04搜索动作模板
  5. 05通过托管或本地服务连接

适用场景

  1. 01汇总每周训练情况
  2. 02查找计划及其动作
  3. 03根据已保存计划创建训练
  4. 04对比身体测量与训练规律

MCP 相关

向 MCP 客户端提供 23 个用于操作 Hevy 数据的工具和引导式提示词。客户端可连接托管的 Streamable HTTP 端点,也可通过 stdio 在本地运行服务。

配置

本地服务的配置在各客户端中通用,复制后粘贴到客户端的 MCP 配置文件即可。

mcp.json · 通用配置
{
"mcpServers": {
"hevy": {
"command": "npx",
"args": [
"-y",
"hevy-mcp"
],
"env": {
"HEVY_API_KEY": "<HEVY_API_KEY>"
}
}
}
}
启动命令npx -y hevy-mcp
需要配置的环境变量
HEVY_API_KEY密钥API key for authenticating with the Hevy API

本地服务需要在你的电脑上安装运行环境(如 Node.js 18+)。各客户端的配置文件位置不同,请参考客户端文档。

安装包
npmhevy-mcp3.2.1

工具

15

收录的工具列表 · 更新于 3 周前

参数类型必填说明
pagenumber否
pageSizeinteger否

详细介绍

Hevy MCP 服务

通过 Claude、Cursor、Codex 和其他 MCP 客户端访问你的 Hevy 训练数据。

npm version npm downloads Build and Test Codecov GitHub stars Hosted on Cloudflare License: MIT MCP Toplist

连接到托管的 MCP · 使用 Hevy CLI · 观看 18 秒演示 · 探索全部 23 个工具 · 文档

Hevy CLI

更喜欢使用终端?独立的 @chrisdoc/hevy-cli 软件包可直接从 Hevy API 读取训练记录、训练计划、练习和身体测量数据, 并可在明确确认后创建或更新这些资源。不支持删除。

npm install -g @chrisdoc/hevy-cli
export HEVY_API_KEY=your-hevy-api-key

hevy workouts list --page-size 10
hevy summary --weeks 4

在任意命令后添加 --json,即可用于脚本和管道。该 CLI 是独立的 Hevy API 客户端,并非 MCP 封装。完整命令参考、分页行为和退出代码请参阅 packages/cli/README.md。

hevy-mcp 是面向 Hevy 健身和训练追踪 应用的开源 Model Context Protocol (MCP) 服务。它通过经过身份验证的 Hevy API 请求,让 AI 助手读取、分析、创建和更新你的 Hevy 训练记录、 训练计划、练习模板和身体测量数据。

Node stdio/HTTP 适配器和 Cloudflare Worker 共用相同的 MCP 工具。 请参阅部署模式以选择传输方式,或查看 架构,了解工作区所有权、运行时范围 和支持的嵌入 API。

需要 Hevy API 密钥,可通过 Hevy PRO 获取。

效果展示

Hevy MCP 演示:AI 助手分析六周的 Hevy 训练数据

点击预览即可播放完整画质的 18 秒演示。

在演示中,助手会检索真实的 Hevy 数据,并依据用户的训练历史, 回答一个包含多个部分的训练问题。

可以用它做什么?

  • 分析训练进度: 一次工具调用即可汇总 1-12 周的训练和身体测量数据。
  • 用自然语言提问: 查找近期训练、训练频率最高的动作、训练规律中的空档、训练计划详情或动作历史。
  • 规划并记录训练: 创建或更新训练、训练计划、训练计划文件夹、自定义动作和身体测量数据。
  • 搜索时避免冗长回复: 通过精简、适合 AI 处理的结果发现训练计划和动作模板。
  • 从你偏好的 MCP 客户端连接: 使用托管的 Streamable HTTP 端点,或通过 Codex、Claude Desktop、Cursor 和其他客户端在本地运行。
  • 无需安装即可开始: 直接连接到生产环境中的 Cloudflare Worker,无需 Node.js、下载安装包或 Docker 容器。
  • 需要时保留本地控制: 使用 npx、bunx 或官方 Docker 镜像运行同一服务。

试着这样提问:

分析我过去六周的训练情况。按周显示训练次数、我训练频率最高的动作,以及任何明显的空档或不一致之处,并引用你使用的训练记录作为依据。

找出我的推日训练计划,并列出其中的动作和组数。

将我近期的身体测量数据与训练规律进行比较。

根据我保存的训练计划创建一条已完成的训练记录。在将记录写入 Hevy 之前,询问我是否有任何缺失的组结果。

Claude 集成

此代码库包含一个 Claude 插件,可连接到启用了 OAuth 的托管 MCP 端点,无需嵌入用户的 Hevy API 密钥。

Claude.ai 和 Claude Desktop

在 Claude 中,打开 Settings → Connectors → Add custom connector,然后输入:

https://mcp.hevy-mcp.dev/mcp

完成 OAuth 流程,并在提示时输入 Hevy API 密钥。Claude Desktop 和其他支持远程 MCP 连接器的客户端也可以使用同一远程端点。

Claude Code 和 Cowork

Claude 插件由 .claude-plugin/plugin.json 和 .mcp.json 定义。可在此公开代码库中安装,也可在发布后从 Claude Plugin Directory 安装。它会添加托管的 Hevy MCP 连接器以及 Hevy 训练技能。

托管服务如何处理数据,请参阅隐私政策。

快速开始

1. 获取 Hevy API 密钥

在 Hevy 的 API 设置中创建 API 密钥,然后将其妥善保管。目前,API 访问需要 Hevy PRO 订阅。

2. 将 hevy-mcp 连接到你的客户端

托管的 Cloudflare 端点是最快的入门方式。它在远程运行,因此你的客户端无需 Node.js、Bun、Docker 或本地服务进程。

连接到托管端点

生产环境 URL:

https://mcp.hevy-mcp.dev/mcp

该端点使用 Streamable HTTP。每次请求都要将 Hevy API 密钥作为 bearer token 发送。

Codex

Codex CLI、Codex 桌面应用和 IDE 扩展共用同一 MCP 配置。确保启动 Codex 的环境中有 Hevy API 密钥,然后添加托管服务:

export HEVY_API_KEY=your-hevy-api-key
codex mcp add hevy \
  --url https://mcp.hevy-mcp.dev/mcp \
  --bearer-token-env-var HEVY_API_KEY

Codex 在 MCP 配置中存储的是环境变量名称,而不是密钥本身。重启 Codex 或开始新会话,然后运行 codex mcp list,确认服务已配置。

其他 Streamable HTTP 客户端

接受远程 MCP URL 和固定标头的客户端通常使用以下格式:

{
	"mcpServers": {
		"hevy": {
			"url": "https://mcp.hevy-mcp.dev/mcp",
			"headers": {
				"Authorization": "Bearer your-hevy-api-key"
			}
		}
	}
}

具体配置键因客户端而异。托管服务要求客户端支持 Streamable HTTP 和固定的 Authorization 标头。

重要

请将 bearer 值视同密码。Worker 会针对每个请求使用 Hevy 验证该值,不会存储该值,并且仅会将其作为必需的 api-key 标头转发给 Hevy。

改为在本地运行

如果你更倾向于在自己的计算机上运行服务,或客户端无法为远程 MCP 请求附加固定的授权标头,请选择本地 stdio。

Codex
codex mcp add hevy \
  --env HEVY_API_KEY=your-hevy-api-key \
  -- npx -y hevy-mcp
Claude Desktop 或 Cursor

将此 mcpServers 条目添加到客户端配置中:

{
	"mcpServers": {
		"hevy": {
			"command": "npx",
			"args": ["-y", "hevy-mcp"],
			"env": {
				"HEVY_API_KEY": "your-hevy-api-key"
			}
		}
	}
}
Google Antigravity

有两种方式可以为 Google Antigravity(agy)配置 Hevy MCP 服务:

选项 A:自动安装插件(推荐)

此方式使用内置插件系统:

插件会读取仓库根目录中的 mcp_config.json,以启动本地 stdio 服务。该配置有意不包含 API 密钥;服务会从主机环境中继承 HEVY_API_KEY,如下所述。这与下文所述的手动全局用户配置,以及配置托管 HTTP/OAuth 的仓库 .mcp.json 相互独立。

  1. 安装插件:

    agy plugin install https://github.com/chrisdoc/hevy-mcp
    
  2. 在主机 Shell 环境中提供 HEVY_API_KEY,以便 CLI 子进程继承该变量:

    • 持久设置: 在系统/Shell 配置中保存环境变量 HEVY_API_KEY:
      • macOS / Linux: 将其添加到 Shell 配置文件中(例如 ~/.zshrc 或 ~/.bashrc):
        export HEVY_API_KEY="your-actual-api-key"
        
      • Windows: 将其添加到用户或系统环境变量中。在 PowerShell 中,可以运行:
        [Environment]::SetEnvironmentVariable("HEVY_API_KEY", "your-actual-api-key", "User")
        
    • 临时设置(仅当前会话): 如果不想持久保存密钥,请在运行 agy 之前,在当前终端会话中导出该变量:
      export HEVY_API_KEY="your-actual-api-key"
      
选项 B:手动配置(不使用插件)

如果你更倾向于通过全局配置文件进行静态配置:

  1. 打开全局 MCP 配置文件:

    • 位置: ~/.gemini/config/mcp_config.json
  2. 在 mcpServers 键下添加 hevy 配置块。请确保将此条目与已配置的其他服务合并,而不是替换整个文件内容:

    {
    	"mcpServers": {
    		"hevy": {
    			"command": "npx",
    			"args": ["-y", "hevy-mcp"],
    			"env": {
    				"HEVY_API_KEY": "your-actual-api-key"
    			}
    		}
    	}
    }
    

常见的本地配置位置:

  • macOS 上的 Claude Desktop: ~/Library/Application Support/Claude/claude_desktop_config.json
  • Windows 上的 Claude Desktop: %APPDATA%\Claude\claude_desktop_config.json
  • Cursor: ~/.cursor/mcp.json

保存文件后,重启客户端或重新连接。

任意 stdio MCP 客户端

配置客户端,使其在子进程环境中设置 HEVY_API_KEY 并启动以下命令:

npx -y hevy-mcp

npx 需要 Node.js 20 或更高版本。保存配置后,重启客户端或重新连接。

改用 bunx

需要 Bun:

{
	"mcpServers": {
		"hevy": {
			"command": "bunx",
			"args": ["hevy-mcp@latest"],
			"env": {
				"HEVY_API_KEY": "your-hevy-api-key"
			}
		}
	}
}
改用 Docker

官方镜像支持 linux/amd64 和 linux/arm64。由于容器运行的是 stdio MCP 服务,请使用 -i 保持标准输入处于打开状态:

export HEVY_API_KEY=your-hevy-api-key
docker run -i --rm -e HEVY_API_KEY ghcr.io/chrisdoc/hevy-mcp:latest

对于 MCP 客户端,请将密钥存储在受保护的环境文件中,并配置客户端启动 Docker:

{
	"mcpServers": {
		"hevy": {
			"command": "docker",
			"args": [
				"run",
				"-i",
				"--rm",
				"--env-file",
				"/absolute/path/to/hevy-mcp.env",
				"ghcr.io/chrisdoc/hevy-mcp:latest"
			]
		}
	}
}

如果需要可复现的升级,请固定使用确切的镜像标签,例如 ghcr.io/chrisdoc/hevy-mcp:X.Y.Z。

你也可以通过 add-mcp 将 npm 服务添加到受支持的客户端:

npx add-mcp hevy-mcp --env "HEVY_API_KEY=your-hevy-api-key"
3. 提出你的第一个问题

重启或重新连接 MCP 客户端后,试试以下问题:

  • “总结一下过去四周的训练情况。”
  • “我在 Hevy 中保存了哪些训练计划?”
  • “显示我最近的三次训练。”
  • “查找包含深蹲的动作模板。”
  • “连接的是哪个 Hevy 账户?”

如果客户端支持工具确认,你的助手应在调用会修改数据的工具前请求批准。

工作原理

Hosted:  Your AI assistant  →  Streamable HTTP  →  Cloudflare Worker  →  Hevy API
Local:   Your AI assistant  →  MCP over stdio   →  local hevy-mcp     →  Hevy API

托管端点会为每个请求创建一个全新的 MCP 服务和 Hevy 客户端。 直接使用 bearer 身份验证时,会使用提供的 Hevy 密钥,并将成功验证的结果缓存 15 分钟,而不会持久化原始密钥。OAuth 则会将密钥加密后存储在授权记录中。这两种方式 都不会创建共享的 MCP 用户会话。本地服务遵循相同的工具契约,但通过进程环境 接收 Hevy 密钥。

无论使用哪种模式,读取工具都会检索数据;只有在助手调用变更工具时,这些工具才会创建或替换数据。

引导式提示词

这些由服务提供的 MCP 提示词可协调常见的多步骤工作流:

提示词参数工作流
analyze-workout-progress可选的 weeks,范围为 1-12;默认值为 4调用 get-training-summary,然后根据返回的证据分析锻炼活动和身体测量趋势。
create-workout-from-routine必填的 routine_id 和 UTC start_time加载训练计划,收集实际完成组数的数据和结束时间,然后创建锻炼记录,不会编造结果。

工具

hevy-mcp 注册了 23 个工具。只读工具可安全用于探索;创建和更新工具带有 MCP 变更注释,兼容的客户端可以请求确认。

类别工具描述
训练分析get-training-summary在一次调用中汇总 1-12 周的锻炼活动和身体测量趋势。
锻炼get-workouts按 Hevy API 顺序(而非开始时间)列出锻炼,并提供动作和计时详情。
锻炼get-workout按 ID 获取一次锻炼的完整详情。

| 锻炼 | get-workout-events | 列出自某个时间戳以来的锻炼更新和删除事件。 | | 锻炼 | create-workout | 在 Hevy 中创建一次已完成的锻炼。 | | 锻炼 | update-workout | 按 ID 更新锻炼元数据;必须提供 is_private,其他未提供的字段和所有动作保持不变。 | | 锻炼 | replace-workout-exercises | 替换所有动作和组;必须提供并更新 is_private,其他锻炼元数据保持不变。 | | 训练计划 | search-routines | 搜索训练计划标题,并返回精简元数据以供查找。 | | 训练计划 | get-routines | 列出自定义和默认锻炼训练计划。 | | 训练计划 | get-routine | 按 ID 获取一个训练计划及其动作配置。 | | 训练计划 | create-routine | 创建可重复使用的锻炼训练计划。 | | 训练计划 | update-routine | 替换现有训练计划的内容。 |

| 训练计划文件夹 | get-routine-folder | 按 ID 获取一个训练计划文件夹的元数据。 | | 训练计划文件夹 | create-routine-folder | 创建一个训练计划文件夹。 |

| 动作模板 | get-exercise-template | 按 ID 获取一个动作模板的完整元数据。 | | 动作模板 | search-exercise-templates | 按标题子字符串搜索完整的动作目录。 | | 动作模板 | create-exercise-template | 创建自定义动作模板。 | | 动作历史 | get-exercise-history | 获取一个动作模板过去完成的组。 | | 身体测量 | get-body-measurements | 列出带日期的身体测量数据。 | | 身体测量 | get-body-measurement | 获取某个日期的身体测量记录。 | | 身体测量 | create-body-measurement | 创建带日期的身体测量记录。 | | 身体测量 | update-body-measurement | 更新某个已有日期的身体测量数据。 | | 诊断 | feedback | 以简洁且保护隐私的方式报告问题或异常行为。 |

create-routine 和 update-routine 要求顶层提供 routine 封装,其中包含非空的 exercises 数组;每个动作必须至少包含一组,并且所有层级的字段都使用 snake_case:

{
	"routine": {
		"title": "Full Body A",
		"folder_id": 123,
		"notes": "First four exercises are the minimum viable workout",
		"exercises": [
			{
				"exercise_template_id": "30E293E3",
				"superset_id": null,
				"rest_seconds": 120,
				"notes": "Controlled active ROM",
				"sets": [
					{
						"type": "normal",
						"rep_range": {
							"start": 6,
							"end": 10
						}
					}
				]
			}
		]
	}
}

Hevy API 目前未提供用于删除锻炼、训练计划、训练计划文件夹、动作模板或身体测量数据的端点,因此没有对应的删除工具。

资源
名称URI描述
user-profilehevy://user已通过身份验证的 Hevy 用户资料。
workout-counthevy://workout-count账户中的锻炼总数。
exercise-templateshevy://exercise-templates格式完整的动作模板目录。
routine-foldershevy://routine-folders格式完整的 Hevy 训练计划文件夹列表。

托管的 Cloudflare 端点

生产环境中的 MCP 服务已上线:

https://mcp.hevy-mcp.dev/mcp

这是使用 hevy-mcp 最快捷的方式:无需安装任何内容,也无需在本地持续运行;它提供的 23 个工具与 npm 包和 Docker 镜像相同。

Cloudflare Worker 使用无状态的 Streamable HTTP,通过 POST /mcp 提供服务。 客户端必须将 Hevy API 密钥作为固定授权标头发送:

{
	"mcpServers": {
		"hevy": {
			"url": "https://mcp.hevy-mcp.dev/mcp",
			"headers": {
				"Authorization": "Bearer your-hevy-api-key"
			}
		}
	}
}

在此配置中,Bearer 值是你的 Hevy API 密钥,而不是 OAuth 令牌。Worker 会使用哈希密钥缓存成功的验证结果 15 分钟,不会在此直接路径上持久化原始密钥,并且只会将其作为 Hevy 所需的 api-key 标头转发到上游。

面向 Claude.ai 和其他远程 MCP 客户端的 OAuth

托管的生产 Worker 已配置 OAUTH_KV 命名空间绑定,因此可为无法发送固定标头的客户端(例如 Claude.ai 自定义连接器)提供完整的 OAuth 2.1 层。可自托管的 Worker 可按照 CONTRIBUTING.md 中的 OAUTH_KV 设置启用此功能:

  • /.well-known/ 下的 RFC 8414 / RFC 9728 发现元数据
  • 客户端 ID 元数据文档(CIMD);动态客户端注册(/register)作为备用方案,并支持 PKCE 令牌交换(/token)
  • /authorize 页面,可在其中粘贴一次 Hevy API 密钥;该密钥会通过 Hevy 验证,并加密存储在 OAuth 授权中

将以 /mcp 结尾的 Worker URL 添加为 Claude.ai 自定义连接器,然后在浏览器中完成授权流程。直接发送 Authorization: Bearer <hevy-api-key> 的请求仍可正常使用,不受任何影响——OAuth 层只是附加功能。撤销或轮换 Hevy 密钥会阻止后续使用该密钥访问 Hevy API;但这本身不会删除已存储的授权,也不会立即清除缓存的验证结果。

OAuth 访问令牌有效期为 7 天,刷新令牌有效期为 30 天。这样既能减少频繁按小时刷新的 KV 写入次数,也能为受支持的客户端保留自动刷新功能。

该端点不提供旧版 SSE 或 GET 事件流。如果未启用 OAuth 层,则需要 OAuth 发现、动态注册、CIMD 或令牌刷新的客户端都不兼容,除非它们能够发送上述固定自定义标头。

自托管 Worker

克隆干净的代码库后,可以通过 pnpm --dir packages/worker exec cf deploy 部署可移植的 TypeScript Cloudflare 配置,并获取一个 workers.dev URL。OAuth 需要你自己的 OAUTH_KV 命名空间;自定义域名、路由和可观测性目标则是可选的账户设置。有关设置以及自托管环境与仅供维护者使用的命名环境之间的区别,请参阅 CONTRIBUTING.md。

请参阅 CONTRIBUTING.md,了解如何部署 Cloudflare Worker 以实现可自托管的 Streamable HTTP。

高级配置

设置默认值作用范围说明
HEVY_API_KEY无;必需本地 stdio 或 HTTP来自 Hevy 应用的 Hevy API 密钥。切勿将其放入 URL。
HEVY_MCP_API_TIMEOUT60000 毫秒本地 stdioHevy API 超时时间,单位为毫秒,必须为正数。无效值将回退为 60 秒。
HEVY_MCP_DEBUG已禁用本地 Node仅当值为 1 时,才会在 stderr 输出受隐私限制的诊断信息。stdout 仍专用于 MCP JSON-RPC。
HEVY_MCP_HTTP_BEARER_TOKEN无非环回 HTTP--host 不是环回地址时必需;请使用单独的令牌,切勿使用 Hevy API 密钥。
HEVY_MCP_HTTP_MAX_SESSIONS100本地 HTTP已建立会话的最大数量,包括当前正在初始化的会话;超出限制的请求会收到 429。
HEVY_MCP_HTTP_MAX_INITIALIZING10本地 HTTP并发初始化会话的最大数量;超出限制的请求会收到 503,且不会排队。
HEVY_MCP_HTTP_IDLE_TIMEOUT_MS1800000 毫秒本地 HTTP空闲会话会在 30 分钟后被清除;每次会话请求都会重置计时器。
HEVY_MCP_HTTP_BODY_TIMEOUT_MS30000 毫秒本地 HTTP停滞的请求正文会收到 408;该值上限为五分钟。
HEVY_MCP_TELEMETRY构建版本:开启;源码:关闭本地 Node设置为 0 可禁用遥测;源码运行时设置为 1 可选择启用。导入不会产生副作用。
HEVY_MCP_TELEMETRY_DIAGNOSTICS已启用本地 Node仅当值为 0 时,才会保留结构化遥测,同时抑制异常消息和堆栈信息。
XDG_CACHE_HOME~/.cache本地 stdio更改 npm 更新检查缓存的根目录,缓存文件位于 hevy-mcp/update-check.json。
SENTRY_DSN打包版本的 Sentry SaaS 项目 DSN可选的本地 Node 遥测Sentry 项目 DSN 覆盖值。空值会禁用 Sentry 导出。Worker 不会导入 Node 遥测。
SENTRY_RELEASEhevy-mcp@<installed-version>可选的本地 Node 遥测覆盖附加到本地 Sentry 错误事件的版本标签。
SENTRY_ENVIRONMENT构建版本:production;源码:development可选的本地 Node 遥测覆盖已启用的 Sentry 错误事件的环境标签。
-h、--help不适用本地 stdio CLI打印受支持的选项并退出。
-v、--version不适用本地 stdio CLI打印已安装的版本并退出。
本地 Node 可执行文件默认使用 stdio。要启用本地 Streamable
HTTP,请使用:
HEVY_API_KEY=your-hevy-api-key npx hevy-mcp --transport http --host 127.0.0.1 --port 3000

本地 MCP 端点为 http://127.0.0.1:3000/mcp;绑定到非环回地址需要单独设置环境变量 HEVY_MCP_HTTP_BEARER_TOKEN。Docker 部署必须显式发布端口:

docker run --rm -p 3000:3000 -e HEVY_API_KEY -e HEVY_MCP_HTTP_BEARER_TOKEN \\
  ghcr.io/chrisdoc/hevy-mcp:latest --transport http --host 0.0.0.0 --port 3000

此 Node HTTP 模式不同于上文所述的无状态 Cloudflare Worker HTTP 端点:Node 服务负责管理有状态的客户端会话,而 Worker 专为托管部署设计,且不会导入 Node 代码。

缓存行为

search-exercise-templates 和 hevy://exercise-templates 共用 服务级的内存目录缓存:

  • 条目保留五分钟,缓存最多存放一个目录。
  • 如果可能,并发的目录请求会共用正在进行的获取操作。
  • search-exercise-templates 接受 refresh: true 以使缓存失效。
  • 每个托管 Worker 请求都会获得新的目录缓存,以防止跨密钥共享。
  • 每个本地 HTTP 会话都有自己的 MCP 服务和目录缓存;各会话之间不共享缓存。
本地 Node 遥测与隐私

已发布的 Node 构建默认启用项目遥测。未构建的源码运行(例如开发和探测脚本)默认禁用遥测,除非显式设置 HEVY_MCP_TELEMETRY=1。这仅适用于本地 Node 行为;Cloudflare Worker 不会导入 Node 遥测。启动 Node 前设置 HEVY_MCP_TELEMETRY=0,即可在任一模式下禁用所有项目遥测。在已发布的构建中,除字面值 0 以外的任何值都会保留启用状态的默认设置。作用域化的 Node 生命周期 Layer 负责启用遥测;导入软件包本身不会产生副作用。启用遥测的源码运行使用 Sentry 环境 development;已发布的构建使用 production。设置 SENTRY_ENVIRONMENT 可覆盖此标签,例如设为 qa 或 staging。主开关优先于 SENTRY_DSN 和软件包内置或运行时的 OTEL_COLLECTOR_TOKEN 凭据,因此禁用时不会创建遥测导出器或定期指标读取器,也不会发出遥测网络请求。SENTRY_DSN 仅适用于 Sentry;启用遥测时,空值只会禁用 Sentry 导出。

启用后,可采取行动的错误会发送到由 SENTRY_DSN 配置的 Sentry 项目;Sentry 性能追踪处于禁用状态。导出前会限制异常消息和堆栈的长度,并对其进行脱敏。设置 HEVY_MCP_TELEMETRY_DIAGNOSTICS=0 可保留结构化追踪和指标,同时抑制这些详细信息。追踪和指标仍会发送到收集器: https://otel.chrisdoc.dev/v1/traces 和 https://otel.chrisdoc.dev/v1/metrics。本项目使用自己的 OpenTelemetry Collector;下游目标在该基础设施中配置。指标每 30 秒导出一次。有关 Cloudflare OTLP 导出和域名追踪,请参阅可观测性文档。

原始 API 密钥绝不会被导出。普通工具遥测可能包含一个根据密钥派生的短期、确定性 HMAC 假名,用于关联;feedback 使用单独且不受监测的路径。可采取行动的错误可能附带每次故障的诊断 ID 和 OTel 追踪 ID。有关遥测字段的限制和隐私约定,请参阅遥测数据字典。

异常消息和堆栈被视为诊断详细信息:其长度会受到限制,凭据、URL 和本地 home 路径会被脱敏;设置 HEVY_MCP_TELEMETRY_DIAGNOSTICS=0 时则会将其完全移除。提示词、工具参数、工具结果、请求正文、API 密钥、原始标识符/查询、确切日期、训练/计划/文件夹/模板/身体测量内容、姓名/标题/描述/备注、测量值、任意客户端元数据,以及未经规范化的端点路径,均禁止收集。

安全与数据变更

  • 请勿将 HEVY_API_KEY 存入版本控制、URL、日志或屏幕截图。
  • 本地客户端通过子进程环境提供密钥。
  • 直连托管客户端仅在 Authorization: Bearer 请求头中发送 Hevy 密钥;验证成功后会缓存验证结果,但不会持久化原始密钥。 OAuth 授权会加密存储密钥。两种方式都只会通过 api-key 请求头将密钥发送给 Hevy。
  • 浏览器 MCP 请求必须来自同源,或与精确匹配的允许列表来源一致。默认允许列表包含 Claude.ai、ChatGPT、VS Code for the Web 和 github.dev;可自托管部署可通过 MCP_ALLOWED_ORIGINS 覆盖此设置。OAuth 授权表单的例外情况请参阅部署模式。
  • 本地开发时,可将 .dev.vars.example 复制为 .dev.vars,以便为 MCP Inspector 禁用来源验证。PR 预览 Workers 使用相同的仅限开发环境设置,因为其浏览器来源是动态的。切勿在生产 Worker 上设置 MCP_DISABLE_ORIGIN_CHECK=true。
  • 重试创建操作可能会产生重复项。常规更新会替换内容;训练元数据更新会保留未提供的字段和动作,而 replace-workout-exercises 会替换所有动作和组数。 请检查工具输入,并使用客户端确认。

故障排除

  • 服务器未显示: 更改配置后,请重启 MCP 客户端或重新连接。
  • npx 失败: 确认已安装 Node.js 20 或更高版本,然后在终端中运行 npx -y hevy-mcp --version。
  • Codex 无法看到服务器: 运行 codex mcp list,确认存在 hevy 条目后,再启动新的 Codex 会话。
  • Hevy API 返回 401: 密钥无效、已过期、已撤销或配置错误。请在 Hevy 的 API 设置中验证或创建有效密钥,然后重启客户端。
  • 托管身份验证失败: 确认密钥属于 Hevy PRO 账户,并以 Authorization: Bearer <HEVY_API_KEY> 的形式发送。
  • 本地身份验证失败: 确认密钥有效,并通过 HEVY_API_KEY 提供给 MCP 子进程。
  • 需要诊断信息: 设置 HEVY_MCP_DEBUG=1。诊断输出会写入 stderr,不会干扰 stdout 上的 MCP 消息。

如果您发现 Bug 或有功能请求,请提交 Issue。

贡献

欢迎贡献。开发环境设置、测试流程、生成客户端工作流、Cloudflare Worker 部署和拉取请求规则均记录在 CONTRIBUTING.md 中。

请使用 mise 获取固定版本的 Node.js 和 pnpm,然后运行确定性单元测试流程。该流程不需要有效的 Hevy API 密钥:

MISE_AUTO_INSTALL=false mise install
MISE_AUTO_INSTALL=false mise exec -- pnpm install
MISE_AUTO_INSTALL=false mise exec -- pnpm run test:unit

许可证与致谢

评论

支持 Markdown

第一次接触 MCP?

从协议是什么,到在客户端里装上第一个服务,这几条回答覆盖了大多数入门问题。

一个开放协议,规定了 AI 应用如何以统一方式连接外部工具与数据源。客户端负责与模型对话,MCP 服务负责提供工具、资源和提示模板,两者通过标准消息通信,同一个服务可以被不同客户端复用。