@pan-sec/notebooklm-mcp 1.4.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.
Files changed (145) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +289 -0
  3. package/SECURITY.md +539 -0
  4. package/dist/auth/auth-manager.d.ts +137 -0
  5. package/dist/auth/auth-manager.d.ts.map +1 -0
  6. package/dist/auth/auth-manager.js +984 -0
  7. package/dist/auth/auth-manager.js.map +1 -0
  8. package/dist/auth/mcp-auth.d.ts +102 -0
  9. package/dist/auth/mcp-auth.d.ts.map +1 -0
  10. package/dist/auth/mcp-auth.js +286 -0
  11. package/dist/auth/mcp-auth.js.map +1 -0
  12. package/dist/config.d.ts +89 -0
  13. package/dist/config.d.ts.map +1 -0
  14. package/dist/config.js +216 -0
  15. package/dist/config.js.map +1 -0
  16. package/dist/errors.d.ts +26 -0
  17. package/dist/errors.d.ts.map +1 -0
  18. package/dist/errors.js +41 -0
  19. package/dist/errors.js.map +1 -0
  20. package/dist/index.d.ts +32 -0
  21. package/dist/index.d.ts.map +1 -0
  22. package/dist/index.js +371 -0
  23. package/dist/index.js.map +1 -0
  24. package/dist/library/notebook-library.d.ts +70 -0
  25. package/dist/library/notebook-library.d.ts.map +1 -0
  26. package/dist/library/notebook-library.js +279 -0
  27. package/dist/library/notebook-library.js.map +1 -0
  28. package/dist/library/types.d.ts +67 -0
  29. package/dist/library/types.d.ts.map +1 -0
  30. package/dist/library/types.js +8 -0
  31. package/dist/library/types.js.map +1 -0
  32. package/dist/resources/resource-handlers.d.ts +22 -0
  33. package/dist/resources/resource-handlers.d.ts.map +1 -0
  34. package/dist/resources/resource-handlers.js +216 -0
  35. package/dist/resources/resource-handlers.js.map +1 -0
  36. package/dist/session/browser-session.d.ts +108 -0
  37. package/dist/session/browser-session.d.ts.map +1 -0
  38. package/dist/session/browser-session.js +621 -0
  39. package/dist/session/browser-session.js.map +1 -0
  40. package/dist/session/session-manager.d.ts +77 -0
  41. package/dist/session/session-manager.d.ts.map +1 -0
  42. package/dist/session/session-manager.js +314 -0
  43. package/dist/session/session-manager.js.map +1 -0
  44. package/dist/session/session-timeout.d.ts +122 -0
  45. package/dist/session/session-timeout.d.ts.map +1 -0
  46. package/dist/session/session-timeout.js +281 -0
  47. package/dist/session/session-timeout.js.map +1 -0
  48. package/dist/session/shared-context-manager.d.ts +107 -0
  49. package/dist/session/shared-context-manager.d.ts.map +1 -0
  50. package/dist/session/shared-context-manager.js +447 -0
  51. package/dist/session/shared-context-manager.js.map +1 -0
  52. package/dist/tools/definitions/ask-question.d.ts +8 -0
  53. package/dist/tools/definitions/ask-question.d.ts.map +1 -0
  54. package/dist/tools/definitions/ask-question.js +211 -0
  55. package/dist/tools/definitions/ask-question.js.map +1 -0
  56. package/dist/tools/definitions/notebook-management.d.ts +3 -0
  57. package/dist/tools/definitions/notebook-management.d.ts.map +1 -0
  58. package/dist/tools/definitions/notebook-management.js +243 -0
  59. package/dist/tools/definitions/notebook-management.js.map +1 -0
  60. package/dist/tools/definitions/session-management.d.ts +3 -0
  61. package/dist/tools/definitions/session-management.d.ts.map +1 -0
  62. package/dist/tools/definitions/session-management.js +41 -0
  63. package/dist/tools/definitions/session-management.js.map +1 -0
  64. package/dist/tools/definitions/system.d.ts +3 -0
  65. package/dist/tools/definitions/system.d.ts.map +1 -0
  66. package/dist/tools/definitions/system.js +143 -0
  67. package/dist/tools/definitions/system.js.map +1 -0
  68. package/dist/tools/definitions.d.ts +12 -0
  69. package/dist/tools/definitions.d.ts.map +1 -0
  70. package/dist/tools/definitions.js +26 -0
  71. package/dist/tools/definitions.js.map +1 -0
  72. package/dist/tools/handlers.d.ts +213 -0
  73. package/dist/tools/handlers.d.ts.map +1 -0
  74. package/dist/tools/handlers.js +813 -0
  75. package/dist/tools/handlers.js.map +1 -0
  76. package/dist/tools/index.d.ts +8 -0
  77. package/dist/tools/index.d.ts.map +1 -0
  78. package/dist/tools/index.js +8 -0
  79. package/dist/tools/index.js.map +1 -0
  80. package/dist/types.d.ts +82 -0
  81. package/dist/types.d.ts.map +1 -0
  82. package/dist/types.js +5 -0
  83. package/dist/types.js.map +1 -0
  84. package/dist/utils/audit-logger.d.ts +140 -0
  85. package/dist/utils/audit-logger.d.ts.map +1 -0
  86. package/dist/utils/audit-logger.js +361 -0
  87. package/dist/utils/audit-logger.js.map +1 -0
  88. package/dist/utils/cert-pinning.d.ts +97 -0
  89. package/dist/utils/cert-pinning.d.ts.map +1 -0
  90. package/dist/utils/cert-pinning.js +328 -0
  91. package/dist/utils/cert-pinning.js.map +1 -0
  92. package/dist/utils/cleanup-manager.d.ts +133 -0
  93. package/dist/utils/cleanup-manager.d.ts.map +1 -0
  94. package/dist/utils/cleanup-manager.js +673 -0
  95. package/dist/utils/cleanup-manager.js.map +1 -0
  96. package/dist/utils/cli-handler.d.ts +16 -0
  97. package/dist/utils/cli-handler.d.ts.map +1 -0
  98. package/dist/utils/cli-handler.js +102 -0
  99. package/dist/utils/cli-handler.js.map +1 -0
  100. package/dist/utils/crypto.d.ts +175 -0
  101. package/dist/utils/crypto.d.ts.map +1 -0
  102. package/dist/utils/crypto.js +612 -0
  103. package/dist/utils/crypto.js.map +1 -0
  104. package/dist/utils/logger.d.ts +61 -0
  105. package/dist/utils/logger.d.ts.map +1 -0
  106. package/dist/utils/logger.js +92 -0
  107. package/dist/utils/logger.js.map +1 -0
  108. package/dist/utils/page-utils.d.ts +54 -0
  109. package/dist/utils/page-utils.d.ts.map +1 -0
  110. package/dist/utils/page-utils.js +405 -0
  111. package/dist/utils/page-utils.js.map +1 -0
  112. package/dist/utils/response-validator.d.ts +98 -0
  113. package/dist/utils/response-validator.d.ts.map +1 -0
  114. package/dist/utils/response-validator.js +352 -0
  115. package/dist/utils/response-validator.js.map +1 -0
  116. package/dist/utils/secrets-scanner.d.ts +126 -0
  117. package/dist/utils/secrets-scanner.d.ts.map +1 -0
  118. package/dist/utils/secrets-scanner.js +443 -0
  119. package/dist/utils/secrets-scanner.js.map +1 -0
  120. package/dist/utils/secure-memory.d.ts +130 -0
  121. package/dist/utils/secure-memory.d.ts.map +1 -0
  122. package/dist/utils/secure-memory.js +279 -0
  123. package/dist/utils/secure-memory.js.map +1 -0
  124. package/dist/utils/security.d.ts +83 -0
  125. package/dist/utils/security.d.ts.map +1 -0
  126. package/dist/utils/security.js +272 -0
  127. package/dist/utils/security.js.map +1 -0
  128. package/dist/utils/settings-manager.d.ts +37 -0
  129. package/dist/utils/settings-manager.d.ts.map +1 -0
  130. package/dist/utils/settings-manager.js +125 -0
  131. package/dist/utils/settings-manager.js.map +1 -0
  132. package/dist/utils/stealth-utils.d.ts +135 -0
  133. package/dist/utils/stealth-utils.d.ts.map +1 -0
  134. package/dist/utils/stealth-utils.js +398 -0
  135. package/dist/utils/stealth-utils.js.map +1 -0
  136. package/dist/utils/tool-validation.d.ts +93 -0
  137. package/dist/utils/tool-validation.d.ts.map +1 -0
  138. package/dist/utils/tool-validation.js +277 -0
  139. package/dist/utils/tool-validation.js.map +1 -0
  140. package/docs/SECURITY_IMPLEMENTATION_PLAN.md +437 -0
  141. package/docs/configuration.md +94 -0
  142. package/docs/tools.md +34 -0
  143. package/docs/troubleshooting.md +59 -0
  144. package/docs/usage-guide.md +245 -0
  145. package/package.json +82 -0
