@roomi-fields/notebooklm-mcp 1.3.6 → 1.5.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 (138) hide show
  1. package/README.md +69 -34
  2. package/dist/accounts/account-manager.d.ts +163 -0
  3. package/dist/accounts/account-manager.d.ts.map +1 -0
  4. package/dist/accounts/account-manager.js +614 -0
  5. package/dist/accounts/account-manager.js.map +1 -0
  6. package/dist/accounts/auto-login-manager.d.ts +62 -0
  7. package/dist/accounts/auto-login-manager.d.ts.map +1 -0
  8. package/dist/accounts/auto-login-manager.js +537 -0
  9. package/dist/accounts/auto-login-manager.js.map +1 -0
  10. package/dist/accounts/crypto.d.ts +45 -0
  11. package/dist/accounts/crypto.d.ts.map +1 -0
  12. package/dist/accounts/crypto.js +138 -0
  13. package/dist/accounts/crypto.js.map +1 -0
  14. package/dist/accounts/index.d.ts +14 -0
  15. package/dist/accounts/index.d.ts.map +1 -0
  16. package/dist/accounts/index.js +14 -0
  17. package/dist/accounts/index.js.map +1 -0
  18. package/dist/accounts/types.d.ts +103 -0
  19. package/dist/accounts/types.d.ts.map +1 -0
  20. package/dist/accounts/types.js +7 -0
  21. package/dist/accounts/types.js.map +1 -0
  22. package/dist/auth/auth-manager.d.ts +9 -2
  23. package/dist/auth/auth-manager.d.ts.map +1 -1
  24. package/dist/auth/auth-manager.js +60 -6
  25. package/dist/auth/auth-manager.js.map +1 -1
  26. package/dist/auto-discovery/auto-discovery.d.ts.map +1 -1
  27. package/dist/auto-discovery/auto-discovery.js +2 -1
  28. package/dist/auto-discovery/auto-discovery.js.map +1 -1
  29. package/dist/cli/accounts.d.ts +13 -0
  30. package/dist/cli/accounts.d.ts.map +1 -0
  31. package/dist/cli/accounts.js +195 -0
  32. package/dist/cli/accounts.js.map +1 -0
  33. package/dist/config.d.ts.map +1 -1
  34. package/dist/config.js +9 -0
  35. package/dist/config.js.map +1 -1
  36. package/dist/content/content-generator.d.ts +153 -0
  37. package/dist/content/content-generator.d.ts.map +1 -0
  38. package/dist/content/content-generator.js +637 -0
  39. package/dist/content/content-generator.js.map +1 -0
  40. package/dist/content/content-manager.d.ts +364 -0
  41. package/dist/content/content-manager.d.ts.map +1 -0
  42. package/dist/content/content-manager.js +3846 -0
  43. package/dist/content/content-manager.js.map +1 -0
  44. package/dist/content/content-templates.d.ts +183 -0
  45. package/dist/content/content-templates.d.ts.map +1 -0
  46. package/dist/content/content-templates.js +719 -0
  47. package/dist/content/content-templates.js.map +1 -0
  48. package/dist/content/index.d.ts +14 -0
  49. package/dist/content/index.d.ts.map +1 -0
  50. package/dist/content/index.js +14 -0
  51. package/dist/content/index.js.map +1 -0
  52. package/dist/content/types.d.ts +285 -0
  53. package/dist/content/types.d.ts.map +1 -0
  54. package/dist/content/types.js +10 -0
  55. package/dist/content/types.js.map +1 -0
  56. package/dist/errors.d.ts +1 -1
  57. package/dist/errors.d.ts.map +1 -1
  58. package/dist/errors.js.map +1 -1
  59. package/dist/http-wrapper.d.ts +7 -0
  60. package/dist/http-wrapper.d.ts.map +1 -1
  61. package/dist/http-wrapper.js +449 -29
  62. package/dist/http-wrapper.js.map +1 -1
  63. package/dist/index.js +26 -2
  64. package/dist/index.js.map +1 -1
  65. package/dist/library/notebook-library.d.ts +4 -0
  66. package/dist/library/notebook-library.d.ts.map +1 -1
  67. package/dist/library/notebook-library.js +20 -3
  68. package/dist/library/notebook-library.js.map +1 -1
  69. package/dist/session/browser-session.d.ts +35 -8
  70. package/dist/session/browser-session.d.ts.map +1 -1
  71. package/dist/session/browser-session.js +242 -28
  72. package/dist/session/browser-session.js.map +1 -1
  73. package/dist/session/session-manager.d.ts +6 -0
  74. package/dist/session/session-manager.d.ts.map +1 -1
  75. package/dist/session/session-manager.js +46 -14
  76. package/dist/session/session-manager.js.map +1 -1
  77. package/dist/session/shared-context-manager.d.ts +3 -3
  78. package/dist/session/shared-context-manager.d.ts.map +1 -1
  79. package/dist/session/shared-context-manager.js +8 -7
  80. package/dist/session/shared-context-manager.js.map +1 -1
  81. package/dist/stdio-http-proxy.d.ts +24 -0
  82. package/dist/stdio-http-proxy.d.ts.map +1 -0
  83. package/dist/stdio-http-proxy.js +592 -0
  84. package/dist/stdio-http-proxy.js.map +1 -0
  85. package/dist/tools/index.d.ts +106 -1
  86. package/dist/tools/index.d.ts.map +1 -1
  87. package/dist/tools/index.js +1028 -7
  88. package/dist/tools/index.js.map +1 -1
  89. package/dist/types.d.ts +81 -17
  90. package/dist/types.d.ts.map +1 -1
  91. package/dist/utils/citation-extractor.d.ts +66 -0
  92. package/dist/utils/citation-extractor.d.ts.map +1 -0
  93. package/dist/utils/citation-extractor.js +492 -0
  94. package/dist/utils/citation-extractor.js.map +1 -0
  95. package/dist/utils/page-utils.d.ts +8 -0
  96. package/dist/utils/page-utils.d.ts.map +1 -1
  97. package/dist/utils/page-utils.js +112 -8
  98. package/dist/utils/page-utils.js.map +1 -1
  99. package/docs/ARCHITECTURE_MIGRATION_STUDY.md +894 -0
  100. package/docs/CHROME_PROFILE_LIMITATION.md +15 -1
  101. package/docs/MULTI_ACCOUNT_SYSTEM.md +304 -0
  102. package/package.json +10 -10
  103. package/dist/__tests__/cleanup-manager.test.d.ts +0 -2
  104. package/dist/__tests__/cleanup-manager.test.d.ts.map +0 -1
  105. package/dist/__tests__/cleanup-manager.test.js +0 -341
  106. package/dist/__tests__/cleanup-manager.test.js.map +0 -1
  107. package/dist/__tests__/config-parsing.test.d.ts +0 -2
  108. package/dist/__tests__/config-parsing.test.d.ts.map +0 -1
  109. package/dist/__tests__/config-parsing.test.js +0 -338
  110. package/dist/__tests__/config-parsing.test.js.map +0 -1
  111. package/dist/__tests__/config.test.d.ts +0 -2
  112. package/dist/__tests__/config.test.d.ts.map +0 -1
  113. package/dist/__tests__/config.test.js +0 -267
  114. package/dist/__tests__/config.test.js.map +0 -1
  115. package/dist/__tests__/errors.test.d.ts +0 -2
  116. package/dist/__tests__/errors.test.d.ts.map +0 -1
  117. package/dist/__tests__/errors.test.js +0 -166
  118. package/dist/__tests__/errors.test.js.map +0 -1
  119. package/dist/__tests__/logger.test.d.ts +0 -2
  120. package/dist/__tests__/logger.test.d.ts.map +0 -1
  121. package/dist/__tests__/logger.test.js +0 -324
  122. package/dist/__tests__/logger.test.js.map +0 -1
  123. package/dist/__tests__/page-utils.test.d.ts +0 -2
  124. package/dist/__tests__/page-utils.test.d.ts.map +0 -1
  125. package/dist/__tests__/page-utils.test.js +0 -349
  126. package/dist/__tests__/page-utils.test.js.map +0 -1
  127. package/dist/__tests__/setup-verification.test.d.ts +0 -2
  128. package/dist/__tests__/setup-verification.test.d.ts.map +0 -1
  129. package/dist/__tests__/setup-verification.test.js +0 -15
  130. package/dist/__tests__/setup-verification.test.js.map +0 -1
  131. package/dist/__tests__/stealth-utils.test.d.ts +0 -2
  132. package/dist/__tests__/stealth-utils.test.d.ts.map +0 -1
  133. package/dist/__tests__/stealth-utils.test.js +0 -413
  134. package/dist/__tests__/stealth-utils.test.js.map +0 -1
  135. package/dist/__tests__/types.test.d.ts +0 -2
  136. package/dist/__tests__/types.test.d.ts.map +0 -1
  137. package/dist/__tests__/types.test.js +0 -461
  138. package/dist/__tests__/types.test.js.map +0 -1
