@pan-sec/notebooklm-mcp 1.8.0 → 1.10.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/README.md +424 -56
- package/dist/gemini/gemini-client.d.ts +55 -1
- package/dist/gemini/gemini-client.d.ts.map +1 -1
- package/dist/gemini/gemini-client.js +402 -0
- package/dist/gemini/gemini-client.js.map +1 -1
- package/dist/gemini/index.d.ts +1 -0
- package/dist/gemini/index.d.ts.map +1 -1
- package/dist/gemini/index.js +1 -0
- package/dist/gemini/index.js.map +1 -1
- package/dist/gemini/pdf-chunker.d.ts +66 -0
- package/dist/gemini/pdf-chunker.d.ts.map +1 -0
- package/dist/gemini/pdf-chunker.js +197 -0
- package/dist/gemini/pdf-chunker.js.map +1 -0
- package/dist/gemini/types.d.ts +121 -0
- package/dist/gemini/types.d.ts.map +1 -1
- package/dist/index.js +23 -0
- package/dist/index.js.map +1 -1
- package/dist/tools/definitions/gemini.d.ts.map +1 -1
- package/dist/tools/definitions/gemini.js +228 -0
- package/dist/tools/definitions/gemini.js.map +1 -1
- package/dist/tools/handlers.d.ts +46 -0
- package/dist/tools/handlers.d.ts.map +1 -1
- package/dist/tools/handlers.js +189 -0
- package/dist/tools/handlers.js.map +1 -1
- package/package.json +2 -1
package/README.md
CHANGED
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
|
|
3
3
|
# NotebookLM MCP Server (Security Hardened)
|
|
4
4
|
|
|
5
|
-
**Zero-hallucination answers from NotebookLM —
|
|
5
|
+
**Zero-hallucination answers from NotebookLM + Gemini Deep Research — with enterprise-grade security**
|
|
6
6
|
|
|
7
7
|
[](https://www.npmjs.com/package/@pan-sec/notebooklm-mcp)
|
|
8
8
|
[](https://www.typescriptlang.org/)
|
|
@@ -10,18 +10,351 @@
|
|
|
10
10
|
[](#cross-platform-support)
|
|
11
11
|
[](./SECURITY.md)
|
|
12
12
|
[](./SECURITY.md#post-quantum-encryption)
|
|
13
|
+
[](#-gemini-deep-research-v180)
|
|
14
|
+
[](#-document-api-v190)
|
|
15
|
+
[](#programmatic-notebook-creation-v170)
|
|
13
16
|
[](./docs/COMPLIANCE-SPEC.md)
|
|
14
17
|
[](./tests/)
|
|
15
18
|
|
|
16
|
-
[
|
|
19
|
+
[**Gemini Deep Research**](#-gemini-deep-research-v180) • [**Document API**](#-document-api-v190) • [**Notebook Creation**](#programmatic-notebook-creation-v170) • [Security](#security-features) • [Install](#installation)
|
|
17
20
|
|
|
18
21
|
</div>
|
|
19
22
|
|
|
20
|
-
>
|
|
23
|
+
> **Security-hardened fork** of [PleasePrompto/notebooklm-mcp](https://github.com/PleasePrompto/notebooklm-mcp)
|
|
21
24
|
> Maintained by [Pantheon Security](https://pantheonsecurity.io)
|
|
22
25
|
|
|
23
26
|
---
|
|
24
27
|
|
|
28
|
+
## Gemini Deep Research (v1.8.0)
|
|
29
|
+
|
|
30
|
+
**The most powerful research capability for AI agents — now in your MCP toolkit.**
|
|
31
|
+
|
|
32
|
+
v1.8.0 introduces the **Gemini Interactions API** as a stable, API-based research backend alongside browser automation. This gives your agents access to Google's state-of-the-art Deep Research agent.
|
|
33
|
+
|
|
34
|
+
### Why This Matters
|
|
35
|
+
|
|
36
|
+
| Challenge | Solution |
|
|
37
|
+
|-----------|----------|
|
|
38
|
+
| Browser UI changes break automation | **Gemini API is stable and versioned** |
|
|
39
|
+
| Need comprehensive research but no research agent | **Deep Research agent does it for you** |
|
|
40
|
+
| Want current information with citations | **Google Search grounding built-in** |
|
|
41
|
+
| Need reliable, fast queries | **API-based = no UI dependencies** |
|
|
42
|
+
|
|
43
|
+
### New Tools
|
|
44
|
+
|
|
45
|
+
#### `deep_research` — Comprehensive Research Agent
|
|
46
|
+
|
|
47
|
+
```
|
|
48
|
+
"Research the security implications of post-quantum cryptography adoption in financial services"
|
|
49
|
+
```
|
|
50
|
+
|
|
51
|
+
- Runs Google's **Deep Research agent** (same as Gemini Advanced)
|
|
52
|
+
- Takes 1-5 minutes for comprehensive, web-grounded analysis
|
|
53
|
+
- Returns structured answers with **citations and sources**
|
|
54
|
+
- Perfect for complex topics requiring multi-source synthesis
|
|
55
|
+
|
|
56
|
+
#### `gemini_query` — Fast Grounded Queries
|
|
57
|
+
|
|
58
|
+
```
|
|
59
|
+
"What are the latest CVEs for Log4j in 2025?" (with Google Search)
|
|
60
|
+
"Calculate the compound interest on $10,000 at 5% over 10 years" (with code execution)
|
|
61
|
+
"Summarize this security advisory: [URL]" (with URL context)
|
|
62
|
+
```
|
|
63
|
+
|
|
64
|
+
- **Google Search grounding** — Current information, not just training data
|
|
65
|
+
- **Code execution** — Run calculations, data analysis
|
|
66
|
+
- **URL context** — Analyze web pages on demand
|
|
67
|
+
- Models: `gemini-2.5-flash` (fast), `gemini-2.5-pro` (powerful), `gemini-3-flash-preview` (latest)
|
|
68
|
+
|
|
69
|
+
#### `get_research_status` — Background Task Monitoring
|
|
70
|
+
|
|
71
|
+
Run deep research in the background and check progress:
|
|
72
|
+
```
|
|
73
|
+
"Start researching [topic] in the background"
|
|
74
|
+
... continue other work ...
|
|
75
|
+
"Check research status for interaction_abc123"
|
|
76
|
+
```
|
|
77
|
+
|
|
78
|
+
### Hybrid Architecture
|
|
79
|
+
|
|
80
|
+
```
|
|
81
|
+
┌──────────────────────────────────────────────────────────────────────────────┐
|
|
82
|
+
│ NotebookLM MCP Server v1.9.0 │
|
|
83
|
+
├──────────────────────────────────────────────────────────────────────────────┤
|
|
84
|
+
│ │
|
|
85
|
+
│ ┌────────────────────────────────┐ ┌──────────────────────────────────┐ │
|
|
86
|
+
│ │ BROWSER AUTOMATION │ │ GEMINI API │ │
|
|
87
|
+
│ │ (Your Documents) │ │ (Research & Documents) │ │
|
|
88
|
+
│ ├────────────────────────────────┤ ├──────────────────────────────────┤ │
|
|
89
|
+
│ │ │ │ │ │
|
|
90
|
+
│ │ QUERY │ │ RESEARCH v1.8 │ │
|
|
91
|
+
│ │ • ask_question │ │ • deep_research │ │
|
|
92
|
+
│ │ │ │ • gemini_query │ │
|
|
93
|
+
│ │ CREATE & MANAGE v1.7 │ │ • get_research_status │ │
|
|
94
|
+
│ │ • create_notebook │ │ │ │
|
|
95
|
+
│ │ • batch_create_notebooks │ │ DOCUMENTS (NEW!) v1.9 │ │
|
|
96
|
+
│ │ • manage_sources │ │ • upload_document │ │
|
|
97
|
+
│ │ • generate_audio │ │ • query_document │ │
|
|
98
|
+
│ │ • sync_notebook │ │ • list_documents │ │
|
|
99
|
+
│ │ │ │ • delete_document │ │
|
|
100
|
+
│ │ Grounded on YOUR docs │ │ │ │
|
|
101
|
+
│ │ Permanent storage │ │ Fast API • 48h retention │ │
|
|
102
|
+
│ └────────────────────────────────┘ └──────────────────────────────────┘ │
|
|
103
|
+
│ │
|
|
104
|
+
│ ┌─────────────────────────────────┐ │
|
|
105
|
+
│ │ 14 SECURITY LAYERS │ │
|
|
106
|
+
│ │ Post-Quantum • Audit Logs │ │
|
|
107
|
+
│ │ Cert Pinning • Memory Wipe │ │
|
|
108
|
+
│ │ GDPR • SOC2 • CSSF Ready │ │
|
|
109
|
+
│ └─────────────────────────────────┘ │
|
|
110
|
+
└──────────────────────────────────────────────────────────────────────────────┘
|
|
111
|
+
```
|
|
112
|
+
|
|
113
|
+
### Gemini Configuration
|
|
114
|
+
|
|
115
|
+
```bash
|
|
116
|
+
# Required for Gemini features
|
|
117
|
+
GEMINI_API_KEY=your-api-key # Get from https://aistudio.google.com/apikey
|
|
118
|
+
|
|
119
|
+
# Optional settings
|
|
120
|
+
GEMINI_DEFAULT_MODEL=gemini-2.5-flash # Default model
|
|
121
|
+
GEMINI_DEEP_RESEARCH_ENABLED=true # Enable Deep Research
|
|
122
|
+
GEMINI_TIMEOUT_MS=30000 # API timeout
|
|
123
|
+
```
|
|
124
|
+
|
|
125
|
+
### When to Use Which
|
|
126
|
+
|
|
127
|
+
| Task | Best Tool | Why |
|
|
128
|
+
|------|-----------|-----|
|
|
129
|
+
| Questions about YOUR documents | `ask_question` | Grounded on your uploaded sources |
|
|
130
|
+
| Comprehensive topic research | `deep_research` | Multi-source synthesis with citations |
|
|
131
|
+
| Current events / recent info | `gemini_query` + google_search | Live web data |
|
|
132
|
+
| Code calculations | `gemini_query` + code_execution | Reliable computation |
|
|
133
|
+
| Analyze a webpage | `gemini_query` + url_context | Direct page analysis |
|
|
134
|
+
| **Quick PDF/document analysis** | `upload_document` + `query_document` | **Fast API, no browser** (NEW!) |
|
|
135
|
+
|
|
136
|
+
---
|
|
137
|
+
|
|
138
|
+
## 📄 Document API (v1.9.0)
|
|
139
|
+
|
|
140
|
+
**Upload and query documents directly via Gemini API — no browser automation needed.**
|
|
141
|
+
|
|
142
|
+
v1.9.0 introduces the **Gemini Files API** for fast, reliable document analysis. Upload PDFs, analyze them instantly, and delete when done.
|
|
143
|
+
|
|
144
|
+
### Why This Matters
|
|
145
|
+
|
|
146
|
+
| Feature | Browser Mode | Document API |
|
|
147
|
+
|---------|--------------|--------------|
|
|
148
|
+
| Speed | Seconds | **Milliseconds** |
|
|
149
|
+
| Reliability | UI-dependent | **API-stable** |
|
|
150
|
+
| File Support | Via NotebookLM | **50MB PDFs, 1000 pages** |
|
|
151
|
+
| Retention | Permanent | 48 hours |
|
|
152
|
+
| Setup | Auth + cookies | **Just API key** |
|
|
153
|
+
|
|
154
|
+
### New Tools
|
|
155
|
+
|
|
156
|
+
#### `upload_document` — Fast Document Upload
|
|
157
|
+
|
|
158
|
+
Upload any document to Gemini for instant querying:
|
|
159
|
+
|
|
160
|
+
```
|
|
161
|
+
Upload /path/to/research-paper.pdf
|
|
162
|
+
```
|
|
163
|
+
|
|
164
|
+
- **Supported**: PDF (50MB, 1000 pages), TXT, MD, HTML, CSV, JSON, DOCX, images, audio, video
|
|
165
|
+
- **48-hour retention** — files auto-expire, or delete manually
|
|
166
|
+
- Returns a file ID for querying
|
|
167
|
+
|
|
168
|
+
#### `query_document` — Ask Questions About Documents
|
|
169
|
+
|
|
170
|
+
```
|
|
171
|
+
"What are the main findings in this research paper?"
|
|
172
|
+
"Summarize section 3 of the document"
|
|
173
|
+
"Extract all statistics mentioned in the PDF"
|
|
174
|
+
```
|
|
175
|
+
|
|
176
|
+
- Full document understanding (text, tables, charts, diagrams)
|
|
177
|
+
- Multi-document queries (compare multiple files)
|
|
178
|
+
- Fast API response (no browser wait)
|
|
179
|
+
|
|
180
|
+
#### `list_documents` — See All Uploaded Files
|
|
181
|
+
|
|
182
|
+
```
|
|
183
|
+
List all my uploaded documents
|
|
184
|
+
```
|
|
185
|
+
|
|
186
|
+
Shows file names, sizes, MIME types, and expiration times.
|
|
187
|
+
|
|
188
|
+
#### `delete_document` — Clean Up Sensitive Files
|
|
189
|
+
|
|
190
|
+
```
|
|
191
|
+
Delete file xyz123
|
|
192
|
+
```
|
|
193
|
+
|
|
194
|
+
Immediately remove files (don't wait for 48h expiration).
|
|
195
|
+
|
|
196
|
+
### Workflow Example
|
|
197
|
+
|
|
198
|
+
```
|
|
199
|
+
1. upload_document("/research/paper.pdf")
|
|
200
|
+
→ Returns: files/abc123
|
|
201
|
+
|
|
202
|
+
2. query_document("files/abc123", "What methodology was used?")
|
|
203
|
+
→ Returns: "The paper uses a mixed-methods approach combining..."
|
|
204
|
+
|
|
205
|
+
3. query_document("files/abc123", "List all cited authors")
|
|
206
|
+
→ Returns: "Smith et al. (2024), Johnson (2023)..."
|
|
207
|
+
|
|
208
|
+
4. delete_document("files/abc123")
|
|
209
|
+
→ File removed
|
|
210
|
+
```
|
|
211
|
+
|
|
212
|
+
### Auto-Chunking for Large PDFs (v1.10.0)
|
|
213
|
+
|
|
214
|
+
**No file size limits** — PDFs of any size are automatically handled.
|
|
215
|
+
|
|
216
|
+
When you upload a PDF that exceeds Gemini's limits (50MB or 1000 pages), the system automatically:
|
|
217
|
+
|
|
218
|
+
1. **Detects** the oversized PDF
|
|
219
|
+
2. **Splits** it into optimal chunks (500 pages each)
|
|
220
|
+
3. **Uploads** all chunks in parallel
|
|
221
|
+
4. **Returns** chunk metadata for querying
|
|
222
|
+
|
|
223
|
+
```
|
|
224
|
+
upload_document("/research/massive-2000-page-report.pdf")
|
|
225
|
+
|
|
226
|
+
→ Returns:
|
|
227
|
+
{
|
|
228
|
+
"wasChunked": true,
|
|
229
|
+
"totalPages": 2000,
|
|
230
|
+
"chunks": [
|
|
231
|
+
{ "fileName": "files/abc1", "pageStart": 1, "pageEnd": 500 },
|
|
232
|
+
{ "fileName": "files/abc2", "pageStart": 501, "pageEnd": 1000 },
|
|
233
|
+
{ "fileName": "files/abc3", "pageStart": 1001, "pageEnd": 1500 },
|
|
234
|
+
{ "fileName": "files/abc4", "pageStart": 1501, "pageEnd": 2000 }
|
|
235
|
+
],
|
|
236
|
+
"allFileNames": ["files/abc1", "files/abc2", "files/abc3", "files/abc4"]
|
|
237
|
+
}
|
|
238
|
+
```
|
|
239
|
+
|
|
240
|
+
#### `query_chunked_document` — Query All Chunks at Once
|
|
241
|
+
|
|
242
|
+
For chunked documents, use this tool to query all parts and get an aggregated answer:
|
|
243
|
+
|
|
244
|
+
```
|
|
245
|
+
query_chunked_document(
|
|
246
|
+
file_names: ["files/abc1", "files/abc2", "files/abc3", "files/abc4"],
|
|
247
|
+
query: "What are the key recommendations in this report?"
|
|
248
|
+
)
|
|
249
|
+
|
|
250
|
+
→ Queries each chunk, then synthesizes a unified answer
|
|
251
|
+
```
|
|
252
|
+
|
|
253
|
+
### When to Use Document API vs NotebookLM
|
|
254
|
+
|
|
255
|
+
| Scenario | Use |
|
|
256
|
+
|----------|-----|
|
|
257
|
+
| Quick one-off document analysis | **Document API** — fast, no setup |
|
|
258
|
+
| Building a permanent knowledge base | **NotebookLM** — permanent storage |
|
|
259
|
+
| Analyzing sensitive documents | **Document API** — 48h auto-delete |
|
|
260
|
+
| Multi-source research over time | **NotebookLM** — organized notebooks |
|
|
261
|
+
| CI/CD pipeline document processing | **Document API** — API-native |
|
|
262
|
+
| **Large PDFs (1000+ pages)** | **Document API** — auto-chunking |
|
|
263
|
+
|
|
264
|
+
---
|
|
265
|
+
|
|
266
|
+
## Programmatic Notebook Creation (v1.7.0+)
|
|
267
|
+
|
|
268
|
+
**Create NotebookLM notebooks entirely from code — no manual clicks required.**
|
|
269
|
+
|
|
270
|
+
Most MCP servers can only *read* from NotebookLM. This one can **create notebooks, add sources, and generate audio** — all programmatically.
|
|
271
|
+
|
|
272
|
+
### `create_notebook` — Build Notebooks Instantly
|
|
273
|
+
|
|
274
|
+
Create a complete notebook with multiple sources in one command:
|
|
275
|
+
|
|
276
|
+
```json
|
|
277
|
+
{
|
|
278
|
+
"name": "Security Research 2025",
|
|
279
|
+
"sources": [
|
|
280
|
+
{ "type": "url", "value": "https://owasp.org/Top10" },
|
|
281
|
+
{ "type": "file", "value": "/path/to/security-report.pdf" },
|
|
282
|
+
{ "type": "text", "value": "Custom analysis notes...", "title": "My Notes" }
|
|
283
|
+
],
|
|
284
|
+
"description": "OWASP security best practices",
|
|
285
|
+
"topics": ["security", "owasp", "vulnerabilities"]
|
|
286
|
+
}
|
|
287
|
+
```
|
|
288
|
+
|
|
289
|
+
**Supported source types:**
|
|
290
|
+
- **URL** — Web pages, documentation, articles
|
|
291
|
+
- **File** — PDF, DOCX, TXT, and more
|
|
292
|
+
- **Text** — Raw text, code snippets, notes
|
|
293
|
+
|
|
294
|
+
### `batch_create_notebooks` — Scale Up
|
|
295
|
+
|
|
296
|
+
Create **up to 10 notebooks** in a single operation:
|
|
297
|
+
|
|
298
|
+
```json
|
|
299
|
+
{
|
|
300
|
+
"notebooks": [
|
|
301
|
+
{ "name": "React Docs", "sources": [{ "type": "url", "value": "https://react.dev/reference" }] },
|
|
302
|
+
{ "name": "Node.js API", "sources": [{ "type": "url", "value": "https://nodejs.org/api/" }] },
|
|
303
|
+
{ "name": "TypeScript Handbook", "sources": [{ "type": "url", "value": "https://www.typescriptlang.org/docs/" }] }
|
|
304
|
+
]
|
|
305
|
+
}
|
|
306
|
+
```
|
|
307
|
+
|
|
308
|
+
Perfect for:
|
|
309
|
+
- Setting up project documentation libraries
|
|
310
|
+
- Onboarding new team members with curated knowledge bases
|
|
311
|
+
- Creating topic-specific research notebooks in bulk
|
|
312
|
+
|
|
313
|
+
### `manage_sources` — Dynamic Source Management
|
|
314
|
+
|
|
315
|
+
Add or remove sources from existing notebooks:
|
|
316
|
+
|
|
317
|
+
```json
|
|
318
|
+
{
|
|
319
|
+
"notebook_id": "abc123",
|
|
320
|
+
"action": "add",
|
|
321
|
+
"sources": [{ "type": "url", "value": "https://new-documentation.com" }]
|
|
322
|
+
}
|
|
323
|
+
```
|
|
324
|
+
|
|
325
|
+
### `generate_audio` — Audio Overview Creation
|
|
326
|
+
|
|
327
|
+
Generate NotebookLM's famous "Audio Overview" podcasts programmatically:
|
|
328
|
+
|
|
329
|
+
```
|
|
330
|
+
"Generate an audio overview for my Security Research notebook"
|
|
331
|
+
```
|
|
332
|
+
|
|
333
|
+
### `sync_notebook` — Keep Sources Updated
|
|
334
|
+
|
|
335
|
+
Sync notebook sources from a local directory:
|
|
336
|
+
|
|
337
|
+
```json
|
|
338
|
+
{
|
|
339
|
+
"notebook_id": "abc123",
|
|
340
|
+
"directory": "/path/to/docs",
|
|
341
|
+
"patterns": ["*.md", "*.pdf"]
|
|
342
|
+
}
|
|
343
|
+
```
|
|
344
|
+
|
|
345
|
+
### Why This Matters
|
|
346
|
+
|
|
347
|
+
| Traditional Workflow | With This MCP |
|
|
348
|
+
|---------------------|---------------|
|
|
349
|
+
| Manually create notebook in browser | `create_notebook` → done |
|
|
350
|
+
| Click "Add source" for each document | Batch add in single command |
|
|
351
|
+
| Navigate UI to generate audio | `generate_audio` → podcast ready |
|
|
352
|
+
| Update sources by hand | `sync_notebook` from local files |
|
|
353
|
+
|
|
354
|
+
**Your agent can now build entire knowledge bases autonomously.**
|
|
355
|
+
|
|
356
|
+
---
|
|
357
|
+
|
|
25
358
|
## Why This Fork?
|
|
26
359
|
|
|
27
360
|
The original NotebookLM MCP is excellent for productivity — but MCP servers handle sensitive data:
|
|
@@ -99,18 +432,6 @@ create_incident - Security incident management
|
|
|
99
432
|
...and 8 more
|
|
100
433
|
```
|
|
101
434
|
|
|
102
|
-
#### Compliance Dashboard Example
|
|
103
|
-
```
|
|
104
|
-
═══════════════════════════════════════════════════════════════
|
|
105
|
-
COMPLIANCE DASHBOARD - NotebookLM MCP Server
|
|
106
|
-
═══════════════════════════════════════════════════════════════
|
|
107
|
-
Generated: 2025-12-18T10:00:00.000Z
|
|
108
|
-
Overall Score: 95/100
|
|
109
|
-
|
|
110
|
-
GDPR: [COMPLIANT] SOC2: [COMPLIANT] CSSF: [COMPLIANT]
|
|
111
|
-
═══════════════════════════════════════════════════════════════
|
|
112
|
-
```
|
|
113
|
-
|
|
114
435
|
See [COMPLIANCE-SPEC.md](./docs/COMPLIANCE-SPEC.md) for full documentation.
|
|
115
436
|
|
|
116
437
|
---
|
|
@@ -122,11 +443,12 @@ See [COMPLIANCE-SPEC.md](./docs/COMPLIANCE-SPEC.md) for full documentation.
|
|
|
122
443
|
claude mcp add notebooklm -- npx @pan-sec/notebooklm-mcp@latest
|
|
123
444
|
```
|
|
124
445
|
|
|
125
|
-
### With Authentication (Recommended)
|
|
446
|
+
### With Authentication + Gemini (Recommended)
|
|
126
447
|
```bash
|
|
127
448
|
claude mcp add notebooklm \
|
|
128
449
|
--env NLMCP_AUTH_ENABLED=true \
|
|
129
450
|
--env NLMCP_AUTH_TOKEN=$(openssl rand -base64 32) \
|
|
451
|
+
--env GEMINI_API_KEY=your-gemini-api-key \
|
|
130
452
|
-- npx @pan-sec/notebooklm-mcp@latest
|
|
131
453
|
```
|
|
132
454
|
|
|
@@ -147,7 +469,8 @@ Add to `~/.cursor/mcp.json`:
|
|
|
147
469
|
"args": ["-y", "@pan-sec/notebooklm-mcp@latest"],
|
|
148
470
|
"env": {
|
|
149
471
|
"NLMCP_AUTH_ENABLED": "true",
|
|
150
|
-
"NLMCP_AUTH_TOKEN": "your-secure-token"
|
|
472
|
+
"NLMCP_AUTH_TOKEN": "your-secure-token",
|
|
473
|
+
"GEMINI_API_KEY": "your-gemini-api-key"
|
|
151
474
|
}
|
|
152
475
|
}
|
|
153
476
|
}
|
|
@@ -166,7 +489,8 @@ Add to `~/.cursor/mcp.json`:
|
|
|
166
489
|
"args": ["-y", "@pan-sec/notebooklm-mcp@latest"],
|
|
167
490
|
"env": {
|
|
168
491
|
"NLMCP_AUTH_ENABLED": "true",
|
|
169
|
-
"NLMCP_AUTH_TOKEN": "your-secure-token"
|
|
492
|
+
"NLMCP_AUTH_TOKEN": "your-secure-token",
|
|
493
|
+
"GEMINI_API_KEY": "your-gemini-api-key"
|
|
170
494
|
}
|
|
171
495
|
}
|
|
172
496
|
}
|
|
@@ -194,6 +518,56 @@ Go to [notebooklm.google.com](https://notebooklm.google.com) → Create notebook
|
|
|
194
518
|
"Research [topic] using this NotebookLM: [link]"
|
|
195
519
|
```
|
|
196
520
|
|
|
521
|
+
### 5. Try Deep Research (NEW!)
|
|
522
|
+
```
|
|
523
|
+
"Use deep research to investigate [complex topic]"
|
|
524
|
+
```
|
|
525
|
+
|
|
526
|
+
---
|
|
527
|
+
|
|
528
|
+
## Complete Tool Reference
|
|
529
|
+
|
|
530
|
+
### Research Tools
|
|
531
|
+
| Tool | Description | Backend |
|
|
532
|
+
|------|-------------|---------|
|
|
533
|
+
| `ask_question` | Query your NotebookLM notebooks | Browser |
|
|
534
|
+
| `deep_research` | Comprehensive research with citations | Gemini API |
|
|
535
|
+
| `gemini_query` | Fast queries with grounding tools | Gemini API |
|
|
536
|
+
| `get_research_status` | Check background research progress | Gemini API |
|
|
537
|
+
|
|
538
|
+
### Notebook Management
|
|
539
|
+
| Tool | Description |
|
|
540
|
+
|------|-------------|
|
|
541
|
+
| `add_notebook` | Add notebook to library |
|
|
542
|
+
| `list_notebooks` | List all notebooks |
|
|
543
|
+
| `get_notebook` | Get notebook details |
|
|
544
|
+
| `update_notebook` | Update notebook metadata |
|
|
545
|
+
| `remove_notebook` | Remove from library |
|
|
546
|
+
| `select_notebook` | Set active notebook |
|
|
547
|
+
| `search_notebooks` | Search by query |
|
|
548
|
+
|
|
549
|
+
### Source Management (v1.7.0+)
|
|
550
|
+
| Tool | Description |
|
|
551
|
+
|------|-------------|
|
|
552
|
+
| `manage_sources` | Add/remove/list sources |
|
|
553
|
+
| `generate_audio` | Create Audio Overview |
|
|
554
|
+
| `sync_notebook` | Sync sources from local files |
|
|
555
|
+
|
|
556
|
+
### Session & System
|
|
557
|
+
| Tool | Description |
|
|
558
|
+
|------|-------------|
|
|
559
|
+
| `list_sessions` | View active sessions |
|
|
560
|
+
| `close_session` | Close a session |
|
|
561
|
+
| `reset_session` | Reset session chat |
|
|
562
|
+
| `get_health` | Server health check |
|
|
563
|
+
| `setup_auth` | Initial authentication |
|
|
564
|
+
| `re_auth` | Re-authenticate |
|
|
565
|
+
| `cleanup_data` | Deep cleanup utility |
|
|
566
|
+
| `get_library_stats` | Library statistics |
|
|
567
|
+
|
|
568
|
+
### Compliance (v1.6.0+)
|
|
569
|
+
16 compliance tools for GDPR, SOC2, and CSSF requirements.
|
|
570
|
+
|
|
197
571
|
---
|
|
198
572
|
|
|
199
573
|
## What Gets Protected
|
|
@@ -206,6 +580,7 @@ Go to [notebooklm.google.com](https://notebooklm.google.com) → Create notebook
|
|
|
206
580
|
| Google connection | Certificate pinned (MITM blocked) |
|
|
207
581
|
| Log output | Credentials auto-redacted |
|
|
208
582
|
| API responses | Scanned for leaked secrets |
|
|
583
|
+
| Gemini API key | Secure memory handling |
|
|
209
584
|
|
|
210
585
|
---
|
|
211
586
|
|
|
@@ -218,6 +593,12 @@ All security features are **enabled by default**. Override via environment varia
|
|
|
218
593
|
NLMCP_AUTH_ENABLED=true
|
|
219
594
|
NLMCP_AUTH_TOKEN=your-secret-token
|
|
220
595
|
|
|
596
|
+
# Gemini API (v1.8.0+)
|
|
597
|
+
GEMINI_API_KEY=your-api-key
|
|
598
|
+
GEMINI_DEFAULT_MODEL=gemini-2.5-flash
|
|
599
|
+
GEMINI_DEEP_RESEARCH_ENABLED=true
|
|
600
|
+
GEMINI_TIMEOUT_MS=30000
|
|
601
|
+
|
|
221
602
|
# Encryption
|
|
222
603
|
NLMCP_USE_POST_QUANTUM=true
|
|
223
604
|
NLMCP_ENCRYPTION_KEY=base64-32-bytes # Optional custom key
|
|
@@ -259,43 +640,6 @@ Or integrate in CI/CD:
|
|
|
259
640
|
|
|
260
641
|
---
|
|
261
642
|
|
|
262
|
-
## How It Works
|
|
263
|
-
|
|
264
|
-
```
|
|
265
|
-
┌─────────────┐ ┌──────────────────┐ ┌─────────────┐
|
|
266
|
-
│ Claude/ │────▶│ MCP Server │────▶│ NotebookLM │
|
|
267
|
-
│ Codex │ │ (This Fork) │ │ (Google) │
|
|
268
|
-
└─────────────┘ └──────────────────┘ └─────────────┘
|
|
269
|
-
│
|
|
270
|
-
┌──────┴──────┐
|
|
271
|
-
│ 14 Security │
|
|
272
|
-
│ Layers │
|
|
273
|
-
└─────────────┘
|
|
274
|
-
• PQ Encryption
|
|
275
|
-
• Secrets Scan
|
|
276
|
-
• Cert Pinning
|
|
277
|
-
• Memory Wipe
|
|
278
|
-
• Audit Logs
|
|
279
|
-
• Rate Limits
|
|
280
|
-
• ...
|
|
281
|
-
```
|
|
282
|
-
|
|
283
|
-
Your agent asks questions → Security layers protect the pipeline → NotebookLM answers from your docs.
|
|
284
|
-
|
|
285
|
-
---
|
|
286
|
-
|
|
287
|
-
## Original Features (Preserved)
|
|
288
|
-
|
|
289
|
-
All original functionality from [PleasePrompto/notebooklm-mcp](https://github.com/PleasePrompto/notebooklm-mcp):
|
|
290
|
-
|
|
291
|
-
- **Zero hallucinations** — NotebookLM only answers from your uploaded docs
|
|
292
|
-
- **Autonomous research** — Claude asks follow-up questions automatically
|
|
293
|
-
- **Smart library** — Save notebooks with tags, auto-select by context
|
|
294
|
-
- **Cross-tool sharing** — Works with Claude Code, Codex, Cursor, etc.
|
|
295
|
-
- **Tool profiles** — Minimal, standard, or full tool sets
|
|
296
|
-
|
|
297
|
-
---
|
|
298
|
-
|
|
299
643
|
## Comparison
|
|
300
644
|
|
|
301
645
|
| Feature | Original | This Fork |
|
|
@@ -303,6 +647,13 @@ All original functionality from [PleasePrompto/notebooklm-mcp](https://github.co
|
|
|
303
647
|
| Zero-hallucination Q&A | ✅ | ✅ |
|
|
304
648
|
| Library management | ✅ | ✅ |
|
|
305
649
|
| Multi-client support | ✅ | ✅ |
|
|
650
|
+
| **Create Notebooks Programmatically** | ❌ | ✅ **UNIQUE** |
|
|
651
|
+
| **Batch Create (10 notebooks at once)** | ❌ | ✅ **UNIQUE** |
|
|
652
|
+
| **Gemini Deep Research** | ❌ | ✅ **NEW** |
|
|
653
|
+
| **Gemini Query with Grounding** | ❌ | ✅ **NEW** |
|
|
654
|
+
| **Source Management (add/remove)** | ❌ | ✅ |
|
|
655
|
+
| **Audio Overview Generation** | ❌ | ✅ |
|
|
656
|
+
| **Sync from Local Directories** | ❌ | ✅ |
|
|
306
657
|
| **Cross-platform (Linux/macOS/Windows)** | ⚠️ | ✅ |
|
|
307
658
|
| **Post-quantum encryption** | ❌ | ✅ |
|
|
308
659
|
| **Secrets scanning** | ❌ | ✅ |
|
|
@@ -311,6 +662,20 @@ All original functionality from [PleasePrompto/notebooklm-mcp](https://github.co
|
|
|
311
662
|
| **Audit logging** | ❌ | ✅ |
|
|
312
663
|
| **MCP authentication** | ❌ | ✅ |
|
|
313
664
|
| **Prompt injection detection** | ❌ | ✅ |
|
|
665
|
+
| **Enterprise Compliance (GDPR/SOC2/CSSF)** | ❌ | ✅ |
|
|
666
|
+
|
|
667
|
+
---
|
|
668
|
+
|
|
669
|
+
## Version History
|
|
670
|
+
|
|
671
|
+
| Version | Highlights |
|
|
672
|
+
|---------|------------|
|
|
673
|
+
| **v1.8.0** | Gemini Interactions API: Deep Research, Query with Grounding, Background Tasks |
|
|
674
|
+
| **v1.7.0** | Source management, batch operations, audio generation, webhooks |
|
|
675
|
+
| **v1.6.0** | Enterprise compliance: GDPR, SOC2 Type II, CSSF |
|
|
676
|
+
| **v1.5.0** | Cross-platform support (Windows ACLs, macOS, Linux) |
|
|
677
|
+
| **v1.4.0** | Post-quantum encryption, secrets scanning |
|
|
678
|
+
| **v1.3.0** | Certificate pinning, audit logging |
|
|
314
679
|
|
|
315
680
|
---
|
|
316
681
|
|
|
@@ -327,6 +692,7 @@ Email: support@pantheonsecurity.io
|
|
|
327
692
|
- **Original MCP Server**: [Gérôme Dexheimer](https://github.com/PleasePrompto) — [notebooklm-mcp](https://github.com/PleasePrompto/notebooklm-mcp)
|
|
328
693
|
- **Security Hardening**: [Pantheon Security](https://pantheonsecurity.io)
|
|
329
694
|
- **Post-Quantum Crypto**: [@noble/post-quantum](https://www.npmjs.com/package/@noble/post-quantum)
|
|
695
|
+
- **Gemini API**: [Google AI](https://ai.google.dev/)
|
|
330
696
|
|
|
331
697
|
## License
|
|
332
698
|
|
|
@@ -338,6 +704,8 @@ MIT — Same as original.
|
|
|
338
704
|
|
|
339
705
|
**Security hardened with 🔒 by [Pantheon Security](https://pantheonsecurity.io)**
|
|
340
706
|
|
|
341
|
-
|
|
707
|
+
**Powered by Google Gemini 🚀**
|
|
708
|
+
|
|
709
|
+
[Full Security Documentation](./SECURITY.md) • [Compliance Guide](./docs/COMPLIANCE-SPEC.md) • [Report Vulnerability](mailto:support@pantheonsecurity.io)
|
|
342
710
|
|
|
343
711
|
</div>
|
|
@@ -5,7 +5,7 @@
|
|
|
5
5
|
* via the Interactions API for stable, API-based research capabilities.
|
|
6
6
|
*/
|
|
7
7
|
import type { ProgressCallback } from "../types.js";
|
|
8
|
-
import type { GeminiQueryOptions, GeminiInteraction, DeepResearchOptions } from "./types.js";
|
|
8
|
+
import type { GeminiQueryOptions, GeminiInteraction, DeepResearchOptions, UploadDocumentOptions, QueryDocumentOptions, GeminiFile, UploadDocumentResult, QueryDocumentResult, ListDocumentsResult } from "./types.js";
|
|
9
9
|
export { DEEP_RESEARCH_AGENT } from "./types.js";
|
|
10
10
|
/**
|
|
11
11
|
* Client for Gemini Interactions API
|
|
@@ -41,5 +41,59 @@ export declare class GeminiClient {
|
|
|
41
41
|
* Map SDK response to our interface
|
|
42
42
|
*/
|
|
43
43
|
private mapInteraction;
|
|
44
|
+
/**
|
|
45
|
+
* Upload a document to Gemini Files API
|
|
46
|
+
* Files are retained for 48 hours and can be used in multiple queries
|
|
47
|
+
* Large PDFs (>50MB or >1000 pages) are automatically chunked
|
|
48
|
+
*/
|
|
49
|
+
uploadDocument(options: UploadDocumentOptions): Promise<UploadDocumentResult>;
|
|
50
|
+
/**
|
|
51
|
+
* Upload a large PDF by splitting it into chunks
|
|
52
|
+
*/
|
|
53
|
+
private uploadChunkedPdf;
|
|
54
|
+
/**
|
|
55
|
+
* Wait for file processing to complete
|
|
56
|
+
*/
|
|
57
|
+
private waitForFileProcessing;
|
|
58
|
+
/**
|
|
59
|
+
* Get file metadata
|
|
60
|
+
*/
|
|
61
|
+
getFile(fileName: string): Promise<GeminiFile>;
|
|
62
|
+
/**
|
|
63
|
+
* List all uploaded files
|
|
64
|
+
*/
|
|
65
|
+
listFiles(pageSize?: number, pageToken?: string): Promise<ListDocumentsResult>;
|
|
66
|
+
/**
|
|
67
|
+
* Delete an uploaded file
|
|
68
|
+
*/
|
|
69
|
+
deleteFile(fileName: string): Promise<void>;
|
|
70
|
+
/**
|
|
71
|
+
* Query an uploaded document
|
|
72
|
+
*/
|
|
73
|
+
queryDocument(options: QueryDocumentOptions): Promise<QueryDocumentResult>;
|
|
74
|
+
/**
|
|
75
|
+
* Query multiple document chunks and aggregate results
|
|
76
|
+
* This is useful for querying large documents that were split into chunks
|
|
77
|
+
*/
|
|
78
|
+
queryChunkedDocument(fileNames: string[], query: string, options?: {
|
|
79
|
+
model?: string;
|
|
80
|
+
aggregatePrompt?: string;
|
|
81
|
+
}): Promise<QueryDocumentResult>;
|
|
82
|
+
/**
|
|
83
|
+
* Map SDK file response to our interface
|
|
84
|
+
*/
|
|
85
|
+
private mapFile;
|
|
86
|
+
/**
|
|
87
|
+
* Detect MIME type from file extension
|
|
88
|
+
*/
|
|
89
|
+
private detectMimeType;
|
|
90
|
+
/**
|
|
91
|
+
* Format bytes to human-readable string
|
|
92
|
+
*/
|
|
93
|
+
private formatBytes;
|
|
94
|
+
/**
|
|
95
|
+
* Calculate expiration time (48 hours from now)
|
|
96
|
+
*/
|
|
97
|
+
private calculateExpiration;
|
|
44
98
|
}
|
|
45
99
|
//# sourceMappingURL=gemini-client.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"gemini-client.d.ts","sourceRoot":"","sources":["../../src/gemini/gemini-client.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAKH,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AACpD,OAAO,KAAK,EACV,kBAAkB,EAClB,iBAAiB,EACjB,mBAAmB,
|
|
1
|
+
{"version":3,"file":"gemini-client.d.ts","sourceRoot":"","sources":["../../src/gemini/gemini-client.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAKH,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AACpD,OAAO,KAAK,EACV,kBAAkB,EAClB,iBAAiB,EACjB,mBAAmB,EAGnB,qBAAqB,EACrB,oBAAoB,EACpB,UAAU,EAEV,oBAAoB,EACpB,mBAAmB,EACnB,mBAAmB,EAEpB,MAAM,YAAY,CAAC;AAMpB,OAAO,EAAE,mBAAmB,EAAE,MAAM,YAAY,CAAC;AAEjD;;GAEG;AACH,qBAAa,YAAY;IACvB,OAAO,CAAC,MAAM,CAA4B;gBAE9B,MAAM,CAAC,EAAE,MAAM;IAU3B;;OAEG;IACH,WAAW,IAAI,OAAO;IAItB;;OAEG;IACG,KAAK,CAAC,OAAO,EAAE,kBAAkB,GAAG,OAAO,CAAC,iBAAiB,CAAC;IA+CpE;;OAEG;IACG,YAAY,CAAC,OAAO,EAAE,mBAAmB,GAAG,OAAO,CAAC,iBAAiB,CAAC;IAwC5E;;OAEG;IACG,cAAc,CAAC,aAAa,EAAE,MAAM,GAAG,OAAO,CAAC,iBAAiB,CAAC;IAevE;;OAEG;IACG,iBAAiB,CACrB,aAAa,EAAE,MAAM,EACrB,SAAS,EAAE,MAAM,EACjB,gBAAgB,CAAC,EAAE,gBAAgB,GAClC,OAAO,CAAC,iBAAiB,CAAC;IAgD7B;;OAEG;IACG,iBAAiB,CAAC,aAAa,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAe7D;;OAEG;IACH,OAAO,CAAC,cAAc;IAkDtB;;;;OAIG;IACG,cAAc,CAAC,OAAO,EAAE,qBAAqB,GAAG,OAAO,CAAC,oBAAoB,CAAC;IAqEnF;;OAEG;YACW,gBAAgB;IA2E9B;;OAEG;YACW,qBAAqB;IAsBnC;;OAEG;IACG,OAAO,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,UAAU,CAAC;IAepD;;OAEG;IACG,SAAS,CAAC,QAAQ,SAAM,EAAE,SAAS,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,mBAAmB,CAAC;IAyBjF;;OAEG;IACG,UAAU,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAejD;;OAEG;IACG,aAAa,CAAC,OAAO,EAAE,oBAAoB,GAAG,OAAO,CAAC,mBAAmB,CAAC;IA6EhF;;;OAGG;IACG,oBAAoB,CACxB,SAAS,EAAE,MAAM,EAAE,EACnB,KAAK,EAAE,MAAM,EACb,OAAO,CAAC,EAAE;QACR,KAAK,CAAC,EAAE,MAAM,CAAC;QACf,eAAe,CAAC,EAAE,MAAM,CAAC;KAC1B,GACA,OAAO,CAAC,mBAAmB,CAAC;IA2E/B;;OAEG;IACH,OAAO,CAAC,OAAO;IA0Bf;;OAEG;IACH,OAAO,CAAC,cAAc;IAyBtB;;OAEG;IACH,OAAO,CAAC,WAAW;IAMnB;;OAEG;IACH,OAAO,CAAC,mBAAmB;CAK5B"}
|