Skip to content

Add declarative human-in-the-loop policy hints for tool execution #198

@beladevo

Description

@beladevo

Problem

WebMCP tools have vastly different risk profiles (e.g., a read-only search vs. sending a payment or deleting data). Currently, there is no declarative way for a web application to communicate its expected Human-in-the-Loop (HITL) policy per tool.

Without a structured signal, User Agents (UAs) must infer risk from natural-language descriptions or tool names, leading to inconsistent UX or unsafe assumptions.

Proposal

Add an optional, advisory humanInTheLoopHint to ToolAnnotations.

enum ToolHumanInTheLoopPolicy {
  "none",     // Safe to run autonomously (e.g., read-only lookup)
  "notify",   // Run autonomously but notify user (e.g., temporary UI preference)
  "review",   // Requires preview/summary before finalizing (e.g., staging a draft)
  "confirm"   // Requires explicit approval (e.g., sending email, deleting a file)
};

dictionary ToolAnnotations {
  boolean readOnlyHint = false;
  boolean untrustedContentHint = false;
  ToolHumanInTheLoopPolicy humanInTheLoopHint = "confirm"; 
};

Example Usage

document.modelContext.registerTool({
  name: "email.createDraft",
  title: "Create email draft",
  inputSchema: { /* ... */ },
  annotations: {
    readOnlyHint: false,
    humanInTheLoopHint: "review" 
  },
  async execute(input) { return await createDraft(input); }
});

Why this matters

  1. UX Consistency: Provides a common vocabulary for tool-level expectations, enabling UAs to render standardized confirmation/review states.
  2. Advisory Nature: This does not replace UA safety frameworks. The UA can always ignore the hint or enforce a stricter policy (e.g., forcing a confirm on sensitive actions even if the site requests none).

Open Questions

  1. Should this be a single enum or separate boolean hints (e.g., requiresConfirmationHint)?
  2. What should the default value be? Should readOnlyHint: true implicitly default to "none"?
  3. Should high-risk categories (payments, external communication) have stricter normative guidance that overrides loose site hints?

Next Steps

If the working group is open to this direction, I can submit a PR adding this annotation schema, minimal examples, and non-normative safety guidance to the spec.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type
    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions