[](https://www.python.org/)
[](LICENSE)
[](https://modelcontextprotocol.io/)
[](https://pypi.org/project/mcp-youtube-intelligence/)
π [English](README.en.md) | **νκ΅μ΄**
# MCP YouTube Intelligence
> **YouTube μμμ μ§λ₯μ μΌλ‘ λΆμνλ [MCP](https://modelcontextprotocol.io/) μλ² + CLI**
>
> MCP (Model Context Protocol)λ Claude, Cursor κ°μ AI λκ΅¬κ° μΈλΆ μλΉμ€λ₯Ό μ¬μ©ν μ μκ² ν΄μ£Όλ νμ€ νλ‘ν μ½μ
λλ€. μ΄ μλ²λ₯Ό μ°κ²°νλ©΄ "μ΄ μμ μμ½ν΄μ€" νλ§λλ‘ λΆμμ΄ μλ£λ©λλ€.
π― **ν΅μ¬ κ°μΉ**: μλ³Έ μλ§(2,000~30,000 ν ν°)μ **μλ²μμ μ²λ¦¬**νμ¬ LLMμλ **~200β500 ν ν°**λ§ μ λ¬ν©λλ€.
---
## π€ μ μ΄ μλ²μΈκ°?
λλΆλΆμ YouTube MCP μλ²λ μλ³Έ μλ§μ κ·Έλλ‘ LLMμ λμ§λλ€.
| κΈ°λ₯ | κΈ°μ‘΄ MCP μλ² | MCP YouTube Intelligence |
|------|:---:|:---:|
| μλ§ μΆμΆ | β
| β
|
| **μλ²μ¬μ΄λ μμ½** (ν ν° μ΅μ ν) | β | β
|
| **ꡬ쑰νλ 리ν¬νΈ** (μμ½+ν ν½+μν°ν°+λκΈ) | β | β
|
| **μ±λ λͺ¨λν°λ§** (RSS) | β | β
|
| **λκΈ κ°μ± λΆμ** | β | β
|
| **ν ν½ μΈκ·Έλ©ν
μ΄μ
** | β | β
|
| **μν°ν° μΆμΆ** (ν/μ 200+κ°) | β | β
|
| **μλ§/YouTube κ²μ** | β | β
|
| **λ°°μΉ μ²λ¦¬** | β | β
|
| SQLite/PostgreSQL μΊμ | β | β
|
---
## π λΉ λ₯Έ μμ
### 1. μ€μΉ
```bash
pip install mcp-youtube-intelligence
pip install yt-dlp # μλ§ μΆμΆμ νμ
```
> π‘ LLM μμ΄λ κΈ°λ³Έ μμ½(ν΅μ¬ λ¬Έμ₯ μΆμΆ)μ λμν©λλ€. κ³ νμ§ μμ½μ μνλ©΄ μλ [LLM μ€μ ](#llm-νλ‘λ°μ΄λ-μ€μ )μ μ°Έκ³ νμΈμ.
### 2. 첫 λ²μ§Έ λͺ
λ Ήμ΄ μ€ν
```bash
# 리ν¬νΈ μμ± β μμ½, ν ν½, μν°ν°, λκΈμ νλ²μ λΆμ (LLM μ°λνμ)
mcp-yt report "https://www.youtube.com/watch?v=LV6Juz0xcrY"
# μλ§ μμ½λ§
mcp-yt transcript "https://www.youtube.com/watch?v=LV6Juz0xcrY"
# μμ IDλ§ μ¨λ λ©λλ€
mcp-yt report LV6Juz0xcrY
```
> β οΈ zsh μ¬μ©μ: URLμ `?`κ° μμΌλ―λ‘ λ°λμ **λ°μ΄ν**λ‘ κ°μΈμΈμ.
### π 리ν¬νΈ μΆλ ₯ μμ
`mcp-yt report "https://www.youtube.com/watch?v=LV6Juz0xcrY"` μ€ν κ²°κ³Ό (extractive μμ½):
```markdown
# πΉ Video Analysis Report: OpenClaw Use Cases that are Actually Helpful! (ClawdBot)
> Channel: Duncan Rogoff | AI Automation | Duration: 16:29 | Language: en_ytdlp
## 1. Summary
OpenClaw is the most powerful AI agent framework in the world right now and
it's about to replace your entire workflow. I spent over $200 in the last
48 hours stress testing the system so you don't have to. It defines who it
is, how it behaves, and crucial behavioral boundaries. If you think open
claw is cool, just check out this video up here of 63 insane use cases
that other people are doing.
## 2. Key Topics
| # | Topic | Keywords | Timespan |
|---|-------|----------|----------|
| 1 | framework, world, right | framework, world, right | 0:00~0:05 |
| 2 | like, really, there | like, really, there | 0:05~2:23 |
| 3 | like, max, using | like, max, using | 2:23~4:22 |
| 4 | going, like, something | going, like, something | 4:22~5:03 |
| 5 | like, agents, basically | like, agents, basically | 5:03~6:04 |
| ... | ... | ... | ... |
| 15 | think, open, claw | think, open, claw | 16:24~16:29 |
## 4. Keywords & Entities
- **Technology**: GitHub, LLM, GPT
- **Company**: Anthropic, Apple
## 5. Viewer Reactions
- Total comments: 20
- Sentiment: Positive 45% / Negative 0% / Neutral 55%
- Top opinions:
- **@geetee2583** (positive, π8): Great info. Just need your inset video out of the way...
- **@bdog4026** (positive, π3): This tool is wild! Definitely the most in depth explanation...
- **@magalyvilela4917** (neutral, π3): Came to this video wondering it gonna teach me how to set up...
```
---
## π CLI μ 체 λͺ
λ Ήμ΄
### π 리ν¬νΈ (ν΅μ¬ κΈ°λ₯)
> β οΈ **리ν¬νΈμ μμ½ μΉμ
μ LLM μ°λμ΄ νμμ
λλ€.
> **Ollama λΉ λ₯Έ μ€μ ** (무λ£, 3λΆμ΄λ©΄ λ):
> ```bash
> # 1. Ollama μ€μΉ: https://ollama.ai
> # 2. λͺ¨λΈ λ€μ΄λ‘λ
> ollama pull qwen2.5:7b
>
> # 3. νκ²½λ³μ μ€μ
> export MYI_LLM_PROVIDER=ollama
> export MYI_OLLAMA_MODEL=qwen2.5:7b
>
> # μ격 μλ²λΌλ©΄ νΈμ€νΈλ μ§μ
> export MYI_OLLAMA_BASE_URL=http://your-server:11434
> ```
```bash
mcp-yt report "https://youtube.com/watch?v=VIDEO_ID"
mcp-yt report VIDEO_ID --provider ollama # LLM νλ‘λ°μ΄λ μ§μ
mcp-yt report VIDEO_ID --no-comments # λκΈ μ μΈ
mcp-yt report VIDEO_ID -o report.md # νμΌ μ μ₯
```
### π― μλ§ μΆμΆ + μμ½
```bash
mcp-yt transcript VIDEO_ID # μμ½ (~200β500 ν ν°)
mcp-yt transcript VIDEO_ID --mode full # μ 체 μλ§
mcp-yt transcript VIDEO_ID --mode chunks # μ²ν¬ λΆν
mcp-yt --json transcript VIDEO_ID # JSON μΆλ ₯
```
### κΈ°ν
```bash
mcp-yt video VIDEO_ID # λ©νλ°μ΄ν°
mcp-yt comments VIDEO_ID --max 20 # λκΈ (κ°μ± λΆμ ν¬ν¨)
mcp-yt entities VIDEO_ID # μν°ν° μΆμΆ
mcp-yt segments VIDEO_ID # ν ν½ μΈκ·Έλ©ν
μ΄μ
mcp-yt search "ν€μλ" --max 5 # YouTube κ²μ
mcp-yt monitor subscribe @μ±λνΈλ€ # μ±λ λͺ¨λν°λ§
mcp-yt playlist PLAYLIST_ID # νλ μ΄λ¦¬μ€νΈ
mcp-yt batch ID1 ID2 ID3 # λ°°μΉ μ²λ¦¬
mcp-yt search-transcripts "ν€μλ" # μ μ₯λ μλ§ κ²μ
```
> π‘ λͺ¨λ λͺ
λ Ήμ΄μ `--json` νλκ·Έλ₯Ό μΆκ°νλ©΄ JSON μΆλ ₯λ©λλ€.
---
## π MCP μλ² μ°κ²°
> MCP μλ²λ **stdio** νλ‘ν μ½λ‘ ν΅μ ν©λλ€.
### Claude Desktop / Cursor / OpenCode
μ€μ νμΌμ μΆκ° (`claude_desktop_config.json`, `.cursor/mcp.json`, `mcp.json`):
```json
{
"mcpServers": {
"youtube": {
"command": "uvx",
"args": ["mcp-youtube-intelligence"],
"env": {
"MYI_LLM_PROVIDER": "ollama",
"MYI_OLLAMA_MODEL": "qwen2.5:7b"
}
}
}
}
```
> π‘ `uvx`λ [`uv`](https://docs.astral.sh/uv/) ν¨ν€μ§ λ§€λμ μ μ€ν λͺ
λ Ήμ΄μ
λλ€. `pip install uv`λ‘ μ€μΉνμΈμ.
>
> ν΄λΌμ°λ LLMμ μ°λ €λ©΄ `env`μ API ν€λ₯Ό μΆκ°νλ©΄ λ©λλ€: `"OPENAI_API_KEY": "sk-..."`
### Claude Code
```bash
claude mcp add youtube -- uvx mcp-youtube-intelligence
```
### MCP Tools (9κ°)
| Tool | μ€λͺ
| μμ ν ν° |
|------|------|:---------:|
| `get_video` | λ©νλ°μ΄ν° + μμ½ | ~200β500 |
| `get_transcript` | μλ§ (summary/full/chunks) | ~200β500 |
| `get_comments` | λκΈ + κ°μ± λΆμ | ~200β500 |
| `monitor_channel` | RSS μ±λ λͺ¨λν°λ§ | ~100β300 |
| `search_transcripts` | μ μ₯λ μλ§ κ²μ | ~100β400 |
| `extract_entities` | μν°ν° μΆμΆ | ~150β300 |
| `segment_topics` | ν ν½ λΆν | ~100β250 |
| `search_youtube` | YouTube κ²μ | ~200 |
| `get_playlist` | νλ μ΄λ¦¬μ€νΈ λΆμ | ~200β500 |
<details>
<summary>π Tool νλΌλ―Έν° μμΈ</summary>
### `get_video`
| νλΌλ―Έν° | νμ
| νμ | μ€λͺ
|
|----------|------|:----:|------|
| `video_id` | string | β
| YouTube μμ ID |
### `get_transcript`
| νλΌλ―Έν° | νμ
| νμ | κΈ°λ³Έκ° | μ€λͺ
|
|----------|------|:----:|--------|------|
| `video_id` | string | β
| β | YouTube μμ ID |
| `mode` | string | β | `"summary"` | `summary` Β· `full` Β· `chunks` |
### `get_comments`
| νλΌλ―Έν° | νμ
| νμ | κΈ°λ³Έκ° | μ€λͺ
|
|----------|------|:----:|--------|------|
| `video_id` | string | β
| β | YouTube μμ ID |
| `top_n` | int | β | `10` | λ°νν λκΈ μ |
| `summarize` | bool | β | `false` | μμ½ λ·° |
### `monitor_channel`
| νλΌλ―Έν° | νμ
| νμ | κΈ°λ³Έκ° | μ€λͺ
|
|----------|------|:----:|--------|------|
| `channel_ref` | string | β
| β | μ±λ URL/@νΈλ€/ID |
| `action` | string | β | `"check"` | `add`Β·`check`Β·`list`Β·`remove` |
### `search_transcripts`
| νλΌλ―Έν° | νμ
| νμ | κΈ°λ³Έκ° | μ€λͺ
|
|----------|------|:----:|--------|------|
| `query` | string | β
| β | κ²μ ν€μλ |
| `limit` | int | β | `10` | μ΅λ κ²°κ³Ό μ |
### `extract_entities` / `segment_topics`
| νλΌλ―Έν° | νμ
| νμ | μ€λͺ
|
|----------|------|:----:|------|
| `video_id` | string | β
| YouTube μμ ID |
### `search_youtube`
| νλΌλ―Έν° | νμ
| νμ | κΈ°λ³Έκ° | μ€λͺ
|
|----------|------|:----:|--------|------|
| `query` | string | β
| β | κ²μ ν€μλ |
| `max_results` | int | β | `10` | μ΅λ κ²°κ³Ό μ |
| `order` | string | β | `"relevance"` | `relevance`Β·`date`Β·`rating`Β·`viewCount` |
### `get_playlist`
| νλΌλ―Έν° | νμ
| νμ | κΈ°λ³Έκ° | μ€λͺ
|
|----------|------|:----:|--------|------|
| `playlist_id` | string | β
| β | νλ μ΄λ¦¬μ€νΈ ID |
| `max_videos` | int | β | `50` | μ΅λ μμ μ |
</details>
---
## βοΈ μ€μ
### LLM νλ‘λ°μ΄λ μ€μ
LLM μμ΄λ κΈ°λ³Έ μμ½(ν΅μ¬ λ¬Έμ₯ μΆμΆ)μ λμν©λλ€. κ³ νμ§ μμ½μ μνλ©΄:
#### Ollama (μΆμ² β 무λ£, μ€νλΌμΈ)
```bash
# 1. Ollama μ€μΉ: https://ollama.ai
# 2. λͺ¨λΈ λ€μ΄λ‘λ
ollama pull qwen2.5:7b
# 3. νκ²½λ³μ μ€μ
export MYI_LLM_PROVIDER=ollama
export MYI_OLLAMA_MODEL=qwen2.5:7b
# 4. (μ ν) μ격 Ollama μλ² μ¬μ© μ
export MYI_OLLAMA_BASE_URL=http://your-server:11434
```
#### ν΄λΌμ°λ LLM
```bash
# API ν€λ§ μ€μ νλ©΄ μλ κ°μ§ (MYI_LLM_PROVIDER=auto)
export OPENAI_API_KEY=sk-... # OpenAI
export ANTHROPIC_API_KEY=sk-ant-... # Anthropic
export GOOGLE_API_KEY=AIza... # Google
# νΉμ νλ‘λ°μ΄λ μ§μ
export MYI_LLM_PROVIDER=anthropic
```
> ν΄λΌμ°λ LLM ν¨ν€μ§: `pip install "mcp-youtube-intelligence[llm]"` (OpenAI) / `[anthropic-llm]` / `[google-llm]` / `[all-llm]`
### μΆμ² Ollama λͺ¨λΈ
| λͺ©μ | λͺ¨λΈ | ν¬κΈ° | νκ΅μ΄ | μμ΄ | νμ§ |
|------|------|:----:|:------:|:----:|:----:|
| **λ€κ΅μ΄ (μΆμ²)** | `qwen2.5:7b` | 4.4GB | β
| β
| βββ |
| **μμ΄ μ€μ¬** | `llama3.1:8b` | 4.7GB | β οΈ | β
| βββ |
| **νκ΅μ΄ νΉν** | `gemma2:9b` | 5.4GB | β
| β
| βββ|
| **κ²½λ** | `qwen2.5:3b` | 1.9GB | β
| β
| ββ |
| **λ€κ΅μ΄ νΉν** | `aya-expanse:8b` | 4.8GB | β
| β
| βββ |
### β±οΈ μ€μΈ‘ λ²€μΉλ§ν¬
> RTX 3070 8GB Β· Ollama Β· νκ΅μ΄ μλ§ ~2,900μ (5λΆ 19μ΄ μμ)
> `load_duration` μ μΈ, μμ μμ± μκ° κΈ°μ€
| λͺ¨λΈ | Prompt μ²λ¦¬ | μμ± μκ° | μλ | μΆλ ₯ | νμ§ |
|------|:-----------:|:---------:|:----:|:----:|:----:|
| **Extractive** | - | μ¦μ | - | 379μ | ββ |
| **qwen2.5:1.5b** | 7.8s | **4.7s** | 30.4 tok/s | 232μ | ββ |
| **qwen2.5:7b** | 34.5s | **18.8s** | 7.3 tok/s | 766μ | βββ |
| **aya-expanse:8b** | 29.5s | **34.5s** | 6.2 tok/s | 405μ | βββ |
> β οΈ μ²« μ€ν μ λͺ¨λΈ λ‘λμ 15~60μ΄ μΆκ°. `keep_alive`λ‘ λ©λͺ¨λ¦¬ μ μ§νλ©΄ μ΄ν λ‘λ μμ.
<details>
<summary>π μ 체 νκ²½λ³μ λͺ©λ‘</summary>
| νκ²½λ³μ | κΈ°λ³Έκ° | μ€λͺ
|
|----------|--------|------|
| `MYI_DATA_DIR` | `~/.mcp-youtube-intelligence` | λ°μ΄ν° λλ ν 리 |
| `MYI_STORAGE` | `sqlite` | `sqlite` Β· `postgres` |
| `MYI_SQLITE_PATH` | `{DATA_DIR}/data.db` | SQLite κ²½λ‘ |
| `MYI_POSTGRES_DSN` | β | PostgreSQL DSN |
| `MYI_YT_DLP` | `yt-dlp` | yt-dlp κ²½λ‘ |
| `MYI_MAX_COMMENTS` | `20` | μ΅λ λκΈ μ |
| `MYI_LLM_PROVIDER` | `auto` | `auto`Β·`openai`Β·`anthropic`Β·`google`Β·`ollama`Β·`vllm`Β·`lmstudio` |
| `OPENAI_API_KEY` | β | OpenAI ν€ |
| `MYI_OPENAI_MODEL` | `gpt-4o-mini` | OpenAI λͺ¨λΈ |
| `ANTHROPIC_API_KEY` | β | Anthropic ν€ |
| `MYI_ANTHROPIC_MODEL` | `claude-sonnet-4-20250514` | Anthropic λͺ¨λΈ |
| `GOOGLE_API_KEY` | β | Google ν€ |
| `MYI_GOOGLE_MODEL` | `gemini-2.0-flash` | Google λͺ¨λΈ |
| `MYI_OLLAMA_BASE_URL` | `http://localhost:11434` | Ollama URL |
| `MYI_OLLAMA_MODEL` | `llama3.1:8b` | Ollama λͺ¨λΈ |
| `MYI_VLLM_BASE_URL` | `http://localhost:8000` | vLLM URL |
| `MYI_VLLM_MODEL` | β | vLLM λͺ¨λΈ |
| `MYI_LMSTUDIO_BASE_URL` | `http://localhost:1234` | LM Studio URL |
| `MYI_LMSTUDIO_MODEL` | β | LM Studio λͺ¨λΈ |
</details>
---
## π νΈλ¬λΈμν
| λ¬Έμ | ν΄κ²° |
|------|------|
| `zsh: no matches found` | URLμ λ°μ΄νλ‘ κ°μΈκΈ°: `mcp-yt transcript "https://..."` |
| `yt-dlp not found` | `pip install yt-dlp` λλ `export MYI_YT_DLP=/path/to/yt-dlp` |
| μλ§ μλ μμ | `mcp-yt video`λ‘ λ©νλ°μ΄ν°λ§ κ°μ Έμ€κΈ° |
| SQLite database locked | μλ² μΈμ€ν΄μ€ νλλ§ μ€ν μ€μΈμ§ νμΈ |
| LLM μμ½ μ€ν¨ | μλμΌλ‘ extractive ν΄λ°±λ¨. API ν€ νμΈ. |
---
## π€ Contributing
```bash
git clone https://github.com/JangHyuckYun/mcp-youtube-intelligence.git
cd mcp-youtube-intelligence
pip install -e ".[dev]"
pytest tests/ -v
```
## π λΌμ΄μ μ€
Apache 2.0 β [LICENSE](LICENSE)
## π λ³κ²½ μ΄λ ₯
| λ μ§ | λ²μ | μ£Όμ λ³κ²½ |
|------|------|----------|
| 2025-02-18 | v0.1.0 | μ΄κΈ° λ¦΄λ¦¬μ€ β 9κ° MCP λꡬ, CLI, SQLite |
| 2025-02-18 | v0.1.1 | Multi-LLM (OpenAI/Anthropic/Google), Apache 2.0 |
| 2025-02-18 | v0.1.2 | Local LLM (Ollama/vLLM/LM Studio), yt-dlp μλ§ κ°μ , μμ΄ κΈ°λ³Έ μΆλ ₯ |
| 2025-02-18 | v0.1.3 | Local LLM (Ollama/vLLM/LM Studio), yt-dlp μλ§ κ°μ , μμ΄ κΈ°λ³Έ μΆλ ₯ |