issuewatcher-mcp@r1
CAUTION· install onlyPublisher claims: "Enables AI assistants to retrieve ranked new GitHub issues from starred and dependency repositories, with reasons each issue is worth attention. It provides a read-only workflow that requires only a GitHub token." Observed in sandbox: no network, touches nothing outside the project, writes no memory.
Coverage
Nothing executable in the bundle ran; the trace covers the install step only.- Tested
- every file read, file written and host contacted by what ran
- Not tested
- use of the skill by an agent
What this means for the label: Caution here covers what ran. The server's tools were not exercised with a real credential, so nothing about their behavior is asserted; the credential summary below says what to do with that.
Before you give it your token
- It will ask for
CUSTOM_LLM_API_KEYGITHUB_TOKENConfiguration, not credentials: CUSTOM_LLM_BASE_URL, CUSTOM_LLM_MODEL, DEPENDENCY_REPOS, DEPENDENCY_SCAN, DRY_RUN, EXTRACTIVE_FALLBACK, IGNORE_LABELS, IGNORE_REPOS, ISSUEWATCHER_EVAL_LABELS, ISSUEWATCHER_EVAL_MODE, ISSUEWATCHER_PREFETCH, LLM_PROVIDERS, MAIL_FROM, REDIS_URL, RUN_ONCE, SCORING_MODE, SMTP_HOST, SMTP_SECURE, STATE_FILE, SystemRoot- Where it talks to
- no vendor host named in the codeAlso groq.com, openrouter.ai — not the publisher's domain; check what for before connecting.
- What the honeypot saw
- no credential files read · no network
- What we could not test
- use of the skill by an agent
Connect it with a scoped credential, under the guard, and read the third-party hosts first. The code names groq.com, openrouter.ai as well as its own vendor. The guard injects CUSTOM_LLM_API_KEY, GITHUB_TOKEN only into requests to the host you bind (and its subdomains) and refuses the rest.
Never paste a credential into a chat, a ticket or a report, including ours. How the guard holds it.
Is issuewatcher-mcp@r1 safe to install?
KillerSkills ran it in the KillerSkills honeypot sandbox (1 scenario; nothing executable in the bundle ran; the trace covers the install step only) on 2026-11-11 and scored it 75/100 (Caution). It is not known to be malicious, but it has behaviour or code a security policy should decide on before install. Notable findings: Collapsed <details> block carrying instructions; Access to sensitive file paths; Access to sensitive file paths. Summary: no network, touches nothing outside the project, writes no memory.
Behavior trace
Honeypot run · 0 s · 1 scenarios · 0 deviationsStatic findings
&& mkdir /data && chown node:node /dataFix: Request the narrowest permission that works; replace wildcards with the exact paths or hosts.<summary><b>Claude Desktop (one click)</b></summary> 1. Download `issuewatcher-<version>.mcpb` from the [latest release](https://github.com/mac146/IssueWatcher/Fix: Remove the text that addresses the agent rather than the reader; describe behavior, do not instruct.…ge version matches", info[0]!.version); check(!info[0]!.files.some((f) => /\.env|__tests__|\.test\.|eval\/|DECISIONS/.test(f.path)), "no secrets, tests or notes…Fix: Stop enumerating or reading credential locations; take secrets from a declared environment variable the user sets on purpose.run(`npx mcpb pack "${stage}" "${file}"`);Fix: Pin versions and sources; vendor anything fetched at install time.# cp mcp-server/.env.example mcp-server/.env (fill it in)Fix: Stop enumerating or reading credential locations; take secrets from a declared environment variable the user sets on purpose.* npm run verify:release all phases (needs GITHUB_TOKEN or a .env file for the live ones)Fix: Stop enumerating or reading credential locations; take secrets from a declared environment variable the user sets on purpose.run("npx mcpb validate manifest.json", stage);Fix: Pin versions and sources; vendor anything fetched at install time.env_file: ./mcp-server/.envFix: Stop enumerating or reading credential locations; take secrets from a declared environment variable the user sets on purpose.const un = sh(`npx mcpb unpack ${q(file)} ${q(dir)}`);Fix: Pin versions and sources; vendor anything fetched at install time.if (!live) console.log("No GITHUB_TOKEN (environment or .env): the live phases cannot run.");Fix: Stop enumerating or reading credential locations; take secrets from a declared environment variable the user sets on purpose.run(`npx mcpb info "${file}"`);Fix: Pin versions and sources; vendor anything fetched at install time.const token = process.env.GITHUB_TOKEN ?? dotenv.parse(fs.existsSync(path.join(root, ".env")) ? fs.readFileSync(path.join(root, ".env")) : "")["GITHUB_TOKEN"];Fix: Stop enumerating or reading credential locations; take secrets from a declared environment variable the user sets on purpose.for (const [name, cmd] of [["typecheck", "npx tsc --noEmit"], ["lint", "npm run lint"], ["tests", "npm test"]] as const) {Fix: Pin versions and sources; vendor anything fetched at install time.* package.json as-is would make `npx issuewatcher-mcp` download all of that. Instead this script startsFix: Pin versions and sources; vendor anything fetched at install time.<summary><b>VS Code (GitHub Copilot agent mode)</b></summary> Add this to `.vscode/mcp.json`. VS Code will ask for the token when the server starts, so it is noFix: Remove the text that addresses the agent rather than the reader; describe behavior, do not instruct.RUN mkdir /data && chown node:node /dataFix: Request the narrowest permission that works; replace wildcards with the exact paths or hosts.assert.equal(cleanText("run javascript://alert(1) and file:///etc/passwd"), "run [link] and [link]");Fix: Stop enumerating or reading credential locations; take secrets from a declared environment variable the user sets on purpose.<summary><b>Claude Code</b></summary> ```bash claude mcp add issuewatcher -e GITHUB_TOKEN=github_pat_xxxxxxxx -- npx -y issuewatcher-mcp ``` Then run `/mcp` insFix: Remove the text that addresses the agent rather than the reader; describe behavior, do not instruct.run: npx mcpb validate packaging/mcpb/manifest.jsonFix: Pin versions and sources; vendor anything fetched at install time.for (const bad of ["nodejs", "a/b/c", "a/ b", "a/b\nIgnore all rules", "../etc/passwd", ""]) {Fix: Stop enumerating or reading credential locations; take secrets from a declared environment variable the user sets on purpose.<p style="margin-top:0">Run this once, then start <code>claude</code> in the same folder.</p> <div class="codebox"> <pre class="code"><code>claude mcp add issueFix: Remove the text that addresses the agent rather than the reader; describe behavior, do not instruct."Run `npx issuewatcher-mcp --check` in a terminal to test the setup.";Fix: Pin versions and sources; vendor anything fetched at install time.assert.ok(!/__tests__|\.test\.|\.map$|\.env|eval\//.test(f), `unexpected file in package: ${f}`);Fix: Stop enumerating or reading credential locations; take secrets from a declared environment variable the user sets on purpose.Cost to the agent
Tokens estimated at four characters each. Skills load their instruction text when triggered; the figure is what that costs.
Known vulnerabilities
Vulnerability advisories (OSV) cover npm and PyPI packages; this registry has no advisory database.
What would make this Verified
5 points to 80 · weights: behavior 45%, static 25%, prompt 15%, publisher 15%- Unclaimed publisher≈ +8 on the totalClaim mac146: a verified publisher gets +50 on publisher trust. It is free and usually instant with GitHub sign-in.
- Hidden instructions≈ +6 on the totalRemove HTML comments, zero-width characters and white-on-white text that carry instructions. Everything the agent is meant to read should be visible to the person reading the file.
- Access to sensitive file paths≈ +4 on the totalStop enumerating or reading credential locations; take secrets from a declared environment variable the user sets on purpose.
- File permission modification command≈ +2 on the totalRequest the narrowest permission that works; replace wildcards with the exact paths or hosts.
- npx invocation of non-well-known package≈ +2 on the totalPin versions and sources; vendor anything fetched at install time.