notebooklm-mcp-ultimate 2.2.1

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.
Files changed (207) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +420 -0
  3. package/dist/api/batch-execute-client.d.ts +232 -0
  4. package/dist/api/batch-execute-client.d.ts.map +1 -0
  5. package/dist/api/batch-execute-client.js +672 -0
  6. package/dist/api/batch-execute-client.js.map +1 -0
  7. package/dist/api/content-types.d.ts +44 -0
  8. package/dist/api/content-types.d.ts.map +1 -0
  9. package/dist/api/content-types.js +89 -0
  10. package/dist/api/content-types.js.map +1 -0
  11. package/dist/api/csrf-manager.d.ts +94 -0
  12. package/dist/api/csrf-manager.d.ts.map +1 -0
  13. package/dist/api/csrf-manager.js +178 -0
  14. package/dist/api/csrf-manager.js.map +1 -0
  15. package/dist/api/index.d.ts +27 -0
  16. package/dist/api/index.d.ts.map +1 -0
  17. package/dist/api/index.js +56 -0
  18. package/dist/api/index.js.map +1 -0
  19. package/dist/api/operation-poller.d.ts +67 -0
  20. package/dist/api/operation-poller.d.ts.map +1 -0
  21. package/dist/api/operation-poller.js +132 -0
  22. package/dist/api/operation-poller.js.map +1 -0
  23. package/dist/api/request-builder.d.ts +196 -0
  24. package/dist/api/request-builder.d.ts.map +1 -0
  25. package/dist/api/request-builder.js +371 -0
  26. package/dist/api/request-builder.js.map +1 -0
  27. package/dist/api/response-parser.d.ts +124 -0
  28. package/dist/api/response-parser.d.ts.map +1 -0
  29. package/dist/api/response-parser.js +595 -0
  30. package/dist/api/response-parser.js.map +1 -0
  31. package/dist/api/rpc-ids.d.ts +92 -0
  32. package/dist/api/rpc-ids.d.ts.map +1 -0
  33. package/dist/api/rpc-ids.js +138 -0
  34. package/dist/api/rpc-ids.js.map +1 -0
  35. package/dist/api/streaming-chat-client.d.ts +50 -0
  36. package/dist/api/streaming-chat-client.d.ts.map +1 -0
  37. package/dist/api/streaming-chat-client.js +198 -0
  38. package/dist/api/streaming-chat-client.js.map +1 -0
  39. package/dist/api/types.d.ts +318 -0
  40. package/dist/api/types.d.ts.map +1 -0
  41. package/dist/api/types.js +22 -0
  42. package/dist/api/types.js.map +1 -0
  43. package/dist/auth/auth-manager.d.ts +163 -0
  44. package/dist/auth/auth-manager.d.ts.map +1 -0
  45. package/dist/auth/auth-manager.js +1055 -0
  46. package/dist/auth/auth-manager.js.map +1 -0
  47. package/dist/auth/cookie-store.d.ts +121 -0
  48. package/dist/auth/cookie-store.d.ts.map +1 -0
  49. package/dist/auth/cookie-store.js +283 -0
  50. package/dist/auth/cookie-store.js.map +1 -0
  51. package/dist/config.d.ts +89 -0
  52. package/dist/config.d.ts.map +1 -0
  53. package/dist/config.js +217 -0
  54. package/dist/config.js.map +1 -0
  55. package/dist/errors.d.ts +26 -0
  56. package/dist/errors.d.ts.map +1 -0
  57. package/dist/errors.js +41 -0
  58. package/dist/errors.js.map +1 -0
  59. package/dist/index.d.ts +32 -0
  60. package/dist/index.d.ts.map +1 -0
  61. package/dist/index.js +439 -0
  62. package/dist/index.js.map +1 -0
  63. package/dist/library/notebook-library.d.ts +79 -0
  64. package/dist/library/notebook-library.d.ts.map +1 -0
  65. package/dist/library/notebook-library.js +296 -0
  66. package/dist/library/notebook-library.js.map +1 -0
  67. package/dist/library/types.d.ts +67 -0
  68. package/dist/library/types.d.ts.map +1 -0
  69. package/dist/library/types.js +8 -0
  70. package/dist/library/types.js.map +1 -0
  71. package/dist/operations/content-operations.d.ts +78 -0
  72. package/dist/operations/content-operations.d.ts.map +1 -0
  73. package/dist/operations/content-operations.js +162 -0
  74. package/dist/operations/content-operations.js.map +1 -0
  75. package/dist/operations/hybrid-executor.d.ts +47 -0
  76. package/dist/operations/hybrid-executor.d.ts.map +1 -0
  77. package/dist/operations/hybrid-executor.js +114 -0
  78. package/dist/operations/hybrid-executor.js.map +1 -0
  79. package/dist/operations/notebook-crud-operations.d.ts +52 -0
  80. package/dist/operations/notebook-crud-operations.d.ts.map +1 -0
  81. package/dist/operations/notebook-crud-operations.js +248 -0
  82. package/dist/operations/notebook-crud-operations.js.map +1 -0
  83. package/dist/operations/research-operations.d.ts +42 -0
  84. package/dist/operations/research-operations.d.ts.map +1 -0
  85. package/dist/operations/research-operations.js +189 -0
  86. package/dist/operations/research-operations.js.map +1 -0
  87. package/dist/operations/source-operations.d.ts +59 -0
  88. package/dist/operations/source-operations.d.ts.map +1 -0
  89. package/dist/operations/source-operations.js +280 -0
  90. package/dist/operations/source-operations.js.map +1 -0
  91. package/dist/operations/studio-operations.d.ts +98 -0
  92. package/dist/operations/studio-operations.d.ts.map +1 -0
  93. package/dist/operations/studio-operations.js +309 -0
  94. package/dist/operations/studio-operations.js.map +1 -0
  95. package/dist/resources/resource-handlers.d.ts +22 -0
  96. package/dist/resources/resource-handlers.d.ts.map +1 -0
  97. package/dist/resources/resource-handlers.js +216 -0
  98. package/dist/resources/resource-handlers.js.map +1 -0
  99. package/dist/session/browser-session.d.ts +113 -0
  100. package/dist/session/browser-session.d.ts.map +1 -0
  101. package/dist/session/browser-session.js +670 -0
  102. package/dist/session/browser-session.js.map +1 -0
  103. package/dist/session/session-manager.d.ts +88 -0
  104. package/dist/session/session-manager.d.ts.map +1 -0
  105. package/dist/session/session-manager.js +314 -0
  106. package/dist/session/session-manager.js.map +1 -0
  107. package/dist/session/shared-context-manager.d.ts +107 -0
  108. package/dist/session/shared-context-manager.d.ts.map +1 -0
  109. package/dist/session/shared-context-manager.js +447 -0
  110. package/dist/session/shared-context-manager.js.map +1 -0
  111. package/dist/tools/definitions/ask-question.d.ts +8 -0
  112. package/dist/tools/definitions/ask-question.d.ts.map +1 -0
  113. package/dist/tools/definitions/ask-question.js +213 -0
  114. package/dist/tools/definitions/ask-question.js.map +1 -0
  115. package/dist/tools/definitions/content-generation.d.ts +52 -0
  116. package/dist/tools/definitions/content-generation.d.ts.map +1 -0
  117. package/dist/tools/definitions/content-generation.js +236 -0
  118. package/dist/tools/definitions/content-generation.js.map +1 -0
  119. package/dist/tools/definitions/notebook-crud.d.ts +9 -0
  120. package/dist/tools/definitions/notebook-crud.d.ts.map +1 -0
  121. package/dist/tools/definitions/notebook-crud.js +156 -0
  122. package/dist/tools/definitions/notebook-crud.js.map +1 -0
  123. package/dist/tools/definitions/notebook-management.d.ts +3 -0
  124. package/dist/tools/definitions/notebook-management.d.ts.map +1 -0
  125. package/dist/tools/definitions/notebook-management.js +243 -0
  126. package/dist/tools/definitions/notebook-management.js.map +1 -0
  127. package/dist/tools/definitions/research.d.ts +23 -0
  128. package/dist/tools/definitions/research.d.ts.map +1 -0
  129. package/dist/tools/definitions/research.js +108 -0
  130. package/dist/tools/definitions/research.js.map +1 -0
  131. package/dist/tools/definitions/session-management.d.ts +3 -0
  132. package/dist/tools/definitions/session-management.d.ts.map +1 -0
  133. package/dist/tools/definitions/session-management.js +41 -0
  134. package/dist/tools/definitions/session-management.js.map +1 -0
  135. package/dist/tools/definitions/source-management.d.ts +39 -0
  136. package/dist/tools/definitions/source-management.d.ts.map +1 -0
  137. package/dist/tools/definitions/source-management.js +224 -0
  138. package/dist/tools/definitions/source-management.js.map +1 -0
  139. package/dist/tools/definitions/studio.d.ts +36 -0
  140. package/dist/tools/definitions/studio.d.ts.map +1 -0
  141. package/dist/tools/definitions/studio.js +153 -0
  142. package/dist/tools/definitions/studio.js.map +1 -0
  143. package/dist/tools/definitions/system.d.ts +3 -0
  144. package/dist/tools/definitions/system.d.ts.map +1 -0
  145. package/dist/tools/definitions/system.js +143 -0
  146. package/dist/tools/definitions/system.js.map +1 -0
  147. package/dist/tools/definitions.d.ts +12 -0
  148. package/dist/tools/definitions.d.ts.map +1 -0
  149. package/dist/tools/definitions.js +36 -0
  150. package/dist/tools/definitions.js.map +1 -0
  151. package/dist/tools/handlers/content-handlers.d.ts +287 -0
  152. package/dist/tools/handlers/content-handlers.d.ts.map +1 -0
  153. package/dist/tools/handlers/content-handlers.js +244 -0
  154. package/dist/tools/handlers/content-handlers.js.map +1 -0
  155. package/dist/tools/handlers/notebook-crud-handlers.d.ts +69 -0
  156. package/dist/tools/handlers/notebook-crud-handlers.d.ts.map +1 -0
  157. package/dist/tools/handlers/notebook-crud-handlers.js +117 -0
  158. package/dist/tools/handlers/notebook-crud-handlers.js.map +1 -0
  159. package/dist/tools/handlers/research-handlers.d.ts +37 -0
  160. package/dist/tools/handlers/research-handlers.d.ts.map +1 -0
  161. package/dist/tools/handlers/research-handlers.js +87 -0
  162. package/dist/tools/handlers/research-handlers.js.map +1 -0
  163. package/dist/tools/handlers/source-handlers.d.ts +52 -0
  164. package/dist/tools/handlers/source-handlers.d.ts.map +1 -0
  165. package/dist/tools/handlers/source-handlers.js +177 -0
  166. package/dist/tools/handlers/source-handlers.js.map +1 -0
  167. package/dist/tools/handlers/studio-handlers.d.ts +125 -0
  168. package/dist/tools/handlers/studio-handlers.d.ts.map +1 -0
  169. package/dist/tools/handlers/studio-handlers.js +183 -0
  170. package/dist/tools/handlers/studio-handlers.js.map +1 -0
  171. package/dist/tools/handlers.d.ts +629 -0
  172. package/dist/tools/handlers.d.ts.map +1 -0
  173. package/dist/tools/handlers.js +833 -0
  174. package/dist/tools/handlers.js.map +1 -0
  175. package/dist/tools/index.d.ts +8 -0
  176. package/dist/tools/index.d.ts.map +1 -0
  177. package/dist/tools/index.js +8 -0
  178. package/dist/tools/index.js.map +1 -0
  179. package/dist/types.d.ts +82 -0
  180. package/dist/types.d.ts.map +1 -0
  181. package/dist/types.js +5 -0
  182. package/dist/types.js.map +1 -0
  183. package/dist/utils/cleanup-manager.d.ts +133 -0
  184. package/dist/utils/cleanup-manager.d.ts.map +1 -0
  185. package/dist/utils/cleanup-manager.js +673 -0
  186. package/dist/utils/cleanup-manager.js.map +1 -0
  187. package/dist/utils/cli-handler.d.ts +16 -0
  188. package/dist/utils/cli-handler.d.ts.map +1 -0
  189. package/dist/utils/cli-handler.js +102 -0
  190. package/dist/utils/cli-handler.js.map +1 -0
  191. package/dist/utils/logger.d.ts +61 -0
  192. package/dist/utils/logger.d.ts.map +1 -0
  193. package/dist/utils/logger.js +92 -0
  194. package/dist/utils/logger.js.map +1 -0
  195. package/dist/utils/page-utils.d.ts +54 -0
  196. package/dist/utils/page-utils.d.ts.map +1 -0
  197. package/dist/utils/page-utils.js +405 -0
  198. package/dist/utils/page-utils.js.map +1 -0
  199. package/dist/utils/settings-manager.d.ts +37 -0
  200. package/dist/utils/settings-manager.d.ts.map +1 -0
  201. package/dist/utils/settings-manager.js +120 -0
  202. package/dist/utils/settings-manager.js.map +1 -0
  203. package/dist/utils/stealth-utils.d.ts +135 -0
  204. package/dist/utils/stealth-utils.d.ts.map +1 -0
  205. package/dist/utils/stealth-utils.js +398 -0
  206. package/dist/utils/stealth-utils.js.map +1 -0
  207. package/package.json +63 -0
