These docs are in English. If you prefer German, write us at beta@clickprobe.ai.
ClickProbe IDE Integration — Troubleshooting
1. Keychain denial / prompt on first save
macOS: On first clickprobe-proxy login, macOS shows a Keychain access prompt for the app. Click Allow. If you accidentally denied:
- Open Keychain Access, search for
clickprobe-proxy, delete the entry. - Re-run
clickprobe-proxy login.
Linux (GNOME/KDE): clickprobe-proxy stores tokens via the freedesktop Secret Service (Seahorse / KWallet). If you see a dialog asking to unlock the keyring, enter your login password. If D-Bus is absent (e.g. headless server), the proxy falls back to an encrypted file store and prints a warning — that is expected.
Windows: Credential Manager is used automatically. No prompt should appear. If access is denied by a corporate policy, run with --storage file to use the encrypted-file fallback: clickprobe-proxy login --storage file.
2. 401 loops after get_bugs or other tool calls
The proxy’s access token may be expired or revoked.
Fix:
clickprobe-proxy logout
clickprobe-proxy login
Restart your IDE after re-logging in (some IDEs cache the MCP server subprocess).
If the 401 persists, check that the account is not suspended at https://app.clickprobe.ai/app/billing.
3. Windows path quoting in .mcp.json / mcp_settings.json
Use double-backslash (\\) for Windows paths in JSON:
{
"mcpServers": {
"clickprobe": {
"command": "C:\\Users\\you\\bin\\clickprobe-proxy.exe",
"args": ["--agent-stdio"]
}
}
}
Forward slashes also work in most contexts:
{
"mcpServers": {
"clickprobe": {
"command": "C:/Users/you/bin/clickprobe-proxy.exe",
"args": ["--agent-stdio"]
}
}
}
Do not use a path with spaces without quoting. Prefer to install clickprobe-proxy to a path without spaces (e.g. C:\bin\ or add it to %PATH% and use "command": "clickprobe-proxy").
4. WSL: which clickprobe-proxy returns nothing
The proxy binary is a native Linux binary. In WSL:
- Build or download the Linux binary.
- Add to
~/.bashrc:export PATH="$HOME/.local/bin:$PATH" - Copy the binary:
cp clickprobe-proxy ~/.local/bin/ && chmod +x ~/.local/bin/clickprobe-proxy - Verify:
which clickprobe-proxy
Note: WSL2 by default has no DISPLAY, so clickprobe-proxy login will auto-detect headless mode and use the device-code flow. If you have WSLg set up (DISPLAY=:0 present), it may attempt browser mode first.
5. Docker container: no D-Bus, no keychain
Inside a Docker container, the OS-native keystore is unavailable. The proxy automatically falls back to an encrypted file store:
clickprobe-proxy: keychain unavailable (<reason>); falling back to encrypted file at /root/.local/share/clickprobe/tokens-v1.enc
This is expected. To persist tokens across container restarts, mount a volume:
docker run -v clickprobe-tokens:/root/.local/share/clickprobe my-image
Or use --storage file explicitly to prevent the keychain attempt: clickprobe-proxy login --storage file.
6. Device-code phishing — what the machine label means
When you visit https://app.clickprobe.ai/auth/device and enter a code, the consent page shows the machine label of the proxy that initiated the request (e.g. "laptop" or "ci-runner-01").
The label is self-reported by the proxy. It is not verified by ClickProbe. An attacker could create a proxy that reports a convincing-looking label.
What to do: If you did not just run clickprobe-proxy login --device on the machine shown, click Deny. The code expires in 10 minutes; the attacker’s session never gets a token.
7. tools/list returns 0 tools — proxy not logged in
If your IDE reports no tools from the clickprobe MCP server, the proxy most likely has no stored token.
Fix:
clickprobe-proxy login
Then restart your IDE (the --agent-stdio subprocess is spawned fresh on each IDE start).
To verify the proxy is working without an IDE:
echo '{"jsonrpc":"2.0","id":1,"method":"tools/list","params":{}}' | clickprobe-proxy --agent-stdio
Expected: a JSON response listing 9 tools.
8. Browser didn’t open during clickprobe-proxy login
If the browser doesn’t open, the proxy falls back to device-code mode automatically. Alternatively, force device mode:
clickprobe-proxy login --device
Or force browser mode to see the error:
clickprobe-proxy login --browser --verbose
--verbose shows the URL that would be opened. You can copy-paste it into your browser manually.
9. 422 on resolve_bug — bug FSM forbids the transition
When you call clickprobe.resolve_bug on a bug that is in status new (or
any other status that cannot transition directly to resolved), the proxy
returns:
{
"detail": {
"reason": "illegal_transition",
"current": "new",
"allowed": ["confirmed", "dismissed", "exported", "retesting"]
}
}
Why: The server-side FSM forbids new → resolved. Only bugs in status
confirmed, retesting, or exported can move to resolved.
Fix — confirm the bug first:
Option A (operator click — recommended):
- Open
https://app.clickprobe.ai/app/bugs/{bug_id}in the dashboard. - Click Confirm.
- Retry the
clickprobe.resolve_bugcall.
Option B (operator API call — for scripting / batch confirms):
# Operator's browser session cookie (not the agent's proxy token)
curl -X PATCH "https://app.clickprobe.ai/api/bugs/<bug_id>" \
-H "Cookie: <operator-session-cookie>" \
-H "Content-Type: application/json" \
-d '{"status": "confirmed"}'
Then retry clickprobe.resolve_bug.
Note: A clickprobe.confirm_bug MCP tool that would let the agent skip
the operator round-trip is tracked as a follow-up (C-014-F01); shipping it
is a v1.x decision based on beta-customer feedback.
Webhook auto-close
My commit didn’t close the bug. Check:
- The commit message contains a supported keyword exactly — see
Auto-close via commit
for the full keyword list (
Fix,Fixes,Fixed,Close,Closes,Closed,Resolve,Resolves,Resolved). BothCP-<n>and#<n>formats are accepted. - The webhook is active in ClickProbe (
Settings → Connect Git; the row should show a recentlast_used_at). - GitHub/GitLab’s “Recent Deliveries” tab shows a
200response to your push — if it shows401, the secret mismatches; rotate in ClickProbe and re-paste into your repo settings. - If the response body says
{"closed":[],"skipped":[{"bug_id":…, "reason":"not_found"}]}, theCP-<n>ID you referenced does not belong to the account that owns this webhook. Each webhook is scoped to one account. - If the response body says
{"detail":"invalid signature"}, the secret stored in your repo settings doesn’t match the one ClickProbe has. Rotate the webhook secret inSettings → Connect Gitand re-paste the new secret into GitHub/GitLab.
GitHub shows a red ❌ ping on webhook creation. This is expected —
the receiver only handles push events and returns 422 for everything
else (including the GitHub ping). The first real commit push will show
a green ✅.
My bug reopened after a revert. Not currently supported — the
webhook acts on forward commits only. Reopen the bug manually via the
dashboard or use clickprobe.resolve_bug with status new.