Skip to main content
Glama

Argus

An MCP server that tests apps like a real testing engineer—exploring user journeys, discovering unscripted bugs, and proving each finding before reporting it.

Argus is an MCP server. It adds evidence-first browser QA to Claude Code, Codex, Cursor, or any MCP host without taking over the host agent's identity or broader coding task. The agent explores, inspects, verifies persistence, and records reproducible bugs. Every certified finding is independently re-confirmed from a clean page load before it's reported.

PyPI Python MCP server Official MCP Registry Capability ceiling License: MIT

Product page · Quick start · Why Argus · Compared · Tools · Benchmarks


The output

Give it a URL; get a report of bugs — each tagged with whether Argus independently reproduced it or only observed it:

The green badge is the whole point. Anyone can have an LLM claim a bug. Argus re-loads the page from scratch and re-checks the symptom before it says VERIFIED — so the report is a list of bugs you can trust, not a list of guesses to triage.


Related MCP server: argus-qa

How it works

flowchart LR
    A(["observe"]) --> B{"looks wrong?"}
    B -->|not sure| C["act: click · type · resize · verify"]
    C --> A
    B -->|bug| D["verify_persistence — reload from a clean state"]
    D -->|symptom repeats| E(["VERIFIED"])
    D -->|symptom gone| F(["dropped — no false positive"])
    E --> G[["report: HTML · JSON · JUnit · SARIF"]]

The agent is the intelligence. Argus supplies concise QA guidance, a description-keyed tool surface (click_what("Login button"), not click(7)), a goal coverage ledger, and a reproduction-receipt engine that turns "the model thinks this is a bug" into "this bug is real, here's the proof."


Quick start

With uv installed, no global Python package install is required. Install Chromium once:

uvx --from playwright playwright install chromium

Then connect Argus to your MCP client.

Claude Code

claude mcp add argus -- uvx --from argus-testing argus-mcp

Codex and the ChatGPT desktop app

Codex CLI, the Codex IDE extension, and the ChatGPT desktop app share the same local MCP configuration:

codex mcp add argus -- uvx --from argus-testing argus-mcp

Cursor

Add Argus to Cursor

The button adds Argus to Cursor; run the Chromium installation command above once before the first test.

Any stdio MCP client

{
  "mcpServers": {
    "argus": {
      "command": "uvx",
      "args": ["--from", "argus-testing", "argus-mcp"]
    }
  }
}

The default core profile exposes the primary web-testing workflow without flooding the host with every specialist tool. Use uvx --from argus-testing argus-mcp --list-tools to inspect the selected profile, --tool-profile screen for native macOS testing, or --tool-profile full for the entire advanced surface. ARGUS_TOOL_PROFILE provides the same setting through the environment.

Then just ask, in your agent session:

"Test my app at http://localhost:3000 — find real bugs."

That's it. The agent drives; Argus keeps it honest and writes the report.

For a scoped review, the host can give start_session explicit goals, constraints, and an advisory time_budget_minutes. Argus returns the full testing protocol once and keeps outstanding goals and discovered pages visible in later observations. Mark a goal in_progress before its journey; when coverage_update marks it exercised or blocked, Argus requires a concrete explanation and automatically links the URLs, value-redacted actions, screenshots, persistence checks, bugs, and observations produced in that testing window. The final HTML and JSON reports preserve both completed and unfinished coverage instead of implying that an incomplete pass was comprehensive.

pip install argus-testing
playwright install chromium
claude mcp add argus -- argus-mcp
# Uses a LiteLLM-backed planner. Set a provider key (OPENAI_API_KEY, DEEPSEEK_API_KEY, …).
uvx --from argus-testing argus http://localhost:3000 --model deepseek/deepseek-chat

# Higher recall: union N independent passes (deduped, proven instance kept)
uvx --from argus-testing argus http://localhost:3000 --passes 3
pip install 'argus-testing[mac]'
brew install cliclick          # keystroke / coordinate fallback
argus-mcp --doctor             # check Screen Recording + Accessibility grants
claude mcp add argus-screen -- argus-mcp --tool-profile screen

Same description-keyed tools, but the target is whatever app is foreground on macOS — Notes, Cursor, Safari, your in-progress feature. No headless Chrome, no scripted Playwright. Argus sees what you see, via the Accessibility tree.

Artifact and resource limits

Argus writes each run's screenshots into its own run directory so later tests cannot overwrite earlier evidence. Long browser sessions also keep bounded in-memory event logs and only read response bodies for inspectable API traffic; binary and oversized bodies are skipped before they enter Python memory.

Report cleanup is explicit and dry-run by default. The newest 20 complete runs are protected in this example; .argus journals and state capsules are never deleted:

argus-cleanup --output ./argus-reports --keep-runs 20
argus-cleanup --output ./argus-reports --keep-runs 20 --apply

Use --older-than-days and --max-size-mb for stricter policies. Advanced limits can be adjusted with ARGUS_MAX_NETWORK_EVENTS, ARGUS_MAX_ERROR_EVENTS, ARGUS_MAX_DOWNLOAD_EVENTS, ARGUS_MAX_DIALOG_EVENTS, ARGUS_MAX_RESPONSE_BODY_BYTES, and ARGUS_MAX_RESPONSE_READ_BYTES. Responses without a declared length are skipped by default; ARGUS_CAPTURE_UNKNOWN_LENGTH_BODY=1 opts into reading them. When a limit discards old evidence, Argus says so in tool output and the final session summary.


Why Argus is different

Existing testing tools only test what you script. Playwright and Cypress run the assertions you wrote. Argus discovers bugs you didn't think to test for — and then does the thing an LLM alone can't be trusted to do: proves them.

Autonomous & black-box

You give it a URL, not a test plan. It explores like a real user — no repo access, no scripted steps.

Coverage contract

Optional natural-language goals, user constraints, discovered pages, and time budget stay visible throughout the session and in the final report.

Reproduction receipts

Before certifying a bug, it re-loads the page from a clean state and re-confirms the symptom. Engineered for zero false-certifications.

Finds human-eye bugs

Fake "Only 3 left!" scarcity, a "Saved" toast that doesn't save, a sale badge where the price didn't drop, a stale navbar after a rename. Static analysis catches none of these.

Discover → guard

Findings are journaled; argus-regression re-checks them on every build with zero LLM cost and a non-zero exit — a real CI gate against known bugs coming back.

Machine-readable

Every report also emits JSON, JUnit, and SARIF — so findings gate a pipeline and surface as inline GitHub PR annotations.


How it compares

On the axis that matters for finding bugs — autonomously discover, independently verify, and report — Argus occupies a different slot from the browser-MCP crowd:

Argus

Playwright MCP

