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.
- package/LICENSE +21 -0
- package/README.md +420 -0
- package/dist/api/batch-execute-client.d.ts +232 -0
- package/dist/api/batch-execute-client.d.ts.map +1 -0
- package/dist/api/batch-execute-client.js +672 -0
- package/dist/api/batch-execute-client.js.map +1 -0
- package/dist/api/content-types.d.ts +44 -0
- package/dist/api/content-types.d.ts.map +1 -0
- package/dist/api/content-types.js +89 -0
- package/dist/api/content-types.js.map +1 -0
- package/dist/api/csrf-manager.d.ts +94 -0
- package/dist/api/csrf-manager.d.ts.map +1 -0
- package/dist/api/csrf-manager.js +178 -0
- package/dist/api/csrf-manager.js.map +1 -0
- package/dist/api/index.d.ts +27 -0
- package/dist/api/index.d.ts.map +1 -0
- package/dist/api/index.js +56 -0
- package/dist/api/index.js.map +1 -0
- package/dist/api/operation-poller.d.ts +67 -0
- package/dist/api/operation-poller.d.ts.map +1 -0
- package/dist/api/operation-poller.js +132 -0
- package/dist/api/operation-poller.js.map +1 -0
- package/dist/api/request-builder.d.ts +196 -0
- package/dist/api/request-builder.d.ts.map +1 -0
- package/dist/api/request-builder.js +371 -0
- package/dist/api/request-builder.js.map +1 -0
- package/dist/api/response-parser.d.ts +124 -0
- package/dist/api/response-parser.d.ts.map +1 -0
- package/dist/api/response-parser.js +595 -0
- package/dist/api/response-parser.js.map +1 -0
- package/dist/api/rpc-ids.d.ts +92 -0
- package/dist/api/rpc-ids.d.ts.map +1 -0
- package/dist/api/rpc-ids.js +138 -0
- package/dist/api/rpc-ids.js.map +1 -0
- package/dist/api/streaming-chat-client.d.ts +50 -0
- package/dist/api/streaming-chat-client.d.ts.map +1 -0
- package/dist/api/streaming-chat-client.js +198 -0
- package/dist/api/streaming-chat-client.js.map +1 -0
- package/dist/api/types.d.ts +318 -0
- package/dist/api/types.d.ts.map +1 -0
- package/dist/api/types.js +22 -0
- package/dist/api/types.js.map +1 -0
- package/dist/auth/auth-manager.d.ts +163 -0
- package/dist/auth/auth-manager.d.ts.map +1 -0
- package/dist/auth/auth-manager.js +1055 -0
- package/dist/auth/auth-manager.js.map +1 -0
- package/dist/auth/cookie-store.d.ts +121 -0
- package/dist/auth/cookie-store.d.ts.map +1 -0
- package/dist/auth/cookie-store.js +283 -0
- package/dist/auth/cookie-store.js.map +1 -0
- package/dist/config.d.ts +89 -0
- package/dist/config.d.ts.map +1 -0
- package/dist/config.js +217 -0
- package/dist/config.js.map +1 -0
- package/dist/errors.d.ts +26 -0
- package/dist/errors.d.ts.map +1 -0
- package/dist/errors.js +41 -0
- package/dist/errors.js.map +1 -0
- package/dist/index.d.ts +32 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +439 -0
- package/dist/index.js.map +1 -0
- package/dist/library/notebook-library.d.ts +79 -0
- package/dist/library/notebook-library.d.ts.map +1 -0
- package/dist/library/notebook-library.js +296 -0
- package/dist/library/notebook-library.js.map +1 -0
- package/dist/library/types.d.ts +67 -0
- package/dist/library/types.d.ts.map +1 -0
- package/dist/library/types.js +8 -0
- package/dist/library/types.js.map +1 -0
- package/dist/operations/content-operations.d.ts +78 -0
- package/dist/operations/content-operations.d.ts.map +1 -0
- package/dist/operations/content-operations.js +162 -0
- package/dist/operations/content-operations.js.map +1 -0
- package/dist/operations/hybrid-executor.d.ts +47 -0
- package/dist/operations/hybrid-executor.d.ts.map +1 -0
- package/dist/operations/hybrid-executor.js +114 -0
- package/dist/operations/hybrid-executor.js.map +1 -0
- package/dist/operations/notebook-crud-operations.d.ts +52 -0
- package/dist/operations/notebook-crud-operations.d.ts.map +1 -0
- package/dist/operations/notebook-crud-operations.js +248 -0
- package/dist/operations/notebook-crud-operations.js.map +1 -0
- package/dist/operations/research-operations.d.ts +42 -0
- package/dist/operations/research-operations.d.ts.map +1 -0
- package/dist/operations/research-operations.js +189 -0
- package/dist/operations/research-operations.js.map +1 -0
- package/dist/operations/source-operations.d.ts +59 -0
- package/dist/operations/source-operations.d.ts.map +1 -0
- package/dist/operations/source-operations.js +280 -0
- package/dist/operations/source-operations.js.map +1 -0
- package/dist/operations/studio-operations.d.ts +98 -0
- package/dist/operations/studio-operations.d.ts.map +1 -0
- package/dist/operations/studio-operations.js +309 -0
- package/dist/operations/studio-operations.js.map +1 -0
- package/dist/resources/resource-handlers.d.ts +22 -0
- package/dist/resources/resource-handlers.d.ts.map +1 -0
- package/dist/resources/resource-handlers.js +216 -0
- package/dist/resources/resource-handlers.js.map +1 -0
- package/dist/session/browser-session.d.ts +113 -0
- package/dist/session/browser-session.d.ts.map +1 -0
- package/dist/session/browser-session.js +670 -0
- package/dist/session/browser-session.js.map +1 -0
- package/dist/session/session-manager.d.ts +88 -0
- package/dist/session/session-manager.d.ts.map +1 -0
- package/dist/session/session-manager.js +314 -0
- package/dist/session/session-manager.js.map +1 -0
- package/dist/session/shared-context-manager.d.ts +107 -0
- package/dist/session/shared-context-manager.d.ts.map +1 -0
- package/dist/session/shared-context-manager.js +447 -0
- package/dist/session/shared-context-manager.js.map +1 -0
- package/dist/tools/definitions/ask-question.d.ts +8 -0
- package/dist/tools/definitions/ask-question.d.ts.map +1 -0
- package/dist/tools/definitions/ask-question.js +213 -0
- package/dist/tools/definitions/ask-question.js.map +1 -0
- package/dist/tools/definitions/content-generation.d.ts +52 -0
- package/dist/tools/definitions/content-generation.d.ts.map +1 -0
- package/dist/tools/definitions/content-generation.js +236 -0
- package/dist/tools/definitions/content-generation.js.map +1 -0
- package/dist/tools/definitions/notebook-crud.d.ts +9 -0
- package/dist/tools/definitions/notebook-crud.d.ts.map +1 -0
- package/dist/tools/definitions/notebook-crud.js +156 -0
- package/dist/tools/definitions/notebook-crud.js.map +1 -0
- package/dist/tools/definitions/notebook-management.d.ts +3 -0
- package/dist/tools/definitions/notebook-management.d.ts.map +1 -0
- package/dist/tools/definitions/notebook-management.js +243 -0
- package/dist/tools/definitions/notebook-management.js.map +1 -0
- package/dist/tools/definitions/research.d.ts +23 -0
- package/dist/tools/definitions/research.d.ts.map +1 -0
- package/dist/tools/definitions/research.js +108 -0
- package/dist/tools/definitions/research.js.map +1 -0
- package/dist/tools/definitions/session-management.d.ts +3 -0
- package/dist/tools/definitions/session-management.d.ts.map +1 -0
- package/dist/tools/definitions/session-management.js +41 -0
- package/dist/tools/definitions/session-management.js.map +1 -0
- package/dist/tools/definitions/source-management.d.ts +39 -0
- package/dist/tools/definitions/source-management.d.ts.map +1 -0
- package/dist/tools/definitions/source-management.js +224 -0
- package/dist/tools/definitions/source-management.js.map +1 -0
- package/dist/tools/definitions/studio.d.ts +36 -0
- package/dist/tools/definitions/studio.d.ts.map +1 -0
- package/dist/tools/definitions/studio.js +153 -0
- package/dist/tools/definitions/studio.js.map +1 -0
- package/dist/tools/definitions/system.d.ts +3 -0
- package/dist/tools/definitions/system.d.ts.map +1 -0
- package/dist/tools/definitions/system.js +143 -0
- package/dist/tools/definitions/system.js.map +1 -0
- package/dist/tools/definitions.d.ts +12 -0
- package/dist/tools/definitions.d.ts.map +1 -0
- package/dist/tools/definitions.js +36 -0
- package/dist/tools/definitions.js.map +1 -0
- package/dist/tools/handlers/content-handlers.d.ts +287 -0
- package/dist/tools/handlers/content-handlers.d.ts.map +1 -0
- package/dist/tools/handlers/content-handlers.js +244 -0
- package/dist/tools/handlers/content-handlers.js.map +1 -0
- package/dist/tools/handlers/notebook-crud-handlers.d.ts +69 -0
- package/dist/tools/handlers/notebook-crud-handlers.d.ts.map +1 -0
- package/dist/tools/handlers/notebook-crud-handlers.js +117 -0
- package/dist/tools/handlers/notebook-crud-handlers.js.map +1 -0
- package/dist/tools/handlers/research-handlers.d.ts +37 -0
- package/dist/tools/handlers/research-handlers.d.ts.map +1 -0
- package/dist/tools/handlers/research-handlers.js +87 -0
- package/dist/tools/handlers/research-handlers.js.map +1 -0
- package/dist/tools/handlers/source-handlers.d.ts +52 -0
- package/dist/tools/handlers/source-handlers.d.ts.map +1 -0
- package/dist/tools/handlers/source-handlers.js +177 -0
- package/dist/tools/handlers/source-handlers.js.map +1 -0
- package/dist/tools/handlers/studio-handlers.d.ts +125 -0
- package/dist/tools/handlers/studio-handlers.d.ts.map +1 -0
- package/dist/tools/handlers/studio-handlers.js +183 -0
- package/dist/tools/handlers/studio-handlers.js.map +1 -0
- package/dist/tools/handlers.d.ts +629 -0
- package/dist/tools/handlers.d.ts.map +1 -0
- package/dist/tools/handlers.js +833 -0
- package/dist/tools/handlers.js.map +1 -0
- package/dist/tools/index.d.ts +8 -0
- package/dist/tools/index.d.ts.map +1 -0
- package/dist/tools/index.js +8 -0
- package/dist/tools/index.js.map +1 -0
- package/dist/types.d.ts +82 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +5 -0
- package/dist/types.js.map +1 -0
- package/dist/utils/cleanup-manager.d.ts +133 -0
- package/dist/utils/cleanup-manager.d.ts.map +1 -0
- package/dist/utils/cleanup-manager.js +673 -0
- package/dist/utils/cleanup-manager.js.map +1 -0
- package/dist/utils/cli-handler.d.ts +16 -0
- package/dist/utils/cli-handler.d.ts.map +1 -0
- package/dist/utils/cli-handler.js +102 -0
- package/dist/utils/cli-handler.js.map +1 -0
- package/dist/utils/logger.d.ts +61 -0
- package/dist/utils/logger.d.ts.map +1 -0
- package/dist/utils/logger.js +92 -0
- package/dist/utils/logger.js.map +1 -0
- package/dist/utils/page-utils.d.ts +54 -0
- package/dist/utils/page-utils.d.ts.map +1 -0
- package/dist/utils/page-utils.js +405 -0
- package/dist/utils/page-utils.js.map +1 -0
- package/dist/utils/settings-manager.d.ts +37 -0
- package/dist/utils/settings-manager.d.ts.map +1 -0
- package/dist/utils/settings-manager.js +120 -0
- package/dist/utils/settings-manager.js.map +1 -0
- package/dist/utils/stealth-utils.d.ts +135 -0
- package/dist/utils/stealth-utils.d.ts.map +1 -0
- package/dist/utils/stealth-utils.js +398 -0
- package/dist/utils/stealth-utils.js.map +1 -0
- 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"}
|