Attack 1 · Label mismatch
Donate $1 to keep the café running
The consent dialog shows “Donate $1”, but the tool actually changes the account email.
Break WebMCP consent, then fix it with a mandate
WebMCP trust boundary · attack surface · fix
SafeGuard registers tools through document.modelContext and shows
how everything a page declares about its tools — the name, the
description, even the readOnlyHint — is attacker-controlled. The
Human Mandate closes the gap by trusting only what actually runs.
name · description · readOnlyHint
{ action } via Effects.apply()
Each attack exploits one signal a page declares; the mandate counters it by trusting the runtime effect instead of the claim.
description
verify the effect, not the copy
effect
check every effect, not just the first
name + copied description
check the runtime behaviour, not the name
readOnlyHint
ignore the hint, check for writes
A virtual café where consent dialogs can lie.
A Human Mandate that verifies effect, not the words on the dialog.
| # | Intent (tool) | Consent shown | Mandate verdict | Actual effect |
|---|---|---|---|---|
| No tool calls yet. Trigger an attack or defence scenario above. | ||||
🔒 Read-only — this tool makes no changes to your account