notebooklm-mcp
Allows adding Google Docs as sources to notebooks and reading metadata from Google Docs custom properties.
Allows accessing files from Google Drive for use as sources in notebooks.
Click on "Install Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@notebooklm-mcpList my recent notebooks and sources"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
NotebookLM MCP Server
MCP server for NotebookLM with hybrid metadata enforcement (API-native fields + Google Docs custom properties + local JSON storage).
Features
✅ Metadata Operations: Validate, get, set, and query custom metadata
✅ Notebook Operations: List, get, create, delete, and share notebooks (via NotebookLM API)
✅ Source Operations: Add, get, and remove sources (Google Docs, PDFs, URLs, etc.)
✅ Audio Overviews: Generate and delete audio overviews
✅ Hybrid Storage: Three-layer metadata storage (API fields, Google Docs, local JSON)
✅ OAuth2 Authentication: Secure authentication with auto-refresh
✅ Caching: 30-second TTL for optimal performance
✅ TDD: 89+ tests with comprehensive coverage
Related MCP server: notebooklm-mcp-2026
Architecture
MCP Server
↓
Metadata Manager (Orchestrator)
↓ ↓ ↓
[NotebookLM API] [Google Docs API] [Local JSON Store]Prerequisites
Node.js 18+
Google Cloud Project with:
NotebookLM Enterprise API enabled
Google Docs API enabled
Google Drive API enabled
OAuth2 credentials (client ID and secret)
Installation
# Clone or copy to your machine
cd /path/to/notebooklm-mcp
# Install dependencies
npm install
# Build
npm run buildConfiguration
1. Set up OAuth2 Credentials
Set environment variables:
export GOOGLE_CLIENT_ID="your-client-id.apps.googleusercontent.com"
export GOOGLE_CLIENT_SECRET="your-client-secret"Or create .env file:
GOOGLE_CLIENT_ID=your-client-id
GOOGLE_CLIENT_SECRET=your-client-secret2. Authenticate (First Time)
Run the setup flow:
npm run setup # TODO: Implement OAuth web flow in futureThis will:
Open your browser to Google OAuth consent screen
Request permissions for NotebookLM, Google Docs, and Drive
Save credentials to
~/.notebooklm-mcp/credentials.json
Manual Testing
Before using the MCP server in production, we recommend following the manual testing guide to verify everything works correctly.
👉 Complete Manual Testing Guide
The guide walks you through:
Phase 1: No-auth metadata validation (5-10 min)
Phase 2: OAuth setup and Claude Code integration (10-15 min)
Phase 3: End-to-end workflow testing (15-20 min)
Quick test (after installation):
# Build the server
npm run build
# Run automated tests
npm test
# Expected: 89 tests passing (10 test suites)For detailed testing including OAuth and Claude Code integration, see the Manual Testing Guide.
Usage
Start MCP Server
npm startThe server runs on stdio and can be used with Claude Code.
Configure in Claude Code
Add to your Claude Code MCP configuration:
Desktop: ~/.claude/desktop-config.json
{
"mcpServers": {
"notebooklm": {
"command": "/path/to/notebooklm-mcp/bin/notebooklm-mcp",
"env": {
"GOOGLE_CLIENT_ID": "your-client-id",
"GOOGLE_CLIENT_SECRET": "your-client-secret"
}
}
}
}Available MCP Tools
Metadata Operations
notebooklm_validate_metadata- Validate metadata against schemanotebooklm_get_metadata- Get metadata for notebook/sourcenotebooklm_set_metadata- Set metadatanotebooklm_query_metadata- Query by metadata filter
Notebook Operations
notebooklm_list_notebooks- List recently viewed notebooksnotebooklm_get_notebook- Get notebook details with sourcesnotebooklm_create_notebook- Create new notebooknotebooklm_delete_notebook- Delete notebook(s)notebooklm_share_notebook- Share notebook with user
Source Operations
notebooklm_add_sources- Add sources to notebooknotebooklm_get_source- Get source detailsnotebooklm_remove_sources- Remove sources
Audio Overview Operations
notebooklm_generate_audio- Generate audio overviewnotebooklm_delete_audio- Delete audio overview
Metadata Schema (v1.0)
Required Fields
{
type: "notebook-source" // Fixed value
project: string // Project name
status: "active" | "archived" | "reference" | "in-progress"
}Optional Fields
{
area?: string // PARA area (e.g., "vocation/spreetail")
tags?: string[] // Custom tags
created?: string // ISO date (YYYY-MM-DD)
modified?: string // ISO date (YYYY-MM-DD)
customFields?: object // Extensible custom metadata
}Example
{
"type": "notebook-source",
"project": "palomino-nas",
"status": "active",
"area": "vocation/spreetail",
"tags": ["infrastructure", "backup"],
"created": "2026-02-17",
"modified": "2026-02-17",
"customFields": {
"priority": "high",
"owner": "brockbutler"
}
}Development
Run Tests
make test
# or
npm testWatch Mode (TDD)
make test-watch
# or
npm run test:watchCoverage Report
make test-coverageBuild
make build
# or
npm run buildProject Structure
/Users/brockstudio/Projects/notebooklm-mcp/
├── src/
│ ├── index.ts # Entry point
│ ├── server.ts # MCP server with 14 tools
│ ├── config.ts # Configuration
│ ├── validators/
│ │ └── schema.ts # Metadata validation
│ ├── storage/
│ │ └── metadata-store.ts # Local JSON store
│ ├── cache/
│ │ └── manager.ts # TTL cache
│ ├── auth/
│ │ └── oauth.ts # OAuth2 manager
│ ├── clients/
│ │ ├── notebooklm.ts # NotebookLM API client
│ │ └── google-docs.ts # Google Docs API client
│ └── managers/
│ └── metadata.ts # Metadata orchestrator
├── tests/
│ ├── unit/ # Unit tests
│ ├── integration/ # Integration tests
│ └── setup.ts # Test setup
├── bin/
│ └── notebooklm-mcp # Executable wrapper
├── dist/ # Compiled JavaScript
├── package.json
├── tsconfig.json
├── jest.config.js
├── Makefile
└── README.mdRuntime Files
~/.notebooklm-mcp/
├── credentials.json # OAuth tokens (chmod 600)
├── metadata.json # Local metadata store
└── metadata.json.backup # Backup (on corruption)Implementation Status
✅ Completed (Tasks 1-14)
Project scaffold and configuration
Metadata validator with schema enforcement
Local JSON store with atomic writes
Cache manager with TTL
OAuth2 credentials storage and token refresh
Google Docs API client (stub)
NotebookLM API client (stub)
Metadata manager orchestration layer
MCP server with 14 tools
Comprehensive testing (89+ tests)
Integration and end-to-end tests
🔲 Future Enhancements (Post-MVP)
OAuth2 web flow setup wizard
Real Google Docs API integration
Real NotebookLM API integration
Advanced querying (full-text search)
Multi-device metadata sync
Cloud backup for metadata
Troubleshooting
"No credentials found"
Run the setup flow to authenticate with Google:
npm run setup # TODO: Implement OAuth web flow"Token refresh failed"
Your refresh token may have expired. Re-run setup:
rm ~/.notebooklm-mcp/credentials.json
npm run setup"NotebookLM API not yet implemented"
The NotebookLM API operations are currently stubs. They will be implemented in a future phase with real API integration.
Contributing
This project follows TDD principles. All new features require tests.
License
MIT
Design Documents
Architecture:
/Users/brockstudio/Projects/palomino-nas/docs/plans/2026-02-16-notebooklm-api-redesign.mdImplementation Plan:
/Users/brockstudio/Projects/palomino-nas/docs/plans/2026-02-16-notebooklm-api-implementation.md
Available Tools
14 toolsnotebooklm_add_sourcesB
Add sources to a notebook
| Name | Required | Description | Default |
|---|---|---|---|
| sources | Yes | Sources to add | |
| notebookId | Yes | Notebook ID |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries full responsibility for behavioral disclosure. It only says 'Add sources to a notebook' and does not disclose side effects, authorization requirements, accepted source formats, duplicate handling, or whether the operation appends vs replaces.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single, direct sentence with no wasted words. The core operation is front-loaded and easy to parse.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a mutation tool with no annotations, no output schema, and no item schema for sources, ths description is too sparse. An agent does not know what a valid source entry looks like (URL, file, structured object), what constraints exist, or what the result will be.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the baseline is 3. The description adds no meaning beyond the schema; sources and notebookId are described in only the most generic terms, but the schema at least lables them accurately.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states a specific action (Add) and resource (sources to a notebook). The verb distinguishes it from sibling tools like remove_sources and get_source, so an agent can identify what this tool does even without inspecting the schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No usage guidance is provided. The description merely restates the operation; it does not say when to prefer this tool over notebooklm_add_sources siblings, mention prerequisites, or note when not to use it.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
notebooklm_create_notebookC
Create a new notebook
| Name | Required | Description | Default |
|---|---|---|---|
| title | Yes | Notebook title | |
| description | No | Notebook description |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden, but it only restates the creation action. It discloses no return value, created-notebook identifier, persistence behavior, idempotency, or authorization requirements.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single five-word sentence with no filler or redundant phrasing. It is maximally concise and front-loads the tool's purpose.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Despite complete parameter schema coverage, the tool has no annotations and no output schema, so the agent is left without information about what the create operation returns or what side effects to expect. The description alone is too thin for a mutating operation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema already describes both parameters (`title` and `description`) with 100% coverage, so the description does not need to add parameter semantics. It adds nothing beyond the schema, matching the baseline.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the operation ('Create') and the resource ('a new notebook'`), so an agent can tell what the tool does. It does not explicitly name or contrast sibling tools, but the action is unambiguous among the sibling set.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance is given for when to use this tool versus siblings like notebooklm_list_notebooks, notebooklm_get_notebook, or notebooklm_share_notebook. The intended usage is only implied by the verb 'Create', with no prerequisites, exclusions, or alternatves.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
notebooklm_delete_audioC
Delete audio overview
| Name | Required | Description | Default |
|---|---|---|---|
| notebookId | Yes | Notebook ID |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden of behavioral disclosure. It does communicate that the operation is destructive, but it does not state whether deletion is permanent, whether it affects the notebook or its sources, or what happens after deletion. For a deletion tool, this is a significant transparency gap.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is extremely concise and front-loaded with the verb 'Delete', with no wasted words. However, it borders on under-specification, so it is efficient but not richly informative.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a destructive tool with no annotations, no output schema, and only a one-line description, important context is missing: the scope of deletion, irreversibility, side effects, and expected return behavior. Agents may understand the basic action but cannot fully anticipate the consequences of calling this tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema already documents notebookId with 'Notebook ID' and has 100% description coverage, so the baseline is 3. The description adds no additional meaning about the parameter, such as where to find the ID or what values are valid.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb ('Delete') and a specific resource ('audio overview'), so the core action is unambiguous. It is distinguishable from siblings like notebooklm_generate_audio and notebooklm_delete_notebook by resource and action, but it does not explicitly name alternatives or clarify whether it deletes all audio overviews for the notebook or a specific one.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no guidance about when to use this tool versus alternatives such as notebooklm_remove_sources or notebooklm_delete_notebook. No context, prerequisites, or exclusions are provided, so an agent receives no help choosing or invoking the tool appropriately.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
notebooklm_delete_notebookC
Delete notebook(s)
| Name | Required | Description | Default |
|---|---|---|---|
| notebookIds | Yes | Notebook IDs to delete |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden of disclosing behaviors, but it simply says 'Delete' without stating whether the deletion is permanent, whether it cascades to sources or audio, or whether any confirmation or special permissions are needed. For a destructive operation, this is a significant transparency gap.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is extremely concise and front-loaded: 'Delete notebook(s)' communicates the essential action with no waste. It does not restate the tool name verbatim but is close to it; however, the plural and simplicity make it an efficient, appropriately sized description for a simple one-parameter tool.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description is minimally adequate for identifying the action, but it lacks important contextual information expected for a destructive tool with no annotations and no output schema. It does not mention consequences, reversibility, or scope of deletion, leaving an agent uncertain about the impact and whether any additional safeguards or confirmation steps are needed.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema already documents the notebookIds parameter with a description, and schema coverage is 100%, so the baseline is 3. The tool description adds no additional semantic information about the parameter beyond what the schema provides. This is acceptable when the schema is complete.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
'Delete notebook(s)' states a clear verb (delete) and direct object (notebook(s)), which distinguishes it from sibling tools like get, create, or list. The plural 's' hints at batch deletion, matching the array parameter. It could be more explicit about whether the deletion is permanent, but the core purpose is unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides no guidance on when to use this tool versus alternatives, no exclusions, and no prerequisites. An agent is left to infer that this is the tool for removing notebooks, but there is no mention of scenarios where another tool would be more appropriate or any state requirements.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
notebooklm_generate_audioC
Generate audio overview for a notebook
| Name | Required | Description | Default |
|---|---|---|---|
| options | No | ||
| notebookId | Yes | Notebook ID |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden of behavioral disclosure. It only says 'Generate audio overview,' omitting important traits such as whether generation is asynchronous, whether pre-existing sources are required, or what resource is created. There is no contradiction with annotations because none exist.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single sentence with no wasted words and front-loads the core action. It is efficient, though its brevity comes at the cost of behavioral and contextual detail.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the absence of annotations and output schema, the description is not complete enough. It fails to mention the customization options available, any asynchronous or long-running behavior, or what the result of generation looks like, leaving an agent with insufficient context for confident invocation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is effectively complete: notebookId, sourceIds, episodeFocus, and languageCode all have descriptions. The description itself adds no parameter-level meaning, so it stays at the baseline for schema-covered parameters.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb and resource: 'Generate audio overview for a notebook.' This clearly distinguishes it from sibling tools like deleting audio or managing sources. It is less than a 5 because it does not elaborate on what an 'audio overview' is or explicitly contrast itself with any sibling.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance is provided on when to use this tool versus alternatives, nor on prerequisites such as the notebook needing to exist or contain sources. The description simply states the action without any contextual or exclusionary information.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
notebooklm_get_metadataC
Get metadata for a notebook or source
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | Resource ID | |
| type | Yes | Type of resource |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden of behavioral disclosure. 'Get' implies a read-only action, but the description does not explain what metadata is returned, whether the operation can fail for missing resources, or any authentication or access considerations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, clear sentence with no filler or redundancy. It is appropriately front-loaded, though it could have included a brief usage hint without becoming verbose.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, no annotations, and a generic phrase like 'metadata', the description is not complete enough for an agent to know what to expect. The tool is simple, but the description still leaves notable gaps around return content, edge cases, and differentiation from the query_metadata sibling.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema already provides 100% parameter coverage with descriptions for both id and type, and the enum defines the accepted resource types. The description adds no parameter-specific meaning beyond what the schema provides, so the baseline score of 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a clear verb ('Get') and a specific resource ('metadata for a notebook or source'), and the type enum in the schema reinforces the two target resources. It is not a tautology and is easily distinguished from set/validate metadata siblings, though it does not explicitly distinguish itself from query_metadata.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance is given about when to use this tool versus notebooklm_query_metadata, notebooklm_validate_metadata, or notebooklm_set_metadata. The description implies a simple read operation but leaves the choice between get and query metadata entirely to inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
notebooklm_get_notebookB
Get notebook details with sources
| Name | Required | Description | Default |
|---|---|---|---|
| notebookId | Yes | Notebook ID |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the burden of behavioral disclosure, but it only says it gets notebook details with sources. It does not mention authentication requirements, response shape, whether sources are summarized or full, or any other behavioral context.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single concise phrase with no filler or redundant information. It is front-loaded with the key intent and adequately sized for the simple operation.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a one-parameter getter, the description states enough to attempt the call, but without an output schema or usage guidance it leaves the return structure and selection among sibling tools unclear. It is minimally viable but has clear gaps.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema has 100% coverage for the single parameter with a basic 'Notebook ID' description. The tool description adds no parameter-specific detail, so the schema already carries the meaning; baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description names a specific verb ('Get') and resource ('notebook details with sources'), making the operation clear. It distinguishes itself from sibling tools like list_notebooks (which lists) and get_source (which targets a single source).
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance is provided on when to use this tool versus alternatives such as notebooklm_get_metadata or notebooklm_get_source. The description does not state exclusions, prerequisites, or typical scenarios.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
notebooklm_get_sourceC
Get source details
| Name | Required | Description | Default |
|---|---|---|---|
| sourceId | Yes | Source ID |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden of behavioral disclosure. 'Get source details' implies a read-only operation, but gives no information about permissions, response shape, errors, or whether the sourceId must belong to a specific notebook. This is minimal transparency for a tool with zero annotation support.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, concise sentence with no filler or redundancy. It is front-loaded with the action and resource, which is exactly what the format calls for, even if richer detail is absent.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given no output schema and no annotations, the description should provide more context about what 'source details' means, what information is returned, and any prerequisite context. The one-parameter schema is simple, but the missing behavioral and contextual information leaves the agent under-informed.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The only parameter, sourceId, has a tautological description ('Source ID') and full 100% schema coverage, so the schema already documents the parameter. The description text adds no additional meaning about sourceId format, ownership, or how to obtain valid values.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly identifies the action (get) and resource (source details), so an agent knows this is a retrieval operation on a source. It does not meaningfully distinguish itself from siblings like notebooklm_get_metadata or notebooklm_get_notebook, since 'details' is not elaborated.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance is provided about when to use this tool versus alternatives. For example, there is no mention that notebooklm_get_metadata should be used for metadata retrieval, or that this returns full source details instead. The agent must infer usage entirely from the name and sibling list.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
notebooklm_list_notebooksA
List recently viewed notebooks
| Name | Required | Description | Default |
|---|---|---|---|
| pageSize | No | Number of notebooks to return |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description must carry behavioral weight. It discloses that this is a list/read operation and that results are limited to recently viewed notebooks, but it does not mention pagination defaults, ordering, result shape, or access restrictions. Some behavior is conveyed, but not deeply.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, front-loaded sentence with no filler. Every word in 'List recently viewed notebooks' contributes to understanding.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple one-parameter list call, the description is mostly adequate, but with no output schema it does not clarify what a returned notebook object looks like or what 'recently viewed' means in terms of ordering and time window. It is not severely incomplete, but has clear gaps.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema covers pageSize with the description 'Number of notebooks to return' (100% coverage), so the baseline is 3. The tool description adds nothing about pageSize behavior such as default or maximum values.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description names a specific verb ('List'), a resource ('notebooks'), and a scope qualifier ('recently viewed'), making it distinct from sibling operations like get_notebook or create_notebook. This is enough for an agent to know what the tool does without opening the schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The phrase 'recently viewed' provides clear context for when this tool is appropriate: a user wants their recent notebooks. It does not explicitly name alternatives or exclusions, but the sibling list makes the read/list intent obvious compared to metadata or mutation tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
notebooklm_query_metadataC
Query notebooks or sources by metadata
| Name | Required | Description | Default |
|---|---|---|---|
| type | Yes | Type of resource | |
| filter | Yes | Metadata filter |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden of behavioral disclosure. 'Query' implies read-only, but the description does not disclose return format, pagination, filtering semantics (exact vs partial match), or behavior on no results. It is not misleading, but it is far from transparent for an agent.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single concise sentence with no wasted words. It front-loads the action and resource, making it quick for an agent to parse.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a tool with a nested filter object and no output schema or annotations, the description is too sparse. It lacks guidance on filter structure, result shape, and how this query differs from sibling tools, leaving significant gaps for an agent selecting and invoking the tool correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema describes both parameters with 100% coverage: 'type' has an enum with description and 'filter' is described as 'Metadata filter'. The description adds only minimal value by confirming the filter is metadata-based, so baseline 3 is appropriate given schema coverage.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb ('Query'), resource ('notebooks or sources'), and search criterion ('by metadata'), so an agent can grasp the core purpose. It is somewhat distinct from sibling metadata tools because it implies searching resources by metadata rather than retrieving metadata for a resource, but it does not explicitly distinguish that behavior.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no guidance on when to use this tool versus alternatives like notebooklm_get_metadata or notebooklm_list_notebooks. The description gives no exclusions, prerequisites, or context for choosing between metadata-related siblings. An agent would have to infer usage from the name alone.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
notebooklm_remove_sourcesB
Remove sources from a notebook
| Name | Required | Description | Default |
|---|---|---|---|
| sourceIds | Yes | Source IDs to remove |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
There are no annotations to cover safety or side effects, and the description only says 'Remove sources' without disclosing whether removal is permanent, whether it affects generated audio or other notebook content, or what state the sources enter after removal. This leaves the agent without needed behavioral context for a destructive operation.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single front-loaded sentence with no filler. Every word contributes to understanding the tool's purpose.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a destructive mutation with no annotations, output schema, or elaboration on side effects, this description is thin. It tells what is removed but does not say what happens afterward, whether the operation is reversible, or what an agent should expect as a result. More context would be needed for confident invocation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema fully covers the sole parameter sourceIds with the description 'Source IDs to remove.' Schema coverage is 100%, so the description does not need to add much; it offers no extra semantic detail but also leaves no gap.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states exactly what the tool does with a specific verb and resource: 'Remove sources from a notebook.' This clearly distinguishes it from sibling tools like notebooklm_add_sources and notebooklm_get_source.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage is implied: use this when sources need to be removed from a notebook. However, there is no explicit guidance about when to choose this over alternatives, nor any caveats about prerequisites or relationships to other operations such as adding or fetching sources.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
notebooklm_set_metadataC
Set metadata for a notebook or source
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | Resource ID | |
| type | Yes | Type of resource | |
| metadata | Yes | Metadata to set |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden of disclosing behavior, but only states that metadata is 'set'. It does not explain whether existing metadata is replaced or merged, whether any validation is performed, or what side effects occur. This is a significant gap for a mutating operation.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, front-loaded sentence with no filler words. It conveys the core purpose efficiently without redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The tool has three required parameters including a nested metadata object, no output schema, and no annotations, yet the description provides only a high-level purpose. It does not cover semantics of 'set' (merge vs. replace), metadata shape constraints, or error behavior. This leaves an agent without enough context to invoke the tool correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema already describes all three parameters ('Resource ID', 'Type of resource', 'Metadata to set'), so schema coverage is complete. The tool description adds little beyond the schema, except confirming the type parameter selects a notebook or source. Baseline of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb ('set') and resource ('metadata') and enumerates the target resource types ('notebook or source'), making it clear what the tool does. It distinguishes from siblings such as get_metadata and query_metadata through the 'set' verb, though it does not explicitly name alternatives. Overall clear and unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description offers no guidance on when to choose this tool over siblings like validate_metadata or query_metadata. No conditions, prerequisites, or exclusions are provided. The only implied usage is from the verb 'set', which is not enough.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
notebooklm_validate_metadataC
Validate metadata against schema
| Name | Required | Description | Default |
|---|---|---|---|
| metadata | Yes | Metadata to validate |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description must carry the burden of explaining behavior. 'Validate' implies a read-only check, but the description does not disclose whether invalid metadata returns a boolean, throws an error, or reports detailed validation failures. Side-effect and error behavior are completely unspecified.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, four-word sentence with no filler or redundancy. It front-loads the core action and is maximally economical for the basic purpose it conveys.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a tool with no output schema and no annotations, the description leaves return values, error behavior, and the exact validation schema unspecified. It is enough to guess the general purpose but not enough to fully anticipate the tool's behavior after invocation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The only parameter, metadata, is already well described in the schema as 'Metadata to validate'. The description adds no additional meaning about allowed shape, required keys, or validation rules. With 100% schema coverage, the baseline of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific action ('validate') applied to metadata against a schema, which distinguishes it from the sibling get/set/query metadata tools. However, it adds little beyond the tool name and does not specify which schema is used or what validation entails.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance is provided about when to use this tool versus alternatives like notebooklm_set_metadata or notebooklm_query_metadata. It does not mention validating before setting metadata, exclusions, or any workflow context.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections. Dates show when Glama detected each change.
14 tool updates
v1.0.0- First observed
notebooklm_add_sources - First observed
notebooklm_create_notebook - First observed
notebooklm_delete_audio - First observed
notebooklm_delete_notebook - First observed
notebooklm_generate_audio - First observed
notebooklm_get_metadata - First observed
notebooklm_get_notebook - First observed
notebooklm_get_source - First observed
notebooklm_list_notebooks - First observed
notebooklm_query_metadata - First observed
notebooklm_remove_sources - First observed
notebooklm_set_metadata - First observed
notebooklm_share_notebook - First observed
notebooklm_validate_metadata
TDQS
Each tool targets a distinct resource-action combination: metadata operations are clearly separated into validate/get/set/query, notebook operations into list/get/create/delete/share, and sources/audio each have their own dedicated tools. Even get_notebook and get_source are unambiguous because one returns notebook details with sources and the other returns a specific source's details.
All tools follow a consistent snake_case verb_noun pattern with the notebooklm_ prefix. Action verbs such as get, set, list, create, delete, add, remove, generate, and share are used predictably across the tool set.
14 tools is well within the ideal range for a domain-specific MCP server. The count covers notebooks, sources, metadata, sharing, and audio without feeling bloated or thin.
The tool surface provides strong lifecycle coverage for notebooks, sources, metadata, and audio overviews. Minor gaps exist such as no explicit notebook update/rename operation, no standalone list-sources tool, and no unshare or list-audio tools, but these are workable gaps rather than critical dead ends.
Maintenance
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Related MCP Connectors
An MCP memory server. One memory your agents share — across models, devices and apps.
Markdown-based note-taking with a hosted MCP server. Your notes serve you and your AI.
Google Keep-style notes app with an MCP server for AI agents to read/write notes.
Cloud-hosted MCP server for durable AI memory
Related MCP Servers
- AlicenseNot gradedqualityAmaintenanceSecure MCP server for querying Google NotebookLM notebooks. Enables AI assistants to list notebooks, read sources, and ask the NotebookLM AI questions about your sources.16MIT
- AlicenseNot gradedqualityAmaintenanceMCP server for querying Google NotebookLM notebooks, enabling AI assistants to list notebooks, read sources, and ask questions about them.MIT
- FlicenseBqualityBmaintenanceA production-ready, fully asynchronous MCP server that bridges AI agents with Google NotebookLM, enabling notebook creation, source management, audio generation, and more through natural language.12-
- AlicenseNot gradedqualityDmaintenanceMCP server that connects AI agents to Google NotebookLM, enabling natural language interaction with notebooks, including Q&A, source ingestion, and audio overview generation.4,624MIT
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/brock-run/notebooklm-mcp'
If you have feedback or need assistance with the MCP directory API, please join our Discord server