Chrome DevTools MCP

browser-use

Autonomously finds unknown bugs

Yes

No (driver)

No (debugger)

Partial (task-scoped)

Independently verifies each finding

Yes (receipt)

No

No

No (LLM score)

Evidence-rich bug report

Yes

No

No

Partial

Black-box (no repo / source access)

Yes

Yes

Yes

Yes

Zero-LLM CI regression gate

Yes

Partial

No

Partial

These aren't "worse" tools — they're a different job. Playwright MCP gives an agent excellent hands; Chrome DevTools MCP gives it deep network/perf/memory inspection Argus doesn't have. Argus is the layer that decides what's a bug and proves it. Use them together.


Benchmarks

$ python -m argus.bench --target all

  buggytasks    22 / 22  = 100 %   ·  mechanical bugs (console errors, fake delete, auth bypass…)
  darkshop      12 / 12  = 100 %   ·  human-eye bugs (fake scarcity, lying toasts, stale state…)
  ──────────────────────────────────────────────────────────────────────
  total         34 / 34  = 100 %   ·  reproducible from git clone in two commands

34 / 34 is the capability ceiling — what's findable through the tool surface, measured by deterministic scripts. It is deliberately separate from how often a given LLM remembers to use the tools well, which is noisy and honestly reported below.

python -m argus.bench.agent_runner puts an actual model in the driver's seat and scores recall across trials. What we've learned running it:

  1. Real recall sits well below the 34/34 ceiling. A live driver finds a fraction of the seeded bugs per pass — the ceiling is what's findable, this is what a model finds.

  2. Variance is large — never rank models on a few runs. Per-trial recall swings widely; we report the spread, not a single hero number.

  3. Dogfooding the bench found real bugs in Argus itself — a record_bug crash on a string argument that silently dropped findings, resolver misses on common phrasings. The tool-testing tool got tested.

  4. Precision holds regardless of driver. Across every trial, the reproduction receipt kept false-certifications at zero — a weak model finds fewer bugs, but the ones marked VERIFIED are still real.

BuggyTasks (:5555) — 22 mechanical bugs in a task app: console errors, dead links, fake delete (UI says "deleted!" but data persists on refresh), auth bypass, NaN dates, off-by-one counts, race conditions. The "scripted E2E could find these" tier.

