Back to skill

Security audit

notebooklm-mcp

Security checks for vulnerabilities and agentic risk

Overview

The skill is mostly transparent about its NotebookLM purpose, but it asks users to expose reusable Google session cookies and includes a helper that can broadly modify agent MCP configurations.

Install only if you are comfortable giving an unofficial NotebookLM client access to Google session cookies. Prefer desktop login or a dedicated Google/browser profile, avoid manual cookie files unless necessary, delete any cookies.txt immediately, restrict auth.json permissions, and run the setup helper with --dry-run and --platform for one specific agent instead of accepting the all-platform default.

Vulnerability Patterns
  • Unauthorized Access and Privilege EscalationObtains permissions beyond the task's legitimate needs
  • Insecure DependenciesIntroduces malicious components through unsafe dependency sources
  • Insecure Skill Coding PracticesFinds exploitable flaws such as hardcoded secrets or command injection
  • Skill Instruction HijackingAlters the agent's session goals or safety constraints when the skill loads
  • Agent Memory PoisoningWrites attacker-controlled rules into memory that affect later sessions
Findings (3)

T08 · Insecure Dependencies

Error
Location
SKILL.md:5
Finding
Unofficial Third-Party Dependency Handles Reusable Google Session Credentials<![CDATA[ ## Vulnerability Details **File Location**: `SKILL.md:5-8, 24, 54-55, 71-82` **Vulnerability Type**: Supply-chain exposure involving a credential-bearing dependency **Risk Level**: High ### Vulnerable Code ```yaml compatibility: Needs Python 3.10+ and `notebooklm-mcp-cli` (`uv tool install notebooklm-mcp-cli` or `pipx install notebooklm-mcp-cli`), providing the `nlm` and `notebooklm-mcp` binaries. Auto auth mode needs a Chromium-family browser (Chrome/Chromium/Brave/Edge/Arc) or Firefox installed. ``` ```markdown Google NotebookLM has no official API. The `notebooklm-mcp-cli` package (`nlm` CLI + `notebooklm-mcp` server) is a **third-party, unofficial client** that authenticates by extracting **browser cookies** from a logged-in Google session and caching them. ``` ```bash # Option 1: uv (recommended) uv tool install notebooklm-mcp-cli==<VERSION> # Option 2: pipx pipx install notebooklm-mcp-cli==<VERSION> # Option 3: pip (only in a virtual environment; avoid --user) pip install notebooklm-mcp-cli==<VERSION> ``` ### Technical Analysis The Skill requires executable code that is not included in the audited project. It explicitly describes that dependency as an unofficial client and grants it access to reusable Google session cookies, NotebookLM data, and the local MCP execution environment. Version pinning limits unexpected upgrades but does not establish that the package artifact is trustworthy. The documentation tells users to replace `<VERSION>` with a stable version obtained from the package index, but it does not provide a reviewed version, artifact hash, signature, lockfile, or source-to-wheel provenance verification. Consequently, the effective executable payload cannot be fully assessed from this repository. This creates a high-impact supply-chain trust boundary because the external package is responsible for extracting, reading, storing, refreshing, and using credentials equivalent to an authenticated Google session. ### Attack P ...[truncated 1222 chars]
Remediation
<![CDATA[ ## Remediation Suggestions 1. Select and document a specific reviewed release rather than instructing users to select the latest stable release dynamically. 2. Pin the exact artifact using cryptographic hashes in a lockfile or requirements file, for example with `--require-hashes`. 3. Verify package ownership, repository provenance, release signatures, and correspondence between the reviewed source and the published wheel. 4. Vendor or independently audit the authentication and credential-storage portions of the dependency. 5. Run the MCP server in a sandbox with: - Access only to its dedicated authentication directory. - No access to unrelated home-directory files. - Network egress restricted to required Google/NotebookLM endpoints. - No root or elevated privileges. 6. Use a dedicated Google account or minimally privileged profile where operationally possible. 7. Document a dependency update review process and do not automatically accept new package versions. ]]>

T09 · Insecure Skill Coding Practices

Error
Location
scripts/extract_cookies_help.sh:27
Finding
Plaintext Creation and Transfer of Reusable Google Session Credentials<![CDATA[ ## Vulnerability Details **File Location**: `scripts/extract_cookies_help.sh:27-47`; also documented in `SKILL.md:148-184, 197, 446-448` and `references/auth-guide.md:7-12, 128-135` **Vulnerability Type**: Plaintext sensitive credential handling **Risk Level**: High ### Vulnerable Code ```bash STEP 8 — Find the line starting with: cookie: STEP 9 — Right-click the cookie VALUE and select "Copy value". STEP 10 — Paste into a text file and save as cookies.txt. Format: SID=abc...; HSID=xyz...; SSID=...; APISID=...; SAPISID=...; __Secure-1PSID=...; ... Lines starting with # are comments and are ignored. STEP 11 — Copy cookies.txt to the server and run: nlm login --manual --file cookies.txt STEP 12 — Verify: nlm login --check nlm doctor ALTERNATIVE (OpenClaw CDP — if a managed browser is running on the server): nlm login --provider openclaw --cdp-url http://127.0.0.1:18800 ALTERNATIVE (desktop auto mode): nlm login # then copy ~/.notebooklm-mcp-cli/profiles/default/auth.json to the server ``` The authentication reference additionally recommends direct transfer of the cached credential: ```bash # On the desktop: scp ~/.notebooklm-mcp-cli/profiles/default/auth.json \ user@server:~/.notebooklm-mcp-cli/profiles/default/auth.json # On the server: nlm login --check # confirm the copied cookies still work ``` ### Technical Analysis The workflow creates `cookies.txt` by copying a raw browser `Cookie` request header and then transfers that file to another system. It also recommends copying `auth.json`, which contains cached authentication state. The project correctly warns that both files are equivalent to a Google session, but the executable helper does not require a restrictive `umask`, verify ownership or permissions, or instruct the user to delete `cookies.txt` immediately after import. Copying the cookie through the clipboard may expose it to clipboard history, d ...[truncated 1907 chars]
Remediation
<![CDATA[ ## Remediation Suggestions 1. Prefer desktop authentication in a dedicated browser profile and avoid manual raw-cookie extraction whenever possible. 2. Modify the helper so that manual mode requires a restrictive environment before file creation: ```bash umask 077 install -d -m 700 "$HOME/.notebooklm-mcp-cli" ``` 3. Require `cookies.txt` and `auth.json` to have mode `0600` and verify ownership before import: ```bash chmod 600 cookies.txt ``` 4. Add mandatory cleanup directly to the helper's import instructions: ```bash nlm login --manual --file cookies.txt && { shred -u cookies.txt 2>/dev/null || rm -f cookies.txt; } ``` 5. Warn that `shred` is not reliable on copy-on-write filesystems, SSDs, snapshots, synchronized folders, or backup systems. Prefer creating the temporary file on encrypted ephemeral storage. 6. Avoid clipboard use where possible. If it is unavoidable, instruct the user to clear clipboard history immediately and disable clipboard synchronization. 7. Before copying `auth.json`, create the destination directory with mode `0700`, enforce destination mode `0600`, and use a dedicated account and encrypted transport. 8. Add revocation guidance so users can terminate the Google session if either file may have been exposed. 9. Ensure diagnostics never print cookie values and test this property against the exact pinned dependency release. ]]>

T05 · Unauthorized Access and Privilege Escalation

Warning
Location
scripts/setup_notebooklm_mcp.sh:63
Finding
Default Setup Modifies Every Detected Global Agent Configuration Without Per-Target Confirmation<![CDATA[ ## Vulnerability Details **File Location**: `scripts/setup_notebooklm_mcp.sh:63-139, 165-177` **Vulnerability Type**: Excessive configuration scope and unsafe persistent configuration modification **Risk Level**: Medium ### Vulnerable Code ```bash declare -a PLATFORMS=( "Claude Code|$HOME/.claude.json|mcpServers.notebooklm-mcp|standard" "Claude Desktop|$HOME/Library/Application Support/Claude/claude_desktop_config.json|mcpServers.notebooklm-mcp|standard" "Cursor|$HOME/.cursor/mcp.json|mcpServers.notebooklm-mcp|standard" "Devin CLI|$HOME/.config/devin/mcp_config.json|mcpServers.notebooklm-mcp|standard" "Devin CLI (legacy)|$HOME/.config/devin/config.json|mcpServers.notebooklm-mcp|standard" "Devin Desktop|$HOME/.devin/mcp_config.json|mcpServers.notebooklm-mcp|standard" "OpenCode|$HOME/.config/opencode/opencode.json|mcp.notebooklm-mcp|opencode" "OpenCode (project)|$HOME/opencode.json|mcp.notebooklm-mcp|opencode" "Antigravity IDE/CLI|$HOME/.gemini/config/mcp_config.json|mcpServers.notebooklm-mcp|standard" ) ``` ```bash patch_json() { local label="$1" path="$2" jsonpath="$3" format="$4" [ -f "$path" ] || return 0 if [ -n "$TARGET_PLATFORM" ] && [ "$label" != "$TARGET_PLATFORM" ] && [ "$label" != "Devin CLI (legacy)" ]; then return 0 fi echo "→ Patching $label ($path)" if [ "$DRY_RUN" -eq 1 ]; then if [ "$REMOVE" -eq 1 ]; then echo " [dry-run] would remove $jsonpath" else echo " [dry-run] would set $jsonpath ($format, cmd=$CMD)" fi return 0 fi CMD="$CMD" ARGS_JSON="$ARGS_JSON" ARGS_OPCODE="$ARGS_OPCODE" \ python3 - "$path" "$jsonpath" "$format" "$REMOVE" <<'PY' import json, os, sys path, jsonpath, fmt, remove = sys.argv[1:5] remove = int(remove) cmd = os.environ["CMD"] args_json = os.environ["ARGS_JSON"] args_opcode = os.environ["ARGS_OPCODE"] import json as j args_list = j.loads(args_json) args_opc = j.loads(args_opcode) with open(path) as f: d = j.load(f) parts = jsonpat ...[truncated 3551 chars]
Remediation
<![CDATA[ ## Remediation Suggestions 1. Require an explicit `--platform` argument unless the user supplies a separate `--all` option. 2. Display the exact target file and proposed JSON change, then request confirmation before each modification. 3. Refuse to overwrite an existing `notebooklm-mcp` entry unless the user provides `--force`. 4. Preserve the existing entry in a timestamped backup and provide a rollback command. 5. Perform atomic writes: - Create a temporary file in the same directory. - Preserve the original ownership and mode. - Flush and validate the generated JSON. - Rename the temporary file over the original. 6. Lock the file or detect concurrent modifications before replacement. 7. Preserve existing file permissions explicitly and ensure configuration files are not made more permissive. 8. Prefer each platform's supported configuration CLI where available instead of directly rewriting complete configuration files. 9. Keep `--dry-run` and make it the default when more than one platform would be affected. 10. Correct the Cursor entry to include its documented required transport field: ```json { "type": "stdio", "command": "nlm", "args": ["mcp", "start"] } ``` 11. Treat project-scoped and user-scoped configurations as separate explicit choices rather than patching both automatically. ]]>
Vulnerability Patterns
  • Data ExfiltrationExternal Transmission, Env Variable Harvesting, File System Enumeration
  • Tool MisuseTool Parameter Abuse, Chaining Abuse, Unsafe Defaults
  • YARA SignaturesMalware Match, Webshell Match, Cryptominer Match
  • Prompt InjectionInstruction Override, Hidden Instructions, Exfiltration Commands
  • Privilege EscalationExcessive Permissions, Sudo/Root Execution, Credential Access
Findings (34)

YARA rule 'info_stealer': Information stealer patterns (credential harvesting, browser data theft) [malware]

High
Category
YARA Match
Content
to support managed endpoints that reject the default Origin header.

## Method 1 — Manual cookie file (emergency fallback only)

> **The agent must not perform these steps automatically.** Manual cookie extraction is an emergency fallback for a headless server the user controls. The user must create `cookies.txt` themselves and delete it immediately after import.

### Step 1: The user extracts cookies on a machine with Chrome

1. Open Chrome and go to **https://notebooklm.google.com**
2. Make sure you are logged in to your Google account.
3. Press **F12** (or **Cmd+Option+I** on Mac) to open DevTools.
4. Click the **Network** tab.
5. In the filter box, type: `batchexecute`
6. Click on any notebook to trigger a request.
7. Click on a `batchexecute` request in the list.
8. In the right panel, scroll to **Request Headers**.
9. Find the line starting with `cookie:`.
10. Right-click the cookie **value** and select **Copy value**.
11. Paste into a text file and save as `cookies.txt`.

###
Confidence
96% confidence
Finding
The skill includes step-by-step instructions for extracting raw Google session cookies from browser DevTools and importing them into a third-party unofficial client. Even with warnings and user-consent language, this workflow handles bearer-style session material equivalent to account credentials, creating substantial risk of account takeover if mishandled, logged, retained, or redirected.

Ae1

High
Category
analysis-evasion
Content
- **`scripts/setup_notebooklm_mcp.sh`** — Detects all installed platforms and patches each with the correct format (handles mcp/mcpServers, command array, envir
Confidence
100% confidence
Finding
Referenced artifact was not completely inspected

Tool Parameter Abuse

High
Category
Tool Misuse
Content
To fully uninstall, remove the config entry **and** delete the cached directory:

```bash
rm -rf ~/.gemini/antigravity*/mcp/notebooklm-mcp
```

## OpenClaw
Confidence
90% confidence
Finding
Tool parameters are crafted to achieve unintended or unsafe behavior. Parameter abuse can bypass intended safety checks (e.g. shell=True, --force, dangerous glob patterns).

Tool Parameter Abuse

High
Category
Tool Misuse
Content
To fully uninstall, remove the config entry **and** delete the cached directory:

```bash
rm -rf ~/.gemini/antigravity*/mcp/notebooklm-mcp
```

## OpenClaw
Confidence
90% confidence
Finding
Tool parameters are crafted to achieve unintended or unsafe behavior. Parameter abuse can bypass intended safety checks (e.g. shell=True, --force, dangerous glob patterns).

MCP Config Access

High
Category
Agent Snooping
Content
|----------|-------------|----------|------------------|---------------|-----------|------------------|
| Claude Code | `~/.claude.json` | `mcpServers` | `url` | `command` + `args` | `env` | `type: "http"` / `"stdio"` |
| Claude Desktop | `claude_desktop_config.json` | `mcpServers` | `url` | `command` + `args` | `env` | — (inferred) |
| Cursor | `~/.cursor/mcp.json` | `mcpServers` | `url` | `command` + `args` | `env` | `type: "stdio"` required for stdio |
| Devin CLI | `~/.config/devin/mcp_config.json` | `mcpServers` | `url` | `command` + `args` | `env` | `transport: "http"` (optional) |
| Devin Desktop | `~/.devin/mcp_config.json` | `mcpServers` | **`serverUrl`** | `command` + `args` | `env` | — |
| OpenCode | `~/.config/opencode/opencode.json` | **`mcp`** | `url` | **`command` (single array)** | **`environment`** | `type: "remote"` / `"local"` |
Confidence
90% confidence
Finding
Skill accesses MCP server configuration files (mcp.json). MCP configs contain server URLs, authentication tokens, and tool definitions — reading them allows the skill to discover and potentially abuse other tool integrations.

MCP Config Access

High
Category
Agent Snooping
Content
| Claude Code | `~/.claude.json` | `mcpServers` | `url` | `command` + `args` | `env` | `type: "http"` / `"stdio"` |
| Claude Desktop | `claude_desktop_config.json` | `mcpServers` | `url` | `command` + `args` | `env` | — (inferred) |
| Cursor | `~/.cursor/mcp.json` | `mcpServers` | `url` | `command` + `args` | `env` | `type: "stdio"` required for stdio |
| Devin CLI | `~/.config/devin/mcp_config.json` | `mcpServers` | `url` | `command` + `args` | `env` | `transport: "http"` (optional) |
| Devin Desktop | `~/.devin/mcp_config.json` | `mcpServers` | **`serverUrl`** | `command` + `args` | `env` | — |
| OpenCode | `~/.config/opencode/opencode.json` | **`mcp`** | `url` | **`command` (single array)** | **`environment`** | `type: "remote"` / `"local"` |
| Antigravity IDE | `~/.gemini/config/mcp_config.json` | `mcpServers` | **`serverUrl`** | `command` + `args` | `env` | — |
Confidence
90% confidence
Finding
Skill accesses MCP server configuration files (mcp.json). MCP configs contain server URLs, authentication tokens, and tool definitions — reading them allows the skill to discover and potentially abuse other tool integrations.

MCP Config Access

High
Category
Agent Snooping
Content
| Claude Desktop | `claude_desktop_config.json` | `mcpServers` | `url` | `command` + `args` | `env` | — (inferred) |
| Cursor | `~/.cursor/mcp.json` | `mcpServers` | `url` | `command` + `args` | `env` | `type: "stdio"` required for stdio |
| Devin CLI | `~/.config/devin/mcp_config.json` | `mcpServers` | `url` | `command` + `args` | `env` | `transport: "http"` (optional) |
| Devin Desktop | `~/.devin/mcp_config.json` | `mcpServers` | **`serverUrl`** | `command` + `args` | `env` | — |
| OpenCode | `~/.config/opencode/opencode.json` | **`mcp`** | `url` | **`command` (single array)** | **`environment`** | `type: "remote"` / `"local"` |
| Antigravity IDE | `~/.gemini/config/mcp_config.json` | `mcpServers` | **`serverUrl`** | `command` + `args` | `env` | — |
| Antigravity CLI (agy) | `~/.gemini/config/mcp_config.json` | `mcpServers` | **`serverUrl`** | `command` + `args` | `env` | — |
Confidence
90% confidence
Finding
Skill accesses MCP server configuration files (mcp.json). MCP configs contain server URLs, authentication tokens, and tool definitions — reading them allows the skill to discover and potentially abuse other tool integrations.

MCP Config Access

High
Category
Agent Snooping
Content
| Claude Desktop | `claude_desktop_config.json` | `mcpServers` | `url` | `command` + `args` | `env` | — (inferred) |
| Cursor | `~/.cursor/mcp.json` | `mcpServers` | `url` | `command` + `args` | `env` | `type: "stdio"` required for stdio |
| Devin CLI | `~/.config/devin/mcp_config.json` | `mcpServers` | `url` | `command` + `args` | `env` | `transport: "http"` (optional) |
| Devin Desktop | `~/.devin/mcp_config.json` | `mcpServers` | **`serverUrl`** | `command` + `args` | `env` | — |
| OpenCode | `~/.config/opencode/opencode.json` | **`mcp`** | `url` | **`command` (single array)** | **`environment`** | `type: "remote"` / `"local"` |
| Antigravity IDE | `~/.gemini/config/mcp_config.json` | `mcpServers` | **`serverUrl`** | `command` + `args` | `env` | — |
| Antigravity CLI (agy) | `~/.gemini/config/mcp_config.json` | `mcpServers` | **`serverUrl`** | `command` + `args` | `env` | — |
Confidence
90% confidence
Finding
Skill accesses MCP server configuration files (mcp.json). MCP configs contain server URLs, authentication tokens, and tool definitions — reading them allows the skill to discover and potentially abuse other tool integrations.

MCP Config Access

High
Category
Agent Snooping
Content
| Claude Desktop | `claude_desktop_config.json` | `mcpServers` | `url` | `command` + `args` | `env` | — (inferred) |
| Cursor | `~/.cursor/mcp.json` | `mcpServers` | `url` | `command` + `args` | `env` | `type: "stdio"` required for stdio |
| Devin CLI | `~/.config/devin/mcp_config.json` | `mcpServers` | `url` | `command` + `args` | `env` | `transport: "http"` (optional) |
| Devin Desktop | `~/.devin/mcp_config.json` | `mcpServers` | **`serverUrl`** | `command` + `args` | `env` | — |
| OpenCode | `~/.config/opencode/opencode.json` | **`mcp`** | `url` | **`command` (single array)** | **`environment`** | `type: "remote"` / `"local"` |
| Antigravity IDE | `~/.gemini/config/mcp_config.json` | `mcpServers` | **`serverUrl`** | `command` + `args` | `env` | — |
| Antigravity CLI (agy) | `~/.gemini/config/mcp_config.json` | `mcpServers` | **`serverUrl`** | `command` + `args` | `env` | — |
Confidence
90% confidence
Finding
Skill accesses MCP server configuration files (mcp.json). MCP configs contain server URLs, authentication tokens, and tool definitions — reading them allows the skill to discover and potentially abuse other tool integrations.

Agent Config Directory Access

High
Category
Agent Snooping
Content
| Devin CLI | `~/.config/devin/mcp_config.json` | `mcpServers` | `url` | `command` + `args` | `env` | `transport: "http"` (optional) |
| Devin Desktop | `~/.devin/mcp_config.json` | `mcpServers` | **`serverUrl`** | `command` + `args` | `env` | — |
| OpenCode | `~/.config/opencode/opencode.json` | **`mcp`** | `url` | **`command` (single array)** | **`environment`** | `type: "remote"` / `"local"` |
| Antigravity IDE | `~/.gemini/config/mcp_config.json` | `mcpServers` | **`serverUrl`** | `command` + `args` | `env` | — |
| Antigravity CLI (agy) | `~/.gemini/config/mcp_config.json` | `mcpServers` | **`serverUrl`** | `command` + `args` | `env` | — |
| OpenClaw | OpenClaw config | **`mcp.servers`** | `url` + `transport` | `command` + `args` | `env` | `transport: "streamable-http"` / `"stdio"` |
Confidence
90% confidence
Finding
Skill reads from agent configuration directories (.claude/, .codex/, .gemini/). These directories may contain API keys, personal settings, and other credentials that the skill has no legitimate need to access.

Agent Config Directory Access

High
Category
Agent Snooping
Content
| Devin CLI | `~/.config/devin/mcp_config.json` | `mcpServers` | `url` | `command` + `args` | `env` | `transport: "http"` (optional) |
| Devin Desktop | `~/.devin/mcp_config.json` | `mcpServers` | **`serverUrl`** | `command` + `args` | `env` | — |
| OpenCode | `~/.config/opencode/opencode.json` | **`mcp`** | `url` | **`command` (single array)** | **`environment`** | `type: "remote"` / `"local"` |
| Antigravity IDE | `~/.gemini/config/mcp_config.json` | `mcpServers` | **`serverUrl`** | `command` + `args` | `env` | — |
| Antigravity CLI (agy) | `~/.gemini/config/mcp_config.json` | `mcpServers` | **`serverUrl`** | `command` + `args` | `env` | — |
| OpenClaw | OpenClaw config | **`mcp.servers`** | `url` + `transport` | `command` + `args` | `env` | `transport: "streamable-http"` / `"stdio"` |
Confidence
90% confidence
Finding
Skill reads from agent configuration directories (.claude/, .codex/, .gemini/). These directories may contain API keys, personal settings, and other credentials that the skill has no legitimate need to access.

Agent Config Directory Access

High
Category
Agent Snooping
Content
| Devin CLI | `~/.config/devin/mcp_config.json` | `mcpServers` | `url` | `command` + `args` | `env` | `transport: "http"` (optional) |
| Devin Desktop | `~/.devin/mcp_config.json` | `mcpServers` | **`serverUrl`** | `command` + `args` | `env` | — |
| OpenCode | `~/.config/opencode/opencode.json` | **`mcp`** | `url` | **`command` (single array)** | **`environment`** | `type: "remote"` / `"local"` |
| Antigravity IDE | `~/.gemini/config/mcp_config.json` | `mcpServers` | **`serverUrl`** | `command` + `args` | `env` | — |
| Antigravity CLI (agy) | `~/.gemini/config/mcp_config.json` | `mcpServers` | **`serverUrl`** | `command` + `args` | `env` | — |
| OpenClaw | OpenClaw config | **`mcp.servers`** | `url` + `transport` | `command` + `args` | `env` | `transport: "streamable-http"` / `"stdio"` |
Confidence
90% confidence
Finding
Skill reads from agent configuration directories (.claude/, .codex/, .gemini/). These directories may contain API keys, personal settings, and other credentials that the skill has no legitimate need to access.

Agent Config Directory Access

High
Category
Agent Snooping
Content
| Devin CLI | `~/.config/devin/mcp_config.json` | `mcpServers` | `url` | `command` + `args` | `env` | `transport: "http"` (optional) |
| Devin Desktop | `~/.devin/mcp_config.json` | `mcpServers` | **`serverUrl`** | `command` + `args` | `env` | — |
| OpenCode | `~/.config/opencode/opencode.json` | **`mcp`** | `url` | **`command` (single array)** | **`environment`** | `type: "remote"` / `"local"` |
| Antigravity IDE | `~/.gemini/config/mcp_config.json` | `mcpServers` | **`serverUrl`** | `command` + `args` | `env` | — |
| Antigravity CLI (agy) | `~/.gemini/config/mcp_config.json` | `mcpServers` | **`serverUrl`** | `command` + `args` | `env` | — |
| OpenClaw | OpenClaw config | **`mcp.servers`** | `url` + `transport` | `command` + `args` | `env` | `transport: "streamable-http"` / `"stdio"` |
Confidence
90% confidence
Finding
Skill reads from agent configuration directories (.claude/, .codex/, .gemini/). These directories may contain API keys, personal settings, and other credentials that the skill has no legitimate need to access.

Agent Config Directory Access

High
Category
Agent Snooping
Content
| Devin CLI | `~/.config/devin/mcp_config.json` | `mcpServers` | `url` | `command` + `args` | `env` | `transport: "http"` (optional) |
| Devin Desktop | `~/.devin/mcp_config.json` | `mcpServers` | **`serverUrl`** | `command` + `args` | `env` | — |
| OpenCode | `~/.config/opencode/opencode.json` | **`mcp`** | `url` | **`command` (single array)** | **`environment`** | `type: "remote"` / `"local"` |
| Antigravity IDE | `~/.gemini/config/mcp_config.json` | `mcpServers` | **`serverUrl`** | `command` + `args` | `env` | — |
| Antigravity CLI (agy) | `~/.gemini/config/mcp_config.json` | `mcpServers` | **`serverUrl`** | `command` + `args` | `env` | — |
| OpenClaw | OpenClaw config | **`mcp.servers`** | `url` + `transport` | `command` + `args` | `env` | `transport: "streamable-http"` / `"stdio"` |
Confidence
90% confidence
Finding
Skill reads from agent configuration directories (.claude/, .codex/, .gemini/). These directories may contain API keys, personal settings, and other credentials that the skill has no legitimate need to access.

Tool Parameter Abuse

High
Category
Tool Misuse
Content
Removing the config entry is not enough — the cached directory must also be deleted:

```bash
rm -rf ~/.gemini/antigravity*/mcp/<server-name>
```

### 5. Devin CLI: config file location changed in v3000.3
Confidence
95% confidence
Finding
This exact command is a true hazardous instruction because it enables irreversible local file deletion and relies on user-supplied path components. The context does not indicate malicious intent, but because it appears in an operational guide, the likelihood of unsafe real-world execution is higher than in purely theoretical documentation.

Tool Parameter Abuse

High
Category
Tool Misuse
Content
Removing the config entry is not enough — the cached directory must also be deleted:

```bash
rm -rf ~/.gemini/antigravity*/mcp/<server-name>
```

### 5. Devin CLI: config file location changed in v3000.3
Confidence
95% confidence
Finding
This exact command is a true hazardous instruction because it enables irreversible local file deletion and relies on user-supplied path components. The context does not indicate malicious intent, but because it appears in an operational guide, the likelihood of unsafe real-world execution is higher than in purely theoretical documentation.

Tool Parameter Abuse

High
Category
Tool Misuse
Content
Removing the config entry is not enough — the cached directory must also be deleted:

```bash
rm -rf ~/.gemini/antigravity*/mcp/<server-name>
```

### 5. Devin CLI: config file location changed in v3000.3
Confidence
95% confidence
Finding
This exact command is a true hazardous instruction because it enables irreversible local file deletion and relies on user-supplied path components. The context does not indicate malicious intent, but because it appears in an operational guide, the likelihood of unsafe real-world execution is higher than in purely theoretical documentation.

Missing User Warnings

High
Confidence
98% confidence
Finding
The script instructs users to handle live Google authentication cookies but provides no explicit warning that these cookies are equivalent to reusable session credentials. Users may paste, store, and transfer them insecurely, enabling account takeover or unauthorized access if the file is exposed.

Ssd 3

High
Confidence
99% confidence
Finding
These instructions explicitly direct users to copy live Google session cookies out of browser requests and reuse them on another server. That workflow facilitates credential harvesting, bypasses normal authentication boundaries, and creates a portable token set that can be abused for unauthorized NotebookLM and potentially broader Google-session access.

Ssd 3

High
Confidence
97% confidence
Finding
Advising users to copy an authentication file from one machine to another exposes reusable credential material through a casual operational step. If the file contains bearer tokens, cookies, or refresh material, compromise of the file can enable session hijacking or persistent unauthorized access.

Agent Config Directory Access

High
Category
Agent Snooping
Content
"Devin Desktop|$HOME/.devin/mcp_config.json|mcpServers.notebooklm-mcp|standard"
  "OpenCode|$HOME/.config/opencode/opencode.json|mcp.notebooklm-mcp|opencode"
  "OpenCode (project)|$HOME/opencode.json|mcp.notebooklm-mcp|opencode"
  "Antigravity IDE/CLI|$HOME/.gemini/config/mcp_config.json|mcpServers.notebooklm-mcp|standard"
)

patch_json() {
Confidence
90% confidence
Finding
Skill reads from agent configuration directories (.claude/, .codex/, .gemini/). These directories may contain API keys, personal settings, and other credentials that the skill has no legitimate need to access.

Tool Parameter Abuse

High
Category
Tool Misuse
Content
echo "Verify with: bash $(dirname "$0")/verify_notebooklm.sh"
  echo ""
  echo "⚠ Antigravity users: also clear the MCP cache:"
  echo "  rm -rf ~/.gemini/antigravity*/mcp/notebooklm-mcp"
fi
Confidence
100% confidence
Finding
Tool parameters are crafted to achieve unintended or unsafe behavior. Parameter abuse can bypass intended safety checks (e.g. shell=True, --force, dangerous glob patterns).

Tool Parameter Abuse

High
Category
Tool Misuse
Content
echo "Verify with: bash $(dirname "$0")/verify_notebooklm.sh"
  echo ""
  echo "⚠ Antigravity users: also clear the MCP cache:"
  echo "  rm -rf ~/.gemini/antigravity*/mcp/notebooklm-mcp"
fi
Confidence
100% confidence
Finding
Tool parameters are crafted to achieve unintended or unsafe behavior. Parameter abuse can bypass intended safety checks (e.g. shell=True, --force, dangerous glob patterns).

Tool Parameter Abuse

High
Category
Tool Misuse
Content
echo "Verify with: bash $(dirname "$0")/verify_notebooklm.sh"
  echo ""
  echo "⚠ Antigravity users: also clear the MCP cache:"
  echo "  rm -rf ~/.gemini/antigravity*/mcp/notebooklm-mcp"
fi
Confidence
100% confidence
Finding
Tool parameters are crafted to achieve unintended or unsafe behavior. Parameter abuse can bypass intended safety checks (e.g. shell=True, --force, dangerous glob patterns).

Tool Parameter Abuse

High
Category
Tool Misuse
Content
echo "Verify with: bash $(dirname "$0")/verify_notebooklm.sh"
  echo ""
  echo "⚠ Antigravity users: also clear the MCP cache:"
  echo "  rm -rf ~/.gemini/antigravity*/mcp/notebooklm-mcp"
fi
Confidence
95% confidence
Finding
Tool parameters are crafted to achieve unintended or unsafe behavior. Parameter abuse can bypass intended safety checks (e.g. shell=True, --force, dangerous glob patterns).

Static analysis

No suspicious patterns detected.