@roomi-fields/notebooklm-mcp 1.3.3 → 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.
- package/README.md +764 -715
- package/dist/__tests__/cleanup-manager.test.d.ts +2 -0
- package/dist/__tests__/cleanup-manager.test.d.ts.map +1 -0
- package/dist/__tests__/cleanup-manager.test.js +341 -0
- package/dist/__tests__/cleanup-manager.test.js.map +1 -0
- package/dist/__tests__/config-parsing.test.d.ts +2 -0
- package/dist/__tests__/config-parsing.test.d.ts.map +1 -0
- package/dist/__tests__/config-parsing.test.js +338 -0
- package/dist/__tests__/config-parsing.test.js.map +1 -0
- package/dist/__tests__/config.test.d.ts +2 -0
- package/dist/__tests__/config.test.d.ts.map +1 -0
- package/dist/__tests__/config.test.js +267 -0
- package/dist/__tests__/config.test.js.map +1 -0
- package/dist/__tests__/errors.test.d.ts +2 -0
- package/dist/__tests__/errors.test.d.ts.map +1 -0
- package/dist/__tests__/errors.test.js +166 -0
- package/dist/__tests__/errors.test.js.map +1 -0
- package/dist/__tests__/logger.test.d.ts +2 -0
- package/dist/__tests__/logger.test.d.ts.map +1 -0
- package/dist/__tests__/logger.test.js +324 -0
- package/dist/__tests__/logger.test.js.map +1 -0
- package/dist/__tests__/page-utils.test.d.ts +2 -0
- package/dist/__tests__/page-utils.test.d.ts.map +1 -0
- package/dist/__tests__/page-utils.test.js +349 -0
- package/dist/__tests__/page-utils.test.js.map +1 -0
- package/dist/__tests__/setup-verification.test.d.ts +2 -0
- package/dist/__tests__/setup-verification.test.d.ts.map +1 -0
- package/dist/__tests__/setup-verification.test.js +15 -0
- package/dist/__tests__/setup-verification.test.js.map +1 -0
- package/dist/__tests__/stealth-utils.test.d.ts +2 -0
- package/dist/__tests__/stealth-utils.test.d.ts.map +1 -0
- package/dist/__tests__/stealth-utils.test.js +413 -0
- package/dist/__tests__/stealth-utils.test.js.map +1 -0
- package/dist/__tests__/types.test.d.ts +2 -0
- package/dist/__tests__/types.test.d.ts.map +1 -0
- package/dist/__tests__/types.test.js +461 -0
- package/dist/__tests__/types.test.js.map +1 -0
- package/dist/auth/auth-manager.d.ts +2 -2
- package/dist/auth/auth-manager.d.ts.map +1 -1
- package/dist/auth/auth-manager.js +187 -180
- package/dist/auth/auth-manager.js.map +1 -1
- package/dist/auto-discovery/auto-discovery.d.ts.map +1 -1
- package/dist/auto-discovery/auto-discovery.js +17 -17
- package/dist/auto-discovery/auto-discovery.js.map +1 -1
- package/dist/cli/de-auth.d.ts +10 -0
- package/dist/cli/de-auth.d.ts.map +1 -0
- package/dist/cli/de-auth.js +47 -0
- package/dist/cli/de-auth.js.map +1 -0
- package/dist/cli/help.d.ts +6 -0
- package/dist/cli/help.d.ts.map +1 -0
- package/dist/cli/help.js +67 -0
- package/dist/cli/help.js.map +1 -0
- package/dist/cli/setup-auth.d.ts +11 -0
- package/dist/cli/setup-auth.d.ts.map +1 -0
- package/dist/cli/setup-auth.js +82 -0
- package/dist/cli/setup-auth.js.map +1 -0
- package/dist/config.d.ts +1 -1
- package/dist/config.d.ts.map +1 -1
- package/dist/config.js +49 -103
- package/dist/config.js.map +1 -1
- package/dist/errors.d.ts.map +1 -1
- package/dist/errors.js +3 -3
- package/dist/errors.js.map +1 -1
- package/dist/http-wrapper.js +96 -172
- package/dist/http-wrapper.js.map +1 -1
- package/dist/index.js +110 -107
- package/dist/index.js.map +1 -1
- package/dist/library/notebook-library.d.ts +2 -2
- package/dist/library/notebook-library.d.ts.map +1 -1
- package/dist/library/notebook-library.js +24 -24
- package/dist/library/notebook-library.js.map +1 -1
- package/dist/session/browser-session.d.ts +4 -4
- package/dist/session/browser-session.d.ts.map +1 -1
- package/dist/session/browser-session.js +62 -58
- package/dist/session/browser-session.js.map +1 -1
- package/dist/session/session-manager.d.ts +3 -3
- package/dist/session/session-manager.d.ts.map +1 -1
- package/dist/session/session-manager.js +14 -14
- package/dist/session/session-manager.js.map +1 -1
- package/dist/session/shared-context-manager.d.ts +2 -2
- package/dist/session/shared-context-manager.d.ts.map +1 -1
- package/dist/session/shared-context-manager.js +62 -58
- package/dist/session/shared-context-manager.js.map +1 -1
- package/dist/tools/index.d.ts +14 -14
- package/dist/tools/index.d.ts.map +1 -1
- package/dist/tools/index.js +517 -530
- package/dist/tools/index.js.map +1 -1
- package/dist/types.d.ts +24 -67
- package/dist/types.d.ts.map +1 -1
- package/dist/types.js +1 -12
- package/dist/types.js.map +1 -1
- package/dist/utils/cleanup-manager.d.ts +1 -1
- package/dist/utils/cleanup-manager.d.ts.map +1 -1
- package/dist/utils/cleanup-manager.js +90 -92
- package/dist/utils/cleanup-manager.js.map +1 -1
- package/dist/utils/logger.d.ts +1 -2
- package/dist/utils/logger.d.ts.map +1 -1
- package/dist/utils/logger.js +15 -15
- package/dist/utils/page-utils.d.ts +1 -1
- package/dist/utils/page-utils.d.ts.map +1 -1
- package/dist/utils/page-utils.js +39 -46
- package/dist/utils/page-utils.js.map +1 -1
- package/dist/utils/stealth-utils.d.ts +2 -2
- package/dist/utils/stealth-utils.d.ts.map +1 -1
- package/dist/utils/stealth-utils.js +13 -13
- package/dist/utils/stealth-utils.js.map +1 -1
- package/docs/CHROME_PROFILE_LIMITATION.md +229 -212
- package/package.json +107 -78
|
@@ -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
|
-
|
|
19
|
-
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
```
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
|
31
|
-
|
|
|
32
|
-
| **
|
|
33
|
-
| **
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
#
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
```
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
#
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
-
|
|
91
|
-
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
**
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
#
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
|
|
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,78 +1,107 @@
|
|
|
1
|
-
{
|
|
2
|
-
"name": "@roomi-fields/notebooklm-mcp",
|
|
3
|
-
"version": "1.3.
|
|
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
|
-
"
|
|
11
|
-
"
|
|
12
|
-
"
|
|
13
|
-
"
|
|
14
|
-
"
|
|
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
|
-
"
|
|
22
|
-
"
|
|
23
|
-
"
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
"
|
|
27
|
-
"
|
|
28
|
-
"
|
|
29
|
-
"
|
|
30
|
-
"
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
"
|
|
34
|
-
"
|
|
35
|
-
"
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
"
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
"
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
"
|
|
56
|
-
|
|
57
|
-
"
|
|
58
|
-
"
|
|
59
|
-
"
|
|
60
|
-
"
|
|
61
|
-
"
|
|
62
|
-
"
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
"
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
"
|
|
69
|
-
"
|
|
70
|
-
"
|
|
71
|
-
"
|
|
72
|
-
"
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
"
|
|
77
|
-
|
|
78
|
-
|
|
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
|
+
}
|