DarkShop (:5556) — 12 human-eye bugs in a polished-looking store: hardcoded "Only 3 left!" scarcity, -50% badges where sale price equals original, a "free shipping over $50" banner contradicted by a flat $5 at checkout, inverted visual hierarchy ("Add to Cart" demoted under a prominent "Subscribe"), cross-page state drift (rename sticks on /account, navbar greeting doesn't). Static analysis catches roughly none of these — they require an agent that reads the page and reasons.

python test-site/app.py           # BuggyTasks  :5555
python human-eye-fixture/app.py   # DarkShop    :5556
python -m argus.bench --target all

Tool surface

argus-mcp starts with the focused core web profile. Every public tool is documented below. The counts are also available directly from the installed server:

uvx --from argus-testing argus-mcp --list-tools
uvx --from argus-testing argus-mcp --tool-profile screen --list-tools
uvx --from argus-testing argus-mcp --tool-profile full --list-tools

Profile

Public tools

Intended use

core

30

Primary browser QA workflow; the default.

screen

14

Focused native macOS testing through Accessibility and screenshots.

full

77

Everything in core and screen, plus specialist browser, state, network, coordinate, and crawl controls.

Tools

Purpose

start_session

Start an exploratory, visual, or regression browser review; optionally accept goals, constraints, and time_budget_minutes; return the one-time protocol and initial observation.

observe

Return URL, title, description-keyed interactive elements, counts, visible feedback, ARIA tree, and viewport state.

coverage_update

Open a goal evidence window with in_progress, then mark it exercised or blocked; terminal states require an explanation and automatically link session evidence.

click_what

Click the element best matching a natural-language description; return candidates instead of guessing when ambiguous.

type_into · select_into

Resolve a field by description, then type text or select an option.

hover_what · press_key

Exercise hover states and keyboard interactions against description-keyed targets.

resize · emulate_device

Test responsive breakpoints or reopen the page under real mobile touch, UA, DPR, and viewport settings.

upload_file

Attach one or more local files to a matching file input.

navigate · go_back · scroll_down

Navigate directly, return through browser history, or reveal content below the fold.

inspect_element · check_layout

Inspect computed styles, ARIA and markup, or bounded overflow, clipping, small-target, and overlay signals.

screenshot · screenshot_diff

Capture viewport, full-page, or element evidence and produce a red-tint pixel-diff overlay.

get_errors

Drain correlated console errors and HTTP 4xx/5xx events captured since the previous read.

capsule_save · capsule_restore

Save and restore a named authenticated or seeded browser state, with an optional liveness check.

verify_persistence

Force a fresh load and check whether target text is present or absent. The “Saved!” toast is not proof; this is.

test_action · test_form

Perform a description-keyed action or form submission and return the resulting state diff in one round trip.

check_links · check_performance

Probe current-page internal links and expose raw browser performance metrics without auto-certifying generic audit findings.

regression_check

Re-test journaled findings for the current origin without requiring another discovery pass.

record_bug · record_observation

Record a reproducible defect with evidence and receipt, or keep a qualitative review note separate from certified bugs.

end_session

Close the active session and emit HTML, JSON, JUnit, and SARIF reports.

Reports keep original screenshots as evidence and, by default, write compact WebP previews under report-assets/ instead of base64-embedding every full-size PNG into the HTML. Set ARGUS_PORTABLE_REPORT=1 when a single self-contained HTML file is more important than size. JSON output includes complete reproduction receipts, the coverage contract and its structured evidence references, constraints, review mode, tool-call and recorded-step counts, screenshot metadata, and qualitative observations. JUnit suite failure totals match the emitted <failure> nodes.

Tools

Purpose

start_screen_session

Bind to the foreground or a named macOS app after checking Screen Recording and Accessibility permissions.

screen_observe

Return the foreground app, window title, bounded AX tree, screen coordinates, and a fresh screenshot.

screen_click_what · screen_type_into · screen_press_key

Resolve against the AX tree and act through native accessibility, falling back to cliclick.

screen_wait_for_stable

Wait until the target window remains visually stable within a configurable threshold.

screen_launch · screen_quit · screen_is_running

Control and inspect an app by localized name, bundle ID, or absolute path.

screen_screenshot_region

Capture a precise rectangular screen region for fine visual evidence.

screen_session_status

Report elapsed time, remaining session budget, action counts, and the abort-file path.

record_bug · record_observation · end_session

Use the shared evidence, reporting, and teardown tools in screen mode.

Safety: per-call timeout, a 30-minute session cap, a ~/.argus/abort panic file that halts every subsequent action, and an automatic before/after screenshot trail on every action.

The full profile includes every core and screen tool above plus these 36 specialist tools. Use it when the workflow genuinely needs low-level state, fault injection, multi-tab control, coordinates, or crawling.

Additional tools

Purpose

paste_into · right_click

Fire a real clipboard paste event or open a target's context menu.

emulate_media

Emulate dark/light color schemes and reduced-motion preferences.

click_at · type_at · hover_at · drag_at · drag_what

Exercise canvas/WebGL, hover-reveal, and drag-and-drop interfaces by coordinates or description.

drop_file

Dispatch a real file drop onto a matching dropzone.

set_dialog_handler

Queue an accept, dismiss, or prompt response for the next JavaScript dialog.

eval_js

Run arbitrary page-context JavaScript. It remains disabled unless the server also starts with --unsafe.

network_requests · network_request

Inspect the bounded request log or retrieve full detail for one matching request.

network_mock · network_unmock · network_clear_mocks · network_clear_log

Inject canned HTTP responses and independently reset active mocks or captured traffic.

cookies_get · cookies_set · cookies_clear

Inspect, seed, or clear browser-context cookies.

storage_get · storage_set · storage_remove · storage_clear

Inspect and mutate page-local localStorage or sessionStorage.

tabs_list · tabs_switch · tabs_close

Control OAuth, payment, and other popup or multi-tab journeys.

wait_for_text · wait_for_request

Wait for specific visible text or matching outgoing traffic with a bounded timeout.

get_downloads

Inspect files downloaded during the session, including their paths and sizes.

crawl_site

Crawl bounded internal pages and collect browser events, link results, and performance evidence.

screen_click_at · screen_hover_at · screen_drag · screen_keys · screen_type_at

Use absolute screen coordinates and multi-key sequences when a native app exposes no useful AX element.

To expose eval_js as an operational tool rather than a disabled safety stub:

uvx --from argus-testing argus-mcp --tool-profile full --unsafe

Local-first security and privacy

Argus runs on your machine and does not send telemetry to an Argus-operated service. Reports and screenshots stay under ./argus-reports by default; your MCP host and its configured model provider can still receive tool results included in the conversation. Browser actions and native macOS controls can cause real side effects, so use test accounts and non-production data wherever possible.

Read the full privacy disclosure and security policy before using Argus against sensitive systems.


Philosophy

Argus assumes an Opus-class driver. Static rules that pretend to be the smart layer are subtractive — they add maintenance and false positives and pull attention from what the agent actually saw. So detector.py is tiny: it only captures the two channels the agent literally cannot see (the console event stream and the HTTP layer). "Is this toast misleading? Is the visual hierarchy wrong? Is that count off?" — the agent reads observe() and decides.

The global instruction is intentionally tiny so it does not repeat a long QA prompt in every MCP tool description. start_session returns the full evidence-first ritual, goals, constraints, and budget once; observations then surface only the compact live coverage ledger. Argus remains a capability inside the user's current task: it does not prevent implementation work, replace the host's identity, or imply authority for irreversible external actions.

click_what("Login button"), not click(7). Element indices are a leaky abstraction even within one observe. A capable agent describes what it wants by what it is, and the resolver maps that to the right element — refusing to misclick on ambiguity rather than guessing.


Project layout

argus/
├── mcp_server.py     # tool surface + role instructions + reproduction-receipt engine
├── browser.py        # Playwright backend: DOM/ARIA extraction, capsule/replay
├── resolver.py       # description → element (web + screen)
├── reporter.py       # HTML + JSON + JUnit + SARIF
├── detector.py       # console + network capture (only)
├── cli.py            # argus (explore) + argus-regression
├── bench/            # deterministic ceiling + real-LLM recall harness
└── screen/           # macOS AX backend, permissions, safety
test-site/            # BuggyTasks  (22 mechanical bugs)
human-eye-fixture/    # DarkShop    (12 human-eye bugs)

MIT licensed · Product page · Agent install guide · Privacy · Security · Built by Yichen Wu

Available Tools

18 tools
capsule_restoreRestore Browser State CapsuleA
Destructive

Restore a saved capsule onto this session and verify it is still live.

Sets the cookies + storage, navigates to the captured URL, then checks the saved liveness marker. Returns whether the restored state is LIVE or STALE. A STALE capsule (the server session expired) cannot be trusted — any bug you record afterwards is flagged unreliable until you re-mint the state.

Args: name: Capsule name to restore (looked up for the current origin).

ParametersJSON Schema
NameRequiredDescriptionDefault
nameYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.7/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations indicate destructive and non-readonly. Description adds detailed behavior: sets cookies+storage, navigates to URL, checks liveness, returns LIVE/STALE, and explains implications of STALE (unreliable bugs until re-mint). This goes well beyond annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Concise description with front-loaded purpose, clear process steps, and relevant warning. Every sentence adds value without redundancy.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the single parameter, annotations, and existence of output schema, the description fully explains the tool's behavior, return values, and state implications. No gaps identified.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Only one parameter 'name' with 0% schema description coverage. Description adds 'looked up for the current origin', which provides meaning beyond the bare schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

Description clearly states the tool restores a saved capsule onto the session and verifies liveness, with explicit actions (sets cookies+storage, navigates, checks marker). This distinguishes it from sibling tools like start_session or verify_persistence.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Describes the restore-and-verify workflow and warns about STALE capsules. Provides clear context for use, but does not explicitly mention when not to use or compare to alternatives.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

check_performanceCheck Browser PerformanceA
Read-onlyIdempotent

Read raw performance metrics from the browser's Performance API (load time, TTFB, request count, large resources).

Argus does not auto-record bugs here — Lighthouse already owns the performance-audit space. Only call record_bug if the page is so slow or so heavy that it materially blocks a real user (multi-second TTFB on a primary flow, multi-MB hero asset, etc).

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.8/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The description confirms it is a read-only operation (consistent with readOnlyHint annotation) and adds context that it does not auto-record bugs. However, it could mention any potential side effects or performance overhead, though none expected.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Concise three-sentence description. First sentence front-loads purpose, subsequent sentences provide usage context. No wasted words.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given no parameters and an output schema, the description provides sufficient context: what metrics are read, when to use it, and when to use an alternative tool. Covers all key aspects.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

No parameters exist, so schema coverage is 100%. The description adds meaning by listing the specific metrics returned, which helps the agent understand the output.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool reads raw performance metrics from the browser's Performance API, listing specific metrics. It distinguishes from sibling tool 'record_bug' by noting that performance auditing is owned by Lighthouse.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Provides explicit guidance on when to use this tool versus record_bug: only call record_bug if performance issues materially block users. No unnecessary use of this tool for auto-recording.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

click_whatClick Element by DescriptionA
Destructive

Click the element best matching the natural-language description.

Examples: "Login button", "Add Task", "the email field", "Delete near Buy groceries". Argus matches against visible text, aria-label, placeholder, name, id, and the parent context. Trailing kind hints ("button" / "field" / "link" / "dropdown") narrow the candidate pool.

If the description is ambiguous, this returns the top candidates with their distinguishing properties so you can rephrase. It does not guess and click — that's how testers misclick.

ParametersJSON Schema
NameRequiredDescriptionDefault
descriptionYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.7/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The description discloses matching criteria (visible text, aria-label, placeholder, name, id, parent context) and the non-guessing behavior when ambiguous. This adds significant value beyond annotations, which already indicate destructiveness. No contradictions.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is concise but includes necessary details like examples and ambiguity handling. It could be slightly more structured, but it is clear and front-loaded with the action.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the complexity of an NL click tool, the description is comprehensive: it explains the action, matching sources, ambiguity resolution, and safety note. Despite an output schema existing, the description does not need to explain return values further.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The sole parameter 'description' has 0% schema description coverage, so the description fully compensates by explaining it is natural-language, providing examples, and detailing how it is matched. This is highly informative.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool clicks the element best matching a natural-language description. Examples ('Login button', 'Add Task') make the purpose immediately obvious. It distinguishes from siblings like hover_what by focusing on clicking action.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description explains when to use (natural-language description) and how ambiguity is handled (returns top candidates for rephrasing). It does not explicitly mention when not to use or compare to alternatives like hover_what, but the context is clear.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

emulate_deviceEmulate Mobile DeviceA

Re-open the current page as a real MOBILE DEVICE — touch, mobile user-agent, device-pixel-ratio, and viewport — not just a viewport resize.

resize() only changes width/height; many mobile bugs need the full device identity: touch-only interactions, mobile-only nav, content gated on a mobile UA, or a broken viewport-meta layout. Session state (cookies/login) carries over, so you can log in on desktop then switch to mobile. Common device names: "iPhone 13", "iPhone SE", "Pixel 5", "iPad Pro 11", "Galaxy S9+". Use resize() for a plain breakpoint sweep; use this for true device emulation. observe() after to see the mobile layout.

ParametersJSON Schema
NameRequiredDescriptionDefault
deviceYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.7/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations indicate not read-only, but description adds that session state (cookies/login) carries over and that the page is re-opened. This provides useful behavioral context beyond the basic annotation flags.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Every sentence earns its place: first sentence states core purpose, second explains distinction from resize, third covers state carry-over, fourth gives examples, fifth suggests observation. No redundancy, well-structured.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool's simplicity (1 param, output schema present, annotations provided), the description covers purpose, usage context, behavioral effects, and follow-up actions. It is complete for an agent to correctly select and invoke the tool.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Input schema has a single string parameter with 0% description coverage. The description provides example device names and explains the parameter's role, adding meaning beyond the schema. However, no formal restrictions or enum values are given.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool re-opens the page as a mobile device with full device identity (touch, UA, DPR, viewport), distinguishing it from resize() which only changes dimensions. It lists common device names, making the purpose specific.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicitly contrasts with resize() for plain breakpoints vs true device emulation, recommends using observe() after, and mentions session state carry-over. Provides clear when-to-use and when-not-to-use guidance.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

end_sessionFinish Test and Write ReportsA
Destructive

End the testing session, close the browser, and generate an HTML error report.

Returns the path to the generated report and a summary of findings.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.3/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already set destructiveHint=true. Description adds that the tool generates an HTML error report and returns its path and summary, providing behavioral context beyond the annotation.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two short, clear sentences front-load the main action and return value. No unnecessary words.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a tool with no parameters and annotations indicating destructiveness, the description provides sufficient context about actions and return values, especially given an output schema exists.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

No parameters exist in the input schema. With 0 parameters, the baseline is 4, and the description does not need to add parameter information.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool's action: 'End the testing session, close the browser, and generate an HTML error report.' It uses a specific verb ('End') and resource ('testing session'), distinguishing it from sibling tools like 'start_session'.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No explicit guidance on when to use or avoid this tool. Usage is implied as the counterpart to 'start_session', but no alternatives or exclusions are mentioned.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

hover_whatHover over Element by DescriptionA

Hover the mouse over the element best matching description.

Real :hover (not synthetic): triggers tooltips, dropdown-on-hover menus, hover-only action buttons. Use after the element shows up in observe — for divs that observe filters out (figures, plain <div>s with :hover rules), introspect via inspect_element or fall back to eval_js.

ParametersJSON Schema
NameRequiredDescriptionDefault
descriptionYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.6/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The description adds significant behavioral context beyond annotations: it states the hover is 'real :hover (not synthetic)' and lists triggered effects like tooltips, dropdown menus, and hover-only buttons. Annotations already indicate non-read-only, non-idempotent, and open-world, and the description enriches this without contradiction.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is very concise with two sentences plus a usage note. No unnecessary words. The key information is front-loaded (purpose and behavioral trait).

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool has only one parameter and an output schema exists, the description provides complete context: what the tool does, when to use it, behavioral details, and alternatives for edge cases. No missing critical information.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The only parameter `description` has no schema description (0% coverage) and the tool description does not explain what format the description should take (e.g., CSS selector, text, or other). While the tool's purpose is clear, the semantics of the parameter are under-specified.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states 'Hover the mouse over the element best matching `description`.' It specifies the verb 'hover' and the resource 'element by description'. Among siblings like click_what and type_into, it distinguishes itself by the hover action.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It explicitly says 'Use after the element shows up in observe' and provides alternatives: 'introspect via inspect_element or fall back to eval_js' for elements observe filters out. This gives clear when-to-use and when-not-to-use guidance.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

observeObserve Current TargetA
Read-onlyIdempotent

Observe the current target — page, app, or screen. Read this first.

Returns the URL/window, the visible text, every interactive element keyed by description (no integer indices), feedback messages, counts, and any list-shaped repeating content. After every action, observe() again and reason about what changed before acting.

The agent decides what's a bug from this output. Argus does not auto-flag content quality, validation behaviour, or visual issues here — that's your judgment to make.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.7/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint, openWorldHint, idempotentHint, destructiveHint=false. Description adds that Argus does not auto-flag issues, clarifying limitations. No contradiction.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two sentences and a line, front-loaded with purpose. Every sentence adds value, no fluff.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a zero-parameter read-only tool with output schema, the description fully explains what it returns, when to use it, and what it does not do. Complete.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

No parameters; schema coverage 100%. Baseline 4 as no additional info needed.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

Clearly states it observes the current target (page, app, or screen) and lists all returned elements. Distinct from sibling tools like screenshot or record_observation.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicitly says 'Read this first' and recommends calling after every action. Lacks explicit when-not-to-use or alternative suggestions, but the context is clear.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

press_keyPress Browser KeyA
Destructive

Press a keyboard key — the web-mode equivalent testers reach for constantly.

key is a Playwright key name: "Escape" (dismiss a modal/overlay), "Enter" (submit a focused field), "Tab" / "Shift+Tab" (keyboard navigation / focus order), "ArrowDown"/"ArrowUp"/"ArrowLeft"/"ArrowRight" (menus, sliders, listboxes), "Backspace", "Delete", "PageDown", "Home", or a chord like "Control+a". Optionally pass description to focus that element first (e.g. press ArrowRight on "the volume slider"); omit it to press at the page level (e.g. Escape to close whatever modal is open).

Real users hit keys — a modal you can only close with Esc, a form that submits on Enter, arrow-key menu nav, focus-order bugs — none of which click/type can exercise. After it, observe() to see what changed.

ParametersJSON Schema
NameRequiredDescriptionDefault
keyYes
descriptionNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.7/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already indicate destructiveHint and openWorldHint. Description adds context about key effects and focusing elements, but does not fully expand on behaviors beyond the action. No contradiction.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Well-structured and front-loaded with purpose. Somewhat lengthy but each sentence adds value. Minor redundancy but overall effective.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given two simple parameters and an output schema, the description is complete. Covers purpose, parameter details, use cases, and next steps (observe). No gaps.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 0%, so description carries full burden. It lists valid Playwright key names and explains the description parameter for focusing elements. Adds significant meaning beyond the schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

Clearly states it presses a keyboard key, lists examples like Escape, Enter, Arrow keys, and distinguishes from click/type. Specific verb+resource with sibling differentiation.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicitly describes when to use (modal close, form submit, arrow navigation, focus-order bugs) and that click/type cannot exercise these. Recommends using observe after. No explicit exclusions but context is clear.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

record_bugRecord Confirmed BugA
Destructive

Record a confirmed bug you have identified during testing.

Call this only after you have observed something that meets the bug bar: reproducible, user-affecting, persistent. Do not record speculation or polish nits. The session report is built from these records — be specific.

Args: title: One-line headline, specific. Bad: "Form has issues." Good: "Login form accepts any password — no authentication." severity: "critical" | "high" | "medium" | "low" | "info". HIGH = data loss / security / payment / blocked flow. MEDIUM = workflow friction / confusing UX / cross-page bug. LOW = polish / suggestion-grade. verify: Optional reproduction clause. When the bug has a machine-checkable symptom (something present/absent on a fresh page load), pass it and Argus will INDEPENDENTLY re-load the page and confirm the symptom before recording — turning the bug into a verified, reproducible finding instead of your unverified say-so. This is Argus's anti-false-positive guard; use it whenever the symptom is text-checkable. Shape: {"expect": "present"|"absent", "target_text": "the text that proves the bug", "at_url": "/path"} # optional, defaults to current page Examples: - Fake delete (item survives): {"expect":"present", "target_text":"Buy groceries","at_url":"/tasks"} - Save didn't persist (new value missing): {"expect":"absent", "target_text":"EDITED-XYZ","at_url":"/tasks/1/edit"} IMPORTANT — the target must PROVE the symptom, not a nearby fact. target_text has to be the exact string whose presence/absence ALONE is the bug. For a COUNT or LOGIC inconsistency ("7 pending + 2 done != 8 total") no single text check establishes it — verifying that "8 total" merely EXISTS does not confirm the inconsistency and would stamp a misleading VERIFIED on tangential evidence. Record those as observation-based (omit verify), or verify the specific wrong value that should not be there. For a broken URL or API response whose HTTP status is the proof, use {"expect_status": 404, "at_url": "/missing"} instead of matching error-page copy. Status verification and text verification are alternatives and cannot be combined in one clause. For a MULTI-STEP bug (the symptom only appears after a journey), add "replay": true — Argus re-drives the recorded action trace (click_what/type_into/select_into/navigate) in a fresh cold context and checks the symptom there, giving a stronger "reproduced by replaying N steps from a cold start" receipt (or INCONCLUSIVE if a step no longer resolves). Shape: {"replay": true, "expect": "present"|"absent", "target_text": "the text that proves the bug"} CAUTION: replay re-EXECUTES the journey's steps against the live backend, so any Save/Delete/Add/checkout in the trace runs a second time (real side effect; the receipt reports writes_replayed). Use the plain clean-load verify (no replay) for destructive flows, or accept the re-run. Add "minimize": true to also narrow a confirmed reproduction to the minimal sufficient steps ("you don't need all 7 — 2 and 5 suffice"). Minimization runs ONLY for a write-free journey (it re-runs subsets, which would repeat any writes); it is skipped with a note otherwise. Omit verify entirely for visual/layout/UX-judgment bugs that no single text check captures — those record as observation-based. evidence: Optional dict with extra context. Recommended keys: description (str): Longer explanation including user impact. Default = same as title. steps (list[str]): Reproduction steps. Default = current session step log (everything you did so far). url (str): Page or screen URL. Default = current page URL. screenshot (str): One of "auto" (default — take one now and attach), "skip" (no screenshot), or a label to use as the screenshot filename. Pre-existing screenshot paths are also accepted. bug_type (str): A category for the report. Default "ux_issue". One of: console_error, network_error, visual_anomaly, ux_issue, crash, broken_link, form_error, state_verification, misleading_success, count_mismatch, text_anomaly, broken_image, seo_issue, accessibility, performance, mixed_content. Pick the SPECIFIC type, not the generic ux_issue: a "Saved!" / success toast that lied -> misleading_success; a delete or edit that did not persist -> state_verification; a wrong/inconsistent count or total -> count_mismatch; a JS exception or dead page -> crash; a form losing data / rejecting valid input -> form_error. Reserve ux_issue for genuine usability friction with no better fit — a data-loss or persistence bug labeled "ux_issue" reads as cosmetic next to its HIGH severity.

ParametersJSON Schema
NameRequiredDescriptionDefault
titleYes
verifyNo
evidenceNo
severityYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.9/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations indicate destructiveHint=true, and description adds detail: affects session report, verify/replay re-executes steps with side effects, warns about writes_replayed. No contradictions.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Structure is good: intro, usage condition, then parameter details. But somewhat verbose; however, each sentence adds necessary value for a complex tool.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Covers purpose, usage, all parameters with examples, behavioral implications, and implicit alternative tools. Complete given tool complexity and output schema existence.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 0%, but description fully compensates with detailed explanations for all 4 parameters: title with examples, severity with criteria, verify with complex options and warnings, evidence with optional fields and bug_type choices. Adds immense meaning.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

Clearly states purpose: recording a confirmed bug. Distinguishes from speculation and polish nits, and implicitly from sibling record_observation for unconfirmed observations.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicitly states when to call: only after confirming bug bar (reproducible, user-affecting, persistent). Tells when not to call: speculation or polish nits. Provides detailed usage conditions.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

record_observationRecord QA ObservationA

Record a qualitative review note without classifying it as a bug.

Use this for visual polish, hierarchy, readability, content, responsive, or usability observations that are useful evidence but do not meet the reproducible user-affecting bug bar.

Args: title: Short, specific observation headline. evidence: What is visible and why it matters. category: visual, usability, content, responsive, or accessibility. screenshot: "auto", "skip", an existing image path, or a screenshot label.

ParametersJSON Schema
NameRequiredDescriptionDefault
titleYes
categoryNovisual
evidenceYes
screenshotNoauto

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.6/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The description correctly indicates a write operation (recording a note), matching the annotation 'readOnlyHint: false'. It adds context about the type of note but does not disclose potential side effects, authentication requirements, or rate limits. However, for a simple observation recording tool, this is adequate.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is concise with a clear purpose statement, usage guidance, and structured parameter descriptions. No unnecessary words; every sentence contributes to understanding.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool's simplicity and the presence of an output schema, the description covers all necessary aspects: purpose, usage context, parameter semantics, and differentiation from siblings. It is complete for an agent to select and invoke correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Despite 0% schema description coverage, the description provides thorough Args section explaining each parameter: title (headline), evidence (what is visible and why it matters), category (with list of possible values), and screenshot (with valid options). This adds significant value beyond the bare schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool records a qualitative review note without classifying it as a bug. It explicitly distinguishes from the sibling 'record_bug' by specifying this is for observations that do not meet the bug bar.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description explicitly says when to use this tool (for visual polish, hierarchy, readability, content, responsive, or usability observations that aren't bugs) and implies when not to (for actual bugs, use record_bug).

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

