Skip to main content
Glama

add_notebook

Add a NotebookLM notebook to your library by providing its URL, content description, topics, and use cases for AI-powered document querying.

Instructions

PERMISSION REQUIRED — Only when user explicitly asks to add a notebook.

Conversation Workflow (Mandatory)

When the user says: "I have a NotebookLM with X"

  1. Ask URL: "What is the NotebookLM URL?"

  2. Ask content: "What knowledge is inside?" (1–2 sentences)

  3. Ask topics: "Which topics does it cover?" (3–5)

  4. Ask use cases: "When should we consult it?"

  5. Propose metadata and confirm:

    • Name: [suggested]

    • Description: [from user]

    • Topics: [list]

    • Use cases: [list] "Add it to your library now?"

  6. Only after explicit "Yes" → call this tool

Rules

  • Do not add without user permission

  • Do not guess metadata — ask concisely

  • Confirm summary before calling the tool

Example

User: "I have a notebook with n8n docs" You: Ask URL → content → topics → use cases; propose summary User: "Yes" You: Call add_notebook

Visit https://notebooklm.google/ → Login (free: 100 notebooks, 50 sources each, 500k words, 50 daily queries)

  1. Click "+ New" (top right) → Upload sources (docs, knowledge)

  2. Click "Share" (top right) → Select "Anyone with the link"

  3. Click "Copy link" (bottom left) → Give this link to Claude

(Upgraded: Google AI Pro/Ultra gives 5x higher limits)

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
urlYesThe NotebookLM notebook URL
nameYesDisplay name for the notebook (e.g., 'n8n Documentation')
descriptionYesWhat knowledge/content is in this notebook
topicsYesTopics covered in this notebook
content_typesNoTypes of content (e.g., ['documentation', 'examples', 'best practices'])
use_casesNoWhen should Claude use this notebook (e.g., ['Implementing n8n workflows'])
tagsNoOptional tags for organization

Implementation Reference

  • Main MCP tool handler for 'add_notebook'. Logs the call, delegates to NotebookLibrary.addNotebook, handles errors, and returns ToolResult.
    async handleAddNotebook(args: AddNotebookInput): Promise<ToolResult<{ notebook: any }>> {
      log.info(`🔧 [TOOL] add_notebook called`);
      log.info(`  Name: ${args.name}`);
    
      try {
        const notebook = this.library.addNotebook(args);
        log.success(`✅ [TOOL] add_notebook completed: ${notebook.id}`);
        return {
          success: true,
          data: { notebook },
        };
      } catch (error) {
        const errorMessage = error instanceof Error ? error.message : String(error);
        log.error(`❌ [TOOL] add_notebook failed: ${errorMessage}`);
        return {
          success: false,
          error: errorMessage,
        };
      }
    }
  • Core implementation of adding a notebook: generates unique ID, creates NotebookEntry with defaults, appends to library, persists to JSON file.
    addNotebook(input: AddNotebookInput): NotebookEntry {
      log.info(`📝 Adding notebook: ${input.name}`);
    
      // Generate ID
      const id = this.generateId(input.name);
    
      // Create entry
      const notebook: NotebookEntry = {
        id,
        url: input.url,
        name: input.name,
        description: input.description,
        topics: input.topics,
        content_types: input.content_types || ["documentation", "examples"],
        use_cases: input.use_cases || [
          `Learning about ${input.name}`,
          `Implementing features with ${input.name}`,
        ],
        added_at: new Date().toISOString(),
        last_used: new Date().toISOString(),
        use_count: 0,
        tags: input.tags || [],
      };
    
      // Add to library
      const updated = { ...this.library };
      updated.notebooks.push(notebook);
    
      // Set as active if it's the first notebook
      if (updated.notebooks.length === 1) {
        updated.active_notebook_id = id;
      }
    
      this.saveLibrary(updated);
      log.success(`✅ Notebook added: ${id}`);
    
      return notebook;
    }
  • TypeScript interface defining the input parameters for add_notebook, used by handler and library method.
    export interface AddNotebookInput {
      url: string; // Required: NotebookLM URL
      name: string; // Required: Display name
      description: string; // Required: What's in it
      topics: string[]; // Required: Topics covered
      content_types?: string[]; // Optional: defaults to ["documentation", "examples"]
      use_cases?: string[]; // Optional: defaults based on description
      tags?: string[]; // Optional: custom tags
    }
  • MCP Tool definition object for 'add_notebook' including detailed description, input schema, and usage instructions. Part of notebookManagementTools array.
        name: "add_notebook",
        description:
          `PERMISSION REQUIRED — Only when user explicitly asks to add a notebook.
    
    ## Conversation Workflow (Mandatory)
    When the user says: "I have a NotebookLM with X"
    
    1) Ask URL: "What is the NotebookLM URL?"
    2) Ask content: "What knowledge is inside?" (1–2 sentences)
    3) Ask topics: "Which topics does it cover?" (3–5)
    4) Ask use cases: "When should we consult it?"
    5) Propose metadata and confirm:
       - Name: [suggested]
       - Description: [from user]
       - Topics: [list]
       - Use cases: [list]
       "Add it to your library now?"
    6) Only after explicit "Yes" → call this tool
    
    ## Rules
    - Do not add without user permission
    - Do not guess metadata — ask concisely
    - Confirm summary before calling the tool
    
    ## Example
    User: "I have a notebook with n8n docs"
    You: Ask URL → content → topics → use cases; propose summary
    User: "Yes"
    You: Call add_notebook
    
    ## How to Get a NotebookLM Share Link
    
    Visit https://notebooklm.google/ → Login (free: 100 notebooks, 50 sources each, 500k words, 50 daily queries)
    1) Click "+ New" (top right) → Upload sources (docs, knowledge)
    2) Click "Share" (top right) → Select "Anyone with the link"
    3) Click "Copy link" (bottom left) → Give this link to Claude
    
    (Upgraded: Google AI Pro/Ultra gives 5x higher limits)`,
        inputSchema: {
          type: "object",
          properties: {
            url: {
              type: "string",
              description: "The NotebookLM notebook URL",
            },
            name: {
              type: "string",
              description: "Display name for the notebook (e.g., 'n8n Documentation')",
            },
            description: {
              type: "string",
              description: "What knowledge/content is in this notebook",
            },
            topics: {
              type: "array",
              items: { type: "string" },
              description: "Topics covered in this notebook",
            },
            content_types: {
              type: "array",
              items: { type: "string" },
              description:
                "Types of content (e.g., ['documentation', 'examples', 'best practices'])",
            },
            use_cases: {
              type: "array",
              items: { type: "string" },
              description: "When should Claude use this notebook (e.g., ['Implementing n8n workflows'])",
            },
            tags: {
              type: "array",
              items: { type: "string" },
              description: "Optional tags for organization",
            },
          },
          required: ["url", "name", "description", "topics"],
        },
      },
  • src/index.ts:171-182 (registration)
    Dispatch logic in main MCP server that routes 'add_notebook' tool calls to the appropriate handler method.
    case "add_notebook":
      result = await this.toolHandlers.handleAddNotebook(
        args as {
          url: string;
          name: string;
          description: string;
          topics: string[];
          content_types?: string[];
          use_cases?: string[];
          tags?: string[];
        }
      );

Latest Blog Posts

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/inventra/notebooklm-mcp'

If you have feedback or need assistance with the MCP directory API, please join our Discord server