loading…
Search for a command to run...
loading…
Connects AI agents to Iridium fitness data to query workout history, nutrition logs, and body measurements. It enables users to track exercise progress, trainin
Connects AI agents to Iridium fitness data to query workout history, nutrition logs, and body measurements. It enables users to track exercise progress, training volume, and personalized trainer analysis through natural language.
An MCP (Model Context Protocol) server that connects AI agents like Claude and ChatGPT to your Iridium fitness data. Query your workouts, nutrition, body measurements, and training volume — and log food entries directly into your Iridium diary while chatting — from Claude Code, Claude Desktop, ChatGPT, or any MCP-compatible client.
npm install -g iridium-mcp-server
Or clone and build from source:
git clone https://github.com/iridium-fitness/iridium-mcp-server.git
cd iridium-mcp-server
npm install
npm run build
Add the following to your Claude Code MCP settings (~/.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"
}
}
}
}
Nutrition queries like "what did I eat today?" need to know the user's local timezone to pick the right day boundary — otherwise food logged late at night can spill into the next day's results.
By default the server auto-detects the timezone of the machine it runs on. If the MCP server runs somewhere other than the user's local machine (e.g. a cloud-hosted agent), set IRIDIUM_USER_TZ to the user's IANA timezone:
{
"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"
}
}
}
}
Leave it unset if the MCP server and the user are in the same timezone.
If you installed from source, use the absolute path instead:
{
"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"
}
}
}
}
| Tool | Description |
|---|---|
get_workout_history |
Get recent workout history with optional date range and category filtering |
get_workout_detail |
Get full details of a specific workout (exercises, sets, weights, reps, RPE) |
get_nutrition_log |
Get daily nutrition summaries (totals + goals + day notes) over a date range — use for trends and goal tracking |
get_food_entries |
Get full individual food entries (name + every nutrient) for a day or date range up to 90 days — use when the question is about what was actually eaten |
get_nutrition_goals |
Get the user's current nutrition intent — goal type (lose / maintain / gain), target weekly rate, and daily calorie / protein / carb / fat targets. Use when coaching or giving recommendations that depend on whether they are cutting, bulking, or maintaining |
search_exercises |
Search the exercise database by name or muscle group |
get_exercise_progress |
Get performance history and 1RM trends for a specific exercise |
get_body_measurements |
Get body measurement history (weight, body fat, etc.) |
get_profile |
Get user profile including training goals, methodology, and experience level |
get_training_summary |
Get aggregate training statistics (total workouts, streaks, patterns) |
get_training_volume |
Get volume adaptation records per muscle group with fatigue and recovery data |
get_trainer_analysis |
Get weekly AI trainer analysis logs with recommendations and insights |
get_weekly_schedule |
Get the planned weekly training schedule |
get_workout_templates |
Get saved workout templates with exercise configurations |
list_my_foods |
List the user's saved reusable foods ("My Foods") — their homemade shakes, go-to bars, custom meals. Call this first when the user refers to a food by name as if it were already known |
| Tool | Description |
|---|---|
log_food_entry |
Log a single food entry (name + macros) to the user's Iridium food diary |
update_food_entry |
Update a food entry previously logged via log_food_entry — adjust servings, fix a macro, change the meal type, etc. Only works on chat-logged entries |
log_food_entry notesWhen the agent calls this tool, the entry lands on Iridium's backend immediately and is pulled into the iOS app on its next sync — typically within seconds when the app is foregrounded, otherwise on the next foreground or 5-minute polling tick. Entries that come from MCP are tagged with a "Chat" badge in the food log so the user can tell at a glance which entries were logged by an external chatbot.
Required: name, calories, protein, carbs, fat (grams).
Important — totals, not per-serving: calories and macros must be the totals for the amount actually consumed. If the user ate 2 servings of a 200-cal item, send calories: 400, not calories: 200 with numberOfServings: 2. Iridium stores the values as-is and does not multiply.
Optional: date (ISO 8601, defaults to now), mealType (breakfast | lunch | dinner | snacks | preWorkout | postWorkout | other, defaults to snacks), numberOfServings, brand, notes, plus any micros the agent is confident about — 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. Omit values the agent does not know rather than guessing.
Limits: the endpoint accepts at most 10 writes/min and 200 writes/day per user; values beyond calories ≤ 50000, protein/carbs/fat ≤ 5000, numberOfServings ≤ 100, or strings beyond name ≤ 200/brand ≤ 100/notes ≤ 1000 chars are rejected with HTTP 400.
Once configured, you can ask Claude or ChatGPT things like:
Querying:
Coaching loops: An agent checking in on the user throughout the day can build a live picture with three calls:
get_nutrition_goals — what the user is targeting (cut / bulk / maintain + daily macro numbers)get_food_entries(date: today) — what has already been consumedget_body_measurements (as needed) — recent weight trendThen coach from there: "you have ~40 g of protein left and a calorie headroom of ~600, which fits a normal dinner given your slow-cut target of -1 lb/week."
Logging food:
list_my_foods first, finds your saved MyFood, and reuses its macrosEditing after the fact:
update_food_entry with the id from the prior logEdits only work on entries logged via chat. Entries you added directly in the Iridium app can only be edited in the app.
The chatbot fills in macros from its own knowledge (or from your list_my_foods lookups), calls the relevant tool, and the change shows up in your Iridium food log on the next sync (within seconds when the app is open).
Make sure both environment variables are set in your MCP server configuration. You can find these values in the Iridium app under Settings > AI Data Sync.
Your Sync Key may have been regenerated. Open Iridium, go to Settings > AI Data Sync, and copy the current Sync Key. Update your MCP configuration with the new key.
The data endpoint may not be available yet. Make sure you have synced your data at least once by opening Iridium and tapping Sync Now in Settings > AI Data Sync.
If you see a warning that data was synced a long time ago, open the Iridium app and tap Sync Now to push the latest data. The server will show staleness warnings when data is older than 24 hours.
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
MIT
Добавь это в claude_desktop_config.json и перезапусти Claude Desktop.
{
"mcpServers": {
"iridium-mcp-server": {
"command": "npx",
"args": []
}
}
}