Documentation
Connect AskQA to Claude and other AI assistants via MCP (Model Context Protocol).
Installation
Choose the installation method that matches your workflow:
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:
- Download askqa-latest.mcpb
- Open Claude Desktop → Settings → Extensions
- Drag the
.mcpbfile into the window - 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.
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.
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.
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 App → From 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.
/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: falseoncreate_testorupdate_testto disable it - User-provided
headerson individual tests are merged alongside it - Rotate the token from your account page or via the
rotate_org_secretMCP 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