INNER CODE UNIT · Python
_says
feder-cr/Jobs_Applier_AI_Agent_AIHawk · src/aihawk/mcp/server.py:233
def _says(title: str, *, read_only: bool = False, destructive: bool = False,
open_world: bool = True) -> ToolAnnotations:
"""What a client may assume about a tool before it calls it.
Every tool declares a title and states BOTH hints, never leaving one out:
`read_only` (readOnlyHint) for a tool that changes nothing, so a client
may run it without asking each time, and `destructive` (destructiveHint)
for one that acts on the page or on a browser, which a client confirms.
Anything that types, clicks, navigates or closes is `destructive` here: a
form submitted or a page left behind cannot be undone from this side.
`open_world` says the tool reaches the live web.
⛔ AND UNTIL 0.48.0 THERE WAS A THIRD GROUP, five tools that claimed to be
the first while going through the wake funnel, which STARTS a real Firefox
when none is running. A tool that can spawn a browser has modified its
environment, so `readOnlyHint` was false in fact and true on the wire, and
a client trusting it ran them unattended. Nothing starts a browser now
but `browser_open` - every other tool goes through `Work.acting`, which