关于 AIm Workout Journal
AIm Workout Journal 将 MCP 服务与移动网页应用结合,面向使用 AI 助手记录力量训练的人群。它可用自然语言记录训练,并提供目标、伤病和重量等个人训练背景,支持基于数据的计划制定。
主要功能
- 01记录和更新训练课程
- 02读取训练历史与统计数据
- 03计算训练量、进度和估算 1RM
- 04管理计划、目标与身体指标
- 05根据用户数据提供教练背景
- 06导入其他追踪器导出内容或笔记照片
适用场景
- 01在聊天中描述并记录一次训练
- 02查看训练历史和进展
- 03依据目标、伤病和训练重量制定计划
- 04导入其他追踪器或笔记本中的记录
MCP 相关
通过无状态流式 HTTP 提供 20 个训练记录、历史、目录和教练背景工具。OAuth 2.1 连接器及已有的 URL 令牌链接用于验证用户身份并限定数据范围。
配置
远程服务无需本地安装。选择你使用的客户端,复制配置或使用一键安装。
https://aim-journal.com/mcpclaude mcp add --transport http com-aim-journal-aim https://aim-journal.com/mcp{"mcpServers":{"com-aim-journal-aim":{"type":"http","url":"https://aim-journal.com/mcp"}}}在 Cursor 中打开{"servers":{"com-aim-journal-aim":{"type":"http","url":"https://aim-journal.com/mcp"}}}在 VS Code 中打开{"mcpServers":{"com-aim-journal-aim":{"type":"http","url":"https://aim-journal.com/mcp"}}}{"mcpServers":{"com-aim-journal-aim":{"serverUrl":"https://aim-journal.com/mcp"}}}命令在终端中运行;JSON 粘贴到对应客户端的 MCP 配置后重启。需要授权的服务会在首次连接时提示登录。
工具
详细介绍
AIm 训练日志
一款由 AI 助手记录的训练追踪器。AIm 是一个 MCP 服务,加上一款移动版 Web 应用(PWA):你可以用自己的话在 Claude 或 ChatGPT 中描述一次训练,助手通过 MCP 记录下来,应用会展示训练计划、历史记录、个人纪录、估算的 1RM 和各肌群负荷。服务会将你的目标、伤病情况和已记录的重量作为数据提供给助手,让它根据你的训练情况制定计划,而不是给出泛泛的建议。
访问 aim-journal.com。免费使用,并且在你已经付费订阅的 AI 服务中运行,无需再订阅另一个服务。指南: 通过 MCP 连接训练追踪器, AI 私人教练, 1RM 计算器。
工作原理
有两种接入方式,使用同一主机,且都会解析为相同的 user_id:
https://<app>/mcp OAuth 2.1 — add as a connector, approve in the browser
https://<app>/{token} mobile web app / installable PWA
https://<app>/{token}/mcp the original connector address, still supported
https://<app>/{token}/api/* read only JSON the UI consumes
OAuth 是连接器目前使用的方式。服务是一个 OAuth 2.1 资源服务器:未经身份验证的调用会收到一个携带 RFC 9728 受保护资源元数据的 401 响应;客户端会从中发现授权服务器,动态注册自身,而用户则在此应用提供的同意页面上批准授权。Supabase Auth 是授权服务器,因此这里不会存储授权码或访问令牌;访问令牌的 sub 会通过 users.supabase_user_id 映射到账户。无需手动粘贴任何秘密信息。
URL 令牌出现得更早,但仍然可用,因此 OAuth 上线后,用户收件箱中已有的链接仍能正常使用。令牌解析中间件会将路径开头的片段映射到用户,并按 user_id 限定每个查询的范围;OAuth 路径则会从经过验证的令牌中设置相同的上下文变量。两种入口,一套范围限定规则。
MCP 服务提供的功能
通过无状态可流式传输的 HTTP(FastMCP)提供 20 个工具:
- 记录:
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是其中重要的工具。它仅返回数据:针对当前任务(下一次训练、新训练计划、每周回顾),提供该用户的目标、经验、器材、伤病情况(以及会对其造成负荷的动作模式)、近期工作重量、符合目标的计划范围和信息收集状态,让助手依据数据制定计划,而非凭空猜测。助手如何使用这些数据,记录在服务的 MCP 指令中。review_program_draft、update_coach_profile、upsert_goal、log_coach_event、log_body_metric用于保持这些上下文信息为最新状态。
仓库结构
api/index.py Vercel entrypoint (must stay at repo root, see below). Imports backend/src.
requirements.txt Vercel's Python build reads this (must also stay at repo root).
backend/ Python package, tests, scripts, DB migrations.
web/ Vite + React SPA (own package.json, own dev server) and the static guide pages.
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。这些是未在此处发布的产品和研究笔记,因此这些路径无法访问。代码并不依赖这些文档;它们只是决策依据的出处,而非依赖项。构建、测试和运行本仓库内容所需的一切都在此 README 中。
技术栈
- 后端(
backend/):Python 3.12、FastMCP(无状态 HTTP)、psycopg3、Supabase Postgres (事务池化器)。MCP 和读取 API 位于backend/src/workout_storage/,由api/index.py提供服务。 - 前端(
web/):Vite、React、Tailwind v4、shadcn/ui、recharts、React Query、 vite-plugin-pwa。数据层位于web/src/app/lib/(令牌到 API,再到适配器和钩子)。web/guides/下的指南页面会在构建时生成为静态 HTML,不会打包。 - 托管:一个 Vercel 项目。
vercel.json将 mcp、api 和 cron 路由到函数,其他所有内容都路由到 SPA。
前端开发
cd web
npm install
echo 'VITE_API_ORIGIN=https://workout-storage.vercel.app' > .env.local # dev against prod API
npm run dev # http://localhost:5173/{token}
npm run test # vitest: pure function + component tests
npx playwright install chromium # one time, before the first test:e2e run
npm run test:e2e # Playwright, against /demo (no backend needed)
后端开发
cd backend
uv sync --extra dev # install deps
cp ../.env.example ../.env # fill DATABASE_URL etc. (kept at repo root, shared by all tooling)
uv run pytest # unit + integration + e2e
uv run ruff check . && uv run mypy .
创建用户(打印可在浏览器中打开并粘贴到助手中的令牌):
cd backend
uv run python scripts/create_user.py --name "Alex"
自行运行
这里包含所需的一切,但这是托管服务的源码,而非开箱即用的自托管套件:你需要提供一个 Supabase 项目(迁移文件位于 backend/supabase/migrations/)、一个 Vercel 项目,以及 .env.example 中列出的环境变量。分析、电子邮件和备份集成均为可选项,没有相应密钥时不会启用。
署名
练习插图为第三方作品,采用 CC BY-SA 许可,每项作品的署名信息见
web/ATTRIBUTIONS.md。无论本仓库采用何种许可,这些作品均保留其各自的许可。
许可证
MIT,详见 LICENSE。练习插图是唯一例外,见上文“署名”。
评论
一个开放协议,规定了 AI 应用如何以统一方式连接外部工具与数据源。客户端负责与模型对话,MCP 服务负责提供工具、资源和提示模板,两者通过标准消息通信,同一个服务可以被不同客户端复用。