Content
# YouTube Playlist Generator MCP Server
A Model Context Protocol (MCP) server that enables AI applications to search for YouTube music videos and manage playlists using the official YouTube Data API v3.
## Features
- **Search Music Videos**: Find music videos on YouTube with customizable search parameters
- **Get Video Details**: Retrieve comprehensive information about specific videos
- **Get Playlist Items**: List videos from public playlists
- **Playlist Management**: Complete playlist management including creating, editing, and managing playlists (requires OAuth setup)
## Setup
### Prerequisites
- Node.js 18 or higher
- A Google Cloud Project with YouTube Data API v3 enabled
- YouTube Data API key
- OAuth 2.0 Client credentials (optional, required for playlist management features)
### Installation
1. Clone this repository:
```bash
git clone https://github.com/danisss9/yt-playlist-generator-mcp-server
```
2. Install dependencies:
```bash
npm install
```
3. Get a YouTube Data API key:
- Go to the [Google Cloud Console](https://console.cloud.google.com/)
- Create a new project or select an existing one
- Enable the YouTube Data API v3
- Create credentials (API key)
- Copy the API key
4. Set up environment variables:
```bash
# Create a .env file
echo "YOUTUBE_API_KEY=your_api_key_here" > .env
echo "YOUTUBE_CLIENT_ID=your_client_id_here" >> .env
echo "YOUTUBE_CLIENT_SECRET=your_client_secret_here" >> .env
```
5. Build the TypeScript code:
```bash
npm run build
```
### Running the Server
For development with auto-rebuild:
```bash
npm run dev
```
For production:
```bash
npm start
```
### Using with MCP Clients
This server uses the stdio transport, so it can be used with any MCP client that supports stdio.
#### Claude Desktop Configuration
Add to your Claude Desktop configuration file:
**macOS**: `~/Library/Application Support/Claude/claude_desktop_config.json`
**Windows**: `%APPDATA%\Claude\claude_desktop_config.json`
```json
{
"mcpServers": {
"youtube-playlist-generator": {
"command": "node",
"args": ["/absolute/path/to/yt-playlist-generator/build/index.js"],
"env": {
"YOUTUBE_API_KEY": "your_youtube_api_key_here",
"YOUTUBE_CLIENT_ID": "your_client_id_here",
"YOUTUBE_CLIENT_SECRET": "your_client_secret_here"
}
}
}
}
```
#### Visual Studio Code with GitHub Copilot Configuration
To use this MCP server with GitHub Copilot in Visual Studio Code, you need to configure it in your VS Code settings:
1. **Open VS Code Settings**: Press `Ctrl+,` (Windows/Linux) or `Cmd+,` (macOS)
2. **Search for MCP**: Type "mcp" in the search bar
3. **Add MCP Server Configuration**: Add the following to your VS Code settings JSON:
```json
{
"github.copilot.chat.mcp.servers": {
"youtube-playlist-generator": {
"command": "node",
"args": ["/absolute/path/to/yt-playlist-generator/build/index.js"],
"env": {
"YOUTUBE_API_KEY": "your_youtube_api_key_here",
"YOUTUBE_CLIENT_ID": "your_client_id_here",
"YOUTUBE_CLIENT_SECRET": "your_client_secret_here"
}
}
}
}
```
**Alternative: Use Settings UI**
1. Go to **File > Preferences > Settings** (or use `Ctrl+,`)
2. Search for "GitHub Copilot MCP"
3. Click "Edit in settings.json" next to "Github › Copilot › Chat: Mcp Servers"
4. Add the server configuration as shown above
**Environment Variables Setup**
For security, you can also set environment variables system-wide instead of in the config:
**Windows (PowerShell)**:
```powershell
[Environment]::SetEnvironmentVariable("YOUTUBE_API_KEY", "your_api_key_here", "User")
[Environment]::SetEnvironmentVariable("YOUTUBE_CLIENT_ID", "your_client_id_here", "User")
[Environment]::SetEnvironmentVariable("YOUTUBE_CLIENT_SECRET", "your_client_secret_here", "User")
```
**Windows (Command Prompt)**:
```cmd
setx YOUTUBE_API_KEY "your_api_key_here"
setx YOUTUBE_CLIENT_ID "your_client_id_here"
setx YOUTUBE_CLIENT_SECRET "your_client_secret_here"
```
**macOS/Linux**:
```bash
export YOUTUBE_API_KEY="your_api_key_here"
export YOUTUBE_CLIENT_ID="your_client_id_here"
export YOUTUBE_CLIENT_SECRET="your_client_secret_here"
# Add to ~/.bashrc, ~/.zshrc, or ~/.profile to persist
echo 'export YOUTUBE_API_KEY="your_api_key_here"' >> ~/.bashrc
echo 'export YOUTUBE_CLIENT_ID="your_client_id_here"' >> ~/.bashrc
echo 'export YOUTUBE_CLIENT_SECRET="your_client_secret_here"' >> ~/.bashrc
```
Then remove the `env` section from the VS Code configuration:
```json
{
"github.copilot.chat.mcp.servers": {
"youtube-playlist-generator": {
"command": "node",
"args": ["/absolute/path/to/yt-playlist-generator/build/index.js"]
}
}
}
```
**Usage in VS Code**
Once configured, you can use the MCP server through GitHub Copilot Chat:
1. Open Copilot Chat (`Ctrl+Alt+I` or click the chat icon)
2. Use natural language to interact with YouTube:
- "Search for music videos about jazz"
- "Create a new playlist called 'My Favorites'"
- "Add this video to my playlist"
- "Show me details about this YouTube video"
## Available Tools
### Read-Only Tools (API Key Authentication)
#### search_music_videos
Search YouTube for music videos with specified criteria.
**Parameters:**
- `query` (string): Search query for music videos
- `maxResults` (number, 1-50, default: 10): Maximum number of results
- `order` (enum): Sort order - "relevance", "date", "rating", "viewCount", "title"
#### get_video_details
Get detailed information about a specific YouTube video.
**Parameters:**
- `videoId` (string): YouTube video ID
#### get_playlist_items
Retrieve videos from a public YouTube playlist.
**Parameters:**
- `playlistId` (string): YouTube playlist ID
- `maxResults` (number, 1-50, default: 25): Maximum number of items
### OAuth-Required Tools (Playlist Management)
#### authenticate_youtube
Authenticate with YouTube OAuth to enable playlist management features.
**Parameters:**
- `getAuthUrl` (boolean, default: false): Set to true to get the authorization URL
- `authCode` (string, optional): Authorization code from OAuth flow
#### get_auth_status
Check current OAuth authentication status.
**Parameters:** None
#### create_playlist
Create a new YouTube playlist (requires OAuth authentication).
**Parameters:**
- `title` (string): Playlist title
- `description` (string, optional): Playlist description
- `privacy` (enum): "private", "public", or "unlisted"
#### edit_playlist
Edit existing playlist information (requires OAuth authentication).
**Parameters:**
- `playlistId` (string): ID of the playlist to edit
- `title` (string, optional): New title for the playlist
- `description` (string, optional): New description for the playlist
- `privacy` (enum, optional): New privacy setting - "private", "public", or "unlisted"
**Note:** At least one field (title, description, or privacy) must be provided to update.
#### add_to_playlist
Add a video to an existing playlist (requires OAuth authentication).
**Parameters:**
- `playlistId` (string): Target playlist ID
- `videoId` (string): Video ID to add
#### list_playlists
List user's playlists (requires OAuth authentication).
**Parameters:**
- `maxResults` (number, 1-50, default: 25): Maximum number of playlists
- `mine` (boolean, default: true): List authenticated user's playlists
#### remove_from_playlist
Remove a video from a playlist (requires OAuth authentication).
**Parameters:**
- `playlistItemId` (string): ID of the playlist item to remove (get from get_playlist_items)
## OAuth Authentication Setup
For full playlist management capabilities, you need to set up OAuth 2.0:
### 1. Google Cloud Console Setup
1. Go to [Google Cloud Console](https://console.cloud.google.com/)
2. Create a new project or select existing one
3. Enable the YouTube Data API v3
4. Go to "Credentials" → "Create Credentials" → "OAuth 2.0 Client ID"
5. Choose "Desktop Application" as application type
6. Download the credentials or copy the Client ID and Client Secret
### 2. Environment Configuration
Add your OAuth credentials to the `.env` file:
```bash
YOUTUBE_API_KEY=your_api_key_here
YOUTUBE_CLIENT_ID=your_client_id_here
YOUTUBE_CLIENT_SECRET=your_client_secret_here
```
### 3. Authentication Flow
1. Use the `authenticate_youtube` tool with `getAuthUrl: true`
2. Open the provided URL in your browser
3. Sign in to your Google account and grant permissions
4. Copy the authorization code
5. Use `authenticate_youtube` tool again with the `authCode` parameter
### 4. Using Authenticated Features
Once authenticated, you can:
- Create new playlists
- Edit existing playlist information (title, description, privacy)
- Add videos to your playlists
- List your private playlists
- Remove videos from playlists
## API Limitations
- **Quota Limits**: YouTube API has daily quota limits (10,000 units/day by default)
- **Rate Limiting**: API calls are subject to rate limiting
- **OAuth Tokens**: Access tokens expire and need refresh (handled automatically)
- **Permissions**: OAuth scope determines available operations
## Development
### Building
```bash
npm run build
```
### Development Mode
```bash
npm run dev
```
### Project Structure
```
src/
└── index.ts # Main server implementation
build/ # Compiled JavaScript output
```
## Contributing
1. Fork the repository
2. Create a feature branch
3. Make your changes
4. Test thoroughly
5. Submit a pull request
## License
MIT License - see LICENSE file for details
## Troubleshooting
### Common Issues
1. **"YOUTUBE_API_KEY environment variable is required"**
- Make sure you've set the YOUTUBE_API_KEY environment variable
- Verify the API key is valid and has YouTube Data API access
2. **"Quota exceeded" errors**
- You've hit the daily API quota limit
- Wait for quota reset or request quota increase
3. **"Playlist not found" errors**
- Ensure the playlist ID is correct
- Verify the playlist is public (private playlists require OAuth)
4. **Build errors**
- Make sure you have Node.js 18+ installed
- Run `npm install` to ensure all dependencies are installed
- Check TypeScript compilation with `npm run build`
## Security Considerations
- Never commit API keys to version control
- Use environment variables for sensitive configuration
- Validate all user inputs
- Implement proper error handling and logging
---
*This project was created using GitHub Copilot*
MCP Config
Below is the configuration for this MCP Server. You can copy it directly to Cursor or other MCP clients.
mcp.json
Connection Info
You Might Also Like
No recommendations available