MCP server that drives a local Playwright browser through residential proxies — the AI agent picks the country/city and holds one sticky identity per task. Defaults to Aethyn; works with any HTTP proxy.
Strong definition quality overall. All 10 tools have explicit registrations with names, titles, descriptions, and input schemas. Naming follows verb_noun convention consistently (aethyn_launch_browser, aethyn_navigate, aethyn_get_content, etc.). Descriptions are well-crafted (50-250 chars), contextual, and action-oriented. Input schemas use Zod with proper types and constraints. However, output schemas are not formally documented in the tool definitions, responses are inferred from code but not declared in the schema registration. Tool annotations (readOnlyHint, destructiveHint, idempotentHint) are absent, which would improve agent planning. Error handling is present and includes context-specific messages with recovery hints (e.g., 'Call aethyn_list_countries to see options'). Security is well-handled: credentials are injected server-side, not exposed as parameters. Composition is excellent, each tool has one clear responsibility, and output IDs chain properly to downstream tools (session_id is returned from launch and consumed by all others).
Fetch IP info THROUGH the session's proxy so you can verify the exit country/city actually landed before trusting the page. Returns ip, country, city, org/ASN, and a best-effort is_residential flag.
Click an element. Prefer a 'ref' from aethyn_snapshot (e.g. 'e12'); or pass a 'selector' (CSS, or Playwright role=/text= engine).
Close a session, releasing the browser context and exit IP back to the pool.
Return the current page's content cleaned for reading (markdown by default). Use after navigating to extract data.
Launch a local Chromium routed through a residential proxy exit in a chosen country (and city/state on the Elite tier). Returns a session_id the other aethyn_* tools use. Each session is one sticky identity — a pinned exit IP for the whole task.
List all supported countries (ISO codes and names) and their cities/states for Elite targeting. Call before aethyn_launch_browser to validate geo parameters.
Output schemas not formally documented in tool definitions. Responses are JSON objects returned via ToolResult, but the schema structure is not declared in the registerTool() call, forcing LLMs to infer field names from examples in descriptions.
Tool annotations (readOnlyHint, destructiveHint, idempotentHint) are absent. Risk classifications are noted in the assessment ('WRITE', 'READ_ONLY', 'REVERSIBLE'), but not declared in the MCP schema, limiting agent planning and safety checks.
aethyn_click and aethyn_type accept mutually exclusive 'ref' and 'selector' parameters. While documented as optional alternatives ('Prefer ref... or pass selector'), the mutual exclusivity is not enforced in validation, and no error message guides the LLM if both are omitted.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-22 | C | 64 | 2026-07-28+ | v2 |
Navigate the session's browser to a URL and wait for load. Returns the HTTP status, final URL, and page title — read the page with aethyn_get_content to judge the response yourself. Public data only — respect robots.txt, rate limits, and each site's terms.
Rotate the session to a fresh sticky exit (new IP, same geo + tier) and clear cookies. Keeps the browser open. Useful to shed tracking or reset rate limits mid-task.
Return a structured accessibility snapshot (roles, names, and [ref=..] handles) of the page. Pass those refs to aethyn_click / aethyn_type. No screenshots needed.
Type text into an input. Prefer a 'ref' from aethyn_snapshot; or a 'selector'. Set submit:true to press Enter after.
aethyn_rotate and aethyn_close lack detailed descriptions of side effects and recovery. Descriptions are minimal (< 60 chars). For aethyn_rotate, 'Rotate the session...' is terse and doesn't explain when to use it (e.g., to shed tracking or reset rate limits). For aethyn_close, no mention of cleanup implications.
No pagination support for aethyn_list_countries, even though the description hints at a potentially large result. If the list grows, responses could balloon and waste tokens. No limit or offset parameters.