{"apiVersion":"v1","directorySlug":"wattflow-mcp-ae1181901a","title":"Wattflow","description":null,"pageUrl":"https://www.mcpbundles.com/skills/wattflow-mcp-ae1181901a","connectPath":"importable","connectAction":"import_server","catalogListing":false,"bundleSlug":null,"listingKind":"remote_mcp","kind":"provider","transportUrl":"https://mcp.wattflow.net/mcp","hostedMcpUrl":null,"toolCount":13,"toolInventoryStatus":"observed","refreshedAt":"2026-11-03T13:26:00.516172+00:00","registryName":"net.wattflow/wattflow-mcp-ae1181901a","registryVersion":"2026.11.3","registryEligible":true,"tools":[{"name":"get_profile","description":"Return the FitFlow profile and the user's real training profile (goal, experience, available equipment, load tags to avoid, focus muscles) as collected in the app. training_profile is null when the user has not completed onboarding — ask the user for those constraints before planning.","inputSchema":{"type":"object","$schema":"http://json-schema.org/draft-07/schema#","properties":{}},"title":"Get FitFlow profile","annotations":{"readOnlyHint":true,"untrustedContentHint":true},"logicalName":"get_profile","displayName":"Get FitFlow profile"},{"name":"get_exercise_catalog","description":"List FitFlow exercises the model may put in a training plan. Filter by equipment, category, and load tags to avoid. Do not invent exercise IDs. Set include_teaching: true to get the same step-by-step teaching text the app shows; quote it verbatim instead of writing your own.","inputSchema":{"type":"object","$schema":"http://json-schema.org/draft-07/schema#","properties":{"limit":{"type":"integer","maximum":50,"exclusiveMinimum":0},"cursor":{"type":["string","null"]},"equipment":{"type":"array","items":{"type":"string"}},"categories":{"type":"array","items":{"type":"string"}},"include_teaching":{"type":"boolean"},"excluded_load_tags":{"type":"array","items":{"type":"string"}}},"additionalProperties":false},"title":"Get exercise catalog","annotations":{"readOnlyHint":true,"untrustedContentHint":true},"logicalName":"get_exercise_catalog","displayName":"Get exercise catalog"},{"name":"create_training_plan","description":"Save a user-confirmed training plan. sessions must cover every day. Use only exercise IDs from get_exercise_catalog. request_id is required for idempotency.","inputSchema":{"type":"object","$schema":"http://json-schema.org/draft-07/schema#","required":["request_id","title","goal","start_date","timezone","duration_days","sessions"],"properties":{"goal":{"type":"string","minLength":1},"sessions":{"type":"array","items":{"type":"object","required":["day","title","exercises"],"properties":{"day":{"type":"integer","exclusiveMinimum":0},"exercises":{"type":"array","items":{"type":"object","required":["exercise_id","sets","rest_seconds"],"properties":{"reps":{"type":"integer","exclusiveMinimum":0},"sets":{"type":"integer","exclusiveMinimum":0},"exercise_id":{"type":"string","minLength":1},"rest_seconds":{"type":"integer","minimum":0},"duration_seconds":{"type":"integer","exclusiveMinimum":0}},"additionalProperties":false}}},"additionalProperties":false},"minItems":1},"timezone":{"type":"string","minLength":1},"request_id":{"type":"string","minLength":1},"start_date":{"type":"string","pattern":"^\\d{4}-\\d{2}-\\d{2}$"},"constraints":{"type":"array","items":{"type":"object","required":["tag","restriction"],"properties":{"tag":{"type":"string","minLength":1},"side":{"type":"string"},"restriction":{"type":"string","const":"avoid"}},"additionalProperties":false}},"duration_days":{"type":"integer","exclusiveMinimum":0}},"additionalProperties":false},"title":"Create training plan","logicalName":"create_training_plan","displayName":"Create training plan","annotations":{"untrustedContentHint":true,"readOnlyHint":true}},{"name":"get_training_plan","description":"Return the user's active training plan, or a specific plan_id/version. Each session carries a status (pending/completed) taken from the same source the app displays, so you do not need to infer completion from history.","inputSchema":{"type":"object","$schema":"http://json-schema.org/draft-07/schema#","properties":{"plan_id":{"type":"string"},"version":{"type":"integer","exclusiveMinimum":0}},"additionalProperties":false},"title":"Get training plan","annotations":{"readOnlyHint":true,"untrustedContentHint":true},"logicalName":"get_training_plan","displayName":"Get training plan"},{"name":"get_training_history","description":"Return recent actual workout records for replanning. Skipped exercises are not counted as completed.","inputSchema":{"type":"object","$schema":"http://json-schema.org/draft-07/schema#","properties":{"days":{"type":"integer","maximum":90,"exclusiveMinimum":0},"limit":{"type":"integer","maximum":50,"exclusiveMinimum":0}},"additionalProperties":false},"title":"Get training history","annotations":{"readOnlyHint":true,"untrustedContentHint":true},"logicalName":"get_training_history","displayName":"Get training history"},{"name":"update_training_plan","description":"Create a new version of an existing plan. Pass the current version. On version_conflict, call get_training_plan and retry. Does not delete past workout records.","inputSchema":{"type":"object","$schema":"http://json-schema.org/draft-07/schema#","required":["request_id","title","goal","start_date","timezone","duration_days","sessions","plan_id","version"],"properties":{"goal":{"type":"string","minLength":1},"plan_id":{"type":"string","minLength":1},"version":{"type":"integer","exclusiveMinimum":0},"sessions":{"type":"array","items":{"type":"object","required":["day","title","exercises"],"properties":{"day":{"type":"integer","exclusiveMinimum":0},"exercises":{"type":"array","items":{"type":"object","required":["exercise_id","sets","rest_seconds"],"properties":{"reps":{"type":"integer","exclusiveMinimum":0},"sets":{"type":"integer","exclusiveMinimum":0},"exercise_id":{"type":"string","minLength":1},"rest_seconds":{"type":"integer","minimum":0},"duration_seconds":{"type":"integer","exclusiveMinimum":0}},"additionalProperties":false}}},"additionalProperties":false},"minItems":1},"timezone":{"type":"string","minLength":1},"request_id":{"type":"string","minLength":1},"start_date":{"type":"string","pattern":"^\\d{4}-\\d{2}-\\d{2}$"},"constraints":{"type":"array","items":{"type":"object","required":["tag","restriction"],"properties":{"tag":{"type":"string","minLength":1},"side":{"type":"string"},"restriction":{"type":"string","const":"avoid"}},"additionalProperties":false}},"duration_days":{"type":"integer","exclusiveMinimum":0}},"additionalProperties":false},"title":"Update training plan","logicalName":"update_training_plan","displayName":"Update training plan","annotations":{"untrustedContentHint":true,"readOnlyHint":true}},{"name":"get_today_workout","description":"Return the single session the user should do today in the app (or on a given date): exercise IDs, sets, reps, duration, rest, and whether it is already completed. The date is resolved with the plan's own timezone, so do not compute it yourself from the plan sessions. workout is null when the plan has no session mapped to that date. Set include_teaching: true to also get the exercise teaching text the app displays (setup steps, execution steps, form cues, breathing, safety notes, common mistakes,","inputSchema":{"type":"object","$schema":"http://json-schema.org/draft-07/schema#","properties":{"date":{"type":"string","pattern":"^\\d{4}-\\d{2}-\\d{2}$"},"include_teaching":{"type":"boolean"}},"additionalProperties":false},"title":"Get today's workout","annotations":{"readOnlyHint":true,"untrustedContentHint":true},"logicalName":"get_today_workout","displayName":"Get today's workout"},{"name":"update_training_day","description":"Create a new plan version in which only the given day changes; every other day keeps its exercises and completion status. Pass the current version for optimistic locking. Identify the day by date (user's local date) or by day index, not both. Pass an empty exercises array to make it a rest day. Only exercise IDs from get_exercise_catalog are accepted - never send your own teaching text. Always confirm with the user before calling this tool.","inputSchema":{"type":"object","$schema":"http://json-schema.org/draft-07/schema#","required":["request_id","plan_id","version","exercises"],"properties":{"day":{"type":"integer","exclusiveMinimum":0},"date":{"type":"string","pattern":"^\\d{4}-\\d{2}-\\d{2}$"},"plan_id":{"type":"string","minLength":1},"version":{"type":"integer","exclusiveMinimum":0},"exercises":{"type":"array","items":{"type":"object","required":["exercise_id","sets","rest_seconds"],"properties":{"reps":{"type":"integer","exclusiveMinimum":0},"sets":{"type":"integer","exclusiveMinimum":0},"exercise_id":{"type":"string","minLength":1},"rest_seconds":{"type":"integer","minimum":0},"duration_seconds":{"type":"integer","exclusiveMinimum":0}},"additionalProperties":false}},"request_id":{"type":"string","minLength":1}},"additionalProperties":false},"title":"Update one training day","logicalName":"update_training_day","displayName":"Update one training day","annotations":{"untrustedContentHint":true,"readOnlyHint":true}},{"name":"get_progress","description":"Return the user's objectives with server-computed progress, plus the tasks scheduled in the given date range. Training task completion is derived from real workout records. Use this before planning so you adapt to what the user actually did.","inputSchema":{"type":"object","$schema":"http://json-schema.org/draft-07/schema#","properties":{"date":{"type":"string","pattern":"^\\d{4}-\\d{2}-\\d{2}$"},"days":{"type":"integer","maximum":31,"exclusiveMinimum":0},"timezone":{"type":"string"}},"additionalProperties":false},"title":"Get progress","annotations":{"readOnlyHint":true,"untrustedContentHint":true},"logicalName":"get_progress","displayName":"Get progress"},{"name":"create_objective","description":"Save a user-confirmed objective (a measurable outcome). metric_type must pair with the unit: completed_sessions (times), training_minutes (minutes), completed_tasks (tasks). Progress is computed server-side from real records - never invent it.","inputSchema":{"type":"object","$schema":"http://json-schema.org/draft-07/schema#","required":["title","metric_type","target_value","start_date","timezone"],"properties":{"end_date":{"$ref":"#/properties/start_date"},"goal_key":{"type":"string"},"timezone":{"type":"string"},"start_date":{"type":"string","pattern":"^\\d{4}-\\d{2}-\\d{2}$"},"metric_type":{"enum":["completed_sessions","training_minutes","completed_tasks"],"type":"string"},"target_value":{"type":"number","exclusiveMinimum":0},"aggregation_window":{"enum":["total","daily","weekly"],"type":"string"}},"additionalProperties":false},"title":"Create objective","logicalName":"create_objective","displayName":"Create objective","annotations":{"untrustedContentHint":true,"readOnlyHint":true}},{"name":"create_tasks","description":"Save user-confirmed everyday tasks (manual to-dos). These are plain tasks; training tasks are generated by the plan write contract, so do not create them here. Each task needs a title and a scheduled_date in the user's local calendar.","inputSchema":{"type":"object","$schema":"http://json-schema.org/draft-07/schema#","required":["tasks"],"properties":{"tasks":{"type":"array","items":{"type":"object","required":["title","scheduled_date"],"properties":{"objective_id":{"type":"string","format":"uuid"},"scheduled_date":{"type":"string","pattern":"^\\d{4}-\\d{2}-\\d{2}$"}},"additionalProperties":false},"maxItems":20,"minItems":1}},"additionalProperties":false},"title":"Create tasks","logicalName":"create_tasks","displayName":"Create tasks","annotations":{"untrustedContentHint":true,"readOnlyHint":true}},{"name":"get_health_metrics","description":"获取用户近期的生理与活动健康数据（如每日步数、活动千卡消耗、睡眠时长、静息心率、体重）。在根据用户身体恢复状态调整计划时使用。","inputSchema":{"type":"object","$schema":"http://json-schema.org/draft-07/schema#","properties":{"days":{"type":"integer","maximum":30,"exclusiveMinimum":0}},"additionalProperties":false},"title":"Get FitFlow Health Metrics","annotations":{"readOnlyHint":true,"untrustedContentHint":true},"logicalName":"get_health_metrics","displayName":"Get FitFlow Health Metrics"},{"name":"record_health_metrics","description":"记录或更新用户的生理健康数据（如步数、消耗、睡眠时长、静息心率、体重）。支持用户口述或外部设备同步。","inputSchema":{"type":"object","$schema":"http://json-schema.org/draft-07/schema#","properties":{"steps":{"type":"integer","minimum":0},"source":{"type":"string"},"weight_kg":{"type":"number","maximum":500,"exclusiveMinimum":0},"record_date":{"type":"string","pattern":"^\\d{4}-\\d{2}-\\d{2}$"},"sleep_hours":{"type":"number","maximum":24,"minimum":0},"active_calories":{"type":"number","minimum":0},"resting_heart_rate":{"type":"integer","maximum":250,"exclusiveMinimum":0}},"additionalProperties":false},"title":"Record FitFlow Health Metrics","logicalName":"record_health_metrics","displayName":"Record FitFlow Health Metrics","annotations":{"untrustedContentHint":true,"readOnlyHint":true}}],"toolSource":"directory_preview","agentAction":"both","installLinks":[{"id":"cursor","label":"Cursor","href":"cursor://anysphere.cursor-deeplink/mcp/install?name=Wattflow&config=eyJ1cmwiOiAiaHR0cHM6Ly9tY3Aud2F0dGZsb3cubmV0L21jcCJ9"},{"id":"vscode","label":"VS Code","href":"vscode:mcp/install?%7B%22name%22%3A%22Wattflow%22%2C%22type%22%3A%22http%22%2C%22url%22%3A%22https%3A%2F%2Fmcp.wattflow.net%2Fmcp%22%7D"},{"id":"vscode-insiders","label":"VS Code Insiders","href":"vscode-insiders:mcp/install?%7B%22name%22%3A%22Wattflow%22%2C%22type%22%3A%22http%22%2C%22url%22%3A%22https%3A%2F%2Fmcp.wattflow.net%2Fmcp%22%7D"},{"id":"claude-web","label":"Claude.ai","href":"https://claude.ai/customize/connectors?modal=add-custom-connector&connectorName=Wattflow&connectorUrl=https%3A%2F%2Fmcp.wattflow.net%2Fmcp"},{"id":"codex","label":"Codex","copyText":"codex mcp add \"Wattflow\" --url \"https://mcp.wattflow.net/mcp\""},{"id":"chatgpt","label":"ChatGPT","href":"https://www.mcpbundles.com/docs/integrations/chatgpt"}],"catalogUrl":"https://www.mcpbundles.com/api/directory/v1/servers/wattflow-mcp-ae1181901a","callUrl":"https://www.mcpbundles.com/api/directory/v1/servers/wattflow-mcp-ae1181901a/tools/{tool}","mcpServerUrl":"https://mcp.wattflow.net/mcp","liveCatalogUrl":"https://www.mcpbundles.com/api/directory/v1/servers/wattflow-mcp-ae1181901a?live=1"}