Command Palette

Search for a command to run...

UnylyUnyly
Весь каталог

awarselabs/awarse-mcp

БесплатноНе проверен

Self-healing browser automation MCP server integrating Playwright with LLM-assisted locator repair.

GitHubEmbed

Описание

Self-healing browser automation MCP server integrating Playwright with LLM-assisted locator repair.

README

Smithery Badge

🌿 SeatPrune: GitHub FinOps & License Reclamation MCP Server

SeatPrune (skildunne/seatprune) is an autonomous SaaS seat governance and license reclamation MCP server that audits GitHub, Copilot, and Slack utilization to detect zombie seats, enforce dry-run safety locks, and reclaim spend leakage.

🛠️ Healwright: Playwright Self-Healing Selector Engine

Healwright (healwright-mcp) is an autonomous Playwright self-healing selector engine that turns red CI pipelines green in under 500ms by analyzing compact ARIA snapshots via Gemini 2.5 and hot-fixing spec files on disk.


📐 Architecture Flow

sequenceDiagram
    autonumber
    participant Runner as Playwright Test Runner
    participant Fixture as @healwright/fixture (Client Hook)
    participant Server as Healwright MCP Server
    participant Gemini as Gemini API (2.5 Pro / Flash)
    participant Sandbox as Headless Playwright Sandbox
    participant Patcher as AST / Text Patcher

    Runner->>Runner: Locator fails (Timeout / Assertion Error)
    Runner-->>Fixture: Catch Exception + stack trace
    Note over Fixture: Extract spec file coordinates (file, line, col)
    Fixture->>Fixture: Capture page.ariaSnapshot({ boxes: true })
    Fixture->>Server: Call heal_selector(broken, error, ARIA, URL, file, line, col)
    
    Server->>Gemini: Request Healed Locator (response_schema, temp 0.1)
    Note over Gemini: Prioritize accessibility (getByRole, getByTestId, locator.or())
    Gemini-->>Server: Return JSON (proposed_playwright_call, fallback_expression, rationale, type)
    
    Server->>Sandbox: Load ARIA snapshot / DOM content
    Note over Sandbox: Translate TS selectors to Python syntax if evaluating on python host
    Server->>Sandbox: Evaluate locator count & visibility
    alt Verification Success (count == 1 & visible)
        Sandbox-->>Server: Selector verified!
        Note over Server: status = "verified_unique"
    else Verification Failed
        Note over Server: Evaluate fallback_expression
        Sandbox-->>Server: Status = "failed" or "ambiguous_match"
    end

    alt status == "verified_unique" AND coordinates provided
        Server->>Patcher: Invoke patch_source_file(file, line, col, healed_locator)
        Note over Patcher: Parse AST (Python AST / Babel JS) & rewrite spec call
        Patcher-->>Server: Patch completed on disk
    end

    Server-->>Fixture: Return HealedSelectorResponse (healed_locator, status)
    Fixture->>Fixture: Dynamically evaluate healed locator via eval()
    Fixture->>Runner: Re-execute action and resume test execution

🚀 Key Architectural Features

  • Compact ARIA Snapshot Ingestion: Utilizes Playwright's native page.ariaSnapshot({ boxes: true }) API to capture clean, token-efficient YAML accessibility tree layouts instead of bloated raw HTML structure.
  • Resilient Locator Generation: Directs Gemini to produce modern Playwright locators mapped strictly to accessibility guidelines:
    1. page.getByRole() matching accessibility labels and descriptions.
    2. page.getByTestId(), page.getByLabel(), or page.getByPlaceholder().
    3. Chained fallback structures using locator.or().
    4. Brittle CSS/XPath locators as a last resort.
  • Sandboxed Locator Evaluator: Automatically evaluates and executes JS/TS Playwright locator call expressions dynamically inside a headless Playwright Chromium sandbox browser to guarantee element uniqueness (count === 1) and visibility.
  • AST-Based Source Code Patching: Includes a Python AST rewriter (using ast modules) and JavaScript/TypeScript rewriter (using @babel/parser / @babel/traverse) that locates the exact code coordinates of the failing locator in the source file on disk and overwrites it.
  • Smart Playwright Client Hooks: Fully integrated via @healwright/fixture (TypeScript) and healwright_locator (Python pytest) to capture error line/col locations from stack traces and run self-healing.

⚡ Quickstart

1. Prerequisites

Ensure you have Python 3.11+ and Node.js installed on your VM or runner.

# Clone the repository
git clone https://github.com/skildunne/awarse-mcp.git
cd awarse-mcp

2. Configure Environment

Create a .env file in the root directory:

GEMINI_API_KEY="your-gemini-api-key"
GEMINI_MODEL="gemini-2.5-pro"  # Defaults to gemini-2.5-pro
HEALWRIGHT_HOST="0.0.0.0"
HEALWRIGHT_PORT=8000
HEALWRIGHT_MOCK_HEAL=false      # Set to true for offline testing

3. Install Dependencies

# Set up virtual environment and install python packages
uv venv
source venv/bin/activate
uv pip install -r requirements.txt
uv run playwright install chromium --with-deps

# Optional: Install Babel for TS AST parsing (falls back to text-slice parser if missing)
npm install @babel/parser @babel/traverse @babel/generator

