Server definition
- Hash
- sha256:b3ab1b726abf4584b4991e28664330ef5ee1d35db76b73d4d2a593a8400aac7f
- What it is
- What a remote MCP server returned when asked what it offers: 36 tools
The blob, as servednamed by its sha256
{
"instructions": "Fitness and nutrition data. Stateless reference tools (exercise search, muscle diagrams, food lookup, calculators) work with no key. Per-user tools need an identity: sign in when your host offers it, or mint a free key at POST /v1/demo/key (no signup) and send it with X-App-User-Id. Read the anatome://write-policy resource before your first write: units are canonical SI and unknown field names are rejected, not dropped.",
"tools": [
{
"description": "Draft a meal plan. Not medical advice. confirm:true required. Pass health constraints so the draft can honour them.",
"inputSchema": {
"properties": {
"confirm": {
"type": "boolean"
},
"daily_calories": {
"type": "number"
},
"days": {
"type": "number"
},
"diet_type": {
"type": "string"
},
"goal": {
"type": "string"
},
"health": {
"properties": {
"allergies": {
"items": {
"type": "string"
},
"type": "array"
},
"conditions": {
"items": {
"type": "string"
},
"type": "array"
},
"injuries": {
"items": {
"type": "string"
},
"type": "array"
},
"medications": {
"items": {
"type": "string"
},
"type": "array"
},
"pregnancy": {
"type": "boolean"
}
},
"type": "object"
}
},
"required": [
"days",
"confirm"
],
"type": "object"
},
"name": "ai_meal_plan",
"outputSchema": null
},
{
"description": "Parse free-text meal description ('2 eggs and toast with butter') into structured items with grams + macros.",
"inputSchema": {
"properties": {
"locale": {
"type": "string"
},
"text": {
"type": "string"
}
},
"required": [
"text"
],
"type": "object"
},
"name": "ai_parse_meal",
"outputSchema": null
},
{
"description": "Analyze a meal image and estimate foods + macros. Pass exactly one of image_url or image_base64. Vision model, capped separately from the text AI budget (free tier 1/mo).",
"inputSchema": {
"oneOf": [
{
"required": [
"image_url"
]
},
{
"required": [
"image_base64"
]
}
],
"properties": {
"image_base64": {
"description": "Base64-encoded image bytes, no data: prefix. Mutually exclusive with image_url.",
"type": "string"
},
"image_url": {
"description": "Public URL of the image. Mutually exclusive with image_base64.",
"type": "string"
}
},
"type": "object"
},
"name": "ai_photo_macros",
"outputSchema": null
},
{
"description": "Draft a workout plan. Not medical advice. confirm:true required. Pass health constraints so the draft can honour them.",
"inputSchema": {
"properties": {
"confirm": {
"type": "boolean"
},
"days_per_week": {
"type": "number"
},
"experience": {
"type": "string"
},
"goal": {
"type": "string"
},
"health": {
"properties": {
"allergies": {
"items": {
"type": "string"
},
"type": "array"
},
"conditions": {
"items": {
"type": "string"
},
"type": "array"
},
"injuries": {
"items": {
"type": "string"
},
"type": "array"
},
"medications": {
"items": {
"type": "string"
},
"type": "array"
},
"pregnancy": {
"type": "boolean"
}
},
"type": "object"
}
},
"required": [
"days_per_week",
"confirm"
],
"type": "object"
},
"name": "ai_workout_plan",
"outputSchema": null
},
{
"description": "Delete a logged meal by id (soft delete, 30-day recovery window). Requires X-App-User-Id.",
"inputSchema": {
"properties": {
"meal_id": {
"type": "string"
}
},
"required": [
"meal_id"
],
"type": "object"
},
"name": "delete_meal",
"outputSchema": {
"properties": {
"deleted": {
"type": "string"
}
},
"type": "object"
}
},
{
"description": "Delete a logged workout and its sets by id (soft delete, 30-day recovery window).",
"inputSchema": {
"properties": {
"workout_id": {
"type": "string"
}
},
"required": [
"workout_id"
],
"type": "object"
},
"name": "delete_workout",
"outputSchema": {
"properties": {
"deleted": {
"type": "string"
}
},
"type": "object"
}
},
{
"description": "Export the signed-in user's data as JSON. Pass `domains` (e.g. meals,workouts) or confirm:true for a full copy. Identity comes from the token, never a caller-supplied user id.",
"inputSchema": {
"properties": {
"confirm": {
"description": "Required true for a full dump when domains is omitted.",
"type": "boolean"
},
"domains": {
"description": "Comma-separated subset, e.g. 'meals,workouts'.",
"type": "string"
}
},
"type": "object"
},
"name": "export_data",
"outputSchema": null
},
{
"description": "Render an SVG diagram of the human body with muscles highlighted in arbitrary colors. Returns SVG.",
"inputSchema": {
"properties": {
"gender": {
"enum": [
"male",
"female"
],
"type": "string"
},
"layers": {
"type": "array"
},
"view": {
"enum": [
"front",
"back",
"dual"
],
"type": "string"
}
},
"required": [
"layers"
],
"type": "object"
},
"name": "generate_muscle_image",
"outputSchema": {
"properties": {
"format": {
"type": "string"
},
"muscles_rendered": {
"type": "array"
},
"svg": {
"type": "string"
}
},
"type": "object"
}
},
{
"description": "List the current app user's body metrics / measurements (weight, height, bicep, body fat, etc.), most recent first. Filter by metric_type (e.g. 'weight', 'bicep') and/or a date range. Requires an app user context.",
"inputSchema": {
"properties": {
"from": {
"type": "string"
},
"limit": {
"default": 100,
"type": "number"
},
"metric_type": {
"type": "string"
},
"to": {
"type": "string"
}
},
"type": "object"
},
"name": "get_body_metrics",
"outputSchema": {
"properties": {
"items": {
"type": "array"
}
},
"type": "object"
}
},
{
"description": "List the current app user's cardio activities (most recent first).",
"inputSchema": {
"properties": {
"date_from": {
"type": "string"
},
"date_to": {
"type": "string"
},
"limit": {
"default": 20,
"type": "number"
}
},
"type": "object"
},
"name": "get_cardio_activities",
"outputSchema": {
"properties": {
"items": {
"type": "array"
}
},
"type": "object"
}
},
{
"description": "What changed since a cursor, including DELETES, which a list read cannot show. Returns {seq, entity, id, action}. Pass the last seq back as `since` on the next call to receive only entries after it; omit `since` for a first sync. seq is a global counter: gaps in your feed are other accounts' events, not lost data. Judge completeness from has_more, not seq.",
"inputSchema": {
"properties": {
"entities": {
"description": "Optional comma-separated filter, e.g. 'workout,meal'.",
"type": "string"
},
"limit": {
"default": 100,
"type": "number"
},
"since": {
"description": "Cursor from the previous call's last seq. Omit for a first sync.",
"type": "string"
}
},
"type": "object"
},
"name": "get_events",
"outputSchema": null
},
{
"description": "Fetch one exercise by name, id, or random.",
"inputSchema": {
"properties": {
"id": {
"type": "string"
},
"name": {
"type": "string"
},
"random": {
"type": "boolean"
}
},
"type": "object"
},
"name": "get_exercise",
"outputSchema": null
},
{
"description": "List the current app user's meals for a date range.",
"inputSchema": {
"properties": {
"date_from": {
"type": "string"
},
"date_to": {
"type": "string"
}
},
"type": "object"
},
"name": "get_meals",
"outputSchema": {
"properties": {
"items": {
"type": "array"
}
},
"type": "object"
}
},
{
"description": "Per-muscle 7-day recovery % (Fitbod parity) — the 'what should I train today?' input. Recommends fresh muscles. Pass include_bodyweight=true to add the user's bodyweight to bodyweight exercises so recovery reflects real load.",
"inputSchema": {
"properties": {
"include_bodyweight": {
"description": "If true, add the user's bodyweight to bodyweight exercises (requires a logged weight or profile.weight).",
"type": "boolean"
}
},
"type": "object"
},
"name": "get_muscle_recovery",
"outputSchema": {
"properties": {
"muscles": {
"type": "array"
},
"threshold_volume": {
"type": "number"
},
"window_days": {
"type": "number"
}
},
"type": "object"
}
},
{
"description": "Per-day calories, macros, fiber/sugar/sodium/alcohol, water, targets and adherence % over a date range (default: last 7 days). The 'how am I tracking today?' tool. Requires X-App-User-Id.",
"inputSchema": {
"properties": {
"date_from": {
"description": "YYYY-MM-DD",
"type": "string"
},
"date_to": {
"description": "YYYY-MM-DD (defaults to the user's today, in their timezone)",
"type": "string"
}
},
"type": "object"
},
"name": "get_nutrition_daily",
"outputSchema": {
"properties": {
"days": {
"type": "array"
},
"from": {
"type": "string"
},
"limits": {},
"targets": {},
"to": {
"type": "string"
}
},
"type": "object"
}
},
{
"description": "Get the current app user's fitness profile (height, weight, macro + water goals, diet, active sports). Requires an app user context.",
"inputSchema": {
"properties": {},
"type": "object"
},
"name": "get_profile",
"outputSchema": null
},
{
"description": "Any progression metric for the current user — pick one in `metric`. training_load is acute:chronic (>1.5 ramping too fast, <0.8 detraining); muscle_recovery is per-muscle freshness; correlate takes metric_a vs metric_b. Only completed sets count.",
"inputSchema": {
"properties": {
"bucket": {
"enum": [
"day",
"week",
"month"
],
"type": "string"
},
"days": {
"description": "training_load window",
"type": "number"
},
"exercise": {
"description": "Required for prs; optional filter for volume, one_rep_max and compare_periods.",
"type": "string"
},
"from": {
"description": "YYYY-MM-DD",
"type": "string"
},
"goal_id": {
"description": "goal_trajectory",
"type": "string"
},
"group_by": {
"description": "volume only",
"enum": [
"exercise",
"muscle"
],
"type": "string"
},
"include_bodyweight": {
"description": "Add the user's bodyweight to bodyweight exercises (pull-ups, dips). prs, volume and muscle_recovery.",
"type": "boolean"
},
"method": {
"description": "training_load: auto | power | hr | rpe",
"type": "string"
},
"metric": {
"enum": [
"prs",
"volume",
"one_rep_max",
"streaks",
"adherence",
"training_load",
"weight_trend",
"body_delta",
"muscle_recovery",
"cardio_prs",
"goal_trajectory",
"nutrition_balance",
"correlate",
"compare_periods"
],
"type": "string"
},
"metric_a": {
"description": "correlate",
"type": "string"
},
"metric_b": {
"description": "correlate",
"type": "string"
},
"sport": {
"description": "training_load and cardio_prs",
"type": "string"
},
"to": {
"description": "YYYY-MM-DD",
"type": "string"
},
"window": {
"description": "weight_trend smoothing window",
"type": "number"
}
},
"required": [
"metric"
],
"type": "object"
},
"name": "get_progress",
"outputSchema": null
},
{
"description": "Fetch a single curated routine by slug with all days + slots fully expanded (exercises, sets, reps ranges, rest, superset groupings). The 'give me a full program' tool.",
"inputSchema": {
"properties": {
"slug": {
"type": "string"
}
},
"required": [
"slug"
],
"type": "object"
},
"name": "get_routine",
"outputSchema": null
},
{
"description": "List the current app user's water intake entries for a date range. Requires X-App-User-Id.",
"inputSchema": {
"properties": {
"date": {
"type": "string"
},
"date_from": {
"type": "string"
},
"date_to": {
"type": "string"
}
},
"type": "object"
},
"name": "get_water",
"outputSchema": null
},
{
"description": "List the current app user's workouts (most recent first).",
"inputSchema": {
"properties": {
"date_from": {
"type": "string"
},
"date_to": {
"type": "string"
},
"limit": {
"default": 20,
"type": "number"
}
},
"type": "object"
},
"name": "get_workouts",
"outputSchema": {
"properties": {
"items": {
"type": "array"
}
},
"type": "object"
}
},
{
"description": "Schedule the signed-in user's routine into planned workouts from start_date. Coach assignment of another user is REST-only.",
"inputSchema": {
"properties": {
"cadence_days": {
"default": 1,
"type": "number"
},
"idempotency_key": {
"type": "string"
},
"routine_id": {
"type": "string"
},
"start_date": {
"description": "YYYY-MM-DD",
"type": "string"
}
},
"required": [
"routine_id",
"start_date"
],
"type": "object"
},
"name": "instantiate_routine",
"outputSchema": null
},
{
"description": "List all 23 supported muscle slugs with anatomical names.",
"inputSchema": {
"properties": {},
"type": "object"
},
"name": "list_muscles",
"outputSchema": null
},
{
"description": "Browse the curated workout routine library (PPL, upper/lower, full-body, 5x5, etc.). Filter by difficulty, goal, split_type, days_per_week. Returns minimal list.",
"inputSchema": {
"properties": {
"days_per_week": {
"type": "number"
},
"difficulty": {
"enum": [
"beginner",
"intermediate",
"advanced"
],
"type": "string"
},
"goal": {
"enum": [
"strength",
"hypertrophy",
"general",
"endurance",
"weight_loss"
],
"type": "string"
},
"limit": {
"default": 20,
"type": "number"
},
"split_type": {
"enum": [
"full_body",
"upper_lower",
"push_pull_legs",
"push_pull",
"bro",
"custom"
],
"type": "string"
}
},
"type": "object"
},
"name": "list_routines",
"outputSchema": null
},
{
"description": "Log a body measurement. metric_type: weight (kg), height (cm), body_fat (%), muscle_mass (kg), waist/chest/bicep/forearm/hip/thigh/calf/neck/shoulder (cm), bmi, resting_hr (bpm). Logging weight enables bodyweight-inclusive volume analytics.",
"inputSchema": {
"properties": {
"date": {
"type": "string"
},
"idempotency_key": {
"type": "string"
},
"metric_type": {
"type": "string"
},
"notes": {
"type": "string"
},
"unit": {
"type": "string"
},
"value": {
"type": "number"
}
},
"required": [
"date",
"metric_type",
"value",
"unit"
],
"type": "object"
},
"name": "log_body_metric",
"outputSchema": {
"properties": {
"date": {
"type": "string"
},
"id": {
"type": "string"
},
"metric_type": {
"type": "string"
},
"value": {
"type": "number"
}
},
"type": "object"
}
},
{
"description": "Log a cardio activity (run/bike/swim/etc.) for the current app user. Supports duration, distance, HR, power, calories.",
"inputSchema": {
"properties": {
"avg_hr": {
"type": "number"
},
"calories": {
"type": "number"
},
"date": {
"type": "string"
},
"distance_m": {
"type": "number"
},
"duration_seconds": {
"type": "number"
},
"idempotency_key": {
"type": "string"
},
"notes": {
"type": "string"
},
"sport": {
"type": "string"
},
"title": {
"type": "string"
}
},
"required": [
"date",
"sport"
],
"type": "object"
},
"name": "log_cardio",
"outputSchema": {
"properties": {
"date": {
"type": "string"
},
"distance_m": {
"type": "number"
},
"duration_s": {
"type": "number"
},
"id": {
"type": "string"
},
"sport": {
"type": "string"
}
},
"type": "object"
}
},
{
"description": "Log a meal (calories + macros + optional ingredients) for the current app user.",
"inputSchema": {
"properties": {
"calories": {
"type": "number"
},
"carbs": {
"type": "number"
},
"date": {
"type": "string"
},
"fats": {
"type": "number"
},
"idempotency_key": {
"type": "string"
},
"meal_type": {
"type": "string"
},
"name": {
"type": "string"
},
"protein": {
"type": "number"
}
},
"required": [
"date",
"name",
"calories"
],
"type": "object"
},
"name": "log_meal",
"outputSchema": {
"properties": {
"calories": {
"type": "number"
},
"carbs": {
"type": "number"
},
"date": {
"type": "string"
},
"fats": {
"type": "number"
},
"id": {
"type": "string"
},
"name": {
"type": "string"
},
"protein": {
"type": "number"
}
},
"type": "object"
}
},
{
"description": "Log water intake (ml) for the current app user.",
"inputSchema": {
"properties": {
"amount_ml": {
"type": "number"
},
"date": {
"type": "string"
},
"idempotency_key": {
"type": "string"
}
},
"required": [
"date",
"amount_ml"
],
"type": "object"
},
"name": "log_water",
"outputSchema": {
"properties": {
"date": {
"type": "string"
},
"id": {
"type": "string"
},
"ml": {
"type": "number"
}
},
"type": "object"
}
},
{
"description": "Log a workout with exercise sets (strength or cardio unified). Requires an app user context.",
"inputSchema": {
"properties": {
"date": {
"type": "string"
},
"idempotency_key": {
"type": "string"
},
"primary_sport": {
"type": "string"
},
"sets": {
"items": {
"properties": {
"completed": {
"type": "boolean"
},
"distance_m": {
"type": "number"
},
"duration_seconds": {
"type": "number"
},
"exercise_name": {
"type": "string"
},
"notes": {
"type": "string"
},
"reps": {
"type": "number"
},
"rest_seconds": {
"type": "number"
},
"rpe": {
"type": "number"
},
"set_number": {
"type": "number"
},
"weight": {
"type": "number"
}
},
"type": "object"
},
"type": "array"
},
"title": {
"type": "string"
}
},
"required": [
"date"
],
"type": "object"
},
"name": "log_workout",
"outputSchema": {
"properties": {
"date": {
"type": "string"
},
"id": {
"type": "string"
},
"title": {
"type": "string"
}
},
"type": "object"
}
},
{
"description": "Lookup a food product by EAN/UPC barcode.",
"inputSchema": {
"properties": {
"barcode": {
"type": "string"
}
},
"required": [
"barcode"
],
"type": "object"
},
"name": "lookup_barcode",
"outputSchema": {
"properties": {
"barcode": {
"type": "string"
},
"found": {
"type": "boolean"
},
"message": {
"type": "string"
}
},
"type": "object"
}
},
{
"description": "Returns a slice of the signed-in user's training picture. Default domains are workouts and today's nutrition. Pass `domains` to add checkin, notes or profile, or `domains=all`. Identity comes from the token, not a caller-supplied user id.",
"inputSchema": {
"properties": {
"domains": {
"description": "Comma-separated subset. Accepted: workouts, nutrition, checkin, notes, profile, or 'all'. Default: workouts,nutrition.",
"type": "string"
},
"workout_limit": {
"default": 10,
"type": "number"
}
},
"type": "object"
},
"name": "my_training_context",
"outputSchema": {
"properties": {
"date": {
"type": "string"
},
"domains": {},
"latest_checkin": {},
"nutrition_today": {},
"profile": {},
"recent_notes": {},
"recent_workouts": {}
},
"type": "object"
}
},
{
"description": "Resolve an exercise name into primary/secondary muscle layers for rendering.",
"inputSchema": {
"properties": {
"exercise": {
"type": "string"
}
},
"required": [
"exercise"
],
"type": "object"
},
"name": "resolve_exercise",
"outputSchema": null
},
{
"description": "Search 873 exercises by name with muscle/equipment/level filters. Rows are lean (name, ext_id, equipment, level, muscles) — enough to pick one; get_exercise returns instructions and media. Paginates: pass next_cursor back as `cursor`.",
"inputSchema": {
"properties": {
"cursor": {
"description": "next_cursor from the previous response. Omit for the first page.",
"type": "string"
},
"equipment": {
"type": "string"
},
"fields": {
"description": "Extra fields, comma-separated, or `all`.",
"type": "string"
},
"level": {
"type": "string"
},
"limit": {
"default": 20,
"type": "number"
},
"muscle": {
"type": "string"
},
"q": {
"type": "string"
}
},
"required": [
"q"
],
"type": "object"
},
"name": "search_exercises",
"outputSchema": {
"properties": {
"next_cursor": {
"type": "string"
},
"results": {
"items": {
"type": "object"
},
"type": "array"
},
"total_matched": {
"type": "number"
}
},
"type": "object"
}
},
{
"description": "Search food products by name (Open Food Facts + USDA). Returns macros per 100g.",
"inputSchema": {
"properties": {
"locale": {
"type": "string"
},
"page_size": {
"type": "number"
},
"q": {
"type": "string"
}
},
"required": [
"q"
],
"type": "object"
},
"name": "search_foods",
"outputSchema": {
"properties": {
"count": {
"type": "number"
},
"items": {
"items": {
"type": "object"
},
"type": "array"
}
},
"type": "object"
}
},
{
"description": "Correct a previously logged meal — name, macros, nutrients, portion, date or meal_type. Pass only the fields you want to change. Requires X-App-User-Id.",
"inputSchema": {
"properties": {
"alcohol": {
"description": "g of ethanol",
"type": "number"
},
"calories": {
"type": "number"
},
"carbs": {
"type": "number"
},
"date": {
"type": "string"
},
"fats": {
"type": "number"
},
"fiber": {
"type": "number"
},
"idempotency_key": {
"type": "string"
},
"meal_id": {
"type": "string"
},
"meal_type": {
"type": "string"
},
"name": {
"type": "string"
},
"protein": {
"type": "number"
},
"saturated_fat": {
"type": "number"
},
"sodium": {
"description": "mg",
"type": "number"
},
"sugar": {
"type": "number"
}
},
"required": [
"meal_id"
],
"type": "object"
},
"name": "update_meal",
"outputSchema": {
"properties": {
"calories": {
"type": "number"
},
"carbs": {
"type": "number"
},
"date": {
"type": "string"
},
"fats": {
"type": "number"
},
"id": {
"type": "string"
},
"name": {
"type": "string"
},
"protein": {
"type": "number"
}
},
"type": "object"
}
},
{
"description": "Correct sets already logged, by set id (log_workout returns them). Relabel the exercise, fix weight/reps/rpe, mark completed, add notes, or delete. Selection and change are separate, so a subset can be relabelled. Adding a set is log_workout, not this.",
"inputSchema": {
"properties": {
"completed": {
"type": "boolean"
},
"delete": {
"type": "boolean"
},
"exercise": {
"description": "Catalog name, ext_id, or the user's own words for a custom movement.",
"type": "string"
},
"notes": {
"type": "string"
},
"reps": {
"type": "number"
},
"rpe": {
"type": "number"
},
"set_ids": {
"items": {
"type": "string"
},
"type": "array"
},
"weight": {
"type": "number"
}
},
"required": [
"set_ids"
],
"type": "object"
},
"name": "update_sets",
"outputSchema": {
"properties": {
"deleted": {
"type": "number"
},
"missing": {
"type": "array"
},
"updated": {
"type": "number"
}
},
"type": "object"
}
},
{
"description": "Upsert the current app user's fitness profile. Set `timezone` first: every daily total, streak and adherence window is bucketed by it and defaults to UTC. `weight` doubles as the fallback bodyweight for bodyweight-inclusive volume when no dated weight metric exists.",
"inputSchema": {
"properties": {
"active_sports": {
"items": {
"type": "string"
},
"type": "array"
},
"daily_calorie_goal": {
"type": "number"
},
"daily_carbs_goal": {
"type": "number"
},
"daily_fats_goal": {
"type": "number"
},
"daily_fiber_goal": {
"description": "g/day to reach",
"type": "number"
},
"daily_protein_goal": {
"type": "number"
},
"daily_sodium_limit": {
"description": "mg/day to stay under",
"type": "number"
},
"daily_sugar_limit": {
"description": "g/day to stay under",
"type": "number"
},
"daily_water_goal_ml": {
"type": "number"
},
"diet_type": {
"type": "string"
},
"goal": {
"type": "string"
},
"height": {
"description": "cm",
"type": "number"
},
"language": {
"type": "string"
},
"meals_per_day": {
"type": "number"
},
"timezone": {
"description": "IANA zone name, e.g. 'Europe/Warsaw'.",
"type": "string"
},
"unit_system": {
"enum": [
"metric",
"imperial"
],
"type": "string"
},
"weight": {
"description": "kg",
"type": "number"
}
},
"type": "object"
},
"name": "upsert_profile",
"outputSchema": null
}
]
}Verify it yourself
curl -s https://api.teppi.xyz/v1/evidence/sha256:b3ab1b726abf4584b4991e28664330ef5ee1d35db76b73d4d2a593a8400aac7f | sha256sum