@roomi-fields/notebooklm-mcp 1.3.4 → 1.3.5

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 (96) hide show
  1. package/README.md +764 -715
  2. package/dist/__tests__/cleanup-manager.test.d.ts +2 -0
  3. package/dist/__tests__/cleanup-manager.test.d.ts.map +1 -0
  4. package/dist/__tests__/cleanup-manager.test.js +341 -0
  5. package/dist/__tests__/cleanup-manager.test.js.map +1 -0
  6. package/dist/__tests__/config-parsing.test.d.ts +2 -0
  7. package/dist/__tests__/config-parsing.test.d.ts.map +1 -0
  8. package/dist/__tests__/config-parsing.test.js +338 -0
  9. package/dist/__tests__/config-parsing.test.js.map +1 -0
  10. package/dist/__tests__/config.test.d.ts +2 -0
  11. package/dist/__tests__/config.test.d.ts.map +1 -0
  12. package/dist/__tests__/config.test.js +267 -0
  13. package/dist/__tests__/config.test.js.map +1 -0
  14. package/dist/__tests__/errors.test.d.ts +2 -0
  15. package/dist/__tests__/errors.test.d.ts.map +1 -0
  16. package/dist/__tests__/errors.test.js +166 -0
  17. package/dist/__tests__/errors.test.js.map +1 -0
  18. package/dist/__tests__/logger.test.d.ts +2 -0
  19. package/dist/__tests__/logger.test.d.ts.map +1 -0
  20. package/dist/__tests__/logger.test.js +324 -0
  21. package/dist/__tests__/logger.test.js.map +1 -0
  22. package/dist/__tests__/page-utils.test.d.ts +2 -0
  23. package/dist/__tests__/page-utils.test.d.ts.map +1 -0
  24. package/dist/__tests__/page-utils.test.js +349 -0
  25. package/dist/__tests__/page-utils.test.js.map +1 -0
  26. package/dist/__tests__/setup-verification.test.d.ts +2 -0
  27. package/dist/__tests__/setup-verification.test.d.ts.map +1 -0
  28. package/dist/__tests__/setup-verification.test.js +15 -0
  29. package/dist/__tests__/setup-verification.test.js.map +1 -0
  30. package/dist/__tests__/stealth-utils.test.d.ts +2 -0
  31. package/dist/__tests__/stealth-utils.test.d.ts.map +1 -0
  32. package/dist/__tests__/stealth-utils.test.js +413 -0
  33. package/dist/__tests__/stealth-utils.test.js.map +1 -0
  34. package/dist/__tests__/types.test.d.ts +2 -0
  35. package/dist/__tests__/types.test.d.ts.map +1 -0
  36. package/dist/__tests__/types.test.js +461 -0
  37. package/dist/__tests__/types.test.js.map +1 -0
  38. package/dist/auth/auth-manager.d.ts +2 -2
  39. package/dist/auth/auth-manager.d.ts.map +1 -1
  40. package/dist/auth/auth-manager.js +147 -145
  41. package/dist/auth/auth-manager.js.map +1 -1
  42. package/dist/auto-discovery/auto-discovery.d.ts.map +1 -1
  43. package/dist/auto-discovery/auto-discovery.js +17 -17
  44. package/dist/auto-discovery/auto-discovery.js.map +1 -1
  45. package/dist/cli/de-auth.js +19 -19
  46. package/dist/cli/help.js +60 -60
  47. package/dist/cli/setup-auth.js +39 -39
  48. package/dist/config.d.ts +1 -1
  49. package/dist/config.d.ts.map +1 -1
  50. package/dist/config.js +35 -20
  51. package/dist/config.js.map +1 -1
  52. package/dist/errors.d.ts.map +1 -1
  53. package/dist/errors.js +3 -3
  54. package/dist/errors.js.map +1 -1
  55. package/dist/http-wrapper.js +36 -30
  56. package/dist/http-wrapper.js.map +1 -1
  57. package/dist/index.js +104 -102
  58. package/dist/index.js.map +1 -1
  59. package/dist/library/notebook-library.d.ts +2 -2
  60. package/dist/library/notebook-library.d.ts.map +1 -1
  61. package/dist/library/notebook-library.js +24 -24
  62. package/dist/library/notebook-library.js.map +1 -1
  63. package/dist/session/browser-session.d.ts +4 -4
  64. package/dist/session/browser-session.d.ts.map +1 -1
  65. package/dist/session/browser-session.js +59 -55
  66. package/dist/session/browser-session.js.map +1 -1
  67. package/dist/session/session-manager.d.ts +3 -3
  68. package/dist/session/session-manager.d.ts.map +1 -1
  69. package/dist/session/session-manager.js +14 -14
  70. package/dist/session/session-manager.js.map +1 -1
  71. package/dist/session/shared-context-manager.d.ts +2 -2
  72. package/dist/session/shared-context-manager.d.ts.map +1 -1
  73. package/dist/session/shared-context-manager.js +60 -56
  74. package/dist/session/shared-context-manager.js.map +1 -1
  75. package/dist/tools/index.d.ts +6 -6
  76. package/dist/tools/index.d.ts.map +1 -1
  77. package/dist/tools/index.js +505 -505
  78. package/dist/tools/index.js.map +1 -1
  79. package/dist/types.d.ts +2 -2
  80. package/dist/utils/cleanup-manager.d.ts +1 -1
  81. package/dist/utils/cleanup-manager.d.ts.map +1 -1
  82. package/dist/utils/cleanup-manager.js +90 -92
  83. package/dist/utils/cleanup-manager.js.map +1 -1
  84. package/dist/utils/logger.d.ts +1 -2
  85. package/dist/utils/logger.d.ts.map +1 -1
  86. package/dist/utils/logger.js +15 -15
  87. package/dist/utils/page-utils.d.ts +1 -1
  88. package/dist/utils/page-utils.d.ts.map +1 -1
  89. package/dist/utils/page-utils.js +30 -30
  90. package/dist/utils/page-utils.js.map +1 -1
  91. package/dist/utils/stealth-utils.d.ts +2 -2
  92. package/dist/utils/stealth-utils.d.ts.map +1 -1
  93. package/dist/utils/stealth-utils.js +13 -13
  94. package/dist/utils/stealth-utils.js.map +1 -1
  95. package/docs/CHROME_PROFILE_LIMITATION.md +229 -212
  96. package/package.json +107 -79