regression_checkReplay Regression ChecksA
Destructive

Re-test previously-recorded findings for this site against the CURRENT build — "did my fix land, and did anything I'd fixed come back?".

Findings with a clean-load verify clause are journaled at end_session (per origin). This re-runs each one's INDEPENDENT clean-load check now and classifies it: STILL-PRESENT (the bug is still there), NO-LONGER-REPRODUCES (the symptom is gone — likely fixed; confirm the surface still exists), or INCONCLUSIVE. Each carried finding is treated as a hypothesis and re-checked from scratch — nothing is trusted from the prior run. Read-only (clean GETs); replay-mode findings are not auto-re-driven (that would re-execute writes).

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A3.8/5.0
Behavior1/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotation contradiction: description claims 'Read-only (clean GETs)' while annotations set destructiveHint=true and readOnlyHint=false. This inconsistency undermines trust. Despite rich behavioral detail, the contradiction is critical.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Detailed but well-organized with clear sections. Slightly lengthy for a no-param tool, but each sentence adds value.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Fully explains behavior (independent re-checks, classification outcomes, read-only nature) despite no parameters. Output schema exists to cover return values.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

No parameters, so schema coverage is 100%. Description adds value by explaining the nullary operation's scope and classification logic.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

Clearly states the tool re-tests previously-recorded findings against the current build to verify fixes and detect regressions. Distinct from siblings like 'record_bug' or 'observe' by focusing on replay and classification.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Describes when to use (post-deployment regression check) and implicitly when not to (not for new captures). Lacks explicit alternatives but context from siblings provides enough guidance.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

