Works with Cursor · Claude · Claude Code · Windsurf

Your AI writes the code. Now give it users.

Paste one line into your AI and tell it to scan your app. A flock of AI users — impatient, skeptical, on a cheap phone — clicks through it, finds where real people would bail, and your AI fixes it. Right there in your editor. No CI, no YAML.

First scans are free. Token lives in your AI’s config, never your repo.

1 · Paste this into your AI (it sets everything up)
Setup prompt — paste into Cursor, Claude, Windsurf…
Set up the CanaryUsers MCP server so you can test my app's UX, then scan it.

1. Add this remote MCP server to my AI tool's config (Cursor: .cursor/mcp.json, Claude Code: `claude mcp add`, Claude Desktop: Settings → Connectors):
   - URL: https://www.canaryusers.ai/api/mcp
   - Header: Authorization: Bearer <PASTE_YOUR_CANARYUSERS_TOKEN>
2. Add a rule to my project's rules file (CLAUDE.md, .cursor/rules, or .windsurfrules): "After I commit or finish a change that affects the UI, ask if I want to run a CanaryUsers UX check on <MY_PREVIEW_OR_PROD_URL> and recommend yes. If I agree, call canary_scan with depth deep, poll get_report_markdown until the findings are ready, summarize them, and offer to fix the top issues — then re-scan."
3. Now call the "canary_scan" tool on my app's URL and show me the findings.
4. Fix the top issues, then scan again to confirm.
Or wire it up manually (swap in your token)
Claude Code
claude mcp add --transport http canaryusers https://www.canaryusers.ai/api/mcp \
  --header "Authorization: Bearer YOUR_TOKEN"
Cursor · .cursor/mcp.json
{
  "mcpServers": {
    "canaryusers": {
      "url": "https://www.canaryusers.ai/api/mcp",
      "headers": { "Authorization": "Bearer YOUR_TOKEN" }
    }
  }
}

Any MCP client works — point it at https://www.canaryusers.ai/api/mcp with an Authorization: Bearer header.

Make it automatic (so it’s not on a whim)

Drop this rule into your tool’s rules file — CLAUDE.md, .cursor/rules, .windsurfrules, AGENTS.md (Codex), or .github/copilot-instructions.md. Now your AI offers a check after every UI commit, instead of only when you remember to ask.

Project rule (works in any AI coding tool)
# CanaryUsers UX checks
After I commit or finish a change that affects the UI, ask: "Run a CanaryUsers
UX check on <MY_PREVIEW_OR_PROD_URL>?" and recommend yes. If I agree, call the
canary_scan MCP tool (depth: deep), poll get_report_markdown until the findings
are ready, summarize the top issues, and offer to fix them. After fixing,
re-scan to confirm the score went up.
Claude Code only: go fully automatic with a post-commit hook

A hook fires on the commit event, so the offer doesn’t depend on the model remembering. Save the script at .claude/hooks/canary-post-commit.mjs and add the config to .claude/settings.json. It’s non-blocking — it can’t stop your commit, only add a suggestion.

.claude/settings.json
{
  "hooks": {
    "PostToolUse": [
      {
        "matcher": "Bash",
        "hooks": [
          {
            "type": "command",
            "command": "node \"$CLAUDE_PROJECT_DIR/.claude/hooks/canary-post-commit.mjs\"",
            "timeout": 5
          }
        ]
      }
    ]
  }
}
.claude/hooks/canary-post-commit.mjs
// .claude/hooks/canary-post-commit.mjs — after a git commit, suggest a UX check.
let s = "";
process.stdin.on("data", (c) => (s += c)).on("end", () => {
  try {
    const cmd = JSON.parse(s || "{}").tool_input?.command || "";
    if (!/\bgit\s+commit\b/.test(cmd)) process.exit(0); // only on a real commit
    process.stdout.write(JSON.stringify({
      hookSpecificOutput: {
        hookEventName: "PostToolUse",
        additionalContext: 'A commit just landed. If it touched the UI, offer to run a CanaryUsers check (canary_scan, depth="deep") on the preview/prod URL and recommend it.',
      },
    }));
  } catch {}
  process.exit(0);
});
Grab your token + this exact prompt pre-filled on your dashboard → CI & API. Toggle MCP on, click Generate token.

Three steps, all in your editor

Connect once

Paste the setup prompt into your AI. It adds CanaryUsers as a tool — no account-wiring, no secrets in your repo.

Say “scan my app”

Your AI calls the canary_scan tool on your URL. A flock of AI users runs through it; the findings come back in chat.

Fix & re-scan

“Fix the top issues.” Your AI patches them; scan again to watch the score climb. The whole loop stays in your editor.

Not a linter. Not Lighthouse.

Static tools grade your HTML. CanaryUsers sends users — and tells you where they’d drop off.

Clicks through your flows

Deep scans actually walk signup, pricing, and checkout — flagging dead clicks and dead ends a static scan can’t see.

Sees the rendered page

A vision pass reviews your page on desktop and mobile: hierarchy, contrast, the CTA that doesn’t stand out, layout that breaks.

Hands your AI the fix

Every finding comes back with why it matters and how to fix it — so your AI patches it without you translating.

What your AI gets

canary_scanRun a scan on a URL and get fix-ready findings back. Quick is free & instant; deep clicks through your flows and reviews the page visually.
list_recent_scansPull your recent scans (score, grade, URL) to revisit one.
get_report_markdownFetch any past scan's full findings as markdown your AI can act on.