← Home

Documentation

Connect AskQA to Claude and other AI assistants via MCP (Model Context Protocol).

Installation

Choose the installation method that matches your workflow:

1

Claude Desktop Extension (Recommended)

For: Claude Desktop users (Chat mode)

One-click installation via drag-and-drop. API key stored securely in your OS keychain.

Install now:

  1. Download askqa-latest.mcpb
  2. Open Claude Desktop → Settings → Extensions
  3. Drag the .mcpb file into the window
  4. Enter your API key when prompted

Marketplace status: Pending Anthropic review

Manual install available now. Marketplace version coming soon.

Get your API key from your account page after signing in.

2

Claude Code Plugin

For: Claude Code and Claude Desktop (Coworker mode) users

Includes guided skills like /setup-mcp and /setup-slack.

Install with:

/plugin marketplace add askqa-ai/askqa-plugins
/plugin install askqa
/setup-mcp

The /setup-mcp skill will guide you through API key configuration.

3

Manual Setup (npm)

For: Advanced users, Cursor, or other MCP clients

Add to your MCP client config file:

{
  "mcpServers": {
    "askqa": {
      "command": "npx",
      "args": ["-y", "@askqa/mcp"],
      "env": {
        "AUTOQA_API_URL": "https://api.askqa.ai",
        "AUTOQA_API_KEY": "aq_..."
      }
    }
  }
}

Get your API key from your account page after signing in.

Environment Variables

Variable Required Description
AUTOQA_API_KEY Yes Your AskQA API key
AUTOQA_API_URL No API URL (default: https://api.askqa.ai)

Tools

Tool Description
list_tests List all saved tests
get_test Get full details of a test
create_test Create a test from a template or custom Playwright code
update_test Update an existing test
delete_test Delete a test (with confirmation)
run_test Run a test and wait for results
get_test_results Get recent test run results with step details
get_test_screenshots Get screenshots from a test run
heal_test Diagnose a test that broke because the site's layout changed and repair its selectors (without changing the test's logic)
list_templates List available test templates with usage hints
detect_template Run a template against a site to discover selectors and generate custom code
screenshot_url Screenshot a URL and extract page structure
validate_test Dry-run custom test code before saving
schedule_test Create a recurring schedule for a test
list_schedules List all test schedules
update_schedule Pause or resume a schedule
delete_schedule Delete a schedule
add_notification_channel Add a notification channel (email, Telegram, or Slack)
list_notification_channels List notification channels
remove_notification_channel Remove a notification channel
test_notification_channel Send a test notification
get_org_secret Get your org's X-AskQA-Secret header value
rotate_org_secret Generate a new X-AskQA-Secret value
share_test_run Make a test run publicly shareable and get a share URL anyone can open without logging in
unshare_test_run Revoke public sharing for a test run so the share URL stops working
get_shared_run Fetch a publicly shared test run by URL or token — no API key required; includes test code so you can recreate it in your own account with create_test

Notifications

Get alerts when a scheduled test fails. AskQA supports email, Telegram, and Slack.

Email

Tell your AI assistant:

“Send email notifications to [email protected] when tests fail”

Or call add_notification_channel with channel_type: "email" and your email_address.

Telegram

To get your chat ID, open @userinfobot in Telegram, press Start, and it will reply with your ID.

Then tell your AI assistant:

“Add Telegram notifications with chat ID 123456789”

Or call add_notification_channel with channel_type: "telegram" and your chat_id.

Slack

Slack requires a lightweight “app” to generate a webhook URL — it takes under a minute and no coding is involved.

  • Go to api.slack.com/apps and click Create New AppFrom scratch
  • Name it anything (e.g. “AskQA”), pick your workspace, click Create App
  • Go to Incoming Webhooks in the sidebar and toggle it on
  • Click Add New Webhook to Workspace, choose a channel, click Allow
  • Copy the webhook URL

Then tell your AI assistant:

“Add Slack notifications with this webhook: https://hooks.slack.com/services/T.../B.../xxx”

Or call add_notification_channel with channel_type: "slack" and your webhook_url.

Claude Code: install the AskQA plugin with /plugin install @askqa/mcp then run /setup-slack for a guided walkthrough.

A test message is sent automatically when you add a channel. You can manage channels with list_notification_channels and remove_notification_channel.

Test healing

Sites change. When a redesign moves an element or renames a label, a previously-passing test starts failing — even though the feature still works. AskQA detects this kind of layout regression (a confirmed run of failures after a prior pass, caused by a selector that no longer matches — not an outage) and repairs the selectors without changing what the test checks. Test logic, steps, assertions, and navigation stay identical; only selectors and the wording used to detect a UI state may change.

On demand, in your AI client (all plans)

Ask your assistant to fix a failing test and it calls heal_test, which confirms the regression, re-runs the test to capture the current page, and proposes new selectors. It verifies the fix with validate_test and applies it with update_test once it passes.

"My checkout test started failing after we changed the page — can you fix it?"

Automatic Pro