package/dist/config.js ADDED
@@ -0,0 +1,216 @@
1
+ /**
2
+ * Configuration for NotebookLM MCP Server
3
+ *
4
+ * Config Priority (highest to lowest):
5
+ * 1. Hardcoded Defaults (works out of the box!)
6
+ * 2. Environment Variables (optional, for advanced users)
7
+ * 3. Tool Parameters (passed by Claude at runtime)
8
+ *
9
+ * No config.json file needed - all settings via ENV or tool parameters!
10
+ */
11
+ import envPaths from "env-paths";
12
+ import fs from "fs";
13
+ import path from "path";
14
+ // Cross-platform data paths (unified without -nodejs suffix)
15
+ // Linux: ~/.local/share/notebooklm-mcp/
16
+ // macOS: ~/Library/Application Support/notebooklm-mcp/
17
+ // Windows: %APPDATA%\notebooklm-mcp\
18
+ // IMPORTANT: Pass empty string suffix to disable envPaths' default '-nodejs' suffix!
19
+ const paths = envPaths("notebooklm-mcp", { suffix: "" });
20
+ /**
21
+ * Google NotebookLM Auth URL (used by setup_auth)
22
+ * This is the base Google login URL that redirects to NotebookLM
23
+ */
24
+ export const NOTEBOOKLM_AUTH_URL = "https://accounts.google.com/v3/signin/identifier?continue=https%3A%2F%2Fnotebooklm.google.com%2F&flowName=GlifWebSignIn&flowEntry=ServiceLogin";
25
+ /**
26
+ * Default Configuration (works out of the box!)
27
+ */
28
+ const DEFAULTS = {
29
+ // NotebookLM
30
+ notebookUrl: "",
31
+ // Browser Settings
32
+ headless: true,
33
+ browserTimeout: 30000,
34
+ viewport: { width: 1024, height: 768 },
35
+ // Session Management
36
+ maxSessions: 10,
37
+ sessionTimeout: 900, // 15 minutes
38
+ // Authentication
39
+ autoLoginEnabled: false,
40
+ loginEmail: "",
41
+ loginPassword: "",
42
+ autoLoginTimeoutMs: 120000, // 2 minutes
43
+ // Stealth Settings
44
+ stealthEnabled: true,
45
+ stealthRandomDelays: true,
46
+ stealthHumanTyping: true,
47
+ stealthMouseMovements: true,
48
+ typingWpmMin: 160,
49
+ typingWpmMax: 240,
50
+ minDelayMs: 100,
51
+ maxDelayMs: 400,
52
+ // Paths (cross-platform via env-paths)
53
+ configDir: paths.config,
54
+ dataDir: paths.data,
55
+ browserStateDir: path.join(paths.data, "browser_state"),
56
+ chromeProfileDir: path.join(paths.data, "chrome_profile"),
57
+ chromeInstancesDir: path.join(paths.data, "chrome_profile_instances"),
58
+ // Library Configuration
59
+ notebookDescription: "General knowledge base",
60
+ notebookTopics: ["General topics"],
61
+ notebookContentTypes: ["documentation", "examples"],
62
+ notebookUseCases: ["General research"],
63
+ // Multi-instance strategy
64
+ profileStrategy: "auto",
65
+ cloneProfileOnIsolated: false,
66
+ cleanupInstancesOnStartup: true,
67
+ cleanupInstancesOnShutdown: true,
68
+ instanceProfileTtlHours: 72,
69
+ instanceProfileMaxCount: 20,
70
+ };
71
+ /**
72
+ * Parse boolean from string (for env vars)
73
+ */
74
+ function parseBoolean(value, defaultValue) {
75
+ if (value === undefined)
76
+ return defaultValue;
77
+ const lower = value.toLowerCase();
78
+ if (lower === "true" || lower === "1")
79
+ return true;
80
+ if (lower === "false" || lower === "0")
81
+ return false;
82
+ return defaultValue;
83
+ }
84
+ /**
85
+ * Parse integer from string (for env vars)
86
+ */
87
+ function parseInteger(value, defaultValue) {
88
+ if (value === undefined)
89
+ return defaultValue;
90
+ const parsed = Number.parseInt(value, 10);
91
+ return Number.isNaN(parsed) ? defaultValue : parsed;
92
+ }
93
+ /**
94
+ * Parse comma-separated array (for env vars)
95
+ */
96
+ function parseArray(value, defaultValue) {
97
+ if (!value)
98
+ return defaultValue;
99
+ return value.split(",").map((s) => s.trim()).filter((s) => s.length > 0);
100
+ }
101
+ /**
102
+ * Apply environment variable overrides (legacy support)
103
+ */
104
+ function applyEnvOverrides(config) {
105
+ return {
106
+ ...config,
107
+ // Override with env vars if present
108
+ notebookUrl: process.env.NOTEBOOK_URL || config.notebookUrl,
109
+ headless: parseBoolean(process.env.HEADLESS, config.headless),
110
+ browserTimeout: parseInteger(process.env.BROWSER_TIMEOUT, config.browserTimeout),
111
+ maxSessions: parseInteger(process.env.MAX_SESSIONS, config.maxSessions),
112
+ sessionTimeout: parseInteger(process.env.SESSION_TIMEOUT, config.sessionTimeout),
113
+ autoLoginEnabled: parseBoolean(process.env.AUTO_LOGIN_ENABLED, config.autoLoginEnabled),
114
+ loginEmail: process.env.LOGIN_EMAIL || config.loginEmail,
115
+ loginPassword: process.env.LOGIN_PASSWORD || config.loginPassword,
116
+ autoLoginTimeoutMs: parseInteger(process.env.AUTO_LOGIN_TIMEOUT_MS, config.autoLoginTimeoutMs),
117
+ stealthEnabled: parseBoolean(process.env.STEALTH_ENABLED, config.stealthEnabled),
118
+ stealthRandomDelays: parseBoolean(process.env.STEALTH_RANDOM_DELAYS, config.stealthRandomDelays),
119
+ stealthHumanTyping: parseBoolean(process.env.STEALTH_HUMAN_TYPING, config.stealthHumanTyping),
120
+ stealthMouseMovements: parseBoolean(process.env.STEALTH_MOUSE_MOVEMENTS, config.stealthMouseMovements),
121
+ typingWpmMin: parseInteger(process.env.TYPING_WPM_MIN, config.typingWpmMin),
122
+ typingWpmMax: parseInteger(process.env.TYPING_WPM_MAX, config.typingWpmMax),
123
+ minDelayMs: parseInteger(process.env.MIN_DELAY_MS, config.minDelayMs),
124
+ maxDelayMs: parseInteger(process.env.MAX_DELAY_MS, config.maxDelayMs),
125
+ notebookDescription: process.env.NOTEBOOK_DESCRIPTION || config.notebookDescription,
126
+ notebookTopics: parseArray(process.env.NOTEBOOK_TOPICS, config.notebookTopics),
127
+ notebookContentTypes: parseArray(process.env.NOTEBOOK_CONTENT_TYPES, config.notebookContentTypes),
128
+ notebookUseCases: parseArray(process.env.NOTEBOOK_USE_CASES, config.notebookUseCases),
129
+ profileStrategy: process.env.NOTEBOOK_PROFILE_STRATEGY || config.profileStrategy,
130
+ cloneProfileOnIsolated: parseBoolean(process.env.NOTEBOOK_CLONE_PROFILE, config.cloneProfileOnIsolated),
131
+ cleanupInstancesOnStartup: parseBoolean(process.env.NOTEBOOK_CLEANUP_ON_STARTUP, config.cleanupInstancesOnStartup),
132
+ cleanupInstancesOnShutdown: parseBoolean(process.env.NOTEBOOK_CLEANUP_ON_SHUTDOWN, config.cleanupInstancesOnShutdown),
133
+ instanceProfileTtlHours: parseInteger(process.env.NOTEBOOK_INSTANCE_TTL_HOURS, config.instanceProfileTtlHours),
134
+ instanceProfileMaxCount: parseInteger(process.env.NOTEBOOK_INSTANCE_MAX_COUNT, config.instanceProfileMaxCount),
135
+ };
136
+ }
137
+ /**
138
+ * Build final configuration
139
+ * Priority: Defaults → Environment Variables → Tool Parameters (at runtime)
140
+ * No config.json files - everything via ENV or tool parameters!
141
+ */
142
+ function buildConfig() {
143
+ return applyEnvOverrides(DEFAULTS);
144
+ }
145
+ /**
146
+ * Global configuration instance
147
+ */
148
+ export const CONFIG = buildConfig();
149
+ /**
150
+ * Ensure all required directories exist
151
+ * NOTE: We do NOT create configDir - it's not needed!
152
+ */
153
+ export function ensureDirectories() {
154
+ const dirs = [
155
+ CONFIG.dataDir,
156
+ CONFIG.browserStateDir,
157
+ CONFIG.chromeProfileDir,
158
+ CONFIG.chromeInstancesDir,
159
+ ];
160
+ for (const dir of dirs) {
161
+ if (!fs.existsSync(dir)) {
162
+ fs.mkdirSync(dir, { recursive: true });
163
+ }
164
+ }
165
+ }
166
+ /**
167
+ * Apply browser options to CONFIG (returns modified copy, doesn't mutate global CONFIG)
168
+ */
169
+ export function applyBrowserOptions(options, legacyShowBrowser) {
170
+ const config = { ...CONFIG };
171
+ // Handle legacy show_browser parameter
172
+ if (legacyShowBrowser !== undefined) {
173
+ config.headless = !legacyShowBrowser;
174
+ }
175
+ // Apply browser_options (takes precedence over legacy parameter)
176
+ if (options) {
177
+ if (options.show !== undefined) {
178
+ config.headless = !options.show;
179
+ }
180
+ if (options.headless !== undefined) {
181
+ config.headless = options.headless;
182
+ }
183
+ if (options.timeout_ms !== undefined) {
184
+ config.browserTimeout = options.timeout_ms;
185
+ }
186
+ if (options.stealth) {
187
+ const s = options.stealth;
188
+ if (s.enabled !== undefined)
189
+ config.stealthEnabled = s.enabled;
190
+ if (s.random_delays !== undefined)
191
+ config.stealthRandomDelays = s.random_delays;
192
+ if (s.human_typing !== undefined)
193
+ config.stealthHumanTyping = s.human_typing;
194
+ if (s.mouse_movements !== undefined)
195
+ config.stealthMouseMovements = s.mouse_movements;
196
+ if (s.typing_wpm_min !== undefined)
197
+ config.typingWpmMin = s.typing_wpm_min;
198
+ if (s.typing_wpm_max !== undefined)
199
+ config.typingWpmMax = s.typing_wpm_max;
200
+ if (s.delay_min_ms !== undefined)
201
+ config.minDelayMs = s.delay_min_ms;
202
+ if (s.delay_max_ms !== undefined)
203
+ config.maxDelayMs = s.delay_max_ms;
204
+ }
205
+ if (options.viewport) {
206
+ config.viewport = {
207
+ width: options.viewport.width ?? config.viewport.width,
208
+ height: options.viewport.height ?? config.viewport.height,
209
+ };
210
+ }
211
+ }
212
+ return config;
213
+ }
214
+ // Create directories on import
215
+ ensureDirectories();
216
+ //# sourceMappingURL=config.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,26 @@
1
+ /**
2
+ * Custom Error Types for NotebookLM MCP Server
3
+ */
4
+ /**
5
+ * Error thrown when NotebookLM rate limit is exceeded
6
+ *
7
+ * Free users have 50 queries/day limit.
8
+ * This error indicates the user should:
9
+ * - Use re_auth tool to switch Google accounts
10
+ * - Wait until tomorrow for quota reset
11
+ * - Upgrade to Google AI Pro/Ultra for higher limits
12
+ */
13
+ export declare class RateLimitError extends Error {
14
+ constructor(message?: string);
15
+ }
16
+ /**
17
+ * Error thrown when authentication fails
18
+ *
19
+ * This error can suggest cleanup workflow for persistent issues.
20
+ * Especially useful when upgrading from old installation (notebooklm-mcp-nodejs).
21
+ */
22
+ export declare class AuthenticationError extends Error {
23
+ suggestCleanup: boolean;
24
+ constructor(message: string, suggestCleanup?: boolean);
25
+ }
26
+ //# sourceMappingURL=errors.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"errors.d.ts","sourceRoot":"","sources":["../src/errors.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH;;;;;;;;GAQG;AACH,qBAAa,cAAe,SAAQ,KAAK;gBAC3B,OAAO,GAAE,MAA2E;CASjG;AAED;;;;;GAKG;AACH,qBAAa,mBAAoB,SAAQ,KAAK;IAC5C,cAAc,EAAE,OAAO,CAAC;gBAEZ,OAAO,EAAE,MAAM,EAAE,cAAc,GAAE,OAAe;CAU7D"}
package/dist/errors.js ADDED
@@ -0,0 +1,41 @@
1
+ /**
2
+ * Custom Error Types for NotebookLM MCP Server
3
+ */
4
+ /**
5
+ * Error thrown when NotebookLM rate limit is exceeded
6
+ *
7
+ * Free users have 50 queries/day limit.
8
+ * This error indicates the user should:
9
+ * - Use re_auth tool to switch Google accounts
10
+ * - Wait until tomorrow for quota reset
11
+ * - Upgrade to Google AI Pro/Ultra for higher limits
12
+ */
13
+ export class RateLimitError extends Error {
14
+ constructor(message = "NotebookLM rate limit reached (50 queries/day for free accounts)") {
15
+ super(message);
16
+ this.name = "RateLimitError";
17
+ // Maintain proper stack trace for where error was thrown (V8 only)
18
+ if (Error.captureStackTrace) {
19
+ Error.captureStackTrace(this, RateLimitError);
20
+ }
21
+ }
22
+ }
23
+ /**
24
+ * Error thrown when authentication fails
25
+ *
26
+ * This error can suggest cleanup workflow for persistent issues.
27
+ * Especially useful when upgrading from old installation (notebooklm-mcp-nodejs).
28
+ */
29
+ export class AuthenticationError extends Error {
30
+ suggestCleanup;
31
+ constructor(message, suggestCleanup = false) {
32
+ super(message);
33
+ this.name = "AuthenticationError";
34
+ this.suggestCleanup = suggestCleanup;
35
+ // Maintain proper stack trace for where error was thrown (V8 only)
36
+ if (Error.captureStackTrace) {
37
+ Error.captureStackTrace(this, AuthenticationError);
38
+ }
39
+ }
40
+ }
41
+ //# sourceMappingURL=errors.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"errors.js","sourceRoot":"","sources":["../src/errors.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH;;;;;;;;GAQG;AACH,MAAM,OAAO,cAAe,SAAQ,KAAK;IACvC,YAAY,UAAkB,kEAAkE;QAC9F,KAAK,CAAC,OAAO,CAAC,CAAC;QACf,IAAI,CAAC,IAAI,GAAG,gBAAgB,CAAC;QAE7B,mEAAmE;QACnE,IAAI,KAAK,CAAC,iBAAiB,EAAE,CAAC;YAC5B,KAAK,CAAC,iBAAiB,CAAC,IAAI,EAAE,cAAc,CAAC,CAAC;QAChD,CAAC;IACH,CAAC;CACF;AAED;;;;;GAKG;AACH,MAAM,OAAO,mBAAoB,SAAQ,KAAK;IAC5C,cAAc,CAAU;IAExB,YAAY,OAAe,EAAE,iBAA0B,KAAK;QAC1D,KAAK,CAAC,OAAO,CAAC,CAAC;QACf,IAAI,CAAC,IAAI,GAAG,qBAAqB,CAAC;QAClC,IAAI,CAAC,cAAc,GAAG,cAAc,CAAC;QAErC,mEAAmE;QACnE,IAAI,KAAK,CAAC,iBAAiB,EAAE,CAAC;YAC5B,KAAK,CAAC,iBAAiB,CAAC,IAAI,EAAE,mBAAmB,CAAC,CAAC;QACrD,CAAC;IACH,CAAC;CACF"}
@@ -0,0 +1,32 @@
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
+ export {};
32
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AAEA;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA4BG"}