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
- UX Consistency: Provides a common vocabulary for tool-level expectations, enabling UAs to render standardized confirmation/review states.
- 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
- Should this be a single enum or separate boolean hints (e.g.,
requiresConfirmationHint)?
- What should the default value be? Should
readOnlyHint: true implicitly default to "none"?
- 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.
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
humanInTheLoopHinttoToolAnnotations.Example Usage
Why this matters
confirmon sensitive actions even if the site requestsnone).Open Questions
requiresConfirmationHint)?readOnlyHint: trueimplicitly default to"none"?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.