铱星MCP服务器
一个MCP(模型上下文协议)服务器,将Claude和ChatGPT等AI代理连接到您的Iridium健身数据。从Claude Code、Claude Desktop、ChatGPT或任何兼容MCP的客户端查询您的锻炼、营养、身体测量和训练量,并在聊天时将食物条目直接记录到Iridium日记中。
先决条件
- Node.js 18+
- 铱应用程序 启用AI数据同步(设置>AI数据同步)
设置
1.在Iridium中启用AI数据同步
- 在iPhone上打开Iridium应用程序
- 首选 设置>AI数据同步
- 切换 启用AI数据同步 上
- 复制您的 同步ID 和 同步密钥
2.安装MCP服务器
npm install -g iridium-mcp-server或者克隆并从源代码构建:
git clone https://github.com/iridium-fitness/iridium-mcp-server.git
cd iridium-mcp-server
npm install
npm run build3.配置克劳德代码
将以下内容添加到您的Claude Code MCP设置中(~/.claude/claude_desktop_config.json):
{
"mcpServers": {
"iridium": {
"command": "npx",
"args": ["iridium-mcp-server"],
"env": {
"IRIDIUM_SYNC_ID": "your-sync-id-here",
"IRIDIUM_SYNC_KEY": "your-sync-key-here"
}
}
}
}时区(可选但推荐)
用户的时区在两个地方使用:
- 阅读工具 喜欢
get_nutrition_log用它来选择一天的界限——否则深夜记录的食物可能会溢出到第二天的结果中。 - 编写工具 喜欢
log_food_entry使用它来锚定相对日期:"yesterday","today T14:00",或"2026-04-29"以用户的本地时区而不是UTC进行解释。如果没有这个,MDT用户登录"yesterday"将提前两天在iOS应用程序中放置食物(因为UTC午夜是当地的前一个晚上)。
默认情况下,服务器会自动检测其运行的机器的时区。 Iridium iOS应用程序不会将用户的时区推送到服务器。 如果MCP服务器运行在用户自己的机器之外的某个地方——云托管代理、VM、具有不同系统TZ的服务器——设置 IRIDIUM_USER_TZ 到用户的IANA时区:
{
"mcpServers": {
"iridium": {
"command": "npx",
"args": ["iridium-mcp-server"],
"env": {
"IRIDIUM_SYNC_ID": "your-sync-id-here",
"IRIDIUM_SYNC_KEY": "your-sync-key-here",
"IRIDIUM_USER_TZ": "America/Denver"
}
}
}
}如果MCP服务器和用户位于同一时区(笔记本电脑上的典型克劳德桌面设置),请将其设置为未设置。
______________________________________________________________________
如果从源代码安装,请使用绝对路径:
{
"mcpServers": {
"iridium": {
"command": "node",
"args": ["/path/to/iridium-mcp-server/build/index.js"],
"env": {
"IRIDIUM_SYNC_ID": "your-sync-id-here",
"IRIDIUM_SYNC_KEY": "your-sync-key-here"
}
}
}
}可用工具
阅读工具
| 工具 | 说明 |
|---|---|
get_workout_history | 通过可选的日期范围和类别过滤获取最近的锻炼历史记录 |
get_workout_detail | 获取特定训练的完整细节(练习、训练集、重量、重复次数、RPE) |
get_nutrition_log | 获取一个日期范围内的每日营养总结(总计+目标+每日笔记)——用于趋势和目标跟踪 |
get_food_entries | 获取一天或90天内的完整个人食物条目(名称+每种营养素)——当问题是实际吃了什么时使用 |
get_nutrition_goals | 获取用户当前的营养意图——目标类型(损失/维持/增加)、每周目标率和每日卡路里/蛋白质/碳水化合物/脂肪目标。在指导或给出建议时使用,这取决于他们是在削减、增加还是维持 |
search_exercises | 按名称或肌肉群搜索运动数据库 |
get_exercise_progress | 获取特定练习的表现历史和1RM趋势 |
get_body_measurements | 获取身体测量历史记录(体重、体脂等) |
get_profile | 获取用户资料,包括培训目标、方法和经验水平 |
get_training_summary | 获取总训练统计数据(总训练量、连胜、模式) |
get_training_volume | 获取每个肌肉群的容量适应记录,包括疲劳和恢复数据 |
get_trainer_analysis | 获取每周AI培训师分析日志,其中包含建议和见解 |
get_weekly_schedule | 获得计划的每周培训时间表 |
get_workout_templates | 使用锻炼配置获取已保存的锻炼模板 |
list_my_foods | 列出用户保存的可重复使用的食物(“我的食物”)——他们自制的奶昔、去酒吧、定制的饭菜。当用户按名称引用食物时,就像食物已经被知道一样,请先调用此命令 |
编写工具
| 工具 | 说明 |
|---|---|
log_food_entry | 将单个食物条目(名称+宏)记录到用户的铱食物日记中 |
update_food_entry | 更新之前通过以下方式记录的食物条目 log_food_entry --调整份量,调整宏观,改变膳食类型等。仅适用于聊天记录条目 |
log_food_entry 笔记
当代理调用此工具时,条目会立即到达Iridium的后端,并在下一次同步时被拉入iOS应用程序——通常在应用程序被前景化的几秒钟内,否则会在下一个前景或5分钟的投票时间。来自MCP的条目在食物日志中标记有“聊天”徽章,因此用户可以一眼看出哪些条目是由外部聊天机器人记录的。
必修的: name, calories, protein, carbs, fat (克)。
重要信息——总计,而非每份: 卡路里和宏量必须是实际消耗量的总和。如果用户吃了2份200卡的食物,请发送 calories: 400,不 calories: 200 和 numberOfServings: 2Iridium按原样存储值,不进行乘法运算。
可选: date, mealType (breakfast | lunch | dinner | snacks | preWorkout | postWorkout | other,默认为 snacks), numberOfServings, brand, notes,再加上代理人有信心的任何微型-- fiber, sugar, sodium, cholesterol, saturatedFat, transFat, monounsaturatedFat, polyunsaturatedFat, potassium, calcium, iron, magnesium, zinc, vitaminA, vitaminB6, vitaminB12, vitaminC, vitaminD, vitaminE, vitaminK, folate, niacin, riboflavin, thiamin, caffeine, water省略代理不知道的值,而不是猜测。
接受日期表格 date (默认为现在):
| 表单 | 存储为 |
|---|---|
"today" | 当地时间今天中午 |
"yesterday" | 当地时间昨天中午 |
"today T14:00" / "yesterday 14:30:00" | 那天当地的墙时间 |
"2026-04-29" | 当天当地中午 |
"2026-04-29T14:00:00" (无偏移) | 墙时间,用户的本地TZ |
"2026-04-29T14:00:00-06:00" / "…Z" | 通过不变 |
所有裸表和相对表都锚定在用户的本地时区(参见 时区 上面)——代理不需要知道用户的时区就可以正确记录食物。裸露的日期固定在中午,以避免在夏令时过渡期间漂移。
限制: 端点每用户最多接受10次写入/分钟和200次写入/天;价值超越 calories ≤ 50000, protein/carbs/fat ≤ 5000, numberOfServings ≤ 100,或超出字符串 name ≤ 200/brand ≤ 100/notes ≤ 1000 字符被HTTP 400拒绝。
示例用法
配置后,您可以向Claude或ChatGPT询问以下内容:
查询:
- “显示我上周的锻炼”
- “在过去的3个月里,我的卧推进展如何?”
- “我昨天吃了什么?”/“过去7天我记录的一切”/“我本周的周二晚餐是什么?”
- “我达到了我的蛋白质目标吗?”/“我这个月的卡路里趋势如何?”
- “上周我的糖大部分是从哪里来的?”
- “我的胸部训练量是多少?”
- “我每周的训练计划是什么?”
教练循环: 一个全天关注用户的代理可以通过三个电话构建一个实时图片:
get_nutrition_goals--用户的目标(削减/批量/维护+每日宏观数据)get_food_entries(date: today)--已经消耗的东西get_body_measurements(根据需要)-最近的重量趋势
然后,教练说:“你还有大约40克蛋白质和大约600卡路里的余量,考虑到你每周减1磅的缓慢目标,这适合正常的晚餐。”
记录食物:
- “午餐吃芝士汉堡”
- “在我的零食中添加士力架吧”
- “我刚吃了两个炒鸡蛋和一片烤面包——记下来”
- “记录我的蓝莓奶昔”——聊天机器人的电话
list_my_foods首先,找到您保存的MyFood,并重用其宏 - “记录另一个努恩人”——同样的路径:从你保存的食物中按名字识别
事后编辑:
- “等等,那是2个芝士汉堡,不是1个”——聊天机器人电话
update_food_entry使用之前日志中的id - “其实那是点心,不是午餐”
- “把奶酪放在汉堡上”
编辑仅适用于通过聊天记录的条目。您直接在Iridium应用程序中添加的条目只能在应用程序中编辑。
聊天机器人根据自己的知识(或您的 list_my_foods 查找),调用相关工具,更改将在下次同步时(应用程序打开后几秒钟内)显示在您的铱星食物日志中。
故障排除
“缺少IRIDIUM_SYNC_ID或IRIDIUM_SUNC_KEY”
确保在MCP服务器配置中设置了这两个环境变量。您可以在Iridium应用程序的“设置”>“AI数据同步”下找到这些值。
“API请求失败(401)”
您的同步密钥可能已重新生成。打开Iridium,进入“设置”>“AI数据同步”,复制当前的同步密钥。使用新密钥更新MCP配置。
“API请求失败(404)”
数据终结点可能还不可用。打开Iridium并点击“设置”>“AI数据同步”中的“立即同步”,确保您至少同步了一次数据。
过时的数据警告
如果您看到数据已在很久以前同步的警告,请打开Iridium应用程序并点击“立即同步”以推送最新数据。当数据超过24小时时,服务器将显示过期警告。
服务器未出现在Claude代码中
- 确保配置JSON有效
- 更改配置后重新启动Claude Code
- 检查是否安装了Node.js 18+:
node --version
发展
# Install dependencies
npm install
# Build
npm run build
# Watch mode (rebuild on changes)
npm run dev
# Run directly
IRIDIUM_SYNC_ID=xxx IRIDIUM_SYNC_KEY=yyy npm start许可证
麻省理工学院