4. Run the MCP Server

Healwright supports dual transport channels:

  • Local stdio mode (Default):
    uv run src/server/mcp_server.py
    
  • Remote SSE mode (shared server):
    uv run src/server/mcp_server.py sse
    

⚙️ MCP Client Configs

Claude Desktop Configuration

Add this block to your local claude_desktop_config.json:

{
  "mcpServers": {
    "healwright-mcp": {
      "command": "/path/to/awarse-mcp/venv/bin/python",
      "args": [
        "/path/to/awarse-mcp/src/server/mcp_server.py"
      ],
      "env": {
        "GEMINI_API_KEY": "YOUR_GEMINI_API_KEY_HERE"
      }
    }
  }
}

Cursor Config

Add this to your Cursor settings under MCP -> Add New MCP Server:

  • Name: healwright-mcp
  • Type: stdio
  • Command: /path/to/awarse-mcp/venv/bin/python /path/to/awarse-mcp/src/server/mcp_server.py

🛠️ Exposed MCP Tool: heal_selector

Invokes the Healwright healing pipeline:

Arguments Schema

  • broken_selector (string, required): The failing locator expression.
  • error_message (string, required): The error message details.
  • dom_snapshot (string, required): Compact YAML ARIA snapshot.
  • target_url (string, optional): Active URL context.
  • file_path (string, optional): Absolute path of the test file on disk.
  • line_number (integer, optional): The line number of the failing locator call.
  • column_number (integer, optional): The column number of the failing locator call.

Output JSON Format

{
  "proposed_playwright_call": "page.getByRole('button', { name: 'Submit' })",
  "selector_type": "role",
  "confidence_score": 0.98,
  "rationale": "The original ID selector was removed during UI layout changes. The target button is uniquely identifiable by its accessible role and text label.",
  "fallback_expression": "page.locator('#healed-submit-action-button')",
  "verification_status": "verified_unique"
}

🧪 Test Suite & Client Fixtures

Run Code Verification

To run the full unit and integration test suite:

# Run pytest tests
PYTHONPATH=. uv run pytest tests/

Client Integration Templates

Integrate Healwright into your test runners using the templates in examples/ or the npm package @healwright/fixture / npx healwright:

from github.com/awarselabs/awarse-mcp

Установка awarselabs/awarse-mcp

У этого сервера нет опубликованного пакета — он собирается из исходников. Открой репозиторий и следуй инструкции в README.

▸ github.com/awarselabs/awarse-mcp

FAQ

awarselabs/awarse-mcp MCP бесплатный?

Да, awarselabs/awarse-mcp MCP бесплатный — установка в пару кликов через Unyly без оплаты.

Нужен ли API-ключ для awarselabs/awarse-mcp?

Нет, awarselabs/awarse-mcp работает без API-ключей и переменных окружения.

awarselabs/awarse-mcp — hosted или self-hosted?

Self-hosted: сервер запускается локально на твоей машине командой из раздела установки.

Как установить awarselabs/awarse-mcp в Claude Desktop, Claude Code или Cursor?

Открой awarselabs/awarse-mcp на unyly.org, выбери вкладку своего клиента (Claude Desktop, Claude Code, Cursor) и нажми Install — конфиг сгенерируется автоматически, без правки JSON.

Похожие MCP

Playwright

Browser automation, scraping, screenshots

Microsoftавтор: Microsoft

Puppeteer

Browser automation and web scraping.

modelcontextprotocolавтор: modelcontextprotocol

Garmin Connect

An MCP server for Garmin Connect that provides access to fitness activities, health statistics, and sleep data by routing requests through a headless browser to

etweisbergавтор: etweisberg

Higgsfield Unlimited

MCP server for Higgsfield AI that enables unlimited-mode image, video, audio generation, uploads, and job management via multiple parallel accounts, using brows

nukIeerавтор: nukIeer

opentabs-dev/opentabs

Plugin-based MCP server + Chrome extension that gives AI agents access to web applications through the user's authenticated browser session. 100+ plugins with a

opentabs-devавтор: opentabs-dev

robhunter/agentdeals

1,500+ developer infrastructure deals, free tiers, and startup programs across 54 categories. Search deals, compare vendors, plan stacks, and track pricing chan

robhunterавтор: robhunter

hlydecker/ucsc-genome-mcp

MCP server to interact with the UCSC Genome Browser API, letting you find genomes, chromosomes, and more.

hlydeckerавтор: hlydecker

34892002/bilibili-mcp-js

A MCP server that supports searching for Bilibili content. Provides LangChain integration examples and test scripts.

34892002автор: 34892002

achiya-automation/safari-mcp

Native Safari browser automation for AI agents with 80+ tools. No Chrome dependency, optimized for Apple Silicon with 60% less CPU overhead.

achiya-automationавтор: achiya-automation

agent-infra/mcp-server-browser

Browser automation capabilities using Puppeteer, both support local and remote browser connection.

bytedanceавтор: bytedance

Compare awarselabs/awarse-mcp with

Не уверен что выбрать?

Найди свой стек за 60 секунд

Автор?

Embed-бейдж для README

Похожее

Все в категории browse