qiksy-mcp

MCP bridge for the Qiksy browser extension — expose live QA findings, forms, network and session to any MCP-capable coding agent.

npm · fingerprint 9290efe651f8a479a1a6b07b · repository · RSS

45tools
2recorded versions
13htracked
changed today

What changed

Changed 2026-09-03 10:50 UTC

2 descriptions rewritten, 2 tools added.

--- pinned/qa_click
+++ observed/qa_click
  {
-   "description": "Click an element on the page under test — by a qa_snapshot ref, by a CSS selector, or by the control's accessible `name` (the one to use right after a fill, since filling re-renders the step and staleness is what makes a ref refuse). Sends the full pointer sequence (pointerdown → mouseup → click), so component libraries that listen for pointerdown — Radix, shadcn, MUI — react to it like a real click. Scrolls the element into view first, and refuses a target that matches nothing or has zero size rather than silently doing nothing. Returns what the click CHANGED — what appeared, disappeared or updated once the page settled — so you do not need a follow-up qa_snapshot to find out whether it did anything. `changed: null` means the page did not move, which is itself the answer. On a recent extension build the reply also carries `announced` — what the page's live regions (aria-live / role=status / role=alert) actually spoke during the settle window, or null if they stayed silent: a toast that appeared in `changed` but not in `announced` is invisible to a screen reader (WCAG 4.1.3). Requires Qiksy Pro and the one-time “Agent control” confirmation in the panel; without both the extension answers pro-required / consent-required and does nothing.",
+   "description": "Click an element on the page under test — by a qa_snapshot ref, by a CSS selector, or by the control's accessible `name` (the one to use right after a fill, since filling re-renders the step and staleness is what makes a ref refuse). Sends the full pointer sequence (pointerdown → mouseup → click), so component libraries that listen for pointerdown — Radix, shadcn, MUI — react to it like a real click. Scrolls the element into view first, and refuses a target that matches nothing or has zero size rather than silently doing nothing. Returns what the click CHANGED — what appeared, disappeared or updated once the page settled — so you do not need a follow-up qa_snapshot to find out whether it did anything. `changed: null` means the page did not move, which is itself the answer. On a recent extension build the reply also carries `announced` — what the page's live regions (aria-live / role=status / role=alert) actually spoke during the settle window, or null if they stayed silent: a toast that appeared in `changed` but not in `announced` is invisible to a screen reader (WCAG 4.1.3). AND WHEN THE PRESS NAVIGATED there is no diff to give: the reply carries `navigated: <the new url>` instead. That IS what the press did — do not press again, a second one would land on the NEXT page rather than repeat this one. Requires Qiksy Pro and the one-time “Agent control” confirmation in the panel; without both the extension answers pro-required / consent-required and does nothing.",
    "execution": {
      "taskSupport": "forbidden"
    },

+ tool added: qa_screenshot

--- pinned/qa_upload
+++ observed/qa_upload
  {
-   "description": "Put a file into an <input type=file> — including the hidden ones behind a styled dropzone, which a click can never reach. Three ways to choose what goes in: `fixture` for a hostile edge-case file (the upload counterpart of naughty strings — empty, oversize, wrong-type, corrupt, unicode name, unsanitised SVG…), `path` for a file on this machine, or `content` as base64. Pass `content` as base64 to attach a file YOU generated (a PDF fixture, a malformed CSV, an oversized image); omit it and Qiksy attaches a neutral test file matched to the field's `accept`. A content script has no filesystem access and the OS file picker is a modal an agent must never open, so bytes over this bridge are the only way a file from outside the browser gets in. Delivery fires both paths uploaders use — assigning `input.files` + change, and a synthetic drop on the nearest dropzone — because react-dropzone-style components listen only for the second. SEVERAL FIELDS IN ONE CALL: pass `files` — an array of the same arguments — and they are attached in order, one round trip for the whole step instead of one per file.",
+   "description": "Put a file into an <input type=file> — including the hidden ones behind a styled dropzone, which a click can never reach. Three ways to choose what goes in: `fixture` for a hostile edge-case file (the upload counterpart of naughty strings — empty, oversize, wrong-type, corrupt, unicode name, unsanitised SVG…), `path` for a file on this machine, or `content` as base64. Pass `content` as base64 to attach a file YOU generated (a PDF fixture, a malformed CSV, an oversized image); omit it and Qiksy attaches a neutral test file matched to the field's `accept`. A content script has no filesystem access and the OS file picker is a modal an agent must never open, so bytes over this bridge are the only way a file from outside the browser gets in. AND WHERE THERE IS NO FILE INPUT AT ALL — a button that calls the native picker straight away, as YouTube Studio's audio-language dialog does — name that button with `field` and the file is handed to the picker it opens, exactly as a person choosing it would. The reply says `via` when that route was used, and it says so only when the page actually took the file. Delivery fires both paths uploaders use — assigning `input.files` + change, and a synthetic drop on the nearest dropzone — because react-dropzone-style components listen only for the second. SEVERAL FIELDS IN ONE CALL: pass `files` — an array of the same arguments — and they are attached in order, one round trip for the whole step instead of one per file.",
    "execution": {
      "taskSupport": "forbidden"
    },

+ tool added: qa_wait_for

Current tools

Show all 45 tool fingerprints
qa_axe
d79351888cff570e
qa_click
c78c0ede3d5c01d9
qa_close_tab
b91cd37e7052fdd9
qa_dialogs
23e6d096397f3d4a
qa_export
0693a3e435a115f6
qa_fill_json
8a2cd7be34dcda30
qa_findings
4de300affa24720b
qa_focus_tab
fb16bbf36525c968
qa_focus_walk
026201d0778d9547
qa_mock
610eaa9873506bdb
qa_navigate
0a1e1db30f97ab83
qa_open_isolated
188012c4abeeaf1a
qa_open_panel
77a1e8f55bc0c5b1
qa_pick_date
896e223e7d5a9cb1
qa_pick_path
da4cd0cacd33df28
qa_pick_range
67f6eb0d6475d8e8
qa_pick_tags
49b7181fb21fda7d
qa_pick_time
4fc2ca609d89327a
qa_press
e974b82962a58f17
qa_probe
c8ad82b740350b3b
qa_read
8a37369501448a65
qa_recipe_apply
2bf94097be7093d8
qa_recipe_list
33d13d3a257f678b
qa_recipe_save
f4c8cf9fd02902b7
qa_reload
eb2ef9455f1d18ad
qa_report
bac3bbf418f1506e
qa_run_audit
553c5162a63aca65
qa_scenario_get
9845d5d532250c97
qa_scenario_run
d4612ca9fa7197dd
qa_scenario_save
7da8089af79fd2e1
qa_scenarios
eb25b6c3c16fffd2
qa_screenshot
e3d71dc0b7daa960
qa_snapshot
be56368fdab9903b
qa_spotlight
76ea691252f302c8
qa_status
57e54c0b5909bc45
qa_storage
72a901bc95ce7db8
qa_styles
849b46c380f78181
qa_suite_run
ab51f94073173c03
qa_tabs
79f3ffd5d66bf11e
qa_tour
cef03bfe7d850429
qa_type
dc69c1e131c67e5b
qa_type_many
cf42b963d5a86ca1
qa_upload
09a3ca5b315e5e37
qa_wait_for
a587fdcff431bbc8
qa_wait_ready
a00d6b1299f7a074

Watch this server yourself

If you run this server, put the proxy in front of it. It pins these exact fingerprints on first connect and stops the session if they move.

npx --yes mcp-pin@0.1.0 -- <your qiksy-mcp command>

Or subscribe to this page's RSS feed to be told when it changes.

Badge

mcp-pin status badge for qiksy-mcp

The badge states one fact about time and nothing else. It never claims a server is safe.

[![mcp-pin](https://mcp-pin.gautamkhosla.com/badge/ec41970852a8356d.svg)](https://mcp-pin.gautamkhosla.com/servers/ec41970852a8356d.html)