youtube-research-mcp
# YouTube Research MCP
[](https://github.com/lee-s-dev/youtube-research-mcp/actions/workflows/tests.yml)
[](https://pypi.org/project/youtube-research-mcp/)
[πΊπΈ English](README.en.md)
> ## μ νλΈμ μλ λͺ¨λ μ 보λ₯Ό β μλ§, λκΈ, μ±λ β AI 리μμΉ μμ€λ‘.
AIμκ² μμ²λ§ νλ©΄ β μλ§ μμ§, λκΈ μ¬λ‘ λΆμ, μ¬λ¬ μμ λΉκ΅κΉμ§ μ λΆ AIκ° μ§μ μ²λ¦¬ν©λλ€.
**API ν€ μμ΄λ μλ§Β·μ±λ λΆμμ μ¦μ μ¬μ©ν μ μμ΅λλ€.**
---
## μ΄λμ μΈ μ μλμ?
MCP(Model Context Protocol)λ₯Ό μ§μνλ AI ν΄λΌμ΄μΈνΈλΌλ©΄ μ΄λμλ μ¬μ©ν μ μμ΅λλ€.
| ν΄λΌμ΄μΈνΈ | μ§μ μ¬λΆ |
|-----------|:--------:|
| [Claude Desktop](https://claude.ai/download) | β
|
| [Cursor](https://cursor.com) | β
|
| [Windsurf](https://windsurf.com) | β
|
| [Cline](https://github.com/cline/cline) | β
|
| MCP μ§μ ν΄λΌμ΄μΈνΈ μ 체 | β
|
---
## μ΄λ° κ² λ©λλ€
AI μ±ν
μ°½μ κ·Έλ₯ λ§νλ―μ΄ μ
λ ₯νλ©΄ λ©λλ€.
### API ν€ μμ΄ λ°λ‘
```
μ΄ μμ ν΅μ¬λ§ μμ½ν΄μ€: https://www.youtube.com/watch?v=tTw1z10yMCI
```
```
@fireship μ±λ μ΅κ·Ό μμ 5κ° λΆμν΄μ μμ¦ μ΄λ€ κΈ°μ μ£Όμ λ€λ£¨λμ§ μλ €μ€
```
```
μ΄ 3κ° μμ λΉκ΅ν΄μ κ°μ μ΄λ€ μ£Όμ₯ νλμ§, 곡ν΅μ Β·μ°¨μ΄μ μ 리ν΄μ€:
https://www.youtube.com/watch?v=aaa
https://www.youtube.com/watch?v=bbb
https://www.youtube.com/watch?v=ccc
```
### API ν€ μμΌλ©΄ λκΈ μ¬λ‘ κΉμ§
```
μ€λ νκ΅ μ£Όμ λ€λ£¬ μ νλ² μμ 3κ° λκΈκΉμ§ μ‘°μ¬ν΄μ μμ₯ μ΄μλ λΆμκΈ° 체ν¬ν΄μ€
```
```
μ΄ μ€λ§νΈν° 리뷰 μμ β ν¬λ¦¬μμ΄ν° νκ°λ μ€μ λκΈ λ°μμ΄ μΌλ§λ λ€λ₯Έμ§ λΉκ΅ν΄μ€
```
```
"AI μμ΄μ νΈ" μμ 4κ° κ²μν΄μ κ°μ μ΄λ€ μ£Όμ₯μΈμ§ λΉκ΅νκ³ , λκΈ λ°μλ μ 리ν΄μ€
```
### μ€μ λ‘ μ΄λ»κ² λ΅μ΄ λμ€λμ?
**π€ μ
λ ₯:**
> "μ΄ μ€λ§νΈν° 리뷰 μμ ν΅μ¬ μ₯λ¨μ μ 리νκ³ , λκΈμμ κ°μ₯ λ§μ΄ λ°λ³΅λλ λΆλ§ 3κ°μ§ μλ €μ€."
**π€ AI μλ΅:**
> "μμμμ μ μμλ μΉ΄λ©λΌ μ±λ₯κ³Ό λ°°ν°λ¦¬λ₯Ό μ£Όμ μ₯μ μΌλ‘ κΌ½μμ΅λλ€. κ·Έλ¬λ **μμ§λ λκΈ λΆμ κ²°κ³Ό** μ€μ μ¬μ©μλ€μ΄ κ°μ₯ λ§μ΄ μΈκΈν λΆλ§μ β λ°μ΄ λ¬Έμ , β‘ νΉμ μ±μμμ νλ μ λλ, β’ μΆ©μ μλμμ΅λλ€. μμμ κΈμ μ νκ°μ μ€μ μ¬μ©μ κ²½ν μ¬μ΄μ μ¨λμ°¨κ° μμ΅λλ€."
---
## κΈ°λ₯ μμ½
| κΈ°λ₯ | API ν€ μμ΄ | API ν€ μμ λ |
|------|:-----------:|:--------------:|
| μμ μλ§ μμ§ | β
| β
|
| μμ λ©νλ°μ΄ν° μ‘°ν | β
(yt-dlp κ²½μ ) | β
|
| μ±λ μ΅μ μμ λΆμ | β
(yt-dlp κ²½μ ) | β
|
| ν€μλ κ²μ | β | β
|
| λκΈ μμ§ λ° μ¬λ‘ λΆμ | β | β
|
| API μ¬μ©λ μ‘°ν | β | β
|
> **λκΈΒ·κ²μ κΈ°λ₯**μ YouTube Data API ν€κ° νμν©λλ€. λ°κΈμ 무λ£, ν루 10,000 μ λ μ 곡.
---
## μ€μΉ
### μΆμ² β `uvx`λ‘ μ€μΉ μμ΄ λ°λ‘ μ¬μ©
[uv](https://docs.astral.sh/uv/getting-started/installation/)λ§ μ€μΉνλ©΄ λ³λ νκ²½ μΈν
μμ΄ λ°λ‘ μ°κ²°λ©λλ€.
```bash
# uv μ€μΉ (μμ§ μλ€λ©΄)
curl -LsSf https://astral.sh/uv/install.sh | sh # macOS / Linux
# λλ: winget install astral-sh.uv # Windows
```
### λμ β pipμΌλ‘ μ€μΉ
```bash
pip install youtube-research-mcp
```
---
## MCP ν΄λΌμ΄μΈνΈ μ°κ²°
### Claude Desktop
`~/Library/Application Support/Claude/claude_desktop_config.json` νμΌμ μΆκ°ν©λλ€.
> νμΌμ΄ μμΌλ©΄ μλ‘ λ§λμΈμ. Claude Desktopμ λ¨Όμ ν λ² μ€νν΄μΌ ν΄λκ° μκΉλλ€.
**API ν€ μμ΄ (μλ§ + μ±λ λΆμ)**
```json
{
"mcpServers": {
"youtube-research": {
"command": "uvx",
"args": ["youtube-research-mcp"]
}
}
}
```
**API ν€ μμ λ (μ 체 κΈ°λ₯)**
```json
{
"mcpServers": {
"youtube-research": {
"command": "uvx",
"args": ["youtube-research-mcp"],
"env": {
"YOUTUBE_API_KEY": "AIzaSy..."
}
}
}
}
```
### Cursor / Windsurf / κΈ°ν MCP ν΄λΌμ΄μΈνΈ
κ° ν΄λΌμ΄μΈνΈμ MCP μ€μ νμΌμ λμΌν λ°©μμΌλ‘ μΆκ°νλ©΄ λ©λλ€. `command`μ `args`λ λμΌν©λλ€.
μ€μ μ μ₯ ν **ν΄λΌμ΄μΈνΈλ₯Ό μμ ν μ’
λ£νκ³ μ¬μμ**νλ©΄ μ μ©λ©λλ€.
> **pipμΌλ‘ μ€μΉνλ€λ©΄** `"command": "youtube-research-mcp"`, `"args": []`λ‘ μ€μ νμΈμ.
---
## YouTube API ν€ λ°κΈ (μ ν μ¬ν)
κ²μΒ·λκΈ κΈ°λ₯μ νμν©λλ€. **무λ£**μ΄λ©° ν루 10,000 μ λ β μΌλ° μ¬μ©μΌλ‘λ μμ§λμ§ μμ΅λλ€.
1. [Google Cloud Console](https://console.cloud.google.com) μ μ
2. μ νλ‘μ νΈ μμ±
3. **APIs & Services β Library** β `YouTube Data API v3` κ²μ β Enable
4. **APIs & Services β Credentials** β **+ Create Credentials β API key**
5. μμ±λ ν€ λ³΅μ¬
**보μ μ€μ κΆμ₯:** Edit API key β API restrictions β YouTube Data API v3λ§ νμ©
---
## μ€μΉν΄λ μμ νκ°μ?
ν μ€ μμ½: **λ€, μμ ν©λλ€.**
| | μ΄ μλ²κ° νλ μΌ |
|---|---|
| β
| YouTubeμμ μλ§κ³Ό λ©νλ°μ΄ν°λ₯Ό κ°μ Έμ΅λλ€ |
| β
| κ²°κ³Όλ¬Όμ λ΄ μ»΄ν¨ν°μ λ‘컬 SQLite νμΌμ μΊμν©λλ€ |
| β
| API ν€λ₯Ό μ 곡ν κ²½μ°μλ§ YouTube Data API v3λ₯Ό νΈμΆν©λλ€ |
| β | μμ§ν λ°μ΄ν°λ₯Ό μΈλΆ μλ²λ‘ **μ μ‘νμ§ μμ΅λλ€** |
| β | LLMΒ·AI APIλ₯Ό **νΈμΆνμ§ μμ΅λλ€** |
| β | μΊμ λλ ν 리 μΈμ λ‘컬 νμΌμ **μ κ·Όνμ§ μμ΅λλ€** |
| β | μ
Έ λͺ
λ Ήμ΄ μ€νμ΄λ μμ€ν
μ κ·Όμ **νμ§ μμ΅λλ€** |
μλ§κ³Ό λκΈμλ `safety_notice` νλκ° ν¬ν¨λμ΄ ν둬ννΈ μΈμ μ
μ λ°©μ§ν©λλ€.
μ 체 μμ€ μ½λλ [GitHub](https://github.com/lee-s-dev/youtube-research-mcp)μ 곡κ°λμ΄ μμ΅λλ€.
---
## μ€κ³ μμΉ
- **LLM νΈμΆ μμ** β λ°μ΄ν° μμ§λ§ λ΄λΉν©λλ€. λΆμΒ·μμ½Β·νλ¨μ AI μ΄μμ€ν΄νΈκ° ν©λλ€.
- **ν둬ννΈ μΈμ μ
λ°©μ΄** β μλ§κ³Ό λκΈμ `safety_notice`λ₯Ό ν¬ν¨ν΄ μΈλΆ μ½ν
μΈ μμ λͺ
μν©λλ€.
- **API μκΈ νν μμ** β μλ§Β·λκΈΒ·κ²μ κ²°κ³Όλ₯Ό SQLiteμ μΊμν΄ μ€λ³΅ νΈμΆμ μ°¨λ¨ν©λλ€.
- **ν€ μμ΄λ ν΅μ¬ κΈ°λ₯ μ¬μ©** β μλ§ μμ§κ³Ό μ±λ λΆμμ yt-dlpλ‘ API ν€ μμ΄ λμν©λλ€.
---
## λꡬ λͺ©λ‘
### API ν€ μμ΄ μ¬μ© κ°λ₯
#### `get_transcript` β μμ μλ§ κ°μ Έμ€κΈ°
```
μ΄ μμ ν΅μ¬ λ΄μ©λ§ μμ½ν΄μ€:
https://www.youtube.com/watch?v=tTw1z10yMCI
```
| νλΌλ―Έν° | μ€λͺ
| κΈ°λ³Έκ° |
|----------|------|--------|
| `url_or_video_id` | YouTube URL λλ video ID | νμ |
| `languages` | μλ§ μΈμ΄ μ°μ μμ (μ: `["ko", "en"]`) | μλ μ ν |
---
#### `analyze_videos` β μ¬λ¬ μμ ν λ²μ λΆμ
URL λͺ©λ‘μ μ£Όλ©΄ μλ§Β·λ©νλ°μ΄ν°λ₯Ό λ³λ ¬ μμ§ν©λλ€. API ν€κ° μμΌλ©΄ λκΈλ ν¨κ» μμ§ν©λλ€.
```
μ΄ 3κ° μμ λΆμν΄μ κ°μ μ΄λ€ μ£Όμ₯μΈμ§, 곡ν΅μ κ³Ό μ°¨μ΄μ μ 리ν΄μ€:
https://www.youtube.com/watch?v=aaa
https://www.youtube.com/watch?v=bbb
https://www.youtube.com/watch?v=ccc
```
| νλΌλ―Έν° | μ€λͺ
| κΈ°λ³Έκ° |
|----------|------|--------|
| `urls_or_video_ids` | URL λλ video ID λͺ©λ‘ | νμ |
| `languages` | μλ§ μΈμ΄ μ°μ μμ | μλ μ ν |
| `include_comments` | λκΈ ν¬ν¨ μ¬λΆ (β οΈ API ν€ νμ) | `true` |
| `max_comments_per_video` | μμλΉ μ΅λ λκΈ μ | `25` |
| `max_transcript_chars` | μλ§ μ΅λ κΈμ μ (0 = μ ν μμ) | `8000` |
---
#### `analyze_channel` β μ±λ λΆμ
μ±λ νΈλ€(`@μ±λλͺ
`) λλ μ±λ IDλ‘ μ΅μ μμ Nκ°λ₯Ό μμ§Β·λΆμν©λλ€.
```
@ycombinator μ±λ μ΅κ·Ό μμ 5κ° λ³΄κ³ μ΄λ€ μ€ννΈμ
νΈλ λ λ€λ£¨λμ§ λΆμν΄μ€
```
| νλΌλ―Έν° | μ€λͺ
| κΈ°λ³Έκ° |
|----------|------|--------|
| `channel_id_or_handle` | μ±λ νΈλ€ λλ ID | νμ |
| `max_videos` | μμ§ν μμ μ (μ΅λ 8) | `5` |
| `min_duration_seconds` | μ΅μ μμ κΈΈμ΄ (μ΄) | `120` |
| `max_duration_seconds` | μ΅λ μμ κΈΈμ΄ (μ΄) | `7200` |
| `include_comments` | λκΈ ν¬ν¨ μ¬λΆ (β οΈ API ν€ νμ) | `true` |
---
#### `get_capabilities` β νμ¬ μ¬μ© κ°λ₯ν κΈ°λ₯ νμΈ
```
μ§κΈ μ΄λ€ κΈ°λ₯μ μΈ μ μμ΄?
```
---
### API ν€ νμ
#### `search_videos` β ν€μλλ‘ μμ κ²μ
```
"AI agent" κ΄λ ¨ μ΅μ μμ 5κ° κ²μν΄μ€
```
| νλΌλ―Έν° | μ€λͺ
| κΈ°λ³Έκ° |
|----------|------|--------|
| `query` | κ²μμ΄ | νμ |
| `max_results` | μ΅λ κ²°κ³Ό μ | `5` |
| `published_after` | μ΄ν λ μ§ (YYYY-MM-DD) | μμ |
| `published_before` | μ΄μ λ μ§ (YYYY-MM-DD) | μμ |
| `exclude_shorts` | μΌμΈ μ μΈ μ¬λΆ | `false` |
---
#### `get_video_comments` β λκΈ μμ§
| νλΌλ―Έν° | μ€λͺ
| κΈ°λ³Έκ° |
|----------|------|--------|
| `url_or_video_id` | YouTube URL λλ video ID | νμ |
| `max_comments` | μ΅λ λκΈ μ | `50` |
| `order` | μ λ ¬ λ°©μ (`relevance` / `time`) | `relevance` |
| `include_replies` | λλκΈ ν¬ν¨ μ¬λΆ | `false` |
---
#### `collect_video_discussion` β μλ§ + λκΈ ν λ²μ
ν¬λ¦¬μμ΄ν° μ£Όμ₯κ³Ό μμ²μ λ°μμ ν λ²μ λΉκ΅ν λ μ μ©ν©λλ€.
```
μ΄ μμ λ΄μ©μ΄λ λκΈ λ°μ κ°μ΄ λΆμν΄μ€:
https://www.youtube.com/watch?v=tTw1z10yMCI
```
---
#### `collect_research_sources` β κ²μ β μλ§ λ¬Άμ μμ§
```
"λ¬μ€νΈ vs κ³ λΉκ΅" μμ 5κ° κ²μν΄μ κ° μμμ΄ μ΄λ€ κ²°λ‘ λ΄λ¦¬λμ§ μ 리ν΄μ€
```
| νλΌλ―Έν° | μ€λͺ
| κΈ°λ³Έκ° |
|----------|------|--------|
| `query` | κ²μμ΄ | νμ |
| `max_videos` | μμ§ν μμ μ (μ΅λ 8) | `5` |
| `min_duration_seconds` | μ΅μ μμ κΈΈμ΄ (μ΄) | `120` |
| `exclude_shorts` | μΌμΈ μ μΈ μ¬λΆ | `true` |
| `min_view_count` | μ΅μ μ‘°νμ | `0` |
---
#### `collect_research_discussions` β κ²μ β μλ§ + λκΈ λ¬Άμ μμ§
κ°μ₯ κ°λ ₯ν 리μμΉ λꡬ. κ²μΒ·μλ§Β·λκΈμ ν λ²μ λ³λ ¬ μμ§ν©λλ€.
```
"LLM νμΈνλ" μμ 3κ° κ²μν΄μ
ν¬λ¦¬μμ΄ν°λ€μ΄ 곡ν΅μΌλ‘ κ°μ‘°νλ κ², μλ‘ λ€λ₯Έ μ견, λκΈμμ λ°λ³΅λλ μ§λ¬Έ μ 리ν΄μ€
```
---
#### `get_quota_usage` β API μ¬μ©λ μ‘°ν
μ€λ μ¬μ©ν YouTube API μΏΌν°μ λ¨μ μμ νμΈν©λλ€.
---
## μΊμ λμ λ°©μ
κ°μ μμμ μ¬λ¬ λ² λΆμν΄λ **μΆκ° API μΏΌν°κ° μλΉλμ§ μμ΅λλ€.**
| λ°μ΄ν° | μΊμ μ ν¨ κΈ°κ° |
|--------|---------------|
| μλ§ | 30μΌ |
| λκΈ | 6μκ° |
| κ²μ κ²°κ³Ό | 2μκ° |
| μμ λ©νλ°μ΄ν° | μꡬ |
μΊμ μμΉ (OS μλ μ ν, `YOUTUBE_RESEARCH_CACHE_DB` νκ²½ λ³μλ‘ λ³κ²½ κ°λ₯):
- macOS: `~/Library/Application Support/youtube-research-mcp/cache.db`
- Windows: `%APPDATA%\youtube-research-mcp\cache.db`
- Linux: `~/.local/share/youtube-research-mcp/cache.db`
---
## λΌμ΄μ μ€
[MIT](LICENSE)
TDQS
Scored across 10 tools
Several tools have overlapping purposes, such as analyze_channel, analyze_videos, collect_research_discussions, collect_research_sources, and collect_video_discussion, all dealing with transcripts and comments. This could confuse an agent about which tool to use.
Tool names use a mix of verbs (analyze, collect, get, search) and the verb_noun pattern is not consistently applied. For example, 'analyze_channel' and 'analyze_videos' are similar but 'get_capabilities' and 'search_videos' follow a different pattern.
With 10 tools, the server covers a reasonable scope for YouTube research without being overly complex. The count is appropriate for the domain.
The tool set covers the core workflow of searching, fetching transcripts and comments, and analyzing channels. Minor gaps exist, such as missing direct channel metadata retrieval or playlist support, but overall it is fairly complete.