# Content Management - NotebookLM MCP > Add sources and generate audio overviews (podcasts) --- ## Overview The Content Management module enables you to: 1. **Add Sources** - Upload documents, URLs, text, YouTube videos to notebooks 2. **Delete Sources** - Remove sources from notebooks 3. **Generate Audio Overview** - Create podcast-style audio discussions (REAL NotebookLM feature) 4. **Download Audio** - Save generated audio files locally 5. **Create Notes** - Add user-created annotations to notebooks 6. **List Content** - View sources and generated content --- ## Important: What We Actually Support **REAL NotebookLM Features (fully integrated):** - Audio Overview generation — NotebookLM's actual podcast feature - Video generation — brief + explainer with 6 visual styles (classroom, documentary, animated, corporate, cinematic, minimalist) - Infographic generation — horizontal and vertical layouts - Report / Presentation / Data Table — text-based content returned in the API response - Download artifacts — WAV audio, MP4 video, PNG infographics - Source management — add files, URLs, text, YouTube videos, Google Drive - Q&A with citations — DOM-extracted source names and excerpts **Prompt-based content (use `ask_question` directly):** For content types that NotebookLM doesn't expose as first-class studio outputs — briefing docs, study guides, FAQ, timelines, tables of contents — call `ask_question` with a custom prompt (e.g. "Create a study guide from these sources"). These are regular chat responses, not separate NotebookLM integrations. --- ## Quick Start ### Add a URL Source ```bash curl -X POST http://localhost:3000/content/sources \ -H "Content-Type: application/json" \ -d '{ "source_type": "url", "url": "https://example.com/article" }' ``` ### Generate Audio Overview ```bash curl -X POST http://localhost:3000/content/generate \ -H "Content-Type: application/json" \ -d '{ "content_type": "audio_overview", "custom_instructions": "Focus on practical tips" }' ``` ### Download Audio ```bash curl "http://localhost:3000/content/download?content_type=audio_overview" ``` --- ## Source Types | Type | Description | Required Field | | -------------- | --------------------------- | -------------- | | `file` | Local file upload | `file_path` | | `url` | Web page URL | `url` | | `text` | Plain text / pasted content | `text` | | `youtube` | YouTube video URL | `url` | | `google_drive` | Google Drive document link | `url` | ### Examples **Upload a local file:** ```bash curl -X POST http://localhost:3000/content/sources \ -H "Content-Type: application/json" \ -d '{ "source_type": "file", "file_path": "/path/to/document.pdf", "title": "My PDF Document" }' ``` **Add pasted text:** ```bash curl -X POST http://localhost:3000/content/sources \ -H "Content-Type: application/json" \ -d '{ "source_type": "text", "text": "Your document content here...", "title": "Research Notes" }' ``` **Add YouTube video:** ```bash curl -X POST http://localhost:3000/content/sources \ -H "Content-Type: application/json" \ -d '{ "source_type": "youtube", "url": "https://www.youtube.com/watch?v=dQw4w9WgXcQ" }' ``` --- ## Deleting Sources Remove sources from notebooks using the delete endpoint. ### Delete by ID ```bash curl -X DELETE "http://localhost:3000/content/sources/source-123" ``` ### Delete by Name ```bash curl -X DELETE "http://localhost:3000/content/sources?source_name=My%20Document" ``` **Response:** ```json { "success": true, "data": { "success": true, "sourceId": "source-123", "sourceName": "My Document" } } ``` **Notes:** - Use `list_content` first to find source IDs and names - Source names support partial matching (case-insensitive) - This action is irreversible - sources are permanently deleted --- ## Audio Overview (Podcast) The audio overview creates a podcast-style discussion between two AI hosts about your notebook content. This is a REAL NotebookLM feature that generates actual audio. ### Generate Audio ```bash curl -X POST http://localhost:3000/content/generate \ -H "Content-Type: application/json" \ -d '{ "content_type": "audio_overview", "custom_instructions": "Focus on key concepts for beginners, use simple language" }' ``` **Custom Instructions Ideas:** - "Focus on practical applications" - "Emphasize the historical context" - "Make it accessible to students" - "Highlight the key takeaways" **Note:** Audio generation takes 5-10 minutes. The API will wait for completion. ### Download Audio ```bash # Get audio file curl "http://localhost:3000/content/download?content_type=audio_overview" # Save to specific path curl "http://localhost:3000/content/download?content_type=audio_overview&output_path=/downloads/podcast.mp3" ``` **Response:** ```json { "success": true, "filePath": "/downloads/podcast.wav", "mimeType": "audio/wav" } ``` --- ## Create Notes Notes are user-created annotations that appear in the NotebookLM Studio panel. They allow you to save research findings, summaries, key insights, or any custom content alongside your sources. ### Create a Note ```bash curl -X POST http://localhost:3000/content/notes \ -H "Content-Type: application/json" \ -d '{ "title": "Key Findings Summary", "content": "## Main Points\n\n1. First important finding\n2. Second key insight\n3. Conclusion and next steps" }' ``` **Response:** ```json { "success": true, "data": { "success": true, "noteTitle": "Key Findings Summary", "status": "created" } } ``` **Parameters:** | Parameter | Type | Required | Description | | -------------- | ------ | -------- | -------------------------------------------- | | `title` | string | Yes | Title of the note | | `content` | string | Yes | Content/body of the note (supports markdown) | | `notebook_url` | string | No | Target notebook URL | | `session_id` | string | No | Reuse existing session | **Use Cases:** - Save research summaries from NotebookLM conversations - Create custom annotations for specific sections - Store key quotes and references - Build a structured outline from notebook content ### MCP Tool Usage If using Claude Code or Claude Desktop: ``` create_note(title="My Research Note", content="Key findings from the analysis...") ``` --- ## Listing Content View all sources and generated content in a notebook: ```bash curl http://localhost:3000/content ``` **Response:** ```json { "success": true, "sources": [ { "id": "source-1", "name": "Introduction.pdf", "type": "document", "status": "ready" }, { "id": "source-2", "name": "https://example.com", "type": "url", "status": "ready" } ], "generatedContent": [ { "id": "audio-overview", "type": "audio_overview", "name": "Audio Overview", "status": "ready", "createdAt": "2025-12-24T10:30:00Z" } ], "sourceCount": 2, "hasAudioOverview": true } ``` --- ## MCP Tool Usage If using Claude Code or Claude Desktop: ### Add Source ``` add_source(source_type="url", url="https://example.com") ``` ### Delete Source ``` delete_source(source_name="My Document") ``` or ``` delete_source(source_id="source-123") ``` ### Generate Audio ``` generate_content(content_type="audio_overview", custom_instructions="Focus on key points") ``` ### List Content ``` list_content() ``` ### Download Audio ``` download_content(content_type="audio_overview", output_path="/path/to/save.mp3") ``` --- ## Workflow Example ### Research Workflow 1. Add multiple sources: ```bash # Add primary source curl -X POST http://localhost:3000/content/sources \ -d '{"source_type":"url","url":"https://research-paper.com"}' # Add supporting document curl -X POST http://localhost:3000/content/sources \ -d '{"source_type":"file","file_path":"/docs/notes.pdf"}' ``` 2. Generate audio overview: ```bash curl -X POST http://localhost:3000/content/generate \ -d '{"content_type":"audio_overview","custom_instructions":"Summarize key findings for researchers"}' ``` 3. Download for offline listening: ```bash curl "http://localhost:3000/content/download?content_type=audio_overview&output_path=research.mp3" ``` --- ## Error Handling ### Common Errors | Error | Cause | Solution | | ------------------------ | ---------------------- | ------------------------------- | | "Source type required" | Missing `source_type` | Add the `source_type` parameter | | "File not found" | Invalid `file_path` | Check file path exists | | "Audio not ready" | Audio still generating | Wait and retry | | "No sources in notebook" | Empty notebook | Add sources first | ### Timeout Handling Audio generation can take 5-10 minutes. The API will wait up to 10 minutes for completion. For long operations, consider: 1. Using `session_id` to maintain context 2. Polling `list_content` to check status 3. Setting appropriate client timeouts --- ## Best Practices 1. **Add sources before generating audio** - Ensure your notebook has sources before attempting to generate audio. 2. **Use custom instructions** - Tailor the audio by providing clear custom instructions. 3. **Reuse sessions** - Pass `session_id` to avoid creating new browser sessions for each request. 4. **Check content list** - Use `list_content` to verify what's already generated before creating duplicates. 5. **Handle timeouts gracefully** - Audio generation is slow; implement appropriate retry logic. --- ## Version History | Version | Changes | | ------- | ----------------------------------------------------------------------------------- | | 1.5.x | 2026 UI selectors, re-added video/infographic/presentation/report/data_table | | 1.4.2 | Removed fake content generation (FAQ, etc.) — re-added later as real studio outputs | | 1.4.0 | Added content management module | | 1.3.7 | Source citation extraction | --- **Complete Content Management Documentation!**