@@ -588,10 +588,7 @@ def get_content(
588588 output_format : Literal ["text" , "html" , "urls" ] = "text" ,
589589 timeout : float = 5 ,
590590) -> str | list [str ]:
591- """Read visible text, HTML, or discovered URLs from the selected element.
592-
593- Use this tool when you need to get actual page content or URL information
594- rather than page metadata.
591+ """Get visible text, HTML, or discovered URLs from the selected element.
595592
596593 Args:
597594 selector: CSS selector or SeleniumBase-supported XPath selector.
@@ -670,9 +667,6 @@ def get_attributes(
670667 - Need to check element presence/visibility ->
671668 use 'check_if_condition'.
672669
673- This is a read-only operation: It finds elements to get the requested data,
674- but it does not make any modifications to those elements.
675-
676670 If there's no matching element found within the timeout,
677671 then @handle_sb_errors returns details from the exception raised.
678672 """
@@ -1625,10 +1619,18 @@ def scroll_page(
16251619# Windows & tabs
16261620# ---------------------------------------------------------------------------
16271621
1628- @mcp .tool (title = "Manage Window" )
1629- # Annotations intentionally omitted: 'get_rect' is a pure read while
1630- # 'set_rect'/'maximize'/'minimize' modify window state -- no single
1631- # read_only_hint value would be accurate for the whole tool.
1622+ @mcp .tool (
1623+ title = "Manage Window" ,
1624+ annotations = ToolAnnotations (
1625+ destructive_hint = False ,
1626+ idempotent_hint = True ,
1627+ open_world_hint = False ,
1628+ ),
1629+ )
1630+ # The 'read_only_hint' annotation has been intentionally omitted:
1631+ # 'get_rect' is a pure read while
1632+ # 'set_rect'/'maximize'/'minimize' modify window state.
1633+ # There's no single 'read_only_hint' value that's accurate for the whole tool.
16321634@handle_sb_errors
16331635def manage_window (
16341636 action : Literal [
@@ -1808,10 +1810,8 @@ def solve_captcha() -> str:
18081810 """Attempt a SeleniumBase CDP-based CAPTCHA interaction, such as clicking
18091811 a CAPTCHA checkbox, or performing a drag/drop action on a slider CAPTCHA.
18101812
1811- This tool attempts to interact with CAPTCHA controls such as Cloudflare
1812- Turnstile, reCAPTCHA, hCaptcha, DataDome Slider, or FriendlyCaptcha via
1813- the Chrome DevTools Protocol (CDP), which is usually stealthier than
1814- JavaScript because CDP actions can avoid triggering `isTrusted: false`.
1813+ Supported CAPTCHAs include: Cloudflare Turnstile, reCAPTCHA, hCaptcha,
1814+ DataDome Slider, and FriendlyCaptcha.
18151815
18161816 This tool automatically detects the coordinates of CAPTCHA checkboxes
18171817 for determining the correct location to perform the click. If no CAPTCHA
@@ -1830,8 +1830,13 @@ def solve_captcha() -> str:
18301830 or 'manage_cookies' to inspect resulting page/session state.
18311831
18321832 Returns:
1833- A message confirming that the CAPTCHA interaction was attempted .
1833+ A confirmation message of the CAPTCHA interaction.
18341834 The message is the same for both successful and failed attempts.
1835+
1836+ Notes:
1837+ Clicking with the Chrome DevTools Protocol (CDP) is generally
1838+ stealthier than clicking with JavaScript because CDP actions
1839+ can avoid triggering `isTrusted: false`.
18351840 """
18361841 sb = _get_sb ()
18371842 sb .solve_captcha ()
0 commit comments