On Pro, AskQA heals in the background: when a scheduled test fails because of a layout change, it prepares a fix, verifies it in a sandbox dry-run, and sends you a notification with a link to review the before/after diff and Apply or Dismiss in one click. It re-checks the fix at apply time, and nothing changes until you approve it.

Healing is suggest-only and never edits a test on its own. If a failure is acceptable or you’d rather fix it yourself, dismiss the suggestion to stop further attempts — it re-enables automatically once the test passes again.

Secrets

Tests can store encrypted credentials for authenticated flows — logins, API keys, wallet addresses, or any key-value pairs your test needs.

Secrets are encrypted at rest (AES-256-GCM) and never returned in API responses. They're only decrypted when the test runner executes your test.

Adding secrets to a test

Pass a secrets object when creating or updating a test:

“Create a login test for https://example.com with secrets email: [email protected], password: s3cret”

Or via the API / MCP tools with secrets: { "email": "[email protected]", "password": "s3cret" }. Pass secrets: null to clear them.

Using secrets in custom tests

Secrets are available via the secrets parameter in your test function:

async function test({ page, step, log, secrets }) {
  await step("login", async () => {
    await page.fill('input[type="email"]', secrets.email);
    await page.fill('input[type="password"]', secrets.password);
    await page.click('button[type="submit"]');
    await page.waitForURL('/dashboard');
  });
}

The secrets object contains whatever key-value pairs you stored on the test. Common patterns:

Use case Example secrets
Login { email, password }
API testing { api_key }
Web3 { wallet_address, private_key }
2FA / TOTP { email, password, totp_secret }

Test Mode Header

Every test request to your target domain includes an X-AskQA-Secret header with a unique token for your account. Use it to detect monitoring traffic and enable test-specific behavior on your backend — like using Stripe test keys, skipping real emails, or enabling sandbox mode.

Your token is auto-generated and visible on your account page. You can rotate it at any time.

Backend integration

Check for the header in your server middleware. Set your token as an environment variable:

// Express.js
app.use((req, res, next) => {
  if (req.headers['x-askqa-secret'] === process.env.ASKQA_TEST_SECRET) {
    req.isTestMode = true;
  }
  next();
});

// Then in your checkout route:
const stripeKey = req.isTestMode
  ? process.env.STRIPE_TEST_SECRET_KEY
  : process.env.STRIPE_SECRET_KEY;
# Django
class AskQATestModeMiddleware:
    def __init__(self, get_response):
        self.get_response = get_response

    def __call__(self, request):
        secret = os.environ.get('ASKQA_TEST_SECRET', '')
        request.is_test_mode = request.META.get('HTTP_X_ASKQA_SECRET') == secret
        return self.get_response(request)

Per-test control

Each test has an enable_test_mode flag (default: true). When enabled, the X-AskQA-Secret header is sent with requests to your target domain. Set it to false to test the live production path without the header.

This lets you run two versions of the same test side by side — one hitting sandbox (test mode on) and one hitting production (test mode off) — to monitor both paths.

“Create a checkout test with test mode off so it hits live Stripe”

How it works

  • The header is scoped to your target domain only — it’s never sent to third-party services
  • Enabled by default on all new tests (both template and custom)
  • Set enable_test_mode: false on create_test or update_test to disable it
  • User-provided headers on individual tests are merged alongside it
  • Rotate the token from your account page or via the rotate_org_secret MCP tool

Example Conversations

Check if something is working

"Is checkout working on my site?"

The AI will call list_tests to find a matching test, then get_test_results to check the latest run.

Create a new monitor

"Monitor https://example.com — check that the homepage loads and has a sign-in button"

The AI will use screenshot_url to inspect the page, write custom Playwright code, validate_test to verify it works, then create_test and schedule_test.

Monitor a Shopify store

"Monitor the add to cart on https://my-store.myshopify.com"

The AI will call list_templates to find the shopify-cart template, then detect_template to discover the right CSS selectors for your store, then create_test with the generated code.

Set up Slack alerts

"Send Slack notifications to #qa-alerts when tests fail"

The AI will walk you through creating a Slack webhook, then call add_notification_channel to connect it.

Debug a failing test

"Why is my checkout test failing?"

The AI will call get_test_results and get_test_screenshots to analyze the failure.

Share a test run with someone

"Share my latest checkout run with the client"

The AI will call get_test_results to find the run, then share_test_run to generate a public link anyone can open without logging in. Use unshare_test_run to revoke access.

Copy a shared test into your account

"I got this link from a colleague — can you set up the same test for my site? https://askqa.ai/r/..."

The AI will call get_shared_run to fetch the test code, then create_test to create it in your account (no login required to read the shared run).

Heal a test after a site redesign

"My checkout test started failing after we changed the page — can you fix it?"

The AI will call heal_test, which confirms the test recently regressed because a selector no longer matches the page (not an outage), captures the current layout, and proposes updated selectors — keeping the test's logic unchanged. It verifies the fix with validate_test before applying it with update_test. If the failure is actually expected, you can tell it to leave the test alone and it won't suggest fixes again until the test passes.

npm: @askqa/mcp