create_playlist
Create a new playlist on your YouTube channel with customizable title, description, and privacy status (public, unlisted, or private).
Instructions
Create a new playlist on the authenticated channel. Default privacy is 'private'.
Input Schema
| Name | Required | Description | Default |
|---|---|---|---|
| title | Yes | ||
| description | No | ||
| privacy_status | No | private |
Implementation Reference
- src/youtube/client.ts:178-191 (handler)YouTubeClient.createPlaylist - makes the actual YouTube API POST /playlists call with snippet and status
createPlaylist(input: { title: string; description?: string; privacyStatus: "public" | "unlisted" | "private"; }): Promise<Playlist> { return this.dataPost<Playlist>( "/playlists", { part: "snippet,status" }, { snippet: { title: input.title, description: input.description ?? "" }, status: { privacyStatus: input.privacyStatus }, }, ); } - src/tools/playlists.ts:17-36 (handler)MCP tool handler for create_playlist - receives args, calls client.createPlaylist, returns formatted response
server.tool( "create_playlist", "Create a new playlist on the authenticated channel. Default privacy is 'private'.", createPlaylistSchema, async (args) => { const playlist = await client.createPlaylist({ title: args.title, description: args.description, privacyStatus: args.privacy_status, }); return { content: [ { type: "text" as const, text: `Created ${args.privacy_status} playlist: ${playlist.snippet?.title ?? args.title} (${playlist.id})`, }, ], }; }, ); - src/tools/playlists.ts:5-9 (schema)Zod schema defining create_playlist input params: title (required), description (optional), privacy_status (enum, defaults to private)
const createPlaylistSchema = { title: z.string().min(1), description: z.string().optional(), privacy_status: z.enum(["public", "unlisted", "private"]).default("private"), }; - src/tools/playlists.ts:16-57 (registration)Registration function that calls server.tool() to register create_playlist and add_to_playlist with the MCP server
export function registerPlaylistTools(server: McpServer, client: YouTubeClient): void { server.tool( "create_playlist", "Create a new playlist on the authenticated channel. Default privacy is 'private'.", createPlaylistSchema, async (args) => { const playlist = await client.createPlaylist({ title: args.title, description: args.description, privacyStatus: args.privacy_status, }); return { content: [ { type: "text" as const, text: `Created ${args.privacy_status} playlist: ${playlist.snippet?.title ?? args.title} (${playlist.id})`, }, ], }; }, ); server.tool( "add_to_playlist", "Add a video to an existing playlist. Both playlist_id and video_id are YouTube IDs (not URLs).", addToPlaylistSchema, async (args) => { await client.addToPlaylist({ playlistId: args.playlist_id, videoId: args.video_id, }); return { content: [ { type: "text" as const, text: `Added video ${args.video_id} to playlist ${args.playlist_id}`, }, ], }; }, ); } - src/server.ts:48-48 (registration)Registration call site in server.ts that wires up the playlist tools to the MCP server instance
registerPlaylistTools(s, youtube);