@@ -1,212 +1,229 @@
1
- # Chrome Profile Limitation
2
-
3
- ## 🚨 Current Limitation (v1.3.2)
4
-
5
- **The HTTP server and MCP stdio modes cannot run simultaneously** due to Chrome profile locking.
6
-
7
- ### Why This Happens
8
-
9
- The NotebookLM MCP server uses a persistent Chrome profile to maintain authentication between sessions. This profile is stored at:
10
-
11
- ```
12
- Windows: C:\Users\<username>\AppData\Local\notebooklm-mcp\Data\chrome_profile
13
- Linux: ~/.local/share/notebooklm-mcp/chrome_profile
14
- macOS: ~/Library/Application Support/notebooklm-mcp/chrome_profile
15
- ```
16
-
17
- **The problem:** Chrome can only open a profile in one instance at a time. When you try to run both:
18
- - HTTP server (via `npm run daemon:start` or `npm run start:http`)
19
- - MCP stdio server (via Claude Desktop, Cursor, etc.)
20
-
21
- The second instance will fail to launch Chrome with this error:
22
- ```
23
- Error: browserType.launchPersistentContext: Target page, context or browser has been closed
24
- ```
25
-
26
- ### Who Is Affected?
27
-
28
- | Scenario | Affected? | Why |
29
- |----------|-----------|-----|
30
- | **Single mode user** | No | Only runs one server at a time |
31
- | **HTTP-only user** | No | Only uses HTTP server for n8n/Zapier |
32
- | **MCP-only user** | ❌ No | Only uses Claude Desktop/Cursor |
33
- | **Dual mode user** | Yes | Wants both HTTP API and Claude Desktop integration |
34
-
35
- ### Current Workarounds
36
-
37
- #### Option A: Use HTTP Server Only
38
- ```bash
39
- # Start HTTP server
40
- npm run daemon:start
41
-
42
- # Stop MCP stdio server (remove from Claude Desktop config)
43
- # Use HTTP API for all integrations (n8n, Zapier, custom apps)
44
- ```
45
-
46
- #### Option B: Use MCP Stdio Only
47
- ```bash
48
- # Stop HTTP server
49
- npm run daemon:stop
50
-
51
- # Use only Claude Desktop/Cursor/Codex integration
52
- ```
53
-
54
- #### Option C: Switch Between Modes
55
- ```bash
56
- # For n8n workflows
57
- npm run daemon:start
58
-
59
- # For Claude Desktop work
60
- npm run daemon:stop
61
- # Then restart Claude Desktop
62
- ```
63
-
64
- ## 🔮 Planned Solution (v1.4.0+)
65
-
66
- ### Option 1: Separate Chrome Profiles by Mode ⭐ (Selected)
67
-
68
- **Implementation:** Detect the runtime mode and use different Chrome profiles.
69
-
70
- ```typescript
71
- // Automatic profile detection based on mode
72
- const getProfilePath = () => {
73
- const baseDir = getDataDirectory();
74
- const mode = process.env.MCP_MODE || (process.stdout.isTTY ? 'stdio' : 'http');
75
-
76
- return {
77
- stdio: path.join(baseDir, 'chrome_profile_stdio'), // For Claude Desktop
78
- http: path.join(baseDir, 'chrome_profile_http'), // For HTTP server
79
- }[mode];
80
- };
81
- ```
82
-
83
- **Benefits:**
84
- - ✅ Both modes can run simultaneously
85
- - ✅ No user configuration needed
86
- - ✅ Separate authentication per mode
87
- - ✅ Simple implementation
88
-
89
- **Trade-offs:**
90
- - Each mode needs separate authentication (one-time setup)
91
- - Two Chrome profiles consume more disk space (~100-200MB each)
92
-
93
- ### Option 2: Shared Session via IPC
94
-
95
- **Implementation:** HTTP server becomes the master, stdio clients connect to it.
96
-
97
- **Benefits:**
98
- - Single Chrome instance
99
- - ✅ Shared authentication
100
-
101
- **Trade-offs:**
102
- - Complex architecture
103
- - ❌ HTTP server must be running for stdio to work
104
- - ❌ Requires inter-process communication
105
-
106
- ### Option 3: Better Error Messages
107
-
108
- **Implementation:** Detect profile lock and show helpful error.
109
-
110
- **Benefits:**
111
- - Clear user guidance
112
-
113
- **Trade-offs:**
114
- - ❌ Doesn't solve the root problem
115
- - Users still can't run both modes
116
-
117
- ## 🛠️ Implementation Plan
118
-
119
- ### Phase 1: Separate Chrome Profiles (v1.4.0)
120
-
121
- **Changes:**
122
- 1. Add `MCP_MODE` environment variable detection
123
- 2. Create mode-specific profile directories
124
- 3. Update authentication flow to use correct profile
125
- 4. Update documentation
126
-
127
- **Code locations:**
128
- - `src/auth/shared-context-manager.ts` - Profile path logic
129
- - `src/config.ts` - Mode detection
130
- - `src/index.ts` - HTTP server mode flag
131
- - `src/http-wrapper.ts` - HTTP mode environment
132
-
133
- **Backwards compatibility:**
134
- - Existing `chrome_profile` directory will be migrated to `chrome_profile_stdio`
135
- - HTTP server will create new `chrome_profile_http`
136
- - Users will need to re-authenticate HTTP mode once
137
-
138
- ### Phase 2: Migration & Testing
139
-
140
- **Migration script:**
141
- ```typescript
142
- // Auto-migrate existing profile to stdio mode
143
- if (exists('chrome_profile') && !exists('chrome_profile_stdio')) {
144
- rename('chrome_profile', 'chrome_profile_stdio');
145
- log('Migrated existing profile to stdio mode');
146
- }
147
- ```
148
-
149
- **Testing checklist:**
150
- - [ ] HTTP server starts with separate profile
151
- - [ ] MCP stdio starts with separate profile
152
- - [ ] Both can run simultaneously
153
- - [ ] Authentication works independently in each mode
154
- - [ ] Existing users migrate smoothly
155
- - [ ] Documentation updated
156
-
157
- ### Phase 3: Documentation Updates
158
-
159
- **Files to update:**
160
- - `README.md` - Remove limitation warning
161
- - `deployment/docs/01-INSTALL.md` - Update installation flow
162
- - `deployment/docs/05-TROUBLESHOOTING.md` - Update troubleshooting
163
- - `CHANGELOG.md` - Document breaking changes
164
-
165
- ## 📝 For Developers
166
-
167
- ### Testing the Fix Locally
168
-
169
- ```bash
170
- # Terminal 1: Start HTTP server
171
- MCP_MODE=http npm run start:http
172
-
173
- # Terminal 2: Start stdio server (simulate Claude Desktop)
174
- MCP_MODE=stdio node dist/index.js
175
-
176
- # Both should start without conflict
177
- ```
178
-
179
- ### Verifying Profile Separation
180
-
181
- ```bash
182
- # Check both profiles exist
183
- ls -la ~/.local/share/notebooklm-mcp/
184
- # Should show:
185
- # - chrome_profile_http/
186
- # - chrome_profile_stdio/
187
-
188
- # Check profile usage
189
- lsof | grep chrome_profile # Linux/macOS
190
- # or
191
- Get-Process | Where-Object {$_.Path -like "*chrome*"} # Windows PowerShell
192
- ```
193
-
194
- ## 🤝 Contributing
195
-
196
- If you want to implement this feature or have alternative solutions:
197
-
198
- 1. Open an issue on GitHub describing your approach
199
- 2. Reference this document in your PR
200
- 3. Include tests for both HTTP and stdio modes running simultaneously
201
- 4. Update documentation accordingly
202
-
203
- ## 📚 Related Issues
204
-
205
- - [Issue #XX] Chrome profile conflict between HTTP and stdio modes
206
- - [Issue #YY] Support running multiple MCP server instances
207
-
208
- ## 🔗 See Also
209
-
210
- - [Installation Guide](../deployment/docs/01-INSTALL.md)
211
- - [Troubleshooting Guide](../deployment/docs/05-TROUBLESHOOTING.md)
212
- - [Architecture Overview](../deployment/docs/02-CONFIGURATION.md)
1
+ # Chrome Profile Limitation
2
+
3
+ ## 🚨 Current Limitation (v1.3.2)
4
+
5
+ **The HTTP server and MCP stdio modes cannot run simultaneously** due to Chrome profile locking.
6
+
7
+ ### Why This Happens
8
+
9
+ The NotebookLM MCP server uses a persistent Chrome profile to maintain authentication between sessions. This profile is stored at:
10
+
11
+ ```
12
+ Windows: C:\Users\<username>\AppData\Local\notebooklm-mcp\Data\chrome_profile
13
+ Linux: ~/.local/share/notebooklm-mcp/chrome_profile
14
+ macOS: ~/Library/Application Support/notebooklm-mcp/chrome_profile
15
+ ```
16
+
17
+ **The problem:** Chrome can only open a profile in one instance at a time. When you try to run both:
18
+
19
+ - HTTP server (via `npm run daemon:start` or `npm run start:http`)
20
+ - MCP stdio server (via Claude Desktop, Cursor, etc.)
21
+
22
+ The second instance will fail to launch Chrome with this error:
23
+
24
+ ```
25
+ Error: browserType.launchPersistentContext: Target page, context or browser has been closed
26
+ ```
27
+
28
+ ### Who Is Affected?
29
+
30
+ | Scenario | Affected? | Why |
31
+ | -------------------- | --------- | -------------------------------------------------- |
32
+ | **Single mode user** | ❌ No | Only runs one server at a time |
33
+ | **HTTP-only user** | No | Only uses HTTP server for n8n/Zapier |
34
+ | **MCP-only user** | ❌ No | Only uses Claude Desktop/Cursor |
35
+ | **Dual mode user** | ✅ Yes | Wants both HTTP API and Claude Desktop integration |
36
+
37
+ ### Current Workarounds
38
+
39
+ #### Option A: Use HTTP Server Only
40
+
41
+ ```bash
42
+ # Start HTTP server
43
+ npm run daemon:start
44
+
45
+ # Stop MCP stdio server (remove from Claude Desktop config)
46
+ # Use HTTP API for all integrations (n8n, Zapier, custom apps)
47
+ ```
48
+
49
+ #### Option B: Use MCP Stdio Only
50
+
51
+ ```bash
52
+ # Stop HTTP server
53
+ npm run daemon:stop
54
+
55
+ # Use only Claude Desktop/Cursor/Codex integration
56
+ ```
57
+
58
+ #### Option C: Switch Between Modes
59
+
60
+ ```bash
61
+ # For n8n workflows
62
+ npm run daemon:start
63
+
64
+ # For Claude Desktop work
65
+ npm run daemon:stop
66
+ # Then restart Claude Desktop
67
+ ```
68
+
69
+ ## 🔮 Planned Solution (v1.4.0+)
70
+
71
+ ### Option 1: Separate Chrome Profiles by Mode ⭐ (Selected)
72
+
73
+ **Implementation:** Detect the runtime mode and use different Chrome profiles.
74
+
75
+ ```typescript
76
+ // Automatic profile detection based on mode
77
+ const getProfilePath = () => {
78
+ const baseDir = getDataDirectory();
79
+ const mode = process.env.MCP_MODE || (process.stdout.isTTY ? 'stdio' : 'http');
80
+
81
+ return {
82
+ stdio: path.join(baseDir, 'chrome_profile_stdio'), // For Claude Desktop
83
+ http: path.join(baseDir, 'chrome_profile_http'), // For HTTP server
84
+ }[mode];
85
+ };
86
+ ```
87
+
88
+ **Benefits:**
89
+
90
+ - Both modes can run simultaneously
91
+ - No user configuration needed
92
+ - ✅ Separate authentication per mode
93
+ - Simple implementation
94
+
95
+ **Trade-offs:**
96
+
97
+ - Each mode needs separate authentication (one-time setup)
98
+ - Two Chrome profiles consume more disk space (~100-200MB each)
99
+
100
+ ### Option 2: Shared Session via IPC
101
+
102
+ **Implementation:** HTTP server becomes the master, stdio clients connect to it.
103
+
104
+ **Benefits:**
105
+
106
+ - Single Chrome instance
107
+ - ✅ Shared authentication
108
+
109
+ **Trade-offs:**
110
+
111
+ - Complex architecture
112
+ - ❌ HTTP server must be running for stdio to work
113
+ - ❌ Requires inter-process communication
114
+
115
+ ### Option 3: Better Error Messages
116
+
117
+ **Implementation:** Detect profile lock and show helpful error.
118
+
119
+ **Benefits:**
120
+
121
+ - ✅ Clear user guidance
122
+
123
+ **Trade-offs:**
124
+
125
+ - Doesn't solve the root problem
126
+ - ❌ Users still can't run both modes
127
+
128
+ ## 🛠️ Implementation Plan
129
+
130
+ ### Phase 1: Separate Chrome Profiles (v1.4.0)
131
+
132
+ **Changes:**
133
+
134
+ 1. Add `MCP_MODE` environment variable detection
135
+ 2. Create mode-specific profile directories
136
+ 3. Update authentication flow to use correct profile
137
+ 4. Update documentation
138
+
139
+ **Code locations:**
140
+
141
+ - `src/auth/shared-context-manager.ts` - Profile path logic
142
+ - `src/config.ts` - Mode detection
143
+ - `src/index.ts` - HTTP server mode flag
144
+ - `src/http-wrapper.ts` - HTTP mode environment
145
+
146
+ **Backwards compatibility:**
147
+
148
+ - Existing `chrome_profile` directory will be migrated to `chrome_profile_stdio`
149
+ - HTTP server will create new `chrome_profile_http`
150
+ - Users will need to re-authenticate HTTP mode once
151
+
152
+ ### Phase 2: Migration & Testing
153
+
154
+ **Migration script:**
155
+
156
+ ```typescript
157
+ // Auto-migrate existing profile to stdio mode
158
+ if (exists('chrome_profile') && !exists('chrome_profile_stdio')) {
159
+ rename('chrome_profile', 'chrome_profile_stdio');
160
+ log('Migrated existing profile to stdio mode');
161
+ }
162
+ ```
163
+
164
+ **Testing checklist:**
165
+
166
+ - [ ] HTTP server starts with separate profile
167
+ - [ ] MCP stdio starts with separate profile
168
+ - [ ] Both can run simultaneously
169
+ - [ ] Authentication works independently in each mode
170
+ - [ ] Existing users migrate smoothly
171
+ - [ ] Documentation updated
172
+
173
+ ### Phase 3: Documentation Updates
174
+
175
+ **Files to update:**
176
+
177
+ - `README.md` - Remove limitation warning
178
+ - `deployment/docs/01-INSTALL.md` - Update installation flow
179
+ - `deployment/docs/05-TROUBLESHOOTING.md` - Update troubleshooting
180
+ - `CHANGELOG.md` - Document breaking changes
181
+
182
+ ## 📝 For Developers
183
+
184
+ ### Testing the Fix Locally
185
+
186
+ ```bash
187
+ # Terminal 1: Start HTTP server
188
+ MCP_MODE=http npm run start:http
189
+
190
+ # Terminal 2: Start stdio server (simulate Claude Desktop)
191
+ MCP_MODE=stdio node dist/index.js
192
+
193
+ # Both should start without conflict
194
+ ```
195
+
196
+ ### Verifying Profile Separation
197
+
198
+ ```bash
199
+ # Check both profiles exist
200
+ ls -la ~/.local/share/notebooklm-mcp/
201
+ # Should show:
202
+ # - chrome_profile_http/
203
+ # - chrome_profile_stdio/
204
+
205
+ # Check profile usage
206
+ lsof | grep chrome_profile # Linux/macOS
207
+ # or
208
+ Get-Process | Where-Object {$_.Path -like "*chrome*"} # Windows PowerShell
209
+ ```
210
+
211
+ ## 🤝 Contributing
212
+
213
+ If you want to implement this feature or have alternative solutions:
214
+
215
+ 1. Open an issue on GitHub describing your approach
216
+ 2. Reference this document in your PR
217
+ 3. Include tests for both HTTP and stdio modes running simultaneously
218
+ 4. Update documentation accordingly
219
+
220
+ ## 📚 Related Issues
221
+
222
+ - [Issue #XX] Chrome profile conflict between HTTP and stdio modes
223
+ - [Issue #YY] Support running multiple MCP server instances
224
+
225
+ ## 🔗 See Also
226
+
227
+ - [Installation Guide](../deployment/docs/01-INSTALL.md)
228
+ - [Troubleshooting Guide](../deployment/docs/05-TROUBLESHOOTING.md)
229
+ - [Architecture Overview](../deployment/docs/02-CONFIGURATION.md)
package/package.json CHANGED
@@ -1,79 +1,107 @@
1
- {
2
- "name": "@roomi-fields/notebooklm-mcp",
3
- "version": "1.3.4",
4
- "description": "MCP server for NotebookLM API with HTTP REST API - Zero hallucinations from your notebooks",
5
- "type": "module",
6
- "bin": {
7
- "notebooklm-mcp": "dist/index.js"
8
- },
9
- "scripts": {
10
- "help": "node dist/cli/help.js",
11
- "setup-auth": "node dist/cli/setup-auth.js",
12
- "de-auth": "node dist/cli/de-auth.js",
13
- "start:http": "node dist/http-wrapper.js",
14
- "dev:http": "tsx watch src/http-wrapper.ts",
15
- "daemon:start": "pm2 start ecosystem.config.cjs",
16
- "daemon:stop": "pm2 stop notebooklm-mcp",
17
- "daemon:restart": "pm2 restart notebooklm-mcp",
18
- "daemon:logs": "pm2 logs notebooklm-mcp",
19
- "daemon:status": "pm2 status",
20
- "daemon:delete": "pm2 delete notebooklm-mcp",
21
- "build": "tsc",
22
- "watch": "tsc --watch",
23
- "dev": "tsx watch src/index.ts",
24
- "prepare": "npm run build"
25
- },
26
- "keywords": [
27
- "mcp",
28
- "notebooklm",
29
- "gemini",
30
- "ai",
31
- "claude",
32
- "n8n",
33
- "automation",
34
- "rest-api",
35
- "http-server",
36
- "workflow"
37
- ],
38
- "author": "Romain Peyrichou (https://github.com/roomi-fields)",
39
- "contributors": [
40
- "Gérôme Dexheimer <hello@geromedexheimer.de> (https://github.com/PleasePrompto)"
41
- ],
42
- "license": "MIT",
43
- "repository": {
44
- "type": "git",
45
- "url": "git+https://github.com/roomi-fields/notebooklm-mcp.git"
46
- },
47
- "homepage": "https://github.com/roomi-fields/notebooklm-mcp#readme",
48
- "bugs": {
49
- "url": "https://github.com/roomi-fields/notebooklm-mcp/issues"
50
- },
51
- "files": [
52
- "dist",
53
- "README.md",
54
- "NOTEBOOKLM_USAGE.md",
55
- "LICENSE",
56
- "docs"
57
- ],
58
- "dependencies": {
59
- "@modelcontextprotocol/sdk": "^1.0.0",
60
- "cors": "^2.8.5",
61
- "dotenv": "^16.4.0",
62
- "env-paths": "^3.0.0",
63
- "express": "^4.18.2",
64
- "globby": "^14.1.0",
65
- "patchright": "^1.48.2",
66
- "zod": "^3.22.0"
67
- },
68
- "devDependencies": {
69
- "@types/cors": "^2.8.17",
70
- "@types/express": "^4.17.21",
71
- "@types/node": "^20.11.0",
72
- "pm2": "^5.4.2",
73
- "tsx": "^4.7.0",
74
- "typescript": "^5.3.3"
75
- },
76
- "engines": {
77
- "node": ">=18.0.0"
78
- }
79
- }
1
+ {
2
+ "name": "@roomi-fields/notebooklm-mcp",
3
+ "version": "1.3.5",
4
+ "description": "MCP server for NotebookLM API with HTTP REST API - Zero hallucinations from your notebooks",
5
+ "type": "module",
6
+ "bin": {
7
+ "notebooklm-mcp": "dist/index.js"
8
+ },
9
+ "scripts": {
10
+ "help": "node dist/cli/help.js",
11
+ "setup-auth": "node dist/cli/setup-auth.js",
12
+ "de-auth": "node dist/cli/de-auth.js",
13
+ "start:http": "node dist/http-wrapper.js",
14
+ "dev:http": "tsx watch src/http-wrapper.ts",
15
+ "daemon:start": "pm2 start ecosystem.config.cjs",
16
+ "daemon:stop": "pm2 stop notebooklm-mcp",
17
+ "daemon:restart": "pm2 restart notebooklm-mcp",
18
+ "daemon:logs": "pm2 logs notebooklm-mcp",
19
+ "daemon:status": "pm2 status",
20
+ "daemon:delete": "pm2 delete notebooklm-mcp",
21
+ "build": "tsc",
22
+ "watch": "tsc --watch",
23
+ "dev": "tsx watch src/index.ts",
24
+ "prepare": "husky",
25
+ "test": "node --experimental-vm-modules node_modules/jest/bin/jest.js",
26
+ "test:watch": "node --experimental-vm-modules node_modules/jest/bin/jest.js --watch",
27
+ "test:coverage": "node --experimental-vm-modules node_modules/jest/bin/jest.js --coverage",
28
+ "test:ci": "node --experimental-vm-modules node_modules/jest/bin/jest.js --ci --coverage --reporters=default",
29
+ "test:unit": "node --experimental-vm-modules node_modules/jest/bin/jest.js --testPathPatterns=unit",
30
+ "test:integration": "node --experimental-vm-modules node_modules/jest/bin/jest.js --testPathPatterns=integration"
31
+ },
32
+ "keywords": [
33
+ "mcp",
34
+ "notebooklm",
35
+ "gemini",
36
+ "ai",
37
+ "claude",
38
+ "n8n",
39
+ "automation",
40
+ "rest-api",
41
+ "http-server",
42
+ "workflow"
43
+ ],
44
+ "author": "Romain Peyrichou (https://github.com/roomi-fields)",
45
+ "contributors": [
46
+ "Gérôme Dexheimer <hello@geromedexheimer.de> (https://github.com/PleasePrompto)"
47
+ ],
48
+ "license": "MIT",
49
+ "repository": {
50
+ "type": "git",
51
+ "url": "git+https://github.com/roomi-fields/notebooklm-mcp.git"
52
+ },
53
+ "homepage": "https://github.com/roomi-fields/notebooklm-mcp#readme",
54
+ "bugs": {
55
+ "url": "https://github.com/roomi-fields/notebooklm-mcp/issues"
56
+ },
57
+ "files": [
58
+ "dist",
59
+ "README.md",
60
+ "NOTEBOOKLM_USAGE.md",
61
+ "LICENSE",
62
+ "docs"
63
+ ],
64
+ "dependencies": {
65
+ "@modelcontextprotocol/sdk": "^1.0.0",
66
+ "cors": "^2.8.5",
67
+ "dotenv": "^16.4.0",
68
+ "env-paths": "^3.0.0",
69
+ "express": "^4.18.2",
70
+ "globby": "^14.1.0",
71
+ "patchright": "^1.48.2",
72
+ "zod": "^3.22.0"
73
+ },
74
+ "devDependencies": {
75
+ "@eslint/js": "^9.39.1",
76
+ "@jest/globals": "^30.2.0",
77
+ "@types/cors": "^2.8.17",
78
+ "@types/express": "^4.17.21",
79
+ "@types/jest": "^30.0.0",
80
+ "@types/node": "^20.11.0",
81
+ "@typescript-eslint/eslint-plugin": "^8.48.0",
82
+ "@typescript-eslint/parser": "^8.48.0",
83
+ "eslint": "^9.39.1",
84
+ "husky": "^9.1.7",
85
+ "jest": "^30.2.0",
86
+ "lint-staged": "^16.2.7",
87
+ "pm2": "^6.0.14",
88
+ "prettier": "^3.6.2",
89
+ "ts-jest": "^29.4.5",
90
+ "tsx": "^4.7.0",
91
+ "type-coverage": "^2.29.7",
92
+ "typescript": "^5.3.3",
93
+ "typescript-eslint": "^8.48.0"
94
+ },
95
+ "engines": {
96
+ "node": ">=18.0.0"
97
+ },
98
+ "lint-staged": {
99
+ "*.{ts,tsx,js,jsx}": [
100
+ "eslint --fix",
101
+ "prettier --write"
102
+ ],
103
+ "*.{json,md,yml,yaml}": [
104
+ "prettier --write"
105
+ ]
106
+ }
107
+ }