agnoclast-mcp@0.9.341
CAUTION· startup onlyPublisher claims: "Connect your AI assistant to Cortex — your org's projects, activity, gaps, and directives, scoped to you." Observed in sandbox: no network, touches nothing outside the project, writes no memory.
Coverage
Startup only; authenticated tool behavior not tested.- Tested
- server startup over stdio (initialize sent) · every file read, file written and host contacted by what ran
- Not tested
- the tool list (the server exited before answering) · what the tools do when called with real credentials
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
CORTEX_TOKENConfiguration, not credentials: AGNOCLAST_CLIENT, AGNOCLAST_TURN_CHECK, BUG_REPORTS_PATH, CLAUDE_CODE_SESSION_ID, CLAUDE_SESSION_ID, CLAUDECODE, CORTEX_AUTOFILE, CORTEX_CAPTURE_DETACHED, CORTEX_CAPTURE_SYNC, CORTEX_CLIENT_ROLE, CORTEX_HTTP_TIMEOUT_MS, CORTEX_REPORT_SPOOL_DIR, CORTEX_REVIEW_DISABLED, CORTEX_REVIEW_MODEL, CORTEX_SUMMARIZE_DISABLED, CORTEX_SUMMARIZING, CORTEX_SUMMARY_MODEL, CORTEX_SUMMARY_TIMEOUT_MS, CORTEX_SUMMARY_WINDOW, CORTEX_TYPED, CORTEX_URL, NEW_KEY, OLD_KEY- Where it talks to
- no vendor host named in the codeAlso agnoclast.com, apple.com — 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
- the tool list (the server exited before answering) · what the tools do when called with real credentials
Connect it with a scoped credential, under the guard, and read the third-party hosts first. The code names agnoclast.com, apple.com as well as its own vendor. The guard injects CORTEX_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 [email protected] safe to install?
KillerSkills ran it in the KillerSkills honeypot sandbox (2 scenarios; startup only; authenticated tool behavior not tested) on 2026-11-13 and scored it 69/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: HTTP URL with a raw public IP address; 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 · 25 s · 2 scenariosStatic findings
cli: (source) => `npx -y @theronap/agnoclast-mcp use-brain "<brain>" --source ${source}`,Fix: Pin versions and sources; vendor anything fetched at install time.const skillsCmd = markCommand(`npx -y ${spec} skills --repair --quiet`)Fix: Pin versions and sources; vendor anything fetched at install time.` uninstall remove ALL Agnoclast wiring (MCP, hooks, skills, launchd, cron). --dry-run to preview, --purge to also wipe ~/.cortex + npx cache\n` +Fix: Pin versions and sources; vendor anything fetched at install time.// --dry-run prints the plan and changes nothing; --purge also removes ~/.cortex, the npx cache, andFix: Pin versions and sources; vendor anything fetched at install time.const REACHABILITY_URL = 'https://1.1.1.1/cdn-cgi/trace'Fix: Replace encoded or assembled strings with plain literals and remove undeclared network calls.// `node` on every MCP call, so it may import only Node built-ins (no npx start-up on the hot path).Fix: Pin versions and sources; vendor anything fetched at install time.token = s?.env?.CORTEX_TOKEN ?? nullFix: Stop enumerating or reading credential locations; take secrets from a declared environment variable the user sets on purpose.` npx -y @theronap/agnoclast-mcp login\n\n` +Fix: Pin versions and sources; vendor anything fetched at install time.message: 'No CORTEX_TOKEN found. Run: npx -y @theronap/agnoclast-mcp login (opens your browser; or `setup <token>` with a token from the console → Connect your AI)' } }Fix: Pin versions and sources; vendor anything fetched at install time.const captureCmd = markCommand(`npx -y ${spec} capture`)Fix: Pin versions and sources; vendor anything fetched at install time.out('Agnoclast: NOT connected — no token found. Run: npx -y @theronap/agnoclast-mcp login (opens your browser; or `setup <token>` with a token from the console → Connect your AI)')Fix: Pin versions and sources; vendor anything fetched at install time.* npx -y @theronap/agnoclast-mcp setup <your-token>Fix: Pin versions and sources; vendor anything fetched at install time.const statusCmd = markCommand(`npx -y ${spec} status`)Fix: Pin versions and sources; vendor anything fetched at install time.// `npx @theronap/agnoclast-mcp doctor` — a live, one-command health check.Fix: Pin versions and sources; vendor anything fetched at install time.out(`Agnoclast: NOT connected — ${r.diagnosis?.message ?? 'check failed'}. Run: npx -y @theronap/agnoclast-mcp doctor`)Fix: Pin versions and sources; vendor anything fetched at install time.base = base ?? s?.env?.CORTEX_URL ?? nullFix: Stop enumerating or reading credential locations; take secrets from a declared environment variable the user sets on purpose.process.stderr.write(`Usage: npx -y ${PKG}@latest channel [stable|latest]\n`)Fix: Pin versions and sources; vendor anything fetched at install time.return { ...env, ...extra }Fix: Stop enumerating or reading credential locations; take secrets from a declared environment variable the user sets on purpose.const snapshotCmd = markCommand(`npx -y ${spec} snapshot-context`)Fix: Pin versions and sources; vendor anything fetched at install time.const command = `npx -y ${spec} closeout-sweep >> "${home}/.cortex/closeout/sweep.log" 2>&1`Fix: Pin versions and sources; vendor anything fetched at install time.… ` ${r.key}`, `Store it now, outside any repo: ${keyFileHint(c.slug)} (chmod 600), or an environment variable. Never commit it or paste it into a chat or a p…Fix: Request the narrowest permission that works; replace wildcards with the exact paths or hosts.* [mcp_servers.agnoclast] / [mcp_servers.cortex] tables (+ their .env) (so re-runs update in place rather thanFix: Stop enumerating or reading credential locations; take secrets from a declared environment variable the user sets on purpose.// (npx @theronap/agnoclast-mcp antigravity-sync, or a published cortex-agent) — a prerequisite thisFix: Pin versions and sources; vendor anything fetched at install time.// TOKEN="$(node -e "…JSON.parse(…'/.claude.json')?.mcpServers?.cortex?.env?.CORTEX_TOKEN…")"Fix: Stop enumerating or reading credential locations; take secrets from a declared environment variable the user sets on purpose.// `PreCompact: npx -y @theronap/agnoclast-mcp@latest precompact` in ~/.claude/settings.json, and @latestFix: Pin versions and sources; vendor anything fetched at install time.const REACHABILITY_URL = 'https://1.1.1.1/cdn-cgi/trace'Fix: Replace encoded or assembled strings with plain literals and remove undeclared network calls.const m = toml.match(new RegExp(`\\[mcp_servers\\.${key}\\.env\\][\\s\\S]*?${name}\\s*=\\s*"([^"]+)"`))Fix: Stop enumerating or reading credential locations; take secrets from a declared environment variable the user sets on purpose.const OLD = new Set([`[mcp_servers.${OLD_KEY}]`, `[mcp_servers.${OLD_KEY}.env]`])Fix: Stop enumerating or reading credential locations; take secrets from a declared environment variable the user sets on purpose.export const channelCommand = (channel) => `npx -y ${PKG}@latest channel ${channel}`Fix: Pin versions and sources; vendor anything fetched at install time.const env = cfg?.mcpServers?.[key]?.envFix: Stop enumerating or reading credential locations; take secrets from a declared environment variable the user sets on purpose.const captureCmd = `npx -y ${spec} capture`Fix: Pin versions and sources; vendor anything fetched at install time.// itself. `npx -y <either name>` still works: with exactly one bin declared, npx runs it regardlessFix: Pin versions and sources; vendor anything fetched at install time.const captureCmd = `npx -y ${spec} capture`Fix: Pin versions and sources; vendor anything fetched at install time.'Usage: npx @theronap/agnoclast-mcp install [<CORTEX_TOKEN>] [--editor auto|all|<id,...>]\n\n' +Fix: Pin versions and sources; vendor anything fetched at install time.// repeat of the same failure lands in a FRESH <key>.json, so nothing spooled mid-send is lost or re-sent.Fix: Remove the call, or declare the host in frontmatter and explain in the README what is sent and why.// npx resolves a semver range (verified 2026-09-21 against a real invocation, not assumed).Fix: Pin versions and sources; vendor anything fetched at install time.out('Agnoclast: no token found. Run: npx -y @theronap/agnoclast-mcp login (opens your browser; or `setup <token>` with a token from the console → Connect your AI)')Fix: Pin versions and sources; vendor anything fetched at install time.// spec lets npx reuse a stale cached build, a frozen @x.y.z strands the machine forever (theFix: Pin versions and sources; vendor anything fetched at install time.const CLAIM_MARK = '.json.sending.'Fix: Remove the call, or declare the host in frontmatter and explain in the README what is sent and why.+ `Run \`npx -y @theronap/agnoclast-mcp migrate-key\` to switch now, or wait and it will happen for you.`Fix: Pin versions and sources; vendor anything fetched at install time.* early Stop-hook command that predates the npx form. */Fix: Pin versions and sources; vendor anything fetched at install time.process.stdout.write(' Full wipe (state dir + npx cache + backups too): add --purge\n\n')Fix: Pin versions and sources; vendor anything fetched at install time.// --purge also removes: ~/.cortex state dir, the npx cache, and every .cortex-bak backup.Fix: Pin versions and sources; vendor anything fetched at install time.// --purge: state dir + npx cache + backupsFix: Pin versions and sources; vendor anything fetched at install time.// config.toml, shell commands — the 2026-07-02 finding: a grep of hooks.json put the live tokenFix: Remove the call, or declare the host in frontmatter and explain in the README what is sent and why.'startup_timeout_sec = 60', // first npx fetch can be slow; don't time out the server on cold startFix: Pin versions and sources; vendor anything fetched at install time.// Wire a moving dist-tag — NOT a frozen version. A bare spec lets npx reuse a stale cached build; aFix: Pin versions and sources; vendor anything fetched at install time.// pilot install). A tag is re-resolved by npx against the registry, so machines pick up promotedFix: Pin versions and sources; vendor anything fetched at install time.+ `mcp__${NEW_KEY}__*. If your CLAUDE.md names the old tools, update it when convenient. `Fix: Remove the text that addresses the agent rather than the reader; describe behavior, do not instruct.return { error: `Usage: npx ${pkg} setup <CORTEX_TOKEN>\n\nGet your token from the Agnoclast console → Connect your AI.\n` }Fix: Pin versions and sources; vendor anything fetched at install time.// `node` after every Write / Edit / Read, so it may import only Node built-ins (no npx start-up on the hot path).Fix: Pin versions and sources; vendor anything fetched at install time.for (const cache of npxCacheDirs()) { act(` - PURGE npx cache ${cache}`); if (!dry) rmSync(cache, { recursive: true, force: true }) }Fix: Pin versions and sources; vendor anything fetched at install time.Cost to the agent
Tokens estimated at four characters each. The tool list is re-read by the agent on every turn, so it is the number to compare between servers that do the same job: ranked across the index.
Known vulnerabilities
No advisories in OSV for @theronap/agnoclast-mcp@0.9.341 as of 37 h ago. This is the package itself, not its dependencies.
What would make this Verified
11 points to 80 · weights: behavior 45%, static 25%, prompt 15%, publisher 15%- Unclaimed publisher≈ +8 on the totalClaim theronap: a verified publisher gets +50 on publisher trust. It is free and usually instant with GitHub sign-in.
- Touches files outside the project≈ +7 on the totalKeep reads and writes inside the working directory, or declare the exact paths in `filesystem:` and explain why in the README.
- HTTP URL with a raw public IP address≈ +4 on the totalReplace encoded or assembled strings with plain literals and remove undeclared network calls.
- 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.
- npx invocation of non-well-known package≈ +2 on the totalPin versions and sources; vendor anything fetched at install time.
- File permission modification command≈ +2 on the totalRequest the narrowest permission that works; replace wildcards with the exact paths or hosts.