qiksy-mcp 1.1.1 → 1.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/AGENT-GUIDE.md +111 -0
- package/package.json +2 -2
package/AGENT-GUIDE.md
ADDED
|
@@ -0,0 +1,111 @@
|
|
|
1
|
+
# Qiksy bridge — guide for a coding agent
|
|
2
|
+
|
|
3
|
+
Drop this file into a project (`.claude/qiksy-bridge.md`, `AGENTS.md`, or wherever your
|
|
4
|
+
assistant reads project notes) and the assistant knows what the bridge is, what it can
|
|
5
|
+
do, and — just as important — what it deliberately cannot.
|
|
6
|
+
|
|
7
|
+
Qiksy connects an agent to **the browser the human already has open**: their real
|
|
8
|
+
profile, their logged-in sessions, the tab they are looking at. It never launches a
|
|
9
|
+
browser, never switches window or tab focus, and never steals the pointer. Work happens
|
|
10
|
+
inside the existing (even backgrounded) tab.
|
|
11
|
+
|
|
12
|
+
---
|
|
13
|
+
|
|
14
|
+
## Setup, once
|
|
15
|
+
|
|
16
|
+
1. **Install the extension** — [Qiksy on the Chrome Web Store](https://chromewebstore.google.com/detail/jcnbcbpndahhblhobhjjkhafmbkleoem).
|
|
17
|
+
2. **Turn the bridge on.** Either the extension popup → *Agent bridge · MCP* → On →
|
|
18
|
+
*Generate* a token, or — from a Qiksy web app — press **Connect this browser** and
|
|
19
|
+
confirm on the page the extension opens. Both end the same way: a port (7333 by
|
|
20
|
+
default) and a shared token.
|
|
21
|
+
3. **Point the agent at it.** Same token, same port:
|
|
22
|
+
|
|
23
|
+
```bash
|
|
24
|
+
claude mcp add --transport stdio qiksy \
|
|
25
|
+
--env QIKSY_MCP_TOKEN=YOUR_TOKEN \
|
|
26
|
+
-- npx qiksy-mcp --port 7333
|
|
27
|
+
```
|
|
28
|
+
|
|
29
|
+
```json
|
|
30
|
+
{ "mcpServers": { "qiksy": {
|
|
31
|
+
"command": "npx",
|
|
32
|
+
"args": ["qiksy-mcp", "--port", "7333"],
|
|
33
|
+
"env": { "QIKSY_MCP_TOKEN": "YOUR_TOKEN" }
|
|
34
|
+
} } }
|
|
35
|
+
```
|
|
36
|
+
|
|
37
|
+
4. **Check it.** `qa_status` should answer with the current page. "Qiksy extension is not
|
|
38
|
+
connected" means the popup switch is off or the token/port differ — it is not a
|
|
39
|
+
reason to reach for another browser driver.
|
|
40
|
+
|
|
41
|
+
---
|
|
42
|
+
|
|
43
|
+
## The tools
|
|
44
|
+
|
|
45
|
+
**Read-only — always available.**
|
|
46
|
+
|
|
47
|
+
| Tool | What it gives you |
|
|
48
|
+
|---|---|
|
|
49
|
+
| `qa_tabs` | Every tab the bridge can see, with `tabId`, URL, title, and which are isolated logins. Start here when several tabs are open. |
|
|
50
|
+
| `qa_status` | Health of one tab: URL, counts of errors, warnings, forms, failed requests. The cheap "did I break something". |
|
|
51
|
+
| `qa_snapshot` | The whole page as an **accessibility tree** — every control, landmark and heading with a role, a name, its state, and a stable `ref` like `[ref=e12]`. This is how you SEE the page. |
|
|
52
|
+
| `qa_findings` | Console errors, failed requests, a11y problems Qiksy has collected, filterable by severity. |
|
|
53
|
+
| `qa_export` | The `qa-export/v1` bundle: findings with selectors, failed requests with server bodies, detected form structure, repro steps. |
|
|
54
|
+
|
|
55
|
+
**Qiksy's own surfaces — never touches the page under test.**
|
|
56
|
+
|
|
57
|
+
`qa_open_panel` · `qa_run_audit` · `qa_tour` · `qa_report` · `qa_spotlight`
|
|
58
|
+
(`qa_spotlight` highlights an element so the human can look at the same thing you are.)
|
|
59
|
+
|
|
60
|
+
**Agent control — acts on the page. Requires Qiksy Pro AND a one-time "Agent control"
|
|
61
|
+
consent in the popup.** A refusal there is the human's to clear; report it in one
|
|
62
|
+
sentence rather than working around it.
|
|
63
|
+
|
|
64
|
+
`qa_click` · `qa_type` · `qa_type_many` · `qa_press` · `qa_wait_ready` ·
|
|
65
|
+
`qa_navigate` · `qa_open_isolated` · `qa_close_tab`
|
|
66
|
+
|
|
67
|
+
---
|
|
68
|
+
|
|
69
|
+
## How to drive it well
|
|
70
|
+
|
|
71
|
+
- **Target by `ref` from a fresh snapshot.** A `ref` is unique where a CSS selector is
|
|
72
|
+
ambiguous. After anything that navigates or re-renders, call `qa_wait_ready` and take
|
|
73
|
+
a **new** snapshot — old refs go stale.
|
|
74
|
+
- **Address a specific tab** with `tabId` from `qa_tabs`; omit it to act on the active
|
|
75
|
+
one. Tabs from `qa_open_isolated` are separate logins on the same site — that is how
|
|
76
|
+
you drive several accounts at once.
|
|
77
|
+
- **After a submit**, `qa_wait_ready` before the next call: the old document (and Qiksy
|
|
78
|
+
inside it) is gone, and the next call would land on a page still being replaced.
|
|
79
|
+
- **Autocomplete fields need a beat.** Suggestion lists arrive asynchronously (~0.4s on
|
|
80
|
+
travel sites). Type, wait, snapshot, then click the option you want — do not assume
|
|
81
|
+
the first one committed.
|
|
82
|
+
|
|
83
|
+
## What it cannot do — say so, don't substitute
|
|
84
|
+
|
|
85
|
+
- **No screenshots.** `qa_snapshot` is a tree, not pixels. Judgements about spacing,
|
|
86
|
+
colour or alignment cannot be made from here.
|
|
87
|
+
- **No arbitrary JavaScript.** No `evaluate`, by design (a Web Store requirement). Which
|
|
88
|
+
means **no reading or writing localStorage** and **no measuring geometry**.
|
|
89
|
+
- **No `<iframe>` contents.** Payment forms (Stripe, 3-D Secure) live in frames the
|
|
90
|
+
content script does not enter. Fill up to them, not inside them.
|
|
91
|
+
- **No captcha.** Stop and hand it back.
|
|
92
|
+
- **Background tabs are throttled by Chrome.** Native inputs fill fine in the
|
|
93
|
+
background; custom popovers (Radix/MUI selects, date pickers) only render in the
|
|
94
|
+
foreground tab.
|
|
95
|
+
- **Navigation stays on the site under test.** `qa_navigate` refuses a different site
|
|
96
|
+
(`out-of-scope`) — the human opens that tab, then the agent works in it.
|
|
97
|
+
|
|
98
|
+
When a task genuinely needs pixels, eval or a different site, name the missing
|
|
99
|
+
capability out loud instead of quietly switching to another tool.
|
|
100
|
+
|
|
101
|
+
## Several agent windows, one browser
|
|
102
|
+
|
|
103
|
+
Each MCP client starts its own copy of the server, but only one can own the loopback
|
|
104
|
+
port: whoever binds it is the hub and holds the extension socket, the rest relay
|
|
105
|
+
through it automatically. You do not need to know which one you are. If the owning
|
|
106
|
+
window closes, the others take the port over within a second or two — a call that fails
|
|
107
|
+
that way is worth one retry.
|
|
108
|
+
|
|
109
|
+
If the port is held by something that cannot share it (an older bridge, an unrelated
|
|
110
|
+
process), the tools say so; the fix is that process or a different `--port`, not the
|
|
111
|
+
popup.
|
package/package.json
CHANGED
|
@@ -1,12 +1,12 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "qiksy-mcp",
|
|
3
|
-
"version": "1.
|
|
3
|
+
"version": "1.2.0",
|
|
4
4
|
"description": "MCP bridge for the Qiksy browser extension — expose live QA findings, forms, network and session to any MCP-capable coding agent.",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"bin": {
|
|
7
7
|
"qiksy-mcp": "server.mjs"
|
|
8
8
|
},
|
|
9
|
-
"files": ["server.mjs", "README.md"],
|
|
9
|
+
"files": ["server.mjs", "README.md", "AGENT-GUIDE.md"],
|
|
10
10
|
"engines": {
|
|
11
11
|
"node": ">=18"
|
|
12
12
|
},
|