YT-NINJA
# YT-NINJA š„·
A comprehensive YouTube MCP (Model Context Protocol) server that provides AI-powered video analysis, playback control, transcript management, and advanced content processing capabilities.
## Features
### š¬ Video Playback
- Play videos in browser or VLC player
- Audio-only playback with ffplay
- Video segment playback with timestamp control
- Active playback session management
### š Data Retrieval
- Get detailed video information (title, views, likes, duration, etc.)
- Fetch playlist details with all videos
- Retrieve channel information and statistics
- Search YouTube videos and music
- Download video thumbnails in multiple qualities
### š Transcript Management
- Get official video transcripts
- AI-powered transcript generation (when official unavailable)
- Translate transcripts to any language
- Format transcripts with or without timestamps
### š¤ AI-Powered Analysis
- Generate video summaries with key points
- Auto-generate chapter markers
- Extract relevant keywords with relevance scores
- Detect topics and categories
- Create AI-powered video highlights
## Installation
### Prerequisites
- Node.js >= 18.0.0
- npm >= 9.0.0
- Google Gemini API key (required for AI features)
- Optional: VLC Media Player (for VLC playback)
- Optional: FFmpeg (for audio playback and processing)
### Setup
1. Clone the repository:
```bash
git clone <repository-url>
cd yt-ninja
```
2. Install dependencies:
```bash
npm install
```
3. Configure environment variables:
```bash
cp .env.example .env
```
Edit `.env` and add your configuration:
```env
# Required
GEMINI_API_KEY=your-google-gemini-api-key
# Optional
DOWNLOAD_DIR=./downloads
TEMP_DIR=./temp
MAX_CONCURRENT_DOWNLOADS=3
LOG_LEVEL=info
```
4. Build the project:
```bash
npm run build
```
## Configuration
### Environment Variables
| Variable | Required | Default | Description |
|----------|----------|---------|-------------|
| `GEMINI_API_KEY` | Yes | - | Google Generative AI API key for AI features |
| `DOWNLOAD_DIR` | No | `./downloads` | Directory for downloaded files |
| `TEMP_DIR` | No | `./temp` | Temporary files directory |
| `MAX_CONCURRENT_DOWNLOADS` | No | `3` | Maximum concurrent downloads |
| `LOG_LEVEL` | No | `info` | Logging level (error, warn, info, debug) |
### Getting a Gemini API Key
1. Visit [Google AI Studio](https://makersuite.google.com/app/apikey)
2. Sign in with your Google account
3. Click "Create API Key"
4. Copy the key and add it to your `.env` file
### MCP Configuration
Add to your MCP settings file (`mcp.json`):
```json
{
"mcpServers": {
"yt-ninja": {
"command": "node",
"args": ["/path/to/yt-ninja/dist/index.js"],
"env": {
"GEMINI_API_KEY": "your-api-key-here"
},
"disabled": false
}
}
}
```
## Available Tools
### Playback Tools
#### `play_youtube_video`
Play a YouTube video in browser or VLC player.
**Parameters:**
- `url` (string, required): YouTube video URL
- `player` (string, optional): Player type - `browser` or `vlc` (default: `browser`)
**Example:**
```json
{
"url": "https://www.youtube.com/watch?v=dQw4w9WgXcQ",
"player": "browser"
}
```
### Data Retrieval Tools
#### `get_video_info`
Get comprehensive information about a YouTube video.
**Parameters:**
- `url` (string, required): YouTube video URL
**Returns:** Video title, description, channel, views, likes, duration, tags, thumbnail, etc.
#### `get_playlist_info`
Get information about a YouTube playlist.
**Parameters:**
- `url` (string, required): YouTube playlist URL
**Returns:** Playlist title, description, video count, total duration, list of videos
#### `get_channel_info`
Get information about a YouTube channel.
**Parameters:**
- `channelId` (string, required): Channel ID or URL
**Returns:** Channel name, description, subscriber count, total views, video count
#### `search_youtube`
Search for videos on YouTube.
**Parameters:**
- `query` (string, required): Search query
- `maxResults` (number, optional): Maximum results (1-50, default: 10)
**Returns:** Array of search results with video details
#### `search_music`
Search specifically for music on YouTube.
**Parameters:**
- `query` (string, required): Music search query
- `maxResults` (number, optional): Maximum results (1-50, default: 10)
**Returns:** Array of music search results
#### `download_thumbnail`
Download a video thumbnail image.
**Parameters:**
- `url` (string, required): YouTube video URL
- `outputPath` (string, optional): Output file path
- `quality` (string, optional): Quality - `maxres`, `high`, `medium`, `default` (default: `maxres`)
### Transcript Tools
#### `get_transcript`
Get the transcript/subtitles of a video.
**Parameters:**
- `url` (string, required): YouTube video URL
- `language` (string, optional): Language code (e.g., 'en', 'es', 'fr')
**Returns:** Transcript text, language, timestamps, source type
#### `translate_transcript`
Translate a video transcript to another language.
**Parameters:**
- `url` (string, required): YouTube video URL
- `targetLanguage` (string, required): Target language code
**Returns:** Translated transcript with original timestamps
### AI Analysis Tools
#### `summarize_video`
Generate an AI-powered summary of a video.
**Parameters:**
- `url` (string, required): YouTube video URL
- `maxWords` (number, optional): Maximum words in summary (default: 200)
**Returns:** Summary text, key points, word count
#### `generate_chapters`
Auto-generate chapter markers for a video.
**Parameters:**
- `url` (string, required): YouTube video URL
**Returns:** Array of chapters with timestamps, titles, and descriptions
#### `get_keywords`
Extract relevant keywords from a video.
**Parameters:**
- `url` (string, required): YouTube video URL
- `count` (number, optional): Number of keywords (default: 15)
**Returns:** Array of keywords with relevance scores and frequency
#### `detect_topics`
Detect topics and categories in a video.
**Parameters:**
- `url` (string, required): YouTube video URL
**Returns:** Array of topics with confidence scores and categories
#### `generate_video_highlights`
Generate AI-powered video highlights.
**Parameters:**
- `url` (string, required): YouTube video URL
- `count` (number, optional): Number of highlights (5-10, default: 7)
**Returns:** Array of highlight moments with timestamps, descriptions, reasons, and scores
## Usage Examples
### Using with\
AI
Once configured as an MCP server, you can use YT-NINJA through natural language:
```
"Get information about this video: https://www.youtube.com/watch?v=dQw4w9WgXcQ"
"Summarize this YouTube video in 150 words"
"Generate chapters for this tutorial video"
"Extract the top 20 keywords from this video"
"Get the transcript and translate it to Spanish"
```
### Programmatic Usage
```typescript
import { dataManager, aiAnalyzer, transcriptManager } from 'yt-ninja';
// Get video info
const videoInfo = await dataManager.getVideoInfo('https://youtube.com/watch?v=...');
// Generate summary
const summary = await aiAnalyzer.summarizeVideo('https://youtube.com/watch?v=...', 200);
// Get transcript
const transcript = await transcriptManager.getTranscript('https://youtube.com/watch?v=...');
```
## Development
### Scripts
- `npm run dev` - Run in development mode with hot reload
- `npm run build` - Build for production
- `npm start` - Start the production server
- `npm run lint` - Lint code
- `npm run format` - Format code with Prettier
- `npm run type-check` - Check TypeScript types
### Project Structure
```
yt-ninja/
āāā src/
ā āāā index.ts # Entry point
ā āāā server.ts # MCP server setup
ā āāā integrations/ # External service integrations
ā ā āāā youtube.ts # YouTube API client
ā ā āāā genai.ts # Google GenAI client
ā ā āāā ffmpeg.ts # FFmpeg integration
ā ā āāā process.ts # Process management
ā āāā managers/ # Feature managers
ā ā āāā DataManager.ts # Data retrieval
ā ā āāā PlaybackManager.ts # Playback control
ā ā āāā TranscriptManager.ts # Transcript operations
ā ā āāā AIAnalyzer.ts # AI analysis
ā ā āāā MediaProcessor.ts # Media processing
ā ā āāā AdvancedFeaturesManager.ts # Advanced features
ā āāā types/ # TypeScript type definitions
ā āāā utils/ # Utility functions
āāā dist/ # Compiled output
āāā downloads/ # Downloaded files
āāā .env # Environment configuration
āāā package.json
```
## Error Handling
YT-NINJA provides detailed error messages with suggestions:
```json
{
"success": false,
"error": {
"code": "INVALID_URL",
"message": "Invalid YouTube video URL",
"details": { "url": "..." },
"suggestions": [
"Provide a valid YouTube video URL",
"Example: https://www.youtube.com/watch?v=VIDEO_ID"
]
}
}
```
TDQS
Scored across 14 tools
Each tool has a clearly distinct purpose targeting specific YouTube-related actions or resources, such as detecting topics, downloading thumbnails, generating chapters/highlights, getting various types of information, searching, summarizing, and translating. There is no significant overlap or ambiguity between tools, making it easy for an agent to select the appropriate one.
All tool names follow a consistent verb_noun pattern using snake_case, such as 'detect_topics', 'download_thumbnail', 'get_channel_info', and 'search_youtube'. This uniformity enhances readability and predictability across the entire tool set.
With 14 tools, the server is well-scoped for YouTube content analysis and interaction, covering a comprehensive range of operations from information retrieval to AI-powered processing. Each tool serves a unique and justified function within this domain.
The tool set provides complete coverage for YouTube video and channel analysis, including CRUD-like operations (e.g., get info, search), AI enhancements (e.g., summarize, generate highlights), and utility functions (e.g., play video, translate transcript). There are no obvious gaps that would hinder agent workflows in this domain.