notelm-mcp 1.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 +456 -0
- package/dist/auth/auth-manager.d.ts +139 -0
- package/dist/auth/auth-manager.d.ts.map +1 -0
- package/dist/auth/auth-manager.js +960 -0
- package/dist/auth/auth-manager.js.map +1 -0
- package/dist/config.d.ts +92 -0
- package/dist/config.d.ts.map +1 -0
- package/dist/config.js +219 -0
- package/dist/config.js.map +1 -0
- package/dist/constants.d.ts +58 -0
- package/dist/constants.d.ts.map +1 -0
- package/dist/constants.js +133 -0
- package/dist/constants.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 +325 -0
- package/dist/index.js.map +1 -0
- package/dist/library/notebook-library.d.ts +70 -0
- package/dist/library/notebook-library.d.ts.map +1 -0
- package/dist/library/notebook-library.js +279 -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/playwright.config.d.ts +3 -0
- package/dist/playwright.config.d.ts.map +1 -0
- package/dist/playwright.config.js +38 -0
- package/dist/playwright.config.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/scripts/save-auth-state.d.ts +2 -0
- package/dist/scripts/save-auth-state.d.ts.map +1 -0
- package/dist/scripts/save-auth-state.js +91 -0
- package/dist/scripts/save-auth-state.js.map +1 -0
- package/dist/session/browser-session.d.ts +108 -0
- package/dist/session/browser-session.d.ts.map +1 -0
- package/dist/session/browser-session.js +636 -0
- package/dist/session/browser-session.js.map +1 -0
- package/dist/session/session-manager.d.ts +76 -0
- package/dist/session/session-manager.d.ts.map +1 -0
- package/dist/session/session-manager.js +273 -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/src/auth/auth-manager.d.ts +139 -0
- package/dist/src/auth/auth-manager.d.ts.map +1 -0
- package/dist/src/auth/auth-manager.js +960 -0
- package/dist/src/auth/auth-manager.js.map +1 -0
- package/dist/src/config.d.ts +92 -0
- package/dist/src/config.d.ts.map +1 -0
- package/dist/src/config.js +219 -0
- package/dist/src/config.js.map +1 -0
- package/dist/src/constants.d.ts +58 -0
- package/dist/src/constants.d.ts.map +1 -0
- package/dist/src/constants.js +133 -0
- package/dist/src/constants.js.map +1 -0
- package/dist/src/errors.d.ts +26 -0
- package/dist/src/errors.d.ts.map +1 -0
- package/dist/src/errors.js +41 -0
- package/dist/src/errors.js.map +1 -0
- package/dist/src/index.d.ts +32 -0
- package/dist/src/index.d.ts.map +1 -0
- package/dist/src/index.js +325 -0
- package/dist/src/index.js.map +1 -0
- package/dist/src/library/notebook-library.d.ts +70 -0
- package/dist/src/library/notebook-library.d.ts.map +1 -0
- package/dist/src/library/notebook-library.js +279 -0
- package/dist/src/library/notebook-library.js.map +1 -0
- package/dist/src/library/types.d.ts +67 -0
- package/dist/src/library/types.d.ts.map +1 -0
- package/dist/src/library/types.js +8 -0
- package/dist/src/library/types.js.map +1 -0
- package/dist/src/resources/resource-handlers.d.ts +22 -0
- package/dist/src/resources/resource-handlers.d.ts.map +1 -0
- package/dist/src/resources/resource-handlers.js +216 -0
- package/dist/src/resources/resource-handlers.js.map +1 -0
- package/dist/src/scripts/health-check.d.ts +13 -0
- package/dist/src/scripts/health-check.d.ts.map +1 -0
- package/dist/src/scripts/health-check.js +100 -0
- package/dist/src/scripts/health-check.js.map +1 -0
- package/dist/src/session/browser-session.d.ts +108 -0
- package/dist/src/session/browser-session.d.ts.map +1 -0
- package/dist/src/session/browser-session.js +642 -0
- package/dist/src/session/browser-session.js.map +1 -0
- package/dist/src/session/session-manager.d.ts +76 -0
- package/dist/src/session/session-manager.d.ts.map +1 -0
- package/dist/src/session/session-manager.js +273 -0
- package/dist/src/session/session-manager.js.map +1 -0
- package/dist/src/session/shared-context-manager.d.ts +107 -0
- package/dist/src/session/shared-context-manager.d.ts.map +1 -0
- package/dist/src/session/shared-context-manager.js +447 -0
- package/dist/src/session/shared-context-manager.js.map +1 -0
- package/dist/src/tools/definitions/ask-question.d.ts +8 -0
- package/dist/src/tools/definitions/ask-question.d.ts.map +1 -0
- package/dist/src/tools/definitions/ask-question.js +211 -0
- package/dist/src/tools/definitions/ask-question.js.map +1 -0
- package/dist/src/tools/definitions/notebook-management.d.ts +3 -0
- package/dist/src/tools/definitions/notebook-management.d.ts.map +1 -0
- package/dist/src/tools/definitions/notebook-management.js +243 -0
- package/dist/src/tools/definitions/notebook-management.js.map +1 -0
- package/dist/src/tools/definitions/session-management.d.ts +3 -0
- package/dist/src/tools/definitions/session-management.d.ts.map +1 -0
- package/dist/src/tools/definitions/session-management.js +41 -0
- package/dist/src/tools/definitions/session-management.js.map +1 -0
- package/dist/src/tools/definitions/system.d.ts +3 -0
- package/dist/src/tools/definitions/system.d.ts.map +1 -0
- package/dist/src/tools/definitions/system.js +143 -0
- package/dist/src/tools/definitions/system.js.map +1 -0
- package/dist/src/tools/definitions.d.ts +12 -0
- package/dist/src/tools/definitions.d.ts.map +1 -0
- package/dist/src/tools/definitions.js +26 -0
- package/dist/src/tools/definitions.js.map +1 -0
- package/dist/src/tools/handlers.d.ts +212 -0
- package/dist/src/tools/handlers.d.ts.map +1 -0
- package/dist/src/tools/handlers.js +712 -0
- package/dist/src/tools/handlers.js.map +1 -0
- package/dist/src/tools/index.d.ts +8 -0
- package/dist/src/tools/index.d.ts.map +1 -0
- package/dist/src/tools/index.js +8 -0
- package/dist/src/tools/index.js.map +1 -0
- package/dist/src/types.d.ts +88 -0
- package/dist/src/types.d.ts.map +1 -0
- package/dist/src/types.js +5 -0
- package/dist/src/types.js.map +1 -0
- package/dist/src/utils/auth-manager.d.ts +2 -0
- package/dist/src/utils/auth-manager.d.ts.map +1 -0
- package/dist/src/utils/auth-manager.js +25 -0
- package/dist/src/utils/auth-manager.js.map +1 -0
- package/dist/src/utils/cleanup-manager.d.ts +133 -0
- package/dist/src/utils/cleanup-manager.d.ts.map +1 -0
- package/dist/src/utils/cleanup-manager.js +673 -0
- package/dist/src/utils/cleanup-manager.js.map +1 -0
- package/dist/src/utils/cli-handler.d.ts +16 -0
- package/dist/src/utils/cli-handler.d.ts.map +1 -0
- package/dist/src/utils/cli-handler.js +102 -0
- package/dist/src/utils/cli-handler.js.map +1 -0
- package/dist/src/utils/logger.d.ts +61 -0
- package/dist/src/utils/logger.d.ts.map +1 -0
- package/dist/src/utils/logger.js +92 -0
- package/dist/src/utils/logger.js.map +1 -0
- package/dist/src/utils/page-utils.d.ts +54 -0
- package/dist/src/utils/page-utils.d.ts.map +1 -0
- package/dist/src/utils/page-utils.js +381 -0
- package/dist/src/utils/page-utils.js.map +1 -0
- package/dist/src/utils/rate-limit-handler.d.ts +42 -0
- package/dist/src/utils/rate-limit-handler.d.ts.map +1 -0
- package/dist/src/utils/rate-limit-handler.js +88 -0
- package/dist/src/utils/rate-limit-handler.js.map +1 -0
- package/dist/src/utils/rate-limit-handler.test.d.ts +7 -0
- package/dist/src/utils/rate-limit-handler.test.d.ts.map +1 -0
- package/dist/src/utils/rate-limit-handler.test.js +86 -0
- package/dist/src/utils/rate-limit-handler.test.js.map +1 -0
- package/dist/src/utils/settings-manager.d.ts +37 -0
- package/dist/src/utils/settings-manager.d.ts.map +1 -0
- package/dist/src/utils/settings-manager.js +121 -0
- package/dist/src/utils/settings-manager.js.map +1 -0
- package/dist/src/utils/stealth-utils.d.ts +135 -0
- package/dist/src/utils/stealth-utils.d.ts.map +1 -0
- package/dist/src/utils/stealth-utils.js +396 -0
- package/dist/src/utils/stealth-utils.js.map +1 -0
- package/dist/src/utils/stealth-utils.test.d.ts +7 -0
- package/dist/src/utils/stealth-utils.test.d.ts.map +1 -0
- package/dist/src/utils/stealth-utils.test.js +72 -0
- package/dist/src/utils/stealth-utils.test.js.map +1 -0
- package/dist/tests/e2e/authenticated.spec.d.ts +2 -0
- package/dist/tests/e2e/authenticated.spec.d.ts.map +1 -0
- package/dist/tests/e2e/authenticated.spec.js +41 -0
- package/dist/tests/e2e/authenticated.spec.js.map +1 -0
- package/dist/tests/e2e/mocked.spec.d.ts +2 -0
- package/dist/tests/e2e/mocked.spec.d.ts.map +1 -0
- package/dist/tests/e2e/mocked.spec.js +32 -0
- package/dist/tests/e2e/mocked.spec.js.map +1 -0
- package/dist/tests/mocks/handlers.d.ts +4 -0
- package/dist/tests/mocks/handlers.d.ts.map +1 -0
- package/dist/tests/mocks/handlers.js +55 -0
- package/dist/tests/mocks/handlers.js.map +1 -0
- package/dist/tests/mocks/setup.d.ts +3 -0
- package/dist/tests/mocks/setup.d.ts.map +1 -0
- package/dist/tests/mocks/setup.js +77 -0
- package/dist/tests/mocks/setup.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 +211 -0
- package/dist/tools/definitions/ask-question.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/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/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 +26 -0
- package/dist/tools/definitions.js.map +1 -0
- package/dist/tools/handlers.d.ts +212 -0
- package/dist/tools/handlers.d.ts.map +1 -0
- package/dist/tools/handlers.js +712 -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 +381 -0
- package/dist/utils/page-utils.js.map +1 -0
- package/dist/utils/rate-limit-handler.d.ts +42 -0
- package/dist/utils/rate-limit-handler.d.ts.map +1 -0
- package/dist/utils/rate-limit-handler.js +88 -0
- package/dist/utils/rate-limit-handler.js.map +1 -0
- package/dist/utils/rate-limit-handler.test.d.ts +7 -0
- package/dist/utils/rate-limit-handler.test.d.ts.map +1 -0
- package/dist/utils/rate-limit-handler.test.js +91 -0
- package/dist/utils/rate-limit-handler.test.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 +121 -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 +396 -0
- package/dist/utils/stealth-utils.js.map +1 -0
- package/dist/utils/stealth-utils.test.d.ts +7 -0
- package/dist/utils/stealth-utils.test.d.ts.map +1 -0
- package/dist/utils/stealth-utils.test.js +72 -0
- package/dist/utils/stealth-utils.test.js.map +1 -0
- package/docs/01_configuration.md +94 -0
- package/docs/02_tools.md +34 -0
- package/docs/03_troubleshooting.md +59 -0
- package/docs/04_usage-guide.md +245 -0
- package/docs/05_project-analysis.qmd +309 -0
- package/docs/06_integration-analysis.html +914 -0
- package/docs/06_integration-analysis.qmd +255 -0
- package/docs/06_integration-analysis_files/libs/bootstrap/bootstrap-4f0954b6b0dd6bf39f4bb9151ba984db.min.css +12 -0
- package/docs/06_integration-analysis_files/libs/bootstrap/bootstrap-icons.css +2106 -0
- package/docs/06_integration-analysis_files/libs/bootstrap/bootstrap-icons.woff +0 -0
- package/docs/06_integration-analysis_files/libs/bootstrap/bootstrap.min.js +7 -0
- package/docs/06_integration-analysis_files/libs/clipboard/clipboard.min.js +7 -0
- package/docs/06_integration-analysis_files/libs/quarto-html/anchor.min.js +9 -0
- package/docs/06_integration-analysis_files/libs/quarto-html/axe/axe-check.js +145 -0
- package/docs/06_integration-analysis_files/libs/quarto-html/popper.min.js +6 -0
- package/docs/06_integration-analysis_files/libs/quarto-html/quarto-syntax-highlighting-587c61ba64f3a5504c4d52d930310e48.css +236 -0
- package/docs/06_integration-analysis_files/libs/quarto-html/quarto.js +847 -0
- package/docs/06_integration-analysis_files/libs/quarto-html/tabsets/tabsets.js +95 -0
- package/docs/06_integration-analysis_files/libs/quarto-html/tippy.css +1 -0
- package/docs/06_integration-analysis_files/libs/quarto-html/tippy.umd.min.js +2 -0
- package/docs/07_e2e-testing-safety.qmd +754 -0
- package/docs/08_project-re-evaluation.html +609 -0
- package/docs/08_project-re-evaluation.qmd +86 -0
- package/docs/08_project-re-evaluation_files/libs/bootstrap/bootstrap-4f0954b6b0dd6bf39f4bb9151ba984db.min.css +12 -0
- package/docs/08_project-re-evaluation_files/libs/bootstrap/bootstrap-icons.css +2106 -0
- package/docs/08_project-re-evaluation_files/libs/bootstrap/bootstrap-icons.woff +0 -0
- package/docs/08_project-re-evaluation_files/libs/bootstrap/bootstrap.min.js +7 -0
- package/docs/08_project-re-evaluation_files/libs/clipboard/clipboard.min.js +7 -0
- package/docs/08_project-re-evaluation_files/libs/quarto-html/anchor.min.js +9 -0
- package/docs/08_project-re-evaluation_files/libs/quarto-html/axe/axe-check.js +145 -0
- package/docs/08_project-re-evaluation_files/libs/quarto-html/popper.min.js +6 -0
- package/docs/08_project-re-evaluation_files/libs/quarto-html/quarto-syntax-highlighting-587c61ba64f3a5504c4d52d930310e48.css +236 -0
- package/docs/08_project-re-evaluation_files/libs/quarto-html/quarto.js +847 -0
- package/docs/08_project-re-evaluation_files/libs/quarto-html/tabsets/tabsets.js +95 -0
- package/docs/08_project-re-evaluation_files/libs/quarto-html/tippy.css +1 -0
- package/docs/08_project-re-evaluation_files/libs/quarto-html/tippy.umd.min.js +2 -0
- package/docs/notebooklm-mcp-usage.html +704 -0
- package/docs/notebooklm-mcp-usage.qmd +119 -0
- package/docs/notebooklm-mcp-usage_files/libs/bootstrap/bootstrap-6b71f2156b6a5230c6677325978bcf08.min.css +12 -0
- package/docs/notebooklm-mcp-usage_files/libs/bootstrap/bootstrap-icons.css +2106 -0
- package/docs/notebooklm-mcp-usage_files/libs/bootstrap/bootstrap-icons.woff +0 -0
- package/docs/notebooklm-mcp-usage_files/libs/bootstrap/bootstrap.min.js +7 -0
- package/docs/notebooklm-mcp-usage_files/libs/clipboard/clipboard.min.js +7 -0
- package/docs/notebooklm-mcp-usage_files/libs/quarto-html/anchor.min.js +9 -0
- package/docs/notebooklm-mcp-usage_files/libs/quarto-html/axe/axe-check.js +145 -0
- package/docs/notebooklm-mcp-usage_files/libs/quarto-html/popper.min.js +6 -0
- package/docs/notebooklm-mcp-usage_files/libs/quarto-html/quarto-syntax-highlighting-587c61ba64f3a5504c4d52d930310e48.css +236 -0
- package/docs/notebooklm-mcp-usage_files/libs/quarto-html/quarto.js +847 -0
- package/docs/notebooklm-mcp-usage_files/libs/quarto-html/tabsets/tabsets.js +95 -0
- package/docs/notebooklm-mcp-usage_files/libs/quarto-html/tippy.css +1 -0
- package/docs/notebooklm-mcp-usage_files/libs/quarto-html/tippy.umd.min.js +2 -0
- package/docs/repomix-usage_files/libs/bootstrap/bootstrap-6b71f2156b6a5230c6677325978bcf08.min.css +12 -0
- package/docs/repomix-usage_files/libs/bootstrap/bootstrap-icons.css +2106 -0
- package/docs/repomix-usage_files/libs/bootstrap/bootstrap-icons.woff +0 -0
- package/docs/repomix-usage_files/libs/bootstrap/bootstrap.min.js +7 -0
- package/docs/repomix-usage_files/libs/clipboard/clipboard.min.js +7 -0
- package/docs/repomix-usage_files/libs/quarto-html/anchor.min.js +9 -0
- package/docs/repomix-usage_files/libs/quarto-html/axe/axe-check.js +145 -0
- package/docs/repomix-usage_files/libs/quarto-html/popper.min.js +6 -0
- package/docs/repomix-usage_files/libs/quarto-html/quarto-syntax-highlighting-587c61ba64f3a5504c4d52d930310e48.css +236 -0
- package/docs/repomix-usage_files/libs/quarto-html/quarto.js +847 -0
- package/docs/repomix-usage_files/libs/quarto-html/tabsets/tabsets.js +95 -0
- package/docs/repomix-usage_files/libs/quarto-html/tippy.css +1 -0
- package/docs/repomix-usage_files/libs/quarto-html/tippy.umd.min.js +2 -0
- package/package.json +62 -0
package/LICENSE
ADDED
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2025 Please Prompto!
|
|
4
|
+
|
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
7
|
+
in the Software without restriction, including without limitation the rights
|
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
+
furnished to do so, subject to the following conditions:
|
|
11
|
+
|
|
12
|
+
The above copyright notice and this permission notice shall be included in all
|
|
13
|
+
copies or substantial portions of the Software.
|
|
14
|
+
|
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
21
|
+
SOFTWARE.
|
package/README.md
ADDED
|
@@ -0,0 +1,456 @@
|
|
|
1
|
+
<div align="center">
|
|
2
|
+
|
|
3
|
+
# NotebookLM MCP Server
|
|
4
|
+
|
|
5
|
+
**Let your CLI agents (Claude, Cursor, Codex...) chat directly with NotebookLM for zero-hallucination answers based on your own notebooks**
|
|
6
|
+
|
|
7
|
+
[](https://www.typescriptlang.org/)
|
|
8
|
+
[](https://modelcontextprotocol.io/)
|
|
9
|
+
[](https://www.npmjs.com/package/notelm-mcp)
|
|
10
|
+
[](https://github.com/PleasePrompto/notebooklm-skill)
|
|
11
|
+
[](https://github.com/PleasePrompto/notelm-mcp)
|
|
12
|
+
|
|
13
|
+
[Installation](#installation) • [Quick Start](#quick-start) • [Why NotebookLM](#why-notebooklm-not-local-rag) • [Examples](#real-world-example) • [Claude Code Skill](https://github.com/PleasePrompto/notebooklm-skill) • [Documentation](./docs/)
|
|
14
|
+
|
|
15
|
+
</div>
|
|
16
|
+
|
|
17
|
+
---
|
|
18
|
+
|
|
19
|
+
## The Problem
|
|
20
|
+
|
|
21
|
+
When you tell Claude Code or Cursor to "search through my local documentation", here's what happens:
|
|
22
|
+
- **Massive token consumption**: Searching through documentation means reading multiple files repeatedly
|
|
23
|
+
- **Inaccurate retrieval**: Searches for keywords, misses context and connections between docs
|
|
24
|
+
- **Hallucinations**: When it can't find something, it invents plausible-sounding APIs
|
|
25
|
+
- **Expensive & slow**: Each question requires re-reading multiple files
|
|
26
|
+
|
|
27
|
+
## The Solution
|
|
28
|
+
|
|
29
|
+
Let your local agents chat directly with [**NotebookLM**](https://notebooklm.google/) — Google's **zero-hallucination knowledge base** powered by Gemini 3 that provides intelligent, synthesized answers from your docs.
|
|
30
|
+
|
|
31
|
+
```
|
|
32
|
+
Your Task → Local Agent asks NotebookLM → Gemini synthesizes answer → Agent writes correct code
|
|
33
|
+
```
|
|
34
|
+
|
|
35
|
+
**The real advantage**: No more manual copy-paste between NotebookLM and your editor. Your agent asks NotebookLM directly and gets answers straight back in the CLI. It builds deep understanding through automatic follow-ups — Claude asks multiple questions in sequence, each building on the last, getting specific implementation details, edge cases, and best practices. You can save NotebookLM links to your local library with tags and descriptions, and Claude automatically selects the relevant notebook based on your current task.
|
|
36
|
+
|
|
37
|
+
---
|
|
38
|
+
|
|
39
|
+
## Why NotebookLM, Not Local RAG?
|
|
40
|
+
|
|
41
|
+
| Approach | Token Cost | Setup Time | Hallucinations | Answer Quality |
|
|
42
|
+
|----------|------------|------------|----------------|----------------|
|
|
43
|
+
| **Feed docs to Claude** | 🔴 Very high (multiple file reads) | Instant | Yes - fills gaps | Variable retrieval |
|
|
44
|
+
| **Web search** | 🟡 Medium | Instant | High - unreliable sources | Hit or miss |
|
|
45
|
+
| **Local RAG** | 🟡 Medium-High | Hours (embeddings, chunking) | Medium - retrieval gaps | Depends on setup |
|
|
46
|
+
| **NotebookLM MCP** | 🟢 Minimal | 5 minutes | **Zero** - refuses if unknown | Expert synthesis |
|
|
47
|
+
|
|
48
|
+
### What Makes NotebookLM Superior?
|
|
49
|
+
|
|
50
|
+
1. **Pre-processed by Gemini**: Upload docs once, get instant expert knowledge
|
|
51
|
+
2. **Natural language Q&A**: Not just retrieval — actual understanding and synthesis
|
|
52
|
+
3. **Multi-source correlation**: Connects information across 50+ documents
|
|
53
|
+
4. **Citation-backed**: Every answer includes source references
|
|
54
|
+
5. **No infrastructure**: No vector DBs, embeddings, or chunking strategies needed
|
|
55
|
+
|
|
56
|
+
---
|
|
57
|
+
|
|
58
|
+
## Installation
|
|
59
|
+
|
|
60
|
+
### Claude Code
|
|
61
|
+
```bash
|
|
62
|
+
claude mcp add notebooklm npx notelm-mcp@latest
|
|
63
|
+
```
|
|
64
|
+
|
|
65
|
+
### Codex
|
|
66
|
+
```bash
|
|
67
|
+
codex mcp add notebooklm -- npx notelm-mcp@latest
|
|
68
|
+
```
|
|
69
|
+
|
|
70
|
+
<details>
|
|
71
|
+
<summary>Gemini</summary>
|
|
72
|
+
|
|
73
|
+
```bash
|
|
74
|
+
gemini mcp add notebooklm npx notelm-mcp@latest
|
|
75
|
+
```
|
|
76
|
+
</details>
|
|
77
|
+
|
|
78
|
+
<details>
|
|
79
|
+
<summary>Cursor</summary>
|
|
80
|
+
|
|
81
|
+
Add to `~/.cursor/mcp.json`:
|
|
82
|
+
```json
|
|
83
|
+
{
|
|
84
|
+
"mcpServers": {
|
|
85
|
+
"notebooklm": {
|
|
86
|
+
"command": "npx",
|
|
87
|
+
"args": ["-y", "notelm-mcp@latest"]
|
|
88
|
+
}
|
|
89
|
+
}
|
|
90
|
+
}
|
|
91
|
+
```
|
|
92
|
+
</details>
|
|
93
|
+
|
|
94
|
+
<details>
|
|
95
|
+
<summary>amp</summary>
|
|
96
|
+
|
|
97
|
+
```bash
|
|
98
|
+
amp mcp add notebooklm -- npx notelm-mcp@latest
|
|
99
|
+
```
|
|
100
|
+
</details>
|
|
101
|
+
|
|
102
|
+
<details>
|
|
103
|
+
<summary>VS Code</summary>
|
|
104
|
+
|
|
105
|
+
```bash
|
|
106
|
+
code --add-mcp '{"name":"notebooklm","command":"npx","args":["notelm-mcp@latest"]}'
|
|
107
|
+
```
|
|
108
|
+
</details>
|
|
109
|
+
|
|
110
|
+
<details>
|
|
111
|
+
<summary>Other MCP clients</summary>
|
|
112
|
+
|
|
113
|
+
**Generic MCP config:**
|
|
114
|
+
```json
|
|
115
|
+
{
|
|
116
|
+
"mcpServers": {
|
|
117
|
+
"notebooklm": {
|
|
118
|
+
"command": "npx",
|
|
119
|
+
"args": ["notelm-mcp@latest"]
|
|
120
|
+
}
|
|
121
|
+
}
|
|
122
|
+
}
|
|
123
|
+
```
|
|
124
|
+
</details>
|
|
125
|
+
|
|
126
|
+
</details>
|
|
127
|
+
|
|
128
|
+
### Run from Source (Local Development)
|
|
129
|
+
|
|
130
|
+
If you have cloned this repository and want to run it directly (e.g., for development or customization):
|
|
131
|
+
|
|
132
|
+
1. **Build the project**:
|
|
133
|
+
```bash
|
|
134
|
+
npm install
|
|
135
|
+
npm run build
|
|
136
|
+
```
|
|
137
|
+
|
|
138
|
+
2. **Configure your MCP Client**:
|
|
139
|
+
|
|
140
|
+
**Claude Desktop / generic MCP clients**:
|
|
141
|
+
Use the absolute path to the built `dist/index.js`.
|
|
142
|
+
```json
|
|
143
|
+
{
|
|
144
|
+
"mcpServers": {
|
|
145
|
+
"notebooklm-local": {
|
|
146
|
+
"command": "node",
|
|
147
|
+
"args": ["/path/to/notelm-mcp/dist/index.js"],
|
|
148
|
+
"env": {
|
|
149
|
+
"NOTEBOOKLM_PROFILE": "full"
|
|
150
|
+
}
|
|
151
|
+
}
|
|
152
|
+
}
|
|
153
|
+
}
|
|
154
|
+
```
|
|
155
|
+
|
|
156
|
+
**Cursor**:
|
|
157
|
+
Add to `~/.cursor/mcp.json` or via the Cursor MCP settings UI:
|
|
158
|
+
```json
|
|
159
|
+
{
|
|
160
|
+
"mcpServers": {
|
|
161
|
+
"notebooklm-local": {
|
|
162
|
+
"command": "node",
|
|
163
|
+
"args": ["/path/to/notelm-mcp/dist/index.js"]
|
|
164
|
+
}
|
|
165
|
+
}
|
|
166
|
+
}
|
|
167
|
+
```
|
|
168
|
+
|
|
169
|
+
---
|
|
170
|
+
|
|
171
|
+
## Alternative: Claude Code Skill
|
|
172
|
+
|
|
173
|
+
**Prefer Claude Code Skills over MCP?** This server is now also available as a native Claude Code Skill with a simpler setup:
|
|
174
|
+
|
|
175
|
+
**[NotebookLM Claude Code Skill](https://github.com/PleasePrompto/notebooklm-skill)** - Clone to `~/.claude/skills` and start using immediately
|
|
176
|
+
|
|
177
|
+
**Key differences:**
|
|
178
|
+
- **MCP Server** (this repo): Persistent sessions, works with Claude Code, Codex, Cursor, and other MCP clients
|
|
179
|
+
- **Claude Code Skill**: Simpler setup, Python-based, stateless queries, works only with local Claude Code
|
|
180
|
+
|
|
181
|
+
Both use the same browser automation technology and provide zero-hallucination answers from your NotebookLM notebooks.
|
|
182
|
+
|
|
183
|
+
---
|
|
184
|
+
|
|
185
|
+
## Quick Start
|
|
186
|
+
|
|
187
|
+
### 1. Install the MCP server (see [Installation](#installation) above)
|
|
188
|
+
|
|
189
|
+
### 2. Authenticate (one-time)
|
|
190
|
+
|
|
191
|
+
Say in your chat (Claude/Codex):
|
|
192
|
+
```
|
|
193
|
+
"Log me in to NotebookLM"
|
|
194
|
+
```
|
|
195
|
+
*A Chrome window opens → log in with Google*
|
|
196
|
+
|
|
197
|
+
### 3. Create your knowledge base
|
|
198
|
+
Go to [notebooklm.google.com](https://notebooklm.google.com) → Create notebook → Upload your docs:
|
|
199
|
+
- 📄 PDFs, Google Docs, markdown files
|
|
200
|
+
- 🔗 Websites, GitHub repos
|
|
201
|
+
- 🎥 YouTube videos
|
|
202
|
+
- 📚 Multiple sources per notebook
|
|
203
|
+
|
|
204
|
+
Share: **⚙️ Share → Anyone with link → Copy**
|
|
205
|
+
|
|
206
|
+
### 4. Let Claude use it
|
|
207
|
+
```
|
|
208
|
+
"I'm building with [library]. Here's my NotebookLM: [link]"
|
|
209
|
+
```
|
|
210
|
+
|
|
211
|
+
**That's it.** Claude now asks NotebookLM whatever it needs, building expertise before writing code.
|
|
212
|
+
|
|
213
|
+
---
|
|
214
|
+
|
|
215
|
+
## Real-World Example
|
|
216
|
+
|
|
217
|
+
### Building an n8n Workflow Without Hallucinations
|
|
218
|
+
|
|
219
|
+
**Challenge**: n8n's API is new — Claude hallucinates node names and functions.
|
|
220
|
+
|
|
221
|
+
**Solution**:
|
|
222
|
+
1. Downloaded complete n8n documentation → merged into manageable chunks
|
|
223
|
+
2. Uploaded to NotebookLM
|
|
224
|
+
3. Told Claude: *"Build me a Gmail spam filter workflow. Use this NotebookLM: [link]"*
|
|
225
|
+
|
|
226
|
+
**Watch the AI-to-AI conversation:**
|
|
227
|
+
|
|
228
|
+
```
|
|
229
|
+
Claude → "How does Gmail integration work in n8n?"
|
|
230
|
+
NotebookLM → "Use Gmail Trigger with polling, or Gmail node with Get Many..."
|
|
231
|
+
|
|
232
|
+
Claude → "How to decode base64 email body?"
|
|
233
|
+
NotebookLM → "Body is base64url encoded in payload.parts, use Function node..."
|
|
234
|
+
|
|
235
|
+
Claude → "How to parse OpenAI response as JSON?"
|
|
236
|
+
NotebookLM → "Set responseFormat to json, use {{ $json.spam }} in IF node..."
|
|
237
|
+
|
|
238
|
+
Claude → "What about error handling if the API fails?"
|
|
239
|
+
NotebookLM → "Use Error Trigger node with Continue On Fail enabled..."
|
|
240
|
+
|
|
241
|
+
Claude → ✅ "Here's your complete workflow JSON..."
|
|
242
|
+
```
|
|
243
|
+
|
|
244
|
+
**Result**: Perfect workflow on first try. No debugging hallucinated APIs.
|
|
245
|
+
|
|
246
|
+
---
|
|
247
|
+
|
|
248
|
+
## Core Features
|
|
249
|
+
|
|
250
|
+
### **Zero Hallucinations**
|
|
251
|
+
NotebookLM refuses to answer if information isn't in your docs. No invented APIs.
|
|
252
|
+
|
|
253
|
+
### **Autonomous Research**
|
|
254
|
+
Claude asks follow-up questions automatically, building complete understanding before coding.
|
|
255
|
+
|
|
256
|
+
### **Smart Library Management**
|
|
257
|
+
Save NotebookLM links with tags and descriptions. Claude auto-selects the right notebook for your task.
|
|
258
|
+
```
|
|
259
|
+
"Add [link] to library tagged 'frontend, react, components'"
|
|
260
|
+
```
|
|
261
|
+
|
|
262
|
+
### **Deep, Iterative Research**
|
|
263
|
+
- Claude automatically asks follow-up questions to build complete understanding
|
|
264
|
+
- Each answer triggers deeper questions until Claude has all the details
|
|
265
|
+
- Example: For n8n workflow, Claude asked multiple sequential questions about Gmail integration, error handling, and data transformation
|
|
266
|
+
|
|
267
|
+
### **Cross-Tool Sharing**
|
|
268
|
+
Set up once, use everywhere. Claude Code, Codex, Cursor — all share the same library.
|
|
269
|
+
|
|
270
|
+
### **Deep Cleanup Tool**
|
|
271
|
+
Fresh start anytime. Scans entire system for NotebookLM data with categorized preview.
|
|
272
|
+
|
|
273
|
+
---
|
|
274
|
+
|
|
275
|
+
## Tool Profiles
|
|
276
|
+
|
|
277
|
+
Reduce token usage by loading only the tools you need. Each tool consumes context tokens — fewer tools = faster responses and lower costs.
|
|
278
|
+
|
|
279
|
+
### Available Profiles
|
|
280
|
+
|
|
281
|
+
| Profile | Tools | Use Case |
|
|
282
|
+
|---------|-------|----------|
|
|
283
|
+
| **minimal** | 5 | Query-only: `ask_question`, `get_health`, `list_notebooks`, `select_notebook`, `get_notebook` |
|
|
284
|
+
| **standard** | 10 | + Library management: `setup_auth`, `list_sessions`, `add_notebook`, `update_notebook`, `search_notebooks` |
|
|
285
|
+
| **full** | 16 | All tools including `cleanup_data`, `re_auth`, `remove_notebook`, `reset_session`, `close_session`, `get_library_stats` |
|
|
286
|
+
|
|
287
|
+
### Configure via CLI
|
|
288
|
+
|
|
289
|
+
```bash
|
|
290
|
+
# Check current settings
|
|
291
|
+
npx notelm-mcp config get
|
|
292
|
+
|
|
293
|
+
# Set a profile
|
|
294
|
+
npx notelm-mcp config set profile minimal
|
|
295
|
+
npx notelm-mcp config set profile standard
|
|
296
|
+
npx notelm-mcp config set profile full
|
|
297
|
+
|
|
298
|
+
# Disable specific tools (comma-separated)
|
|
299
|
+
npx notelm-mcp config set disabled-tools "cleanup_data,re_auth"
|
|
300
|
+
|
|
301
|
+
# Reset to defaults
|
|
302
|
+
npx notelm-mcp config reset
|
|
303
|
+
```
|
|
304
|
+
|
|
305
|
+
### Configure via Environment Variables
|
|
306
|
+
|
|
307
|
+
```bash
|
|
308
|
+
# Set profile
|
|
309
|
+
export NOTEBOOKLM_PROFILE=minimal
|
|
310
|
+
|
|
311
|
+
# Disable specific tools
|
|
312
|
+
export NOTEBOOKLM_DISABLED_TOOLS="cleanup_data,re_auth,remove_notebook"
|
|
313
|
+
```
|
|
314
|
+
|
|
315
|
+
Settings are saved to `~/.config/notelm-mcp/settings.json` and persist across sessions. Environment variables override file settings.
|
|
316
|
+
|
|
317
|
+
---
|
|
318
|
+
|
|
319
|
+
## Architecture
|
|
320
|
+
|
|
321
|
+
```mermaid
|
|
322
|
+
graph LR
|
|
323
|
+
A[Your Task] --> B[Claude/Codex]
|
|
324
|
+
B --> C[MCP Server]
|
|
325
|
+
C --> D[Chrome Automation]
|
|
326
|
+
D --> E[NotebookLM]
|
|
327
|
+
E --> F[Gemini 3]
|
|
328
|
+
F --> G[Your Docs]
|
|
329
|
+
G --> F
|
|
330
|
+
F --> E
|
|
331
|
+
E --> D
|
|
332
|
+
D --> C
|
|
333
|
+
C --> B
|
|
334
|
+
B --> H[Accurate Code]
|
|
335
|
+
```
|
|
336
|
+
|
|
337
|
+
---
|
|
338
|
+
|
|
339
|
+
## Common Commands
|
|
340
|
+
|
|
341
|
+
| Intent | Say | Result |
|
|
342
|
+
|--------|-----|--------|
|
|
343
|
+
| Authenticate | *"Open NotebookLM auth setup"* or *"Log me in to NotebookLM"* | Chrome opens for login |
|
|
344
|
+
| Add notebook | *"Add [link] to library"* | Saves notebook with metadata |
|
|
345
|
+
| List notebooks | *"Show our notebooks"* | Lists all saved notebooks |
|
|
346
|
+
| Research first | *"Research this in NotebookLM before coding"* | Multi-question session |
|
|
347
|
+
| Select notebook | *"Use the React notebook"* | Sets active notebook |
|
|
348
|
+
| Update notebook | *"Update notebook tags"* | Modify metadata |
|
|
349
|
+
| Remove notebook | *"Remove [notebook] from library"* | Deletes from library |
|
|
350
|
+
| View browser | *"Show me the browser"* | Watch live NotebookLM chat |
|
|
351
|
+
| Fix auth | *"Repair NotebookLM authentication"* | Clears and re-authenticates |
|
|
352
|
+
| Switch account | *"Re-authenticate with different Google account"* | Changes account |
|
|
353
|
+
| Clean restart | *"Run NotebookLM cleanup"* | Removes all data for fresh start |
|
|
354
|
+
| Keep library | *"Cleanup but keep my library"* | Preserves notebooks |
|
|
355
|
+
| Delete all data | *"Delete all NotebookLM data"* | Complete removal |
|
|
356
|
+
|
|
357
|
+
---
|
|
358
|
+
|
|
359
|
+
## Comparison to Alternatives
|
|
360
|
+
|
|
361
|
+
### vs. Downloading docs locally
|
|
362
|
+
- **You**: Download docs → Claude: "search through these files"
|
|
363
|
+
- **Problem**: Claude reads thousands of files → massive token usage, often misses connections
|
|
364
|
+
- **NotebookLM is now powered by **Gemini 3**, offering significantly enhanced reasoning and multimodal capabilities. The MCP server ensures direct access to these upgrades.
|
|
365
|
+
### vs. Web search
|
|
366
|
+
- **You**: "Research X online"
|
|
367
|
+
- **Problem**: Outdated info, hallucinated examples, unreliable sources
|
|
368
|
+
- **NotebookLM**: Only your trusted docs, always current, with citations
|
|
369
|
+
|
|
370
|
+
### vs. Local RAG setup
|
|
371
|
+
- **You**: Set up embeddings, vector DB, chunking strategy, retrieval pipeline
|
|
372
|
+
- **Problem**: Hours of setup, tuning retrieval, still gets "creative" with gaps
|
|
373
|
+
- **NotebookLM**: Upload docs → done. Google handles everything.
|
|
374
|
+
|
|
375
|
+
---
|
|
376
|
+
|
|
377
|
+
## FAQ
|
|
378
|
+
|
|
379
|
+
**Is it really zero hallucinations?**
|
|
380
|
+
Yes. NotebookLM is specifically designed to only answer from uploaded sources. If it doesn't know, it says so.
|
|
381
|
+
|
|
382
|
+
**What about rate limits?**
|
|
383
|
+
Free tier has daily query limits per Google account. Quick account switching supported for continued research.
|
|
384
|
+
|
|
385
|
+
**How secure is this?**
|
|
386
|
+
Chrome runs locally. Your credentials never leave your machine. Use a dedicated Google account if concerned.
|
|
387
|
+
|
|
388
|
+
**Can I see what's happening?**
|
|
389
|
+
Yes! Say *"Show me the browser"* to watch the live NotebookLM conversation.
|
|
390
|
+
|
|
391
|
+
**What makes this better than Claude's built-in knowledge?**
|
|
392
|
+
Your docs are always current. No training cutoff. No hallucinations. Perfect for new libraries, internal APIs, or fast-moving projects.
|
|
393
|
+
|
|
394
|
+
---
|
|
395
|
+
|
|
396
|
+
## Advanced Usage
|
|
397
|
+
|
|
398
|
+
- 📖 [**Usage Guide**](./docs/usage-guide.md) — Patterns, workflows, tips
|
|
399
|
+
- 🛠️ [**Tool Reference**](./docs/tools.md) — Complete MCP API
|
|
400
|
+
- 🔧 [**Configuration**](./docs/configuration.md) — Environment variables
|
|
401
|
+
- 🐛 [**Troubleshooting**](./docs/troubleshooting.md) — Common issues
|
|
402
|
+
|
|
403
|
+
---
|
|
404
|
+
|
|
405
|
+
## The Bottom Line
|
|
406
|
+
|
|
407
|
+
**Without NotebookLM MCP**: Write code → Find it's wrong → Debug hallucinated APIs → Repeat
|
|
408
|
+
|
|
409
|
+
**With NotebookLM MCP**: Claude researches first → Writes correct code → Ship faster
|
|
410
|
+
|
|
411
|
+
Stop debugging hallucinations. Start shipping accurate code.
|
|
412
|
+
|
|
413
|
+
```bash
|
|
414
|
+
# Get started in 30 seconds
|
|
415
|
+
claude mcp add notebooklm npx notelm-mcp@latest
|
|
416
|
+
```
|
|
417
|
+
|
|
418
|
+
---
|
|
419
|
+
|
|
420
|
+
## Disclaimer
|
|
421
|
+
|
|
422
|
+
This tool automates browser interactions with NotebookLM to make your workflow more efficient. However, a few friendly reminders:
|
|
423
|
+
|
|
424
|
+
**About browser automation:**
|
|
425
|
+
While I've built in humanization features (realistic typing speeds, natural delays, mouse movements) to make the automation behave more naturally, I can't guarantee Google won't detect or flag automated usage. I recommend using a dedicated Google account for automation rather than your primary account—think of it like web scraping: probably fine, but better safe than sorry!
|
|
426
|
+
|
|
427
|
+
**About CLI tools and AI agents:**
|
|
428
|
+
CLI tools like Claude Code, Codex, and similar AI-powered assistants are incredibly powerful, but they can make mistakes. Please use them with care and awareness:
|
|
429
|
+
- Always review changes before committing or deploying
|
|
430
|
+
- Test in safe environments first
|
|
431
|
+
- Keep backups of important work
|
|
432
|
+
- Remember: AI agents are assistants, not infallible oracles
|
|
433
|
+
|
|
434
|
+
I built this tool for myself because I was tired of the copy-paste dance between NotebookLM and my editor. I'm sharing it in the hope it helps others too, but I can't take responsibility for any issues, data loss, or account problems that might occur. Use at your own discretion and judgment.
|
|
435
|
+
|
|
436
|
+
That said, if you run into problems or have questions, feel free to open an issue on GitHub. I'm happy to help troubleshoot!
|
|
437
|
+
|
|
438
|
+
---
|
|
439
|
+
|
|
440
|
+
## Contributing
|
|
441
|
+
|
|
442
|
+
Found a bug? Have a feature idea? [Open an issue](https://github.com/PleasePrompto/notelm-mcp/issues) or submit a PR!
|
|
443
|
+
|
|
444
|
+
## License
|
|
445
|
+
|
|
446
|
+
MIT — Use freely in your projects.
|
|
447
|
+
|
|
448
|
+
---
|
|
449
|
+
|
|
450
|
+
<div align="center">
|
|
451
|
+
|
|
452
|
+
Built with frustration about hallucinated APIs, powered by Google's NotebookLM
|
|
453
|
+
|
|
454
|
+
⭐ [Star on GitHub](https://github.com/PleasePrompto/notelm-mcp) if this saves you debugging time!
|
|
455
|
+
|
|
456
|
+
</div>
|
|
@@ -0,0 +1,139 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Authentication Manager for NotebookLM
|
|
3
|
+
*
|
|
4
|
+
* Handles:
|
|
5
|
+
* - Interactive login (headful browser for setup)
|
|
6
|
+
* - Auto-login with credentials (email/password from ENV)
|
|
7
|
+
* - Browser state persistence (cookies + localStorage + sessionStorage)
|
|
8
|
+
* - Cookie expiry validation
|
|
9
|
+
* - State expiry checks (24h file age)
|
|
10
|
+
* - Hard reset for clean start
|
|
11
|
+
*
|
|
12
|
+
* Based on the Python implementation from auth.py
|
|
13
|
+
*/
|
|
14
|
+
import type { BrowserContext, Page } from "patchright";
|
|
15
|
+
import type { ProgressCallback } from "../types.js";
|
|
16
|
+
export declare class AuthManager {
|
|
17
|
+
private stateFilePath;
|
|
18
|
+
private sessionFilePath;
|
|
19
|
+
constructor();
|
|
20
|
+
/**
|
|
21
|
+
* Save entire browser state (cookies + localStorage)
|
|
22
|
+
*/
|
|
23
|
+
saveBrowserState(context: BrowserContext, page?: Page): Promise<boolean>;
|
|
24
|
+
/**
|
|
25
|
+
* Check if saved browser state exists
|
|
26
|
+
*/
|
|
27
|
+
hasSavedState(): Promise<boolean>;
|
|
28
|
+
/**
|
|
29
|
+
* Get path to saved browser state
|
|
30
|
+
*/
|
|
31
|
+
getStatePath(): string | null;
|
|
32
|
+
/**
|
|
33
|
+
* Get valid state path (checks expiry)
|
|
34
|
+
*/
|
|
35
|
+
getValidStatePath(): Promise<string | null>;
|
|
36
|
+
/**
|
|
37
|
+
* Load sessionStorage from file
|
|
38
|
+
*/
|
|
39
|
+
loadSessionStorage(): Promise<Record<string, string> | null>;
|
|
40
|
+
/**
|
|
41
|
+
* Validate if saved state is still valid
|
|
42
|
+
*/
|
|
43
|
+
validateState(context: BrowserContext): Promise<boolean>;
|
|
44
|
+
/**
|
|
45
|
+
* Validate if critical authentication cookies are still valid
|
|
46
|
+
*/
|
|
47
|
+
validateCookiesExpiry(context: BrowserContext): Promise<boolean>;
|
|
48
|
+
/**
|
|
49
|
+
* Check if the saved state file is too old (>24 hours)
|
|
50
|
+
*/
|
|
51
|
+
isStateExpired(): Promise<boolean>;
|
|
52
|
+
/**
|
|
53
|
+
* Perform interactive login
|
|
54
|
+
* User will see a browser window and login manually
|
|
55
|
+
*
|
|
56
|
+
* SIMPLE & RELIABLE: Just wait for URL to change to notebooklm.google.com
|
|
57
|
+
*/
|
|
58
|
+
performLogin(page: Page, sendProgress?: ProgressCallback): Promise<boolean>;
|
|
59
|
+
/**
|
|
60
|
+
* Attempt to authenticate using configured credentials
|
|
61
|
+
*/
|
|
62
|
+
loginWithCredentials(context: BrowserContext, page: Page, email: string, password: string): Promise<boolean>;
|
|
63
|
+
/**
|
|
64
|
+
* Wait for Google to redirect to NotebookLM after successful login (SIMPLE & RELIABLE)
|
|
65
|
+
*
|
|
66
|
+
* Just checks if URL changes to notebooklm.google.com - no complex UI element searching!
|
|
67
|
+
* Matches the simplified approach used in performLogin().
|
|
68
|
+
*/
|
|
69
|
+
private waitForRedirectAfterLogin;
|
|
70
|
+
/**
|
|
71
|
+
* Wait for NotebookLM to load (SIMPLE & RELIABLE)
|
|
72
|
+
*
|
|
73
|
+
* Just checks if URL starts with notebooklm.google.com - no complex UI element searching!
|
|
74
|
+
* Matches the simplified approach used in performLogin().
|
|
75
|
+
*/
|
|
76
|
+
private waitForNotebook;
|
|
77
|
+
/**
|
|
78
|
+
* Handle possible account chooser
|
|
79
|
+
*/
|
|
80
|
+
private handleAccountChooser;
|
|
81
|
+
/**
|
|
82
|
+
* Fill email identifier field with human-like typing
|
|
83
|
+
*/
|
|
84
|
+
private fillIdentifier;
|
|
85
|
+
/**
|
|
86
|
+
* Fill password field with human-like typing
|
|
87
|
+
*/
|
|
88
|
+
private fillPassword;
|
|
89
|
+
/**
|
|
90
|
+
* Click text element
|
|
91
|
+
*/
|
|
92
|
+
private clickText;
|
|
93
|
+
/**
|
|
94
|
+
* Mask email for logging
|
|
95
|
+
*/
|
|
96
|
+
private maskEmail;
|
|
97
|
+
/**
|
|
98
|
+
* Load authentication state from a specific file path
|
|
99
|
+
*/
|
|
100
|
+
loadAuthState(context: BrowserContext, statePath: string): Promise<boolean>;
|
|
101
|
+
/**
|
|
102
|
+
* Perform interactive setup (for setup_auth tool)
|
|
103
|
+
* Opens a PERSISTENT browser for manual login
|
|
104
|
+
*
|
|
105
|
+
* CRITICAL: Uses the SAME persistent context as runtime!
|
|
106
|
+
* This ensures cookies are automatically saved to the Chrome profile.
|
|
107
|
+
*
|
|
108
|
+
* Benefits over temporary browser:
|
|
109
|
+
* - Session cookies persist correctly (Playwright bug workaround)
|
|
110
|
+
* - Same fingerprint as runtime
|
|
111
|
+
* - No need for addCookies() workarounds
|
|
112
|
+
* - Automatic cookie persistence via Chrome profile
|
|
113
|
+
*
|
|
114
|
+
* @param sendProgress Optional progress callback
|
|
115
|
+
* @param overrideHeadless Optional override for headless mode (true = visible, false = headless)
|
|
116
|
+
* If not provided, defaults to true (visible) for setup
|
|
117
|
+
*/
|
|
118
|
+
performSetup(sendProgress?: ProgressCallback, overrideHeadless?: boolean): Promise<boolean>;
|
|
119
|
+
/**
|
|
120
|
+
* Clear ALL authentication data for account switching
|
|
121
|
+
*
|
|
122
|
+
* CRITICAL: This deletes EVERYTHING to ensure only ONE account is active:
|
|
123
|
+
* - All state.json files (cookies, localStorage)
|
|
124
|
+
* - sessionStorage files
|
|
125
|
+
* - Chrome profile directory (browser fingerprint, cache, etc.)
|
|
126
|
+
*
|
|
127
|
+
* Use this BEFORE authenticating a new account!
|
|
128
|
+
*/
|
|
129
|
+
clearAllAuthData(): Promise<void>;
|
|
130
|
+
/**
|
|
131
|
+
* Clear all saved authentication state
|
|
132
|
+
*/
|
|
133
|
+
clearState(): Promise<boolean>;
|
|
134
|
+
/**
|
|
135
|
+
* HARD RESET: Completely delete ALL authentication state
|
|
136
|
+
*/
|
|
137
|
+
hardResetState(): Promise<boolean>;
|
|
138
|
+
}
|
|
139
|
+
//# sourceMappingURL=auth-manager.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"auth-manager.d.ts","sourceRoot":"","sources":["../../src/auth/auth-manager.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAEH,OAAO,KAAK,EAAE,cAAc,EAAE,IAAI,EAAE,MAAM,YAAY,CAAC;AAYvD,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAGpD,qBAAa,WAAW;IACtB,OAAO,CAAC,aAAa,CAAS;IAC9B,OAAO,CAAC,eAAe,CAAS;;IAWhC;;OAEG;IACG,gBAAgB,CAAC,OAAO,EAAE,cAAc,EAAE,IAAI,CAAC,EAAE,IAAI,GAAG,OAAO,CAAC,OAAO,CAAC;IAwC9E;;OAEG;IACG,aAAa,IAAI,OAAO,CAAC,OAAO,CAAC;IASvC;;OAEG;IACH,YAAY,IAAI,MAAM,GAAG,IAAI;IAQ7B;;OAEG;IACG,iBAAiB,IAAI,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC;IAejD;;OAEG;IACG,kBAAkB,IAAI,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,IAAI,CAAC;IAgBlE;;OAEG;IACG,aAAa,CAAC,OAAO,EAAE,cAAc,GAAG,OAAO,CAAC,OAAO,CAAC;IAoC9D;;OAEG;IACG,qBAAqB,CAAC,OAAO,EAAE,cAAc,GAAG,OAAO,CAAC,OAAO,CAAC;IAiDtE;;OAEG;IACG,cAAc,IAAI,OAAO,CAAC,OAAO,CAAC;IAsBxC;;;;;OAKG;IACG,YAAY,CAAC,IAAI,EAAE,IAAI,EAAE,YAAY,CAAC,EAAE,gBAAgB,GAAG,OAAO,CAAC,OAAO,CAAC;IAmFjF;;OAEG;IACG,oBAAoB,CACxB,OAAO,EAAE,cAAc,EACvB,IAAI,EAAE,IAAI,EACV,KAAK,EAAE,MAAM,EACb,QAAQ,EAAE,MAAM,GACf,OAAO,CAAC,OAAO,CAAC;IA2InB;;;;;OAKG;YACW,yBAAyB;IA4BvC;;;;;OAKG;YACW,eAAe;IAsB7B;;OAEG;YACW,oBAAoB;IA+BlC;;OAEG;YACW,cAAc;IA2H5B;;OAEG;YACW,YAAY;IA+F1B;;OAEG;YACW,SAAS;IAiBvB;;OAEG;IACH,OAAO,CAAC,SAAS;IAejB;;OAEG;IACG,aAAa,CAAC,OAAO,EAAE,cAAc,EAAE,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAqBjF;;;;;;;;;;;;;;;;OAgBG;IACG,YAAY,CAAC,YAAY,CAAC,EAAE,gBAAgB,EAAE,gBAAgB,CAAC,EAAE,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC;IAoEjG;;;;;;;;;OASG;IACG,gBAAgB,IAAI,OAAO,CAAC,IAAI,CAAC;IAuCvC;;OAEG;IACG,UAAU,IAAI,OAAO,CAAC,OAAO,CAAC;IAsBpC;;OAEG;IACG,cAAc,IAAI,OAAO,CAAC,OAAO,CAAC;CAgDzC"}
|