AIm 是一个健身训练记录工具,由 MCP 服务器和移动端 Web 应用(PWA)组成。用户可以在 Claude 或 ChatGPT 中用自然语言描述一次训练,AI 助手通过 MCP 将其记录,应用则展示训练计划、历史记录、个人纪录、估算 1RM 以及各肌群负荷。服务器会把用户的目标、伤病和已记录的重量作为数据交给助手,让助手基于实际训练历史来规划,而不是给出泛泛的建议。
主要能力
- 记录与编辑:log_session、update_session、update_set、delete_session、import_document(可粘贴其他追踪器的导出内容,或笔记本页面的照片)。
- 读取与统计:get_sessions、get_session、get_stats(训练量、进展、通过 Epley 公式估算的 1RM)、get_program、get_goals、get_body_metrics。
- 动作库:search_exercise_pool(带插图的精选全局动作池)、list_exercises、upsert_exercise。
- 教练上下文:get_coaching_context 返回纯数据,包括用户目标、经验、器械、伤病(及其涉及的动模式)、近期工作重量、与目标匹配的规划范围以及针对当前任务(下一次训练、新计划、每周回顾)的 intake 状态,使助手基于数据而非空白来规划。助手如何使用这些数据写在服务器的 MCP 说明中。review_program_draft、update_coach_profile、upsert_goal、log_coach_event、log_body_metric 用于保持该上下文最新。
使用方式 MCP 服务器通过无状态可流式 HTTP(FastMCP)暴露 20 个工具。接入方式有两种,均在同一主机上并解析到同一个 user_id:
- OAuth:连接器当前使用的方式。服务器是 OAuth 2.1 资源服务器,未认证调用会返回 401 并携带 RFC 9728 受保护资源元数据,客户端据此发现授权服务器、动态注册自身,用户在本应用提供的同意页面上批准。Supabase Auth 作为授权服务器,因此这里不存储授权码或访问令牌;访问令牌的 sub 通过 users.supabase_user_id 映射到账户。无需手动粘贴任何密钥。
- URL token:早于 OAuth 的方式,仍然有效,因此已发送到用户收件箱的链接在 OAuth 上线后仍可继续使用。令牌解析中间件将路径首段映射到用户,并按 user_id 限定每次查询;OAuth 路径则从已验证令牌设置相同的上下文变量。两种入口,同一套作用域规则。
适用场景 适合希望用 AI 助手记录和规划力量训练的用户,尤其是使用 Claude 或 ChatGPT 并希望助手基于自身训练历史、目标与伤病来制定计划的人。也适合需要查看训练量、进展、估算 1RM 和肌群负荷的健身者。
限制与说明
- 项目是托管服务的源码,而非开箱即用的自托管套件:需要自备 Supabase 项目(迁移位于 backend/supabase/migrations/)、Vercel 项目以及 .env.example 中列出的环境变量。分析、邮件和备份集成可选,没有密钥时保持休眠。
- api/index.py 和 requirements.txt 不能移动:Vercel 的零配置 Python 构建器只自动检测根级 api/ 下的函数,并且只安装与之并列的根级 requirements.txt。backend/ 中的其他内容(pyproject.toml、uv.lock、tests、scripts、supabase/)被 .vercelignore 从 Vercel 构建中隐藏,因此 Vercel 将仓库视为静态 SPA 加一个 Python 函数。
- 部分代码注释引用了未发布的内部规划文档路径(如 docs/COACHING_PLAN.md、docs/TEST_CASES.md、docs/DEPLOYMENT.md),这些路径无法解析,但代码不依赖它们。
- 动作插图是 CC BY-SA 第三方作品,各自在 web/ATTRIBUTIONS.md 中署名,其许可证独立于本仓库的许可证。
- 技术栈:后端为 Python 3.12、FastMCP(无状态 HTTP)、psycopg3、Supabase Postgres(事务池);前端为 Vite、React、Tailwind v4、shadcn/ui、recharts、React Query、vite-plugin-pwa。托管为单个 Vercel 项目,vercel.json 将 mcp、api 和 cron 路由到函数,其余路由到 SPA。
- 许可证:MIT,见 LICENSE。
- 价格、具体收费模式等未在资料中提供。