package/dist/index.js ADDED
@@ -0,0 +1,439 @@
1
+ #!/usr/bin/env node
2
+ /**
3
+ * NotebookLM MCP Server
4
+ *
5
+ * MCP Server for Google NotebookLM - Chat with Gemini 2.5 through NotebookLM
6
+ * with session support and human-like behavior!
7
+ *
8
+ * Features:
9
+ * - Session-based contextual conversations
10
+ * - Auto re-login on session expiry
11
+ * - Human-like typing and mouse movements
12
+ * - Persistent browser fingerprint
13
+ * - Stealth mode with Patchright
14
+ * - Claude Code integration via npx
15
+ *
16
+ * Usage:
17
+ * npx notebooklm-mcp
18
+ * node dist/index.js
19
+ *
20
+ * Environment Variables:
21
+ * NOTEBOOK_URL - Default NotebookLM notebook URL
22
+ * AUTO_LOGIN_ENABLED - Enable automatic login (true/false)
23
+ * LOGIN_EMAIL - Google email for auto-login
24
+ * LOGIN_PASSWORD - Google password for auto-login
25
+ * HEADLESS - Run browser in headless mode (true/false)
26
+ * MAX_SESSIONS - Maximum concurrent sessions (default: 10)
27
+ * SESSION_TIMEOUT - Session timeout in seconds (default: 900)
28
+ *
29
+ * Based on the Python NotebookLM API implementation
30
+ */
31
+ import { Server } from "@modelcontextprotocol/sdk/server/index.js";
32
+ import { StdioServerTransport } from "@modelcontextprotocol/sdk/server/stdio.js";
33
+ import { CallToolRequestSchema, ListToolsRequestSchema, } from "@modelcontextprotocol/sdk/types.js";
34
+ import { AuthManager } from "./auth/auth-manager.js";
35
+ import { SessionManager } from "./session/session-manager.js";
36
+ import { NotebookLibrary } from "./library/notebook-library.js";
37
+ import { ToolHandlers, buildToolDefinitions } from "./tools/index.js";
38
+ import { ResourceHandlers } from "./resources/resource-handlers.js";
39
+ import { SettingsManager } from "./utils/settings-manager.js";
40
+ import { CliHandler } from "./utils/cli-handler.js";
41
+ import { CONFIG } from "./config.js";
42
+ import { log } from "./utils/logger.js";
43
+ /** Single source of truth for the server version — must match package.json. */
44
+ const SERVER_VERSION = "2.0.0";
45
+ /**
46
+ * Validate that required arguments are present on a tool call.
47
+ * Throws a descriptive error when any required field is missing.
48
+ */
49
+ function validateArgs(args, required, toolName) {
50
+ if (!args) {
51
+ throw new Error(`${toolName}: arguments are required`);
52
+ }
53
+ for (const field of required) {
54
+ if (args[field] === undefined || args[field] === null) {
55
+ throw new Error(`${toolName}: missing required argument '${field}'`);
56
+ }
57
+ }
58
+ }
59
+ /**
60
+ * Main MCP Server Class
61
+ */
62
+ class NotebookLMMCPServer {
63
+ server;
64
+ authManager;
65
+ sessionManager;
66
+ library;
67
+ toolHandlers;
68
+ resourceHandlers;
69
+ settingsManager;
70
+ toolDefinitions;
71
+ constructor() {
72
+ // Initialize MCP Server
73
+ this.server = new Server({
74
+ name: "notebooklm-mcp",
75
+ version: SERVER_VERSION,
76
+ }, {
77
+ capabilities: {
78
+ tools: {},
79
+ resources: {},
80
+ resourceTemplates: {},
81
+ prompts: {},
82
+ completions: {}, // Required for completion/complete support
83
+ logging: {},
84
+ },
85
+ });
86
+ // Initialize managers
87
+ this.authManager = new AuthManager();
88
+ this.sessionManager = new SessionManager(this.authManager);
89
+ this.library = new NotebookLibrary();
90
+ this.settingsManager = new SettingsManager();
91
+ // Initialize handlers
92
+ this.toolHandlers = new ToolHandlers(this.sessionManager, this.authManager, this.library);
93
+ this.resourceHandlers = new ResourceHandlers(this.library);
94
+ // Build and Filter tool definitions
95
+ const allTools = buildToolDefinitions(this.library);
96
+ this.toolDefinitions = this.settingsManager.filterTools(allTools);
97
+ // Setup handlers
98
+ this.setupHandlers();
99
+ this.setupShutdownHandlers();
100
+ const activeSettings = this.settingsManager.getEffectiveSettings();
101
+ log.info("🚀 NotebookLM MCP Server initialized");
102
+ log.info(` Version: ${SERVER_VERSION}`);
103
+ log.info(` Node: ${process.version}`);
104
+ log.info(` Platform: ${process.platform}`);
105
+ log.info(` Profile: ${activeSettings.profile} (${this.toolDefinitions.length} tools active)`);
106
+ }
107
+ /**
108
+ * Setup MCP request handlers
109
+ */
110
+ setupHandlers() {
111
+ // Register Resource Handlers (Resources, Templates, Completions)
112
+ this.resourceHandlers.registerHandlers(this.server);
113
+ // List available tools
114
+ this.server.setRequestHandler(ListToolsRequestSchema, async () => {
115
+ log.info("📋 [MCP] list_tools request received");
116
+ return {
117
+ tools: this.toolDefinitions,
118
+ };
119
+ });
120
+ // Handle tool calls
121
+ this.server.setRequestHandler(CallToolRequestSchema, async (request) => {
122
+ const { name, arguments: args } = request.params;
123
+ const progressToken = args?._meta?.progressToken;
124
+ log.info(`🔧 [MCP] Tool call: ${name}`);
125
+ if (progressToken) {
126
+ log.info(` 📊 Progress token: ${progressToken}`);
127
+ }
128
+ // Create progress callback function
129
+ const sendProgress = async (message, progress, total) => {
130
+ if (progressToken) {
131
+ await this.server.notification({
132
+ method: "notifications/progress",
133
+ params: {
134
+ progressToken,
135
+ message,
136
+ ...(progress !== undefined && { progress }),
137
+ ...(total !== undefined && { total }),
138
+ },
139
+ });
140
+ log.dim(` 📊 Progress: ${message}`);
141
+ }
142
+ };
143
+ try {
144
+ let result;
145
+ switch (name) {
146
+ case "ask_question":
147
+ validateArgs(args, ["question"], "ask_question");
148
+ result = await this.toolHandlers.handleAskQuestion(args, sendProgress);
149
+ break;
150
+ case "add_notebook":
151
+ validateArgs(args, ["url", "name", "description", "topics"], "add_notebook");
152
+ result = await this.toolHandlers.handleAddNotebook(args);
153
+ break;
154
+ case "list_notebooks":
155
+ result = await this.toolHandlers.handleListNotebooks();
156
+ break;
157
+ case "get_notebook":
158
+ validateArgs(args, ["id"], "get_notebook");
159
+ result = await this.toolHandlers.handleGetNotebook(args);
160
+ break;
161
+ case "select_notebook":
162
+ validateArgs(args, ["id"], "select_notebook");
163
+ result = await this.toolHandlers.handleSelectNotebook(args);
164
+ break;
165
+ case "update_notebook":
166
+ result = await this.toolHandlers.handleUpdateNotebook(args);
167
+ break;
168
+ case "remove_notebook":
169
+ result = await this.toolHandlers.handleRemoveNotebook(args);
170
+ break;
171
+ case "search_notebooks":
172
+ result = await this.toolHandlers.handleSearchNotebooks(args);
173
+ break;
174
+ case "get_library_stats":
175
+ result = await this.toolHandlers.handleGetLibraryStats();
176
+ break;
177
+ case "list_sessions":
178
+ result = await this.toolHandlers.handleListSessions();
179
+ break;
180
+ case "close_session":
181
+ validateArgs(args, ["session_id"], "close_session");
182
+ result = await this.toolHandlers.handleCloseSession(args);
183
+ break;
184
+ case "reset_session":
185
+ result = await this.toolHandlers.handleResetSession(args);
186
+ break;
187
+ case "get_health":
188
+ result = await this.toolHandlers.handleGetHealth();
189
+ break;
190
+ case "setup_auth":
191
+ result = await this.toolHandlers.handleSetupAuth(args, sendProgress);
192
+ break;
193
+ case "re_auth":
194
+ result = await this.toolHandlers.handleReAuth(args, sendProgress);
195
+ break;
196
+ // Content Generation Tools
197
+ case "generate_faq":
198
+ result = await this.toolHandlers.handleGenerateFAQ(args, sendProgress);
199
+ break;
200
+ case "generate_briefing":
201
+ result = await this.toolHandlers.handleGenerateBriefing(args, sendProgress);
202
+ break;
203
+ case "generate_timeline":
204
+ result = await this.toolHandlers.handleGenerateTimeline(args, sendProgress);
205
+ break;
206
+ case "generate_outline":
207
+ result = await this.toolHandlers.handleGenerateOutline(args, sendProgress);
208
+ break;
209
+ case "generate_study_guide":
210
+ result = await this.toolHandlers.handleGenerateStudyGuide(args, sendProgress);
211
+ break;
212
+ case "generate_flashcards":
213
+ result = await this.toolHandlers.handleGenerateFlashcards(args, sendProgress);
214
+ break;
215
+ case "generate_quiz":
216
+ result = await this.toolHandlers.handleGenerateQuiz(args, sendProgress);
217
+ break;
218
+ case "generate_mindmap":
219
+ result = await this.toolHandlers.handleGenerateMindMap(args, sendProgress);
220
+ break;
221
+ case "suggest_questions":
222
+ result = await this.toolHandlers.handleSuggestQuestions(args, sendProgress);
223
+ break;
224
+ // Audio Studio Tools
225
+ case "get_audio_status":
226
+ result = await this.toolHandlers.handleGetAudioStatus(args, sendProgress);
227
+ break;
228
+ case "create_audio":
229
+ result = await this.toolHandlers.handleCreateAudio(args, sendProgress);
230
+ break;
231
+ case "update_audio":
232
+ result = await this.toolHandlers.handleUpdateAudio(args, sendProgress);
233
+ break;
234
+ case "delete_audio":
235
+ result = await this.toolHandlers.handleDeleteAudio(args, sendProgress);
236
+ break;
237
+ case "download_audio":
238
+ result = await this.toolHandlers.handleDownloadAudio(args, sendProgress);
239
+ break;
240
+ // Source Management Tools
241
+ case "list_sources":
242
+ result = await this.toolHandlers.handleListSources(args, sendProgress);
243
+ break;
244
+ case "add_url_source":
245
+ validateArgs(args, ["url"], "add_url_source");
246
+ result = await this.toolHandlers.handleAddURLSource(args, sendProgress);
247
+ break;
248
+ case "add_text_source":
249
+ result = await this.toolHandlers.handleAddTextSource(args, sendProgress);
250
+ break;
251
+ case "add_youtube_source":
252
+ result = await this.toolHandlers.handleAddYouTubeSource(args, sendProgress);
253
+ break;
254
+ case "add_drive_source":
255
+ result = await this.toolHandlers.handleAddDriveSource(args, sendProgress);
256
+ break;
257
+ case "delete_source":
258
+ validateArgs(args, ["source_id"], "delete_source");
259
+ result = await this.toolHandlers.handleDeleteSource(args, sendProgress);
260
+ break;
261
+ case "summarize_source":
262
+ result = await this.toolHandlers.handleSummarizeSource(args, sendProgress);
263
+ break;
264
+ // Research Tools
265
+ case "discover_sources":
266
+ result = await this.toolHandlers.handleDiscoverSources(args, sendProgress);
267
+ break;
268
+ case "import_source":
269
+ result = await this.toolHandlers.handleImportSource(args, sendProgress);
270
+ break;
271
+ case "research_topic":
272
+ result = await this.toolHandlers.handleResearchTopic(args, sendProgress);
273
+ break;
274
+ // Notebook CRUD Tools (API-based)
275
+ case "create_notebook_remote":
276
+ result = await this.toolHandlers.handleCreateNotebookRemote(args, sendProgress);
277
+ break;
278
+ case "rename_notebook_remote":
279
+ validateArgs(args, ["notebook_id", "new_title"], "rename_notebook_remote");
280
+ result = await this.toolHandlers.handleRenameNotebookRemote(args, sendProgress);
281
+ break;
282
+ case "delete_notebook_remote":
283
+ validateArgs(args, ["notebook_id"], "delete_notebook_remote");
284
+ result = await this.toolHandlers.handleDeleteNotebookRemote(args, sendProgress);
285
+ break;
286
+ case "add_file_source":
287
+ result = await this.toolHandlers.handleAddFileSource(args, sendProgress);
288
+ break;
289
+ case "cleanup_data":
290
+ result = await this.toolHandlers.handleCleanupData(args);
291
+ break;
292
+ default:
293
+ log.error(`❌ [MCP] Unknown tool: ${name}`);
294
+ return {
295
+ content: [
296
+ {
297
+ type: "text",
298
+ text: JSON.stringify({
299
+ success: false,
300
+ error: `Unknown tool: ${name}`,
301
+ }, null, 2),
302
+ },
303
+ ],
304
+ };
305
+ }
306
+ // Return result
307
+ return {
308
+ content: [
309
+ {
310
+ type: "text",
311
+ text: JSON.stringify(result, null, 2),
312
+ },
313
+ ],
314
+ };
315
+ }
316
+ catch (error) {
317
+ const errorMessage = error instanceof Error ? error.message : String(error);
318
+ log.error(`❌ [MCP] Tool execution error: ${errorMessage}`);
319
+ return {
320
+ content: [
321
+ {
322
+ type: "text",
323
+ text: JSON.stringify({
324
+ success: false,
325
+ error: errorMessage,
326
+ }, null, 2),
327
+ },
328
+ ],
329
+ };
330
+ }
331
+ });
332
+ }
333
+ /**
334
+ * Setup graceful shutdown handlers
335
+ */
336
+ setupShutdownHandlers() {
337
+ let shuttingDown = false;
338
+ const shutdown = async (signal) => {
339
+ if (shuttingDown) {
340
+ return;
341
+ }
342
+ shuttingDown = true;
343
+ log.info(`\n🛑 Received ${signal}, shutting down gracefully...`);
344
+ try {
345
+ // Cleanup tool handlers (closes all sessions)
346
+ await this.toolHandlers.cleanup();
347
+ // Close server
348
+ await this.server.close();
349
+ log.success("✅ Shutdown complete");
350
+ process.exit(0);
351
+ }
352
+ catch (error) {
353
+ log.error(`❌ Error during shutdown: ${error}`);
354
+ process.exit(1);
355
+ }
356
+ };
357
+ const requestShutdown = (signal) => {
358
+ void shutdown(signal);
359
+ };
360
+ process.on("SIGINT", () => requestShutdown("SIGINT"));
361
+ process.on("SIGTERM", () => requestShutdown("SIGTERM"));
362
+ process.on("uncaughtException", (error) => {
363
+ log.error(`💥 Uncaught exception: ${error}`);
364
+ log.error(error.stack || "");
365
+ requestShutdown("uncaughtException");
366
+ });
367
+ process.on("unhandledRejection", (reason, promise) => {
368
+ log.error(`💥 Unhandled rejection at: ${promise}`);
369
+ log.error(`Reason: ${reason}`);
370
+ requestShutdown("unhandledRejection");
371
+ });
372
+ }
373
+ /**
374
+ * Start the MCP server
375
+ */
376
+ async start() {
377
+ log.info("🎯 Starting NotebookLM MCP Server...");
378
+ log.info("");
379
+ log.info("📝 Configuration:");
380
+ log.info(` Config Dir: ${CONFIG.configDir}`);
381
+ log.info(` Data Dir: ${CONFIG.dataDir}`);
382
+ log.info(` Headless: ${CONFIG.headless}`);
383
+ log.info(` Max Sessions: ${CONFIG.maxSessions}`);
384
+ log.info(` Session Timeout: ${CONFIG.sessionTimeout}s`);
385
+ log.info(` Stealth: ${CONFIG.stealthEnabled}`);
386
+ log.info("");
387
+ // Create stdio transport
388
+ const transport = new StdioServerTransport();
389
+ // Connect server to transport
390
+ await this.server.connect(transport);
391
+ log.success("✅ MCP Server connected via stdio");
392
+ log.success("🎉 Ready to receive requests from Claude Code!");
393
+ log.info("");
394
+ log.info("💡 Available tools:");
395
+ for (const tool of this.toolDefinitions) {
396
+ const desc = tool.description ? tool.description.split('\n')[0] : 'No description'; // First line only
397
+ log.info(` - ${tool.name}: ${desc.substring(0, 80)}...`);
398
+ }
399
+ log.info("");
400
+ log.info("📖 For documentation, see: README.md");
401
+ log.info("📖 For MCP details, see: MCP_INFOS.md");
402
+ log.info("");
403
+ }
404
+ }
405
+ /**
406
+ * Main entry point
407
+ */
408
+ async function main() {
409
+ // Handle CLI commands
410
+ const args = process.argv.slice(2);
411
+ if (args.length > 0 && args[0] === "config") {
412
+ const cli = new CliHandler();
413
+ await cli.handleCommand(args);
414
+ process.exit(0);
415
+ }
416
+ // Print banner
417
+ console.error("╔══════════════════════════════════════════════════════════╗");
418
+ console.error("║ ║");
419
+ console.error(`║ NotebookLM MCP Server v${SERVER_VERSION} ║`);
420
+ console.error("║ ║");
421
+ console.error("║ Chat with Gemini 2.5 through NotebookLM via MCP ║");
422
+ console.error("║ ║");
423
+ console.error("╚══════════════════════════════════════════════════════════╝");
424
+ console.error("");
425
+ try {
426
+ const server = new NotebookLMMCPServer();
427
+ await server.start();
428
+ }
429
+ catch (error) {
430
+ log.error(`💥 Fatal error starting server: ${error}`);
431
+ if (error instanceof Error) {
432
+ log.error(error.stack || "");
433
+ }
434
+ process.exit(1);
435
+ }
436
+ }
437
+ // Run the server
438
+ main();
439
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,79 @@
1
+ /**
2
+ * NotebookLM Library Manager
3
+ *
4
+ * Manages a persistent library of NotebookLM notebooks.
5
+ * Allows Claude to autonomously add, remove, and switch between
6
+ * multiple notebooks based on the task at hand.
7
+ */
8
+ import type { NotebookEntry, AddNotebookInput, UpdateNotebookInput, LibraryStats } from "./types.js";
9
+ export declare class NotebookLibrary {
10
+ private libraryPath;
11
+ private library;
12
+ constructor();
13
+ /**
14
+ * Load library from disk, or create default if not exists
15
+ */
16
+ private loadLibrary;
17
+ /**
18
+ * Create default library from current CONFIG
19
+ */
20
+ private createDefaultLibrary;
21
+ /**
22
+ * Save library to disk.
23
+ *
24
+ * Thread-safety note: All library mutation methods (addNotebook, updateNotebook,
25
+ * removeNotebook, etc.) are fully synchronous — they perform no awaits. Node.js
26
+ * is single-threaded, so synchronous code cannot interleave with other event-loop
27
+ * callbacks. The in-memory state (this.library) is therefore always consistent
28
+ * before each save. If any mutation method becomes async in the future, introduce
29
+ * explicit serialization (e.g., a Promise-based write queue) before proceeding.
30
+ */
31
+ private saveLibrary;
32
+ /**
33
+ * Generate a unique ID from a string (slug format).
34
+ * Falls back to a timestamp-based ID when the name contains no alphanumeric
35
+ * characters (e.g., "!!!"), which would otherwise produce an empty slug.
36
+ */
37
+ private generateId;
38
+ /**
39
+ * Add a new notebook to the library
40
+ */
41
+ addNotebook(input: AddNotebookInput): NotebookEntry;
42
+ /**
43
+ * List all notebooks in library
44
+ */
45
+ listNotebooks(): NotebookEntry[];
46
+ /**
47
+ * Get a specific notebook by ID
48
+ */
49
+ getNotebook(id: string): NotebookEntry | null;
50
+ /**
51
+ * Get the currently active notebook
52
+ */
53
+ getActiveNotebook(): NotebookEntry | null;
54
+ /**
55
+ * Select a notebook as active
56
+ */
57
+ selectNotebook(id: string): NotebookEntry;
58
+ /**
59
+ * Update notebook metadata
60
+ */
61
+ updateNotebook(input: UpdateNotebookInput): NotebookEntry;
62
+ /**
63
+ * Remove notebook from library
64
+ */
65
+ removeNotebook(id: string): boolean;
66
+ /**
67
+ * Increment use count for a notebook
68
+ */
69
+ incrementUseCount(id: string): NotebookEntry | null;
70
+ /**
71
+ * Get library statistics
72
+ */
73
+ getStats(): LibraryStats;
74
+ /**
75
+ * Search notebooks by query (searches name, description, topics)
76
+ */
77
+ searchNotebooks(query: string): NotebookEntry[];
78
+ }
79
+ //# sourceMappingURL=notebook-library.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"notebook-library.d.ts","sourceRoot":"","sources":["../../src/library/notebook-library.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAMH,OAAO,KAAK,EACV,aAAa,EAEb,gBAAgB,EAChB,mBAAmB,EACnB,YAAY,EACb,MAAM,YAAY,CAAC;AAEpB,qBAAa,eAAe;IAC1B,OAAO,CAAC,WAAW,CAAS;IAC5B,OAAO,CAAC,OAAO,CAAU;;IAczB;;OAEG;IACH,OAAO,CAAC,WAAW;IAmBnB;;OAEG;IACH,OAAO,CAAC,oBAAoB;IAoC5B;;;;;;;;;OASG;IACH,OAAO,CAAC,WAAW;IAanB;;;;OAIG;IACH,OAAO,CAAC,UAAU;IAuBlB;;OAEG;IACH,WAAW,CAAC,KAAK,EAAE,gBAAgB,GAAG,aAAa;IA8CnD;;OAEG;IACH,aAAa,IAAI,aAAa,EAAE;IAIhC;;OAEG;IACH,WAAW,CAAC,EAAE,EAAE,MAAM,GAAG,aAAa,GAAG,IAAI;IAI7C;;OAEG;IACH,iBAAiB,IAAI,aAAa,GAAG,IAAI;IAOzC;;OAEG;IACH,cAAc,CAAC,EAAE,EAAE,MAAM,GAAG,aAAa;IAwBzC;;OAEG;IACH,cAAc,CAAC,KAAK,EAAE,mBAAmB,GAAG,aAAa;IA4BzD;;OAEG;IACH,cAAc,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO;IAuBnC;;OAEG;IACH,iBAAiB,CAAC,EAAE,EAAE,MAAM,GAAG,aAAa,GAAG,IAAI;IAoBnD;;OAEG;IACH,QAAQ,IAAI,YAAY;IAmBxB;;OAEG;IACH,eAAe,CAAC,KAAK,EAAE,MAAM,GAAG,aAAa,EAAE;CAUhD"}