← WebMCP Directory

Tool tree

fromcoach.vercel.app

Health & EducationTools verified
Website
FormCoach — a workout page that measures your reps and form with on-device pose tracking and exposes the numbers to browser agents as WebMCP tools. The camera never leaves the tab.
Explore capabilities
    getWorkoutPlanAnswer

    Returns today's workout plan: blocks of exercise/sets/reps/rest, who created it (user or agent), and the user's note about injuries or limits. Call this before suggesting changes or starting sets. Read-only.

    View tool JSON
    {
      "name": "getWorkoutPlan",
      "kind": "answer",
      "impl": "imperative",
      "description": "Returns today's workout plan: blocks of exercise/sets/reps/rest, who created it (user or agent), and the user's note about injuries or limits. Call this before suggesting changes or starting sets. Read-only.",
      "inputSchema": {
        "type": "object",
        "properties": {}
      }
    }
    getLiveMetricsAnswer

    Returns the live rep count, joint angle, camera view, form flags, and rest timer measured by the webcam in this tab. During rest, trackingMode is palm: handDetected, palmDetected, palmHoldProgress (0-1), and handTracking report open-palm recognition for skipping rest; body pose is not tracked. Call this whenever the user asks how they are doing, or before deciding to adjust the program. Contains numbers and status fields only — no images. Read-only, safe to poll.

    View tool JSON
    {
      "name": "getLiveMetrics",
      "kind": "answer",
      "impl": "imperative",
      "description": "Returns the live rep count, joint angle, camera view, form flags, and rest timer measured by the webcam in this tab. During rest, trackingMode is palm: handDetected, palmDetected, palmHoldProgress (0-1), and handTracking report open-palm recognition for skipping rest; body pose is not tracked. Call this whenever the user asks how they are doing, or before deciding to adjust the program. Contains numbers and status fields only — no images. Read-only, safe to poll.",
      "inputSchema": {
        "type": "object",
        "properties": {}
      }
    }
    getSetHistoryAnswer

    Returns the completed sets of this session: exercise, reps vs target, form-flag counts, and average tempo per set. Call this to review progress or summarize mid-session. Read-only.

    View tool JSON
    {
      "name": "getSetHistory",
      "kind": "answer",
      "impl": "imperative",
      "description": "Returns the completed sets of this session: exercise, reps vs target, form-flag counts, and average tempo per set. Call this to review progress or summarize mid-session. Read-only.",
      "inputSchema": {
        "type": "object",
        "properties": {}
      }
    }
    createWorkoutPlanAction

    Creates a workout plan with one exercise, sets, reps, rest seconds, and an optional note about injuries or limits. Available before a session starts or after it ends. Replaces the previous plan and starts a fresh idle session. Call when the user asks you to create their workout plan.

    View tool JSON
    {
      "name": "createWorkoutPlan",
      "kind": "act",
      "impl": "imperative",
      "description": "Creates a workout plan with one exercise, sets, reps, rest seconds, and an optional note about injuries or limits. Available before a session starts or after it ends. Replaces the previous plan and starts a fresh idle session. Call when the user asks you to create their workout plan.",
      "inputSchema": {
        "type": "object",
        "properties": {
          "exercise": {
            "type": "string",
            "enum": [
              "squat",
              "pushup"
            ],
            "description": "Exercise to train."
          },
          "sets": {
            "type": "integer",
            "minimum": 1,
            "maximum": 10,
            "description": "Number of sets."
          },
          "reps": {
            "type": "integer",
            "minimum": 1,
            "maximum": 50,
            "description": "Target reps per set."
          },
          "restSec": {
            "type": "integer",
            "minimum": 10,
            "maximum": 600,
            "description": "Rest between sets in seconds."
          },
          "userNote": {
            "type": "string",
            "maxLength": 500,
            "description": "Optional injuries, sensitivities, or limits the coach should know."
          }
        },
        "required": [
          "exercise",
          "sets",
          "reps",
          "restSec"
        ]
      }
    }
    startSetAction

    Starts the next set (or the set of a specific plan block) after a 3-second on-screen countdown. Available when the session is idle or resting. Call when the user says they are ready.

    View tool JSON
    {
      "name": "startSet",
      "kind": "act",
      "impl": "imperative",
      "description": "Starts the next set (or the set of a specific plan block) after a 3-second on-screen countdown. Available when the session is idle or resting. Call when the user says they are ready.",
      "inputSchema": {
        "type": "object",
        "properties": {
          "blockIndex": {
            "type": "integer",
            "description": "Optional 0-based plan block to jump to. Omit to continue the plan in order."
          }
        }
      }
    }
    createPlanAction

    Create today's workout plan: exercise, sets, reps, rest seconds, and a note about injuries or limits.

    View tool JSON
    {
      "name": "createPlan",
      "kind": "act",
      "impl": "declarative",
      "description": "Create today's workout plan: exercise, sets, reps, rest seconds, and a note about injuries or limits.",
      "inputSchema": {
        "type": "object",
        "properties": {
          "exercise": {
            "type": "string",
            "enum": [
              "squat",
              "pushup"
            ]
          },
          "sets": {
            "type": "number"
          },
          "reps": {
            "type": "number"
          },
          "restSec": {
            "type": "number"
          },
          "userNote": {
            "type": "string",
            "description": "e.g. left knee is sensitive"
          }
        }
      }
    }