package/README.md CHANGED
@@ -4,7 +4,7 @@
4
4
 
5
5
  > **Forked from** [PleasePrompto/notebooklm-mcp](https://github.com/PleasePrompto/notebooklm-mcp)
6
6
 
7
- **Chat directly with NotebookLM for zero-hallucination answers based on your own notebooks**
7
+ **Full automation of Google NotebookLM: Q&A, audio podcasts, and source management**
8
8
 
9
9
  <!-- Badges -->
10
10
 
@@ -18,33 +18,75 @@
18
18
 
19
19
  ---
20
20
 
21
- ## Why NotebookLM?
21
+ ## Features
22
22
 
23
- | Approach | Token Cost | Hallucinations | Answer Quality |
24
- | ------------------- | ----------- | ----------------------------- | -------------------- |
25
- | Feed docs to Claude | Very high | Yes - fills gaps | Variable |
26
- | Web search | Medium | High - unreliable sources | Hit or miss |
27
- | Local RAG | Medium-High | Medium - retrieval gaps | Depends on setup |
28
- | **NotebookLM MCP** | **Minimal** | **Zero** - refuses if unknown | **Expert synthesis** |
23
+ ### Q&A with Citations
29
24
 
30
- NotebookLM is pre-indexed by Gemini, provides citation-backed answers, and requires no infrastructure.
25
+ - **Ask questions** to NotebookLM and get accurate, citation-backed answers
26
+ - **Source citation extraction** with 5 formats: none, inline, footnotes, json, expanded
27
+ - **Session management** for multi-turn conversations
28
+
29
+ ### Content Generation
30
+
31
+ Generate multiple content types from your notebook sources:
32
+
33
+ | Content Type | Formats | Options |
34
+ | ------------------ | ------------------------ | ---------------------------------------------- |
35
+ | **Audio Overview** | Podcast-style discussion | Language (80+), custom instructions |
36
+ | **Video** | Brief, Explainer | 6 visual styles, language, custom instructions |
37
+ | **Infographic** | Horizontal, Vertical | Language, custom instructions |
38
+ | **Report** | Summary, Detailed | Language, custom instructions |
39
+ | **Presentation** | Overview, Detailed | Language, custom instructions |
40
+ | **Data Table** | Simple, Detailed | Language, custom instructions |
41
+
42
+ **Video Visual Styles**: classroom, documentary, animated, corporate, cinematic, minimalist
43
+
44
+ ### Content Download
45
+
46
+ - **Download Audio** — WAV audio files
47
+ - **Download Video** — MP4 video files
48
+ - **Download Infographic** — PNG image files
49
+ - Text-based content (report, presentation, data_table) is returned in the API response
50
+
51
+ ### Source Management
52
+
53
+ - **Add sources**: Files (PDF, TXT, DOCX), URLs, Text, YouTube videos, Google Drive
54
+ - **List sources**: View all sources in a notebook
55
+
56
+ ### Notebook Library
57
+
58
+ - **Multi-notebook management** with validation and smart selection
59
+ - **Auto-discovery**: Automatically generate metadata via NotebookLM queries
60
+ - **Search notebooks** by keyword in name, description, or topics
61
+
62
+ ### Integration Options
63
+
64
+ - **MCP Protocol** — Claude Code, Cursor, Codex, any MCP client
65
+ - **HTTP REST API** — n8n, Zapier, Make.com, custom integrations
31
66
 
32
67
  ---
33
68
 
34
69
  ## Quick Start
35
70
 
71
+ > ⚠️ **npm registry temporarily unavailable** - Install from GitHub instead (see below)
72
+
36
73
  ### Option 1: MCP Mode (Claude Code, Cursor, Codex)
37
74
 
38
75
  ```bash
76
+ # Clone and build locally
77
+ git clone https://github.com/roomi-fields/notebooklm-mcp.git
78
+ cd notebooklm-mcp
79
+ npm install && npm run build
80
+
39
81
  # Claude Code
40
- claude mcp add notebooklm npx @roomi-fields/notebooklm-mcp@latest
82
+ claude mcp add notebooklm node /path/to/notebooklm-mcp/dist/index.js
41
83
 
42
84
  # Cursor - add to ~/.cursor/mcp.json
43
85
  {
44
86
  "mcpServers": {
45
87
  "notebooklm": {
46
- "command": "npx",
47
- "args": ["-y", "@roomi-fields/notebooklm-mcp@latest"]
88
+ "command": "node",
89
+ "args": ["/path/to/notebooklm-mcp/dist/index.js"]
48
90
  }
49
91
  }
50
92
  }
@@ -82,36 +124,25 @@ curl -X POST http://localhost:3000/ask \
82
124
  | [Troubleshooting](./deployment/docs/05-TROUBLESHOOTING.md) | Common issues and solutions |
83
125
  | [Notebook Library](./deployment/docs/06-NOTEBOOK-LIBRARY.md) | Multi-notebook management |
84
126
  | [Auto-Discovery](./deployment/docs/07-AUTO-DISCOVERY.md) | Autonomous metadata generation |
85
- | [Chrome Limitation](./docs/CHROME_PROFILE_LIMITATION.md) | HTTP/MCP simultaneous mode issue |
86
-
87
- ---
88
-
89
- ## Core Features
90
-
91
- - **Zero Hallucinations** — NotebookLM refuses to answer if info isn't in your docs
92
- - **Multi-Notebook Library** — Manage multiple notebooks with validation and smart selection
93
- - **Auto-Discovery** — Automatically generate metadata via NotebookLM queries
94
- - **HTTP REST API** — Use from n8n, Zapier, Make.com, or any HTTP client
95
- - **Daemon Mode** — Run as background process with PM2 (`npm run daemon:start`)
96
- - **Cross-Tool** — Works with Claude Code, Cursor, Codex, and any MCP client
127
+ | [Multi-Interface](./deployment/docs/09-MULTI-INTERFACE.md) | Run Claude Desktop + HTTP simultaneously |
128
+ | [Chrome Limitation](./docs/CHROME_PROFILE_LIMITATION.md) | Profile locking (solved in v1.3.6+) |
97
129
 
98
130
  ---
99
131
 
100
- ## Architecture
132
+ ## Roadmap
101
133
 
102
- ```
103
- Your Task → Agent/n8n → MCP/HTTP Server → Chrome Automation → NotebookLM → Gemini 2.5 → Your Docs
104
-
105
- Accurate Output
106
- ```
134
+ See [ROADMAP.md](./ROADMAP.md) for planned features and version history.
107
135
 
108
- ---
136
+ **Latest releases:**
109
137
 
110
- ## Roadmap
138
+ - **v1.5.0** — Complete Studio content generation (video, infographic, presentation, data_table) + Notes management + Delete sources
139
+ - **v1.4.0** — Content management (sources, audio, generation) + Multi-account
140
+ - **v1.3.7** — Source citation extraction (5 formats)
111
141
 
112
- See [ROADMAP.md](./ROADMAP.md) for planned features and version history.
142
+ **Not yet implemented:**
113
143
 
114
- **Next up (v1.4.0):** Separate Chrome profiles to enable HTTP + MCP modes simultaneously.
144
+ - Discover sources (Web/Drive search with Fast/Deep modes)
145
+ - Edit notes (create, delete, and convert are implemented)
115
146
 
116
147
  ---
117
148
 
@@ -133,6 +164,10 @@ See [CONTRIBUTING.md](./CONTRIBUTING.md) for guidelines.
133
164
 
134
165
  MIT — Use freely in your projects. See [LICENSE](./LICENSE).
135
166
 
167
+ ## Author
168
+
169
+ **Romain Peyrichou** — [@roomi-fields](https://github.com/roomi-fields)
170
+
136
171
  ---
137
172
 
138
173
  <details>
@@ -0,0 +1,163 @@
1
+ /**
2
+ * Account Manager
3
+ *
4
+ * Manages multiple Google accounts for NotebookLM with:
5
+ * - Account pool with rotation strategies
6
+ * - Encrypted credential storage
7
+ * - Quota tracking per account
8
+ * - Session health monitoring
9
+ * - Auto-login when sessions expire
10
+ */
11
+ import type { Account, AccountHealth, AccountSelection, RotationStrategy } from './types.js';
12
+ export declare class AccountManager {
13
+ private configPath;
14
+ private accountsDir;
15
+ private config;
16
+ private accounts;
17
+ private lastUsedIndex;
18
+ constructor();
19
+ /**
20
+ * Initialize the account manager
21
+ */
22
+ initialize(): Promise<void>;
23
+ /**
24
+ * Ensure required directories exist
25
+ */
26
+ private ensureDirectories;
27
+ /**
28
+ * Load accounts configuration
29
+ */
30
+ private loadConfig;
31
+ /**
32
+ * Save accounts configuration
33
+ */
34
+ private saveConfig;
35
+ /**
36
+ * Load all accounts from disk
37
+ */
38
+ private loadAccounts;
39
+ /**
40
+ * Load a single account
41
+ */
42
+ private loadAccount;
43
+ /**
44
+ * Create fresh quota (resets at midnight UTC)
45
+ */
46
+ private createFreshQuota;
47
+ /**
48
+ * Add a new account
49
+ */
50
+ addAccount(email: string, password: string, totpSecret?: string, options?: {
51
+ priority?: number;
52
+ notes?: string;
53
+ }): Promise<string>;
54
+ /**
55
+ * Remove an account
56
+ */
57
+ removeAccount(accountId: string): Promise<boolean>;
58
+ /**
59
+ * List all accounts
60
+ */
61
+ listAccounts(): Account[];
62
+ /**
63
+ * Get account by ID
64
+ */
65
+ getAccount(accountId: string): Account | undefined;
66
+ /**
67
+ * Get credentials for an account
68
+ */
69
+ getCredentials(accountId: string): Promise<{
70
+ email: string;
71
+ password: string;
72
+ totpSecret?: string;
73
+ } | null>;
74
+ /**
75
+ * Get the best available account based on rotation strategy
76
+ * @param excludeAccountId Optional account ID to exclude (e.g., rate-limited account)
77
+ */
78
+ getBestAccount(excludeAccountId?: string): Promise<AccountSelection | null>;
79
+ /**
80
+ * Get accounts that are available for use
81
+ */
82
+ private getAvailableAccounts;
83
+ /**
84
+ * Select account with most remaining quota
85
+ */
86
+ private selectLeastUsed;
87
+ /**
88
+ * Select account using round-robin
89
+ */
90
+ private selectRoundRobin;
91
+ /**
92
+ * Select account by priority (failover)
93
+ */
94
+ private selectFailover;
95
+ /**
96
+ * Record a query usage for an account
97
+ */
98
+ recordUsage(accountId: string): Promise<void>;
99
+ /**
100
+ * Mark account as rate-limited (quota exhausted)
101
+ * This ensures the account won't be selected again until quota resets
102
+ */
103
+ markRateLimited(accountId: string): Promise<void>;
104
+ /**
105
+ * Save the ID of the currently active account
106
+ * This is used to identify which account is currently loaded in the main profile
107
+ */
108
+ saveCurrentAccountId(accountId: string): Promise<void>;
109
+ /**
110
+ * Get the ID of the currently active account
111
+ * Returns null if no account is set or file doesn't exist
112
+ */
113
+ getCurrentAccountId(): Promise<string | null>;
114
+ /**
115
+ * Record a login failure
116
+ */
117
+ recordLoginFailure(accountId: string, error: string): Promise<void>;
118
+ /**
119
+ * Record a successful login
120
+ */
121
+ recordLoginSuccess(accountId: string): Promise<void>;
122
+ /**
123
+ * Update session status for an account
124
+ */
125
+ updateSessionStatus(accountId: string, status: 'valid' | 'expiring' | 'expired'): Promise<void>;
126
+ /**
127
+ * Check health of all accounts
128
+ */
129
+ healthCheck(): Promise<AccountHealth[]>;
130
+ /**
131
+ * Check health of a single account
132
+ */
133
+ private checkAccountHealth;
134
+ /**
135
+ * Get current rotation strategy
136
+ */
137
+ getRotationStrategy(): RotationStrategy;
138
+ /**
139
+ * Set rotation strategy
140
+ */
141
+ setRotationStrategy(strategy: RotationStrategy): Promise<void>;
142
+ /**
143
+ * Check if auto-login is enabled
144
+ */
145
+ isAutoLoginEnabled(): boolean;
146
+ /**
147
+ * Enable/disable auto-login
148
+ */
149
+ setAutoLoginEnabled(enabled: boolean): Promise<void>;
150
+ /**
151
+ * Get account count
152
+ */
153
+ getAccountCount(): number;
154
+ /**
155
+ * Check if any accounts are configured
156
+ */
157
+ hasAccounts(): boolean;
158
+ }
159
+ /**
160
+ * Get or create the account manager instance
161
+ */
162
+ export declare function getAccountManager(): Promise<AccountManager>;
163
+ //# sourceMappingURL=account-manager.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"account-manager.d.ts","sourceRoot":"","sources":["../../src/accounts/account-manager.ts"],"names":[],"mappings":"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"}