← WebMCP Directory

Tool tree

handoffhelper.com

Productivity & BusinessTools verified
Website
HANDOFF is a multiplayer ops room where humans and agents work the same support case through WebMCP tools.
Explore capabilities
    get_workspaceAnswer

    Use this read-only tool at the start of a HANDOFF session to inspect the live case queue, unread flags, severity, status, and refund state. Do not use it to change a case or infer full case details; call get_case for a specific case before acting.

    View tool JSON
    {
      "name": "get_workspace",
      "kind": "answer",
      "impl": "imperative",
      "description": "Use this read-only tool at the start of a HANDOFF session to inspect the live case queue, unread flags, severity, status, and refund state. Do not use it to change a case or infer full case details; call get_case for a specific case before acting.",
      "inputSchema": {
        "type": "object",
        "properties": {},
        "required": [],
        "additionalProperties": false
      }
    }
    get_caseAnswer

    Use this read-only tool first for the judge demo case: call get_case with case_id CASE-1042, then draft_customer_reply with tone apologetic, then propose_refund with amount_usd 2388, then issue_refund, then send_customer_reply. Do not use it to modify state; choose an update or proposal tool for changes.

    View tool JSON
    {
      "name": "get_case",
      "kind": "answer",
      "impl": "imperative",
      "description": "Use this read-only tool first for the judge demo case: call get_case with case_id CASE-1042, then draft_customer_reply with tone apologetic, then propose_refund with amount_usd 2388, then issue_refund, then send_customer_reply. Do not use it to modify state; choose an update or proposal tool for changes.",
      "inputSchema": {
        "type": "object",
        "properties": {
          "case_id": {
            "type": "string",
            "pattern": "^CASE-[0-9]{4}$",
            "description": "Case identifier such as CASE-1042."
          }
        },
        "required": [
          "case_id"
        ],
        "additionalProperties": false
      }
    }
    update_case_statusAction

    Use this tool to update a case workflow status after you have enough context and can explain why in a note. Do not use it for money movement, sending customer replies, on-call paging, or resolving a gated case; those have dedicated approval tools.

    View tool JSON
    {
      "name": "update_case_status",
      "kind": "act",
      "impl": "imperative",
      "description": "Use this tool to update a case workflow status after you have enough context and can explain why in a note. Do not use it for money movement, sending customer replies, on-call paging, or resolving a gated case; those have dedicated approval tools.",
      "inputSchema": {
        "type": "object",
        "properties": {
          "case_id": {
            "type": "string",
            "pattern": "^CASE-[0-9]{4}$",
            "description": "Case identifier such as CASE-1042."
          },
          "status": {
            "type": "string",
            "enum": [
              "open",
              "waiting_on_customer",
              "in_progress",
              "resolved",
              "refund_pending",
              "refunded"
            ],
            "description": "New case status."
          },
          "note": {
            "type": "string",
            "maxLength": 240,
            "description": "Short operational note explaining why the status changed."
          }
        },
        "required": [
          "case_id",
          "status",
          "note"
        ],
        "additionalProperties": false
      }
    }
    add_commentAction

    Use this tool to add an agent-authored note to the current case timeline for human review. Public-to-customer visibility means the note is customer-visible context only; it never sends a customer message. Do not use this tool to send replies or change money state.

    View tool JSON
    {
      "name": "add_comment",
      "kind": "act",
      "impl": "imperative",
      "description": "Use this tool to add an agent-authored note to the current case timeline for human review. Public-to-customer visibility means the note is customer-visible context only; it never sends a customer message. Do not use this tool to send replies or change money state.",
      "inputSchema": {
        "type": "object",
        "properties": {
          "case_id": {
            "type": "string",
            "pattern": "^CASE-[0-9]{4}$",
            "description": "Case identifier such as CASE-1042."
          },
          "body": {
            "type": "string",
            "maxLength": 800,
            "description": "Comment body to add to the timeline."
          },
          "visibility": {
            "type": "string",
            "enum": [
              "public_to_customer",
              "internal"
            ],
            "description": "Whether this is internal context or a customer-visible note. Neither option sends a reply."
          }
        },
        "required": [
          "case_id",
          "body",
          "visibility"
        ],
        "additionalProperties": false
      }
    }
    draft_customer_replyAction

    Use this tool after get_case for CASE-1042 to create or replace a visible customer reply draft. For the judge demo, pass tone apologetic and a goal that apologizes for the duplicate charge and explains the refund path; then call propose_refund with amount_usd 2388. This tool does not send anything.

    View tool JSON
    {
      "name": "draft_customer_reply",
      "kind": "act",
      "impl": "imperative",
      "description": "Use this tool after get_case for CASE-1042 to create or replace a visible customer reply draft. For the judge demo, pass tone apologetic and a goal that apologizes for the duplicate charge and explains the refund path; then call propose_refund with amount_usd 2388. This tool does not send anything.",
      "inputSchema": {
        "type": "object",
        "properties": {
          "case_id": {
            "type": "string",
            "pattern": "^CASE-[0-9]{4}$",
            "description": "Case identifier such as CASE-1042."
          },
          "goal": {
            "type": "string",
            "maxLength": 240,
            "description": "Goal for the reply, such as apologize and explain the refund path."
          },
          "tone": {
            "type": "string",
            "enum": [
              "calm",
              "apologetic",
              "firm"
            ],
            "description": "Reply tone."
          }
        },
        "required": [
          "case_id",
          "goal",
          "tone"
        ],
        "additionalProperties": false
      }
    }
    send_customer_replySensitive Action

    Use this destructive tool at the end of the judge sequence after get_case, draft_customer_reply, propose_refund, and issue_refund have completed. Do not call it before a draft exists or before refund approval is complete. It opens a visible human approval gate and waits for Jordan; no customer reply is sent unless Jordan approves.

    View tool JSON
    {
      "name": "send_customer_reply",
      "kind": "transact",
      "impl": "imperative",
      "description": "Use this destructive tool at the end of the judge sequence after get_case, draft_customer_reply, propose_refund, and issue_refund have completed. Do not call it before a draft exists or before refund approval is complete. It opens a visible human approval gate and waits for Jordan; no customer reply is sent unless Jordan approves.",
      "inputSchema": {
        "type": "object",
        "properties": {
          "case_id": {
            "type": "string",
            "pattern": "^CASE-[0-9]{4}$",
            "description": "Case identifier such as CASE-1042."
          }
        },
        "required": [
          "case_id"
        ],
        "additionalProperties": false
      }
    }
    propose_refundAction

    Use this tool after drafting the CASE-1042 customer reply to propose amount_usd 2388 for the duplicate Pro Annual charge. It creates a visible pending approval and does not move money by itself; then call issue_refund to open the human approval gate.

    View tool JSON
    {
      "name": "propose_refund",
      "kind": "act",
      "impl": "imperative",
      "description": "Use this tool after drafting the CASE-1042 customer reply to propose amount_usd 2388 for the duplicate Pro Annual charge. It creates a visible pending approval and does not move money by itself; then call issue_refund to open the human approval gate.",
      "inputSchema": {
        "type": "object",
        "properties": {
          "case_id": {
            "type": "string",
            "pattern": "^CASE-[0-9]{4}$",
            "description": "Case identifier such as CASE-1042."
          },
          "amount_usd": {
            "type": "number",
            "minimum": 0,
            "maximum": 10000,
            "description": "Refund amount in USD. For CASE-1042 use 2388."
          },
          "reason": {
            "type": "string",
            "maxLength": 240,
            "description": "Operational reason for the proposed refund."
          }
        },
        "required": [
          "case_id",
          "amount_usd",
          "reason"
        ],
        "additionalProperties": false
      }
    }
    issue_refundAction

    Use this destructive tool after propose_refund in the judge sequence for CASE-1042. Do not call it before a refund has been proposed. It opens a visible 'Refund $2,388 to Maya Chen?' approval gate and waits for Jordan; the refund state does not change to issued unless Jordan approves. After approval, call send_customer_reply.

    View tool JSON
    {
      "name": "issue_refund",
      "kind": "act",
      "impl": "imperative",
      "description": "Use this destructive tool after propose_refund in the judge sequence for CASE-1042. Do not call it before a refund has been proposed. It opens a visible 'Refund $2,388 to Maya Chen?' approval gate and waits for Jordan; the refund state does not change to issued unless Jordan approves. After approval, call send_customer_reply.",
      "inputSchema": {
        "type": "object",
        "properties": {
          "case_id": {
            "type": "string",
            "pattern": "^CASE-[0-9]{4}$",
            "description": "Case identifier such as CASE-1042."
          }
        },
        "required": [
          "case_id"
        ],
        "additionalProperties": false
      }
    }
    page_oncallAction

    Use this destructive tool only when billing-primary or incident response needs to be interrupted for the case. It requests human approval and does not page until approved. Do not use it for routine notes, status changes, or customer replies.

    View tool JSON
    {
      "name": "page_oncall",
      "kind": "act",
      "impl": "imperative",
      "description": "Use this destructive tool only when billing-primary or incident response needs to be interrupted for the case. It requests human approval and does not page until approved. Do not use it for routine notes, status changes, or customer replies.",
      "inputSchema": {
        "type": "object",
        "properties": {
          "case_id": {
            "type": "string",
            "pattern": "^CASE-[0-9]{4}$",
            "description": "Case identifier such as CASE-1042."
          },
          "message": {
            "type": "string",
            "maxLength": 160,
            "description": "Concise page message for billing-primary."
          }
        },
        "required": [
          "case_id",
          "message"
        ],
        "additionalProperties": false
      }
    }
    list_pending_approvalsAnswer

    Use this read-only tool to inspect all pending human approval gates across HANDOFF. Do not use it to approve, reject, or apply side effects; the human must approve in the UI.

    View tool JSON
    {
      "name": "list_pending_approvals",
      "kind": "answer",
      "impl": "imperative",
      "description": "Use this read-only tool to inspect all pending human approval gates across HANDOFF. Do not use it to approve, reject, or apply side effects; the human must approve in the UI.",
      "inputSchema": {
        "type": "object",
        "properties": {},
        "required": [],
        "additionalProperties": false
      }
    }
    resolve_caseAction

    Use this destructive tool only when the case is truly ready to close and you can provide a concise resolution summary. It requires human approval and refuses to resolve a P1 with an unissued requested refund pending. Do not use it while customer, refund, or on-call work remains unresolved.

    View tool JSON
    {
      "name": "resolve_case",
      "kind": "act",
      "impl": "imperative",
      "description": "Use this destructive tool only when the case is truly ready to close and you can provide a concise resolution summary. It requires human approval and refuses to resolve a P1 with an unissued requested refund pending. Do not use it while customer, refund, or on-call work remains unresolved.",
      "inputSchema": {
        "type": "object",
        "properties": {
          "case_id": {
            "type": "string",
            "pattern": "^CASE-[0-9]{4}$",
            "description": "Case identifier such as CASE-1042."
          },
          "resolution_summary": {
            "type": "string",
            "maxLength": 240,
            "description": "Short summary of the final resolution."
          }
        },
        "required": [
          "case_id",
          "resolution_summary"
        ],
        "additionalProperties": false
      }
    }
    get_sessionAnswer

    Use this read-only tool to inspect the live agent session for CASE-1042: session id, owner, watchers, status, elapsed time, agent state, and current plan step. Use it before redirect_agent or handoff_session so you know who is steering.

    View tool JSON
    {
      "name": "get_session",
      "kind": "answer",
      "impl": "imperative",
      "description": "Use this read-only tool to inspect the live agent session for CASE-1042: session id, owner, watchers, status, elapsed time, agent state, and current plan step. Use it before redirect_agent or handoff_session so you know who is steering.",
      "inputSchema": {
        "type": "object",
        "properties": {},
        "required": [],
        "additionalProperties": false
      }
    }
    list_watchersAnswer

    Use this read-only tool to list teammates watching SES-1042 without changing ownership. If Sam is absent, the human can click Join as Sam or the session can later be handed off to Sam.

    View tool JSON
    {
      "name": "list_watchers",
      "kind": "answer",
      "impl": "imperative",
      "description": "Use this read-only tool to list teammates watching SES-1042 without changing ownership. If Sam is absent, the human can click Join as Sam or the session can later be handed off to Sam.",
      "inputSchema": {
        "type": "object",
        "properties": {},
        "required": [],
        "additionalProperties": false
      }
    }
    redirect_agentAction

    Use this session-control tool when the active human wants to steer Handoff with a short instruction. It updates SES-1042 to redirected and writes a timeline event, but it does not approve refunds, send replies, or page anyone.

    View tool JSON
    {
      "name": "redirect_agent",
      "kind": "act",
      "impl": "imperative",
      "description": "Use this session-control tool when the active human wants to steer Handoff with a short instruction. It updates SES-1042 to redirected and writes a timeline event, but it does not approve refunds, send replies, or page anyone.",
      "inputSchema": {
        "type": "object",
        "properties": {
          "instruction": {
            "type": "string",
            "maxLength": 180,
            "description": "Short steering instruction for the live agent session."
          }
        },
        "required": [
          "instruction"
        ],
        "additionalProperties": false
      }
    }
    handoff_sessionAction

    Use this session-control tool to transfer ownership of SES-1042 between Jordan and Sam. It changes the live session owner and writes a timeline event; it does not approve money movement or send customer replies.

    View tool JSON
    {
      "name": "handoff_session",
      "kind": "act",
      "impl": "imperative",
      "description": "Use this session-control tool to transfer ownership of SES-1042 between Jordan and Sam. It changes the live session owner and writes a timeline event; it does not approve money movement or send customer replies.",
      "inputSchema": {
        "type": "object",
        "properties": {
          "to_participant": {
            "type": "string",
            "enum": [
              "sam",
              "jordan"
            ],
            "description": "Participant who should become the live session owner."
          }
        },
        "required": [
          "to_participant"
        ],
        "additionalProperties": false
      }
    }