MCP Logger
Stores workout logs, nutrition data, and body metrics in a local SQLite database with support for workout exercises and sets, meal tracking, and body measurements including weight and skinfolds.
Click on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@MCP Logger log my workout from yesterday with 3 sets of bench press at 185lbs"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
MCP Logger
A Python/uv + FastMCP server for logging workouts, nutrition, and body metrics. Single-user local SQLite database with stdio MCP interface.
this was entirely vibe coded
Features
Workouts: Flexible
workout -> exercises[] -> sets[]structure with tags, notes, RPE/RIR, distances, unilateral sides, etc.Nutrition: Cronometer/MyFitnessPal-style logging with meals and OpenNutrition-backed food snapshots.
Body Metrics: Weight and customizable skinfold tracking.
Search: Cross-domain search across all data.
Related MCP server: aiTrainer
Tools
Workout Tools
log_workout- Log a complete workout with exercises and setsget_workouts- Query workouts with filters (date range, type, tag)get_last_workout- Get most recent workout by type or tagget_exercise_history- Get history for a specific exercise
Nutrition Tools
upsert_nutrition_day- Create/update a nutrition dayupsert_meal- Create/update a meal within a dayadd_or_update_meal_item- Add/update food item (use with OpenNutrition MCP)get_nutrition_day- Get complete day with meals, items, and totalsget_nutrition_days_summary- Get summaries for a date rangedelete_meal_item,delete_meal,delete_nutrition_day- Delete operations
Body Metrics Tools
log_body_metrics- Log weight and skinfoldsget_body_metrics- Get body metrics with skinfolds
Search
search_logs- Search across workouts, nutrition, and body data
Installation & Running
# Install dependencies
uv pip install -e .
# Run the MCP server (stdio interface)
uv run python -m src.mainMCP Config Example
Add to your MCP configuration:
{
"mcpServers": {
"logger": {
"command": "uv",
"args": ["run", "python", "-m", "src.main"],
"cwd": "/path/to/mcp-logger"
}
}
}Nutrition Workflow with OpenNutrition MCP
AI uses OpenNutrition MCP to search for foods (
search-food-by-name,get-food-by-id)AI computes macros for the desired serving size
AI calls
add_or_update_meal_itemwith food_id and calculated macros
Workout Planning
The AI can call get_last_workout or get_exercise_history to retrieve past sessions, then generate suggested workouts. Progression logic lives in the client AI, not this server.
Database
Data is stored in mcp_logger.db (SQLite) in the project root.
Example Usage
Log a Workout with Exercises
{
"date_time": "2026-01-06T18:30:00",
"workout_type": "Strength",
"tags": ["olympic", "speed"],
"notes": "Great session",
"exercises": [
{
"name": "Power Clean",
"category": "Olympic Lift",
"notes": "From blocks",
"sets": [
{ "reps": 3, "weight_lbs": 185 },
{ "reps": 2, "weight_lbs": 195 },
{ "reps": 1, "weight_lbs": 205 }
]
},
{
"name": "Sprint Starts",
"category": "Sprint",
"notes": "3 point stance",
"sets": [{ "reps": 6, "distance_yards": 20 }]
},
{
"name": "Single Leg Box Jumps",
"category": "Plyometric",
"notes": "5 sets of 2 each leg",
"sets": [{ "reps": 10, "side": "both" }]
}
]
}Set Fields
Each set can include:
reps: Number of repetitions (int or float)weight_kg/weight_lbs: Weight in kg or lbsdistance_m/distance_yards: Distance for running/rowingduration_s: Duration in secondsside: "left", "right", or "both" (for unilateral exercises)rpe: Rate of Perceived Exertion (1-10)rir: Reps In Reserve (0-5)is_warmup: Boolean for warmup setsset_index: Manual set ordering (defaults to order inserted)
Log Body Metrics
{
"date": "2026-01-06",
"body_weight_kg": 85.5,
"skinfolds": {
"chest": 12,
"abdomen": 18,
"thigh": 15,
"tricep": 10,
"subscapular": 14,
"suprailiac": 16,
"midaxillary": 11
},
"notes": "Morning measurement"
}MCP-logger
Available Tools
17 toolsadd_exerciseB
Add an exercise to an existing workout.
Args: workout_id: ID of the workout to add exercise to name: Name of the exercise category: Optional category (e.g., 'Squat', 'Push', 'Pull') notes: Optional notes about the exercise
Inputs: workout_id (required), name (required), category, notes. Returns: object
add_or_update_meal_itemA
Add or update a food item within a meal.
The AI should first use OpenNutrition MCP to find food_id and get macros, then call this tool with the calculated values for the serving quantity.
Inputs: date (required), meal_name (required), food_id (required), food_name (required), +11 more. Returns: object
add_setB
Add a set to an existing exercise.
Args: exercise_id: ID of the exercise to add set to reps: Number of repetitions weight_kg: Weight in kilograms weight_lbs: Weight in pounds distance_m: Distance in meters distance_yards: Distance in yards duration_s: Duration in seconds side: 'left', 'right', or 'both' for unilateral exercises rpe: Rate of Perceived Exertion (1-10) rir: Reps In Reserve (0-5) is_warmup: Whether this is a warmup set
Inputs: exercise_id (required), reps, weight_kg, weight_lbs, +7 more. Returns: object
delete_mealC
Delete a meal and optionally its items.
Inputs: meal_id (required), delete_items. Returns: object
delete_meal_itemC
Delete a meal item.
Inputs: item_id (required). Returns: object
delete_nutrition_dayB
Delete a nutrition day and optionally cascade to meals/items.
Inputs: date (required), cascade. Returns: object
get_body_metricsC
Get body metrics with skinfolds.
Inputs: from_date, to_date, limit, offset. Returns: object
get_exercise_historyB
Get history of a specific exercise across workouts.
Inputs: exercise_name (required), from_date, to_date, limit. Returns: object
get_last_workoutC
Get the most recent workout matching type or tag.
Inputs: workout_type, tag. Returns: object
get_nutrition_dayB
Get a complete nutrition day with meals and items.
Inputs: date (required). Returns: object
get_nutrition_days_summaryC
Get nutrition summaries for a date range.
Inputs: from_date, to_date, limit, offset. Returns: object
get_workoutsC
Query workouts with various filters.
Inputs: from_date, to_date, workout_type, tag, +3 more. Returns: object
log_body_metricsB
Log body weight and skinfold measurements.
Args: date: Date in YYYY-MM-DD format body_weight_kg: Body weight in kilograms (optional) skinfolds: Dictionary of skinfold measurements in mm (optional). Can be a single site like {"abdomen": 10} or multiple sites like {"chest": 12, "abdomen": 18, "thigh": 15}. Common sites: abdomen, chest, thigh, tricep, subscapular, suprailiac, midaxillary notes: Optional notes about the measurement
Example: Single belly skinfold: {"abdomen": 10} Multiple sites: {"chest": 12, "abdomen": 18, "thigh": 15}
Inputs: date (required), body_weight_kg, skinfolds, notes. Returns: object
log_workoutB
Log a complete workout with exercises and sets.
Returns the fully logged workout with all exercises and sets for confirmation.
Args: date_time: ISO datetime string (e.g., "2026-01-06T18:30:00") workout_type: Optional type/category for the workout tags: Optional list of tags (e.g., ["legs", "sprint"]) notes: Optional notes for the workout exercises: List of exercises with sets. Each exercise should have: - name: str (required) - category: Optional[str] - notes: Optional[str] - sets: List of sets with fields like reps, weight_kg, weight_lbs, distance_yards, side, etc.
Inputs: date_time (required), workout_type, tags, notes, +1 more. Returns: object
search_logsC
Search across workouts, nutrition days, and body metrics.
Inputs: query (required), domains, from_date, to_date, +1 more. Returns: object
upsert_mealC
Create or update a meal within a nutrition day.
Inputs: date (required), name (required), order_index. Returns: object
upsert_nutrition_dayC
Create or update a nutrition day entry.
Inputs: date (required), notes. Returns: object
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
Loading tool schema changelog…
TDQS
Scored across 17 tools
Most tools have distinct purposes targeting specific domains (workouts, nutrition, body metrics), but some overlap exists. For example, 'log_workout' and 'add_exercise' both handle exercise logging, which could cause confusion about when to use each. However, the descriptions clarify that 'log_workout' is for complete workouts while 'add_exercise' is for incremental updates.
The naming follows a consistent verb_noun pattern throughout (e.g., 'add_exercise', 'get_workouts', 'log_body_metrics'), with only minor deviations. The main inconsistency is 'search_logs' (verb_noun) versus 'get_exercise_history' (verb_adjective_noun), but overall the pattern is clear and predictable.
With 17 tools, the count is slightly high but reasonable for a comprehensive fitness and nutrition logging server. It covers workouts, nutrition, and body metrics, so each tool generally earns its place, though some consolidation might improve coherence (e.g., combining delete operations).
The tool set provides complete CRUD/lifecycle coverage for workouts, nutrition days, meals, and body metrics. It includes creation (log_workout, upsert_nutrition_day), retrieval (get_workouts, get_nutrition_day), updates (add_exercise, upsert_meal), and deletion (delete_meal, delete_nutrition_day), with no obvious gaps for the domain.
Maintenance
Related MCP Connectors
Bring-your-own-AI fitness coach: your AI logs and reads your food, lifting, runs, sleep and weight.
Log workouts and meals by telling your AI. 873 exercises, muscle diagrams, food lookup.
Fitness MCP for coaches and gyms: build workouts and read clients' training from live Superset data.
Adaptive running coach MCP server — training data, plans, and recovery for AI assistants.
Related MCP Servers
- FlicenseNot gradedqualityDmaintenanceLocal-first nutrition tracker MCP server for Hermes, enabling food, alias, recipe, and meal log management with SQLite persistence.-
- FlicenseAqualityDmaintenancePersonal workout coach MCP server that logs exercises in natural language, tracks progress with SQLite, and provides coaching signals like estimated 1RM and volume trends.6-
- FlicenseNot gradedqualityCmaintenanceA personal health and fitness MCP server that provides tools for managing profile data, goals, body measurements, nutrition, workouts, sleep, check-ins, life events, analytics, and coach memories via Supabase Postgres.1-
- AlicenseNot gradedqualityBmaintenanceSelf-hosted fitness tracking MCP server that gives AI assistants access to your nutrition, training, weight, sleep, and accomplishment data via 77 tools and 5 resources. Enables natural-language logging and querying of personal health metrics through Claude or ChatGPT.12 npm1BSD 2-Clause "Simplified"