← WebMCP Directory

Tool tree

understudy-wine.vercel.app

AI & AgentsTools verified
Website
A triage workspace where you demonstrate a routine once and the agent turns it into a reusable WebMCP tool.
Explore capabilities

    page: Every page

    start_recordingAction

    Begin capturing the user's actions as a demonstration -- they are teaching you a routine. Call this when they say anything like "let me teach you", "watch what I do", or "start recording". The page does the capturing; you see nothing until you call get_recording afterwards. Call stop_recording when they say they are done. This is how new skills get created.

    View tool JSON
    {
      "name": "start_recording",
      "kind": "act",
      "impl": "imperative",
      "description": "Begin capturing the user's actions as a demonstration -- they are teaching you a routine. Call this when they say anything like \"let me teach you\", \"watch what I do\", or \"start recording\". The page does the capturing; you see nothing until you call get_recording afterwards. Call stop_recording when they say they are done. This is how new skills get created.",
      "inputSchema": {
        "type": "object",
        "properties": {},
        "required": []
      },
      "page": "/"
    }
    stop_recordingAction

    Stop capturing and return the demonstration id and step count. Call this when the user says they are done teaching. Then call get_recording to see what they actually did.

    View tool JSON
    {
      "name": "stop_recording",
      "kind": "act",
      "impl": "imperative",
      "description": "Stop capturing and return the demonstration id and step count. Call this when the user says they are done teaching. Then call get_recording to see what they actually did.",
      "inputSchema": {
        "type": "object",
        "properties": {},
        "required": []
      },
      "page": "/"
    }
    get_recordingAnswer

    Read back what the user taught you: a plain-language list of what they did, plus, for each step, the exact fields you may turn into parameters. Each field is marked kind:"content" (a value the user typed or picked -- bind these) or kind:"structural" (the shape of the command -- leave these alone). Read the guidance field. Use this before calling save_skill. Defaults to the most recent recording.

    View tool JSON
    {
      "name": "get_recording",
      "kind": "answer",
      "impl": "imperative",
      "description": "Read back what the user taught you: a plain-language list of what they did, plus, for each step, the exact fields you may turn into parameters. Each field is marked kind:\"content\" (a value the user typed or picked -- bind these) or kind:\"structural\" (the shape of the command -- leave these alone). Read the guidance field. Use this before calling save_skill. Defaults to the most recent recording.",
      "inputSchema": {
        "type": "object",
        "properties": {
          "recordingId": {
            "type": "string",
            "description": "Recording id. Omit for the most recent."
          }
        },
        "required": []
      },
      "page": "/"
    }
    save_skillAction

    Turn a recording into a reusable, parameterised skill. You do NOT supply the steps -- they come from the recording exactly as the user performed them. You supply a name, a description, and which fields in which steps become parameters. Bind every kind:"content" field from get_recording unless the user said it should stay fixed -- missing one means the skill is stuck with a value the user only chose as an example. Each parameter needs: name, stepIndex, fieldPath (both from get_recording), type, and description. The skill is created unapproved; the user reviews the parameters in the Skills panel before it can run.

    View tool JSON
    {
      "name": "save_skill",
      "kind": "act",
      "impl": "imperative",
      "description": "Turn a recording into a reusable, parameterised skill. You do NOT supply the steps -- they come from the recording exactly as the user performed them. You supply a name, a description, and which fields in which steps become parameters. Bind every kind:\"content\" field from get_recording unless the user said it should stay fixed -- missing one means the skill is stuck with a value the user only chose as an example. Each parameter needs: name, stepIndex, fieldPath (both from get_recording), type, and description. The skill is created unapproved; the user reviews the parameters in the Skills panel before it can run.",
      "inputSchema": {
        "type": "object",
        "properties": {
          "name": {
            "type": "string",
            "description": "Skill name: lowercase letters, digits and underscores, e.g. triage_by_topic"
          },
          "description": {
            "type": "string",
            "description": "What the skill does, written for whoever calls it later"
          },
          "recordingId": {
            "type": "string",
            "description": "Recording id. Omit for the most recent."
          },
          "params": {
            "type": "array",
            "description": "Fields to expose as parameters. Empty means the skill always does exactly what was demonstrated.",
            "items": {
              "type": "object",
              "properties": {
                "name": {
                  "type": "string",
                  "description": "Parameter name"
                },
                "stepIndex": {
                  "type": "number",
                  "description": "Which step, from get_recording"
                },
                "fieldPath": {
                  "type": "string",
                  "description": "Which field in that step, from bindableFields"
                },
                "type": {
                  "type": "string",
                  "enum": [
                    "string",
                    "number"
                  ],
                  "description": "Parameter type"
                },
                "description": {
                  "type": "string",
                  "description": "What this parameter means"
                }
              },
              "required": [
                "name",
                "stepIndex",
                "fieldPath"
              ]
            }
          }
        },
        "required": [
          "name",
          "description"
        ]
      },
      "page": "/"
    }
    list_skillsAnswer

    List the skills this page has learned, with their parameters and whether the user has approved them. Approved skills can be run with run_skill, and are also registered as tools in their own right. Prefer run_skill: it was registered when the page loaded, so it is never missing from a stale tool snapshot.

    View tool JSON
    {
      "name": "list_skills",
      "kind": "answer",
      "impl": "imperative",
      "description": "List the skills this page has learned, with their parameters and whether the user has approved them. Approved skills can be run with run_skill, and are also registered as tools in their own right. Prefer run_skill: it was registered when the page loaded, so it is never missing from a stale tool snapshot.",
      "inputSchema": {
        "type": "object",
        "properties": {},
        "required": []
      },
      "page": "/"
    }
    run_skillAction

    Run a learned skill. Returns what actually happened at each step, including how many items were affected. Call it as many times as the task needs, with different arguments each time -- the user teaches a routine once on one example, and it is your job to supply the remaining cases from what you know. If asked to apply a skill to a category ("every major browser", "the other big tech companies"), enumerate the members yourself and run the skill once per member. If a step matches nothing it fails with the reason and tells you which earlier steps already applied -- read that and adjust rather than retrying blindly.

    View tool JSON
    {
      "name": "run_skill",
      "kind": "act",
      "impl": "imperative",
      "description": "Run a learned skill. Returns what actually happened at each step, including how many items were affected. Call it as many times as the task needs, with different arguments each time -- the user teaches a routine once on one example, and it is your job to supply the remaining cases from what you know. If asked to apply a skill to a category (\"every major browser\", \"the other big tech companies\"), enumerate the members yourself and run the skill once per member. If a step matches nothing it fails with the reason and tells you which earlier steps already applied -- read that and adjust rather than retrying blindly.",
      "inputSchema": {
        "type": "object",
        "properties": {
          "name": {
            "type": "string",
            "description": "Skill name, from list_skills"
          },
          "args": {
            "type": "object",
            "description": "Arguments matching the skill's inputSchema",
            "additionalProperties": true
          }
        },
        "required": [
          "name"
        ]
      },
      "page": "/"
    }