resizeResize Browser ViewportA

Resize the viewport mid-session to test RESPONSIVE layouts.

Real users are on phones, tablets and desktops, and mobile-only bugs (a hamburger that never appears, content that doesn't reflow, an overlay that covers the page, tap targets that overlap) are exactly the class scripted E2E misses. Unlike opening a fresh session at a mobile width, this keeps your current state (logged in, cart filled, form typed) so you can compare the SAME page across breakpoints and test the transition itself. Common widths: 375 (mobile), 414 (large phone), 768 (tablet), 1280/1440 (desktop). After it, observe() to see the reflowed layout.

ParametersJSON Schema
NameRequiredDescriptionDefault
widthYes
heightYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.3/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations indicate readOnlyHint=false (mutation), openWorldHint=true (not deterministic). The description adds behavioral context: it keeps current state (logged in, cart, form) and allows testing transitions. No contradictions with annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is concise, front-loaded with purpose, then practical usage details. Every sentence adds value without redundancy.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool has an output schema and annotations, the description covers the main behavioral aspects, use case, and post-action. It lacks minimum/maximum constraints but is otherwise complete.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 0%, so the description compensates by providing common width values (375, 414, 768, 1280/1440) and implying pixel units. It could also suggest common height values or constraints.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description explicitly states the tool resizes the viewport mid-session for testing responsive layouts, with a specific verb and resource. It distinguishes from siblings like emulate_device by focusing on viewport size only.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides clear context on when to use this tool (to test transitions and keep state) versus opening a fresh session. It also suggests post-resize action (observe). However, it does not explicitly compare to emulate_device or state when not to use it.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

screenshotCapture ScreenshotA

Capture a screenshot — full viewport, full page, or one element.

Use this whenever something looks visually off and you want evidence for a record_bug call, or when you want a before/after pair to feed into screenshot_diff.

Args: name: Filename label (no extension). element: Optional element description (same syntax as click_what). If given, crops the screenshot to that element's bounds. Use for visual hierarchy / truncation / contrast checks. full_page: If True, capture the entire scrollable page rather than just the viewport. Ignored when element is set.

ParametersJSON Schema
NameRequiredDescriptionDefault
nameNoscreenshot
elementNo
full_pageNo

TDQS

A5/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Describes cropping behavior (element), full_page vs viewport, and that full_page is ignored when element is set. Annotations provide safety hints; description adds valuable context beyond them.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Efficient two-sentence summary plus well-structured parameter list. No wasted words; front-loaded with main purpose.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Fully covers all parameters, usage guidance, and behavioral nuances. No missing information for a screenshot capture tool.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

All three parameters are explained in detail: name as filename label, element for cropping with reference to click_what syntax, full_page behavior and interaction with element. Adds meaning despite 0% schema coverage.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states 'Capture a screenshot' with specific modes (full viewport, full page, one element), distinguishing it from sibling tools like screenshot_diff.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicitly states when to use: for visual evidence or before/after pairs, and mentions alternative tools (record_bug, screenshot_diff).

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

screenshot_diffCompare ScreenshotsA

Compare two screenshots and produce a third image with changed regions highlighted in red, so you can see what visually changed between two states.

Useful for detecting layout shifts, content updates that should not have happened, focus-ring changes after a click, modal overlays appearing, theme switches, etc. Argus does not auto-judge whether a diff is a bug — you read the side-by-side and decide.

Args: before: Path or filename of the earlier screenshot (returned from a previous screenshot() call). after: Path of the later screenshot. name: Label for the output diff image. threshold: 0-255 per-channel pixel difference above which a pixel is considered "changed". Default 25 (mild). Lower = more sensitive.

ParametersJSON Schema
NameRequiredDescriptionDefault
nameNodiff
afterYes
beforeYes
thresholdNo

TDQS

A4.4/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations show readOnlyHint=false, destructiveHint=false, idempotentHint=false, and openWorldHint=false. The description says it 'produce[s] a third image', implying a new file is created. It does not specify whether this tool modifies any existing files or requires specific permissions, but it does not contradict the annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is concise and well-structured, with a clear summary paragraph followed by an Args section. Every sentence adds value without redundancy.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given 4 parameters, no output schema, and 17 sibling tools, the description covers purpose, parameters, use cases, and limitations. It is complete enough for an agent to decide when and how to invoke this tool.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema has 0% description coverage, but the description fully explains all four parameters: 'before' and 'after' as screenshot paths, 'name' as output label, and 'threshold' with range (0-255) and default (25). It adds meaning beyond the schema's titles and defaults.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly identifies the tool as comparing two screenshots and producing a diff image with highlights. It uses specific verbs ('compare', 'produce') and distinguishes itself from sibling tools like 'screenshot' (capture) and 'observe' (check existence).

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides concrete use cases (layout shifts, content updates, focus-ring changes, modal overlays, theme switches) and explicitly states what the tool does NOT do ('does not auto-judge whether a diff is a bug'). It lacks explicit alternatives or conditions to avoid using it, but offers strong contextual guidance.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

start_sessionStart Browser TestA
Destructive

Start a browser testing session and navigate to the given URL.

Args: url: The URL to test (e.g. http://localhost:3000) headless: Run browser without visible window (default True) viewport_width: Browser viewport width in pixels viewport_height: Browser viewport height in pixels include_observation: Return the initial page observation in this call. review_mode: exploratory, visual, or regression.

ParametersJSON Schema
NameRequiredDescriptionDefault
urlYes
headlessNo
review_modeNoexploratory
viewport_widthNo
viewport_heightNo
include_observationNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A3.8/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations indicate destructiveHint=true and readOnlyHint=false, but the description does not elaborate on what destructive behavior occurs (e.g., terminating previous sessions). It adds context about navigating to a URL but omits details about session lifecycle or async behavior.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is concise: one sentence for purpose followed by a brief bullet list of parameters. Every sentence adds value, and the structure is clean and front-loaded.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool's role as a session starter, the description covers core purpose and parameters. Output schema exists, so return values need not be described. However, it could mention that this tool is required before using other browser tools. Overall adequate.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The description adds clear meaning to each parameter beyond the schema titles, including example URL format, default values for headless and viewport, and the purpose of review_mode. Even though schema coverage is 0%, the description compensates well.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The title 'Start Browser Test' and description 'Start a browser testing session and navigate to the given URL' clearly state the verb (start), resource (browser test session), and specific action (navigate to URL). This distinguishes it from sibling tools like end_session or click_what.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No explicit guidance on when to use this tool versus alternatives (e.g., capsule_restore) or when not to use it. The description implies it is the entry point for browser testing but does not state prerequisites or exclusions.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

type_intoType into Field by DescriptionA
Destructive

Type text into the input element best matching description.

Examples: type_into("email", "alice@x.com"), type_into("confirm password", "...") , type_into("the search box", "buy"). Resolution rules are the same as click_what — see that tool for ambiguity behaviour.

ParametersJSON Schema
NameRequiredDescriptionDefault
textYes
descriptionYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A3.9/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare destructiveHint=true and readOnlyHint=false, making the mutation behavior transparent. The description adds no additional behavioral context beyond the action.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is concise, front-loaded with purpose, and includes essential examples and cross-references without extraneous text.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the simple parameter set and presence of output schema and annotations, the description is largely complete, though it could add detail on behavior when no match is found.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

With 0% schema coverage, the description only provides examples for 'text' and 'description' but does not explain the matching resolution or constraints for 'description', leaving parameter semantics underspecified.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the action ('Type `text`') and the resource ('input element best matching `description`'), with examples that differentiate from sibling tool 'click_what' by referencing its resolution rules.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Examples and cross-reference to 'click_what' for ambiguity behavior provide clear usage guidance, though it lacks explicit 'when not to use' context.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

upload_fileUpload File to Matching InputA
Destructive

Attach one or more local files to the file <input> matching description.

Wraps Playwright's set_input_files — works on both visible and hidden file inputs (most modern UIs hide the real input behind a styled label). For drag-drop upload zones that don't have an underlying <input type=file>, this won't work; use drop_file.

Args: description: Match the file input. "file", "upload", or the visible label text. paths: List of absolute paths to files to attach. Single file: pass a one-element list.

ParametersJSON Schema
NameRequiredDescriptionDefault
pathsYes
descriptionYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.7/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already indicate destructiveHint=true and openWorldHint=true. Description adds that it wraps Playwright's set_input_files and works on hidden inputs, providing useful context beyond annotations. No contradiction; slight gap on side effects or file overwriting not mentioned.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two short paragraphs with no extraneous content. First paragraph states purpose and mechanism, second lists arguments. Every sentence adds value.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Covers input parameters, alternative tool, and underlying mechanism. Missing explicit mention that paths must be absolute and files must exist, but given output schema exists (not shown), overall adequate. Could be slightly more complete.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 0%, but description fully explains both parameters: description (how to match input) and paths (list of absolute paths, single file as one-element list). Adds practical value beyond schema structure.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

Clearly states it attaches files to a file input element, with specific verb 'attach'. Differentiates from sibling drop_file by specifying it works on file inputs (visible/hidden) and not on drag-drop zones.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicitly says when to use (file inputs, visible or hidden) and when not (drag-drop zones without underlying input, use drop_file). Provides practical guidance on description argument: 'file', 'upload', or visible label text.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

verify_persistenceVerify State after ReloadA
Destructive

Force a fresh page load and report whether target_text is present or absent — your tool for catching the "Saved!" toast that lied.

After any destructive or persistence-changing action (delete, edit, save, submit, toggle, payment, etc.), the success toast is not proof. Only a fresh GET on the relevant page is. This tool does that GET and reports presence — you decide whether the result matches what you expected.

Examples: verify_persistence("absent", "Buy groceries", "/tasks") — after deleting "Buy groceries", confirm it's gone from the list. verify_persistence("present", "EDITED-VALUE-XYZ", "/tasks/1/edit") — after editing, confirm the new value reloads.

Argus does not auto-record a bug here. If presence does not match your expectation, call record_bug.

Args: expect: "present" or "absent" — what state the target_text should be in after the fresh page load. target_text: The text or value you're checking for. after_url: Page to load and inspect. Defaults to the current URL. clear_storage: When True, wipe localStorage/sessionStorage before the reload so you test TRUE server persistence — a "Save" that only wrote client storage will read absent (data would be lost on another device/browser). Default False keeps client storage (proves server-backed truth without logging out). Use True when the feature is supposed to persist to a server/account. If clearing logs the app out, the result is unreliable — re-check without it.

ParametersJSON Schema
NameRequiredDescriptionDefault
expectYes
after_urlNo
target_textYes
clear_storageNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.8/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations indicate destructiveHint=true, but description adds critical details: it forces a fresh GET, clears storage optionally (with explanation of impact including potential logout), and states that Argus does not auto-record bugs. No contradiction with annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Well-structured with clear sections, examples, and front-loaded essential information. Every sentence adds value; no fluff. Length is justified by the need to explain parameters and usage nuances.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With output schema present, description covers all necessary aspects: purpose, usage guidelines, parameter semantics, behavioral effects, and fallback to record_bug. Handles edge cases like clear_storage causing logout. Highly complete.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 0%, but description fully explains each parameter: expect (present/absent), target_text (what to check), after_url (page to load, defaults to current URL), clear_storage (wipes client storage with detailed effect implications). Compensates completely for missing schema descriptions.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

Description explicitly states 'Force a fresh page load and report whether target_text is present or absent', clearly identifying verb (verify) and resource (state after reload). Distinguishes itself from siblings by positioning as the tool for catching misleading success toasts after persistence-changing actions.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Provides explicit context: use after destructive/persistence-changing actions, and when not to trust success toasts. Includes two examples and directs to call record_bug on mismatch. Lacks explicit 'when not to use' statement, but context is sufficiently clear.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections. Dates show when Glama detected each change.

  1. 30 tool updatesv0.5.1
    • Addedcapsule_restore
    • Removedcheck_links
    • Removedclick
    • Addedclick_what
    • Removedcrawl_site
    • Addedemulate_device
    • Removedget_errors
    • Removedget_page_state
    • Removedgo_back
    • Addedhover_what
    • Removednavigate
    • Addedobserve
    • Addedpress_key
    • Addedrecord_bug
    • Addedrecord_observation
    • Addedregression_check
    • Addedresize
    • Changedscreenshot3 fields changed
      • addedInput schema / properties / element
        Added value: +{
        +  "default": "",
        +  "title": "Element",
        +  "type": "string"
        +}
      • addedInput schema / properties / full_page
        Added value: +{
        +  "default": false,
        +  "title": "Full Page",
        +  "type": "boolean"
        +}
      • changedOutput schema / (root)
        Previous value: -{
        -  "properties": {
        -    "result": {
        -      "title": "Result",
        -      "type": "string"
        -    }
        -  },
        -  "required": [
        -    "result"
        -  ],
        -  "title": "screenshotOutput",
        -  "type": "object"
        -}New value: +null
    • Addedscreenshot_diff
    • Removedscroll_down
    • Removedselect_option
    • Changedstart_session2 fields changed
      • addedInput schema / properties / include_observation
        Added value: +{
        +  "default": true,
        +  "title": "Include Observation",
        +  "type": "boolean"
        +}
      • addedInput schema / properties / review_mode
        Added value: +{
        +  "default": "exploratory",
        +  "title": "Review Mode",
        +  "type": "string"
        +}
    • Removedtest_action
    • Removedtest_crud
    • Removedtest_form
    • Addedtype_into
    • Removedtype_text
    • Addedupload_file
    • Removedverify_action
    • Addedverify_persistence
  2. 18 tool updatesv0.4.0
    • First observedcheck_links
    • First observedcheck_performance
    • First observedclick
    • First observedcrawl_site
    • First observedend_session
    • First observedget_errors
    • First observedget_page_state
    • First observedgo_back
    • First observednavigate
    • First observedscreenshot
    • First observedscroll_down
    • First observedselect_option
    • First observedstart_session
    • First observedtest_action
    • First observedtest_crud
    • First observedtest_form
    • First observedtype_text
    • First observedverify_action

TDQS

A4.4/5.0
Disambiguation5/5

Each tool has a clear, distinct purpose covering different aspects of testing: session management, interactions, observation, verification, and bug recording. No two tools overlap in functionality.

Naming Consistency5/5

All tools follow a consistent snake_case verb_noun pattern (e.g., click_what, upload_file, verify_persistence). The naming is predictable and informative.

Tool Count5/5

With 18 tools, the set is well-scoped for a testing framework. Each tool provides essential functionality without unnecessary redundancy or clutter.

Completeness4/5

The tool surface covers the full testing lifecycle from session start to end, including interaction, observation, verification, and bug reporting. Minor gaps like explicit scroll or reload tools are absent but can be worked around.

Maintenance

ActivityMaintained
ResponsivenessSyncing

Resources

Unclaimed servers have limited discoverability.

Looking for Admin?

If you are the server author, to access and configure the admin panel.

Related MCP Connectors

Related MCP Servers

  • F
    license
    Not graded
    quality
    D
    maintenance
    Browser-based QA testing for AI-built software. Agents open real browsers (via Selenium), navigate pages, fill forms, click buttons, and report findings. Two modes: targeted tests (30-90s) and full-site discovery scans (3-15min).
    -
  • A
    license
    A
    quality
    A
    maintenance
    Point your coding agent at a URL and get a real-browser QA audit: broken signup/login/checkout flows, JS console errors, missing analytics, consent + security headers, mobile tap targets, and accessibility — returned as machine-verified findings graded A-F.
    44
    2
    Apache 2.0
  • F
    license
    Not graded
    quality
    D
    maintenance
    Enables AI agents to perform comprehensive web application testing including visual, functional, performance, accessibility, and SEO analysis using browser automation without requiring API keys.
    -

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/chriswu727/argus'

If you have feedback or need assistance with the MCP directory API, please join our Discord server