yt-summarizer
README.md
# yt-summarizer
An MCP (Model Context Protocol) server that lets Claude Desktop watch YouTube
videos and take notes for you — it fetches a video's transcript and saves a
summary as a new page in Notion.
Based on [this Enkrypt AI writeup](https://medium.com/enkrypt-ai/teach-claude-to-watch-youtube-videos-and-take-notes-in-notion-ac8f5491d58e).
## How it works
1. You give Claude Desktop a YouTube URL and ask for a summary.
2. Claude calls the `get_transcript` tool, which fetches the video's transcript.
3. Claude summarizes the transcript itself.
4. Claude calls the `create_notion_page` tool with a structured page payload.
5. The server creates the page in your Notion workspace and returns its URL.
## Prerequisites
- [uv](https://docs.astral.sh/uv/) (Python package/project manager)
- [Claude Desktop](https://claude.ai/download)
- A Notion account and workspace
## 1. Set up a Notion integration
1. Go to <https://www.notion.so/profile/integrations> and create a new
internal integration. Name it (e.g. "YT Summarizer") and pick your
workspace.
2. Copy the **Internal Integration Secret** — this is your `NOTION_TOKEN`.
3. In Notion, create (or pick) a page that will act as the parent page for
generated summaries.
4. Open that page, click **Connections** (or `•••` → *Connect to*), and
connect your new integration so it has access.
5. Copy the page ID from the page URL — it's the 32-character hex string at
the end (dashes optional):
`https://www.notion.so/My-Page-1a2b3c4d5e6f7a8b9c0d1e2f3a4b5c6d`
→ `1a2b3c4d5e6f7a8b9c0d1e2f3a4b5c6d` is your `PARENT_PAGE_ID`.
## 2. Configure environment variables
```bash
cp .env.example .env
```
Edit `.env` and fill in the two values from step 1:
```
NOTION_TOKEN=YOUR_NOTION_INTEGRATION_SECRET
PARENT_PAGE_ID=YOUR_NOTION_PARENT_PAGE_ID
```
## 3. Install dependencies
```bash
uv sync
```
## 4. Register the server with Claude Desktop
Add an entry to your Claude Desktop config file:
- macOS: `~/Library/Application Support/Claude/claude_desktop_config.json`
- Windows: `%APPDATA%\Claude\claude_desktop_config.json`
```json
{
"mcpServers": {
"Youtube Summarizer": {
"command": "uv",
"args": [
"--directory",
"FULL/PATH/TO/yt-summarizer",
"run",
"server.py"
]
}
}
}
```
Replace the path with the absolute path to this project directory, then
restart Claude Desktop. A hammer/tools icon should appear in the chat input,
confirming the server connected.
## 5. Use it
In Claude Desktop, paste a YouTube URL and ask for a summary saved to Notion,
e.g.:
> Summarize this video and save it to Notion: https://www.youtube.com/watch?v=dQw4w9WgXcQ
Claude will fetch the transcript, write a summary, create the Notion page,
and give you the link.
## Tools exposed by this server
| Tool | Description |
| --- | --- |
| `get_transcript(video_id)` | Fetches a YouTube video's transcript. Accepts a raw video ID or a full URL (watch/youtu.be/shorts/embed/live). |
| `create_notion_page(notion_page_content)` | Creates a page under `PARENT_PAGE_ID` from a Notion "create page" API payload (properties + children blocks). |
## Ideas for extending this
- Add timestamp markers linking back to key moments in the video
- Auto-categorize videos by topic/content type
- Generate actionable to-do lists from educational content
- Support non-English transcripts / auto-translation
TDQS
A3.6/5.0
Scored across 2 tools
Disambiguation5/5
The two tools are completely distinct: one fetches a transcript and the other creates a Notion page. There is no overlap or chance of misselection.
Naming Consistency5/5
Both tools follow a clear verb_noun naming pattern: get_transcript and create_notion_page. The style is consistent and predictable.
Tool Count3/5
With only two tools, the server feels minimal for its stated purpose as a summarizer. Two is borderline, not excessive, but the scope suggests more tools would be expected.
Completeness1/5
The server name implies summarization, but no summarization tool exists. It only retrieves transcripts and creates Notion pages, leaving the core summarization functionality completely absent.
Maintenance
ActivitySlowing
ResponsivenessNo issues