create_playlist
Create a playlist on your YouTube channel. Customize with 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/tools/playlists.ts:16-36 (handler)Registration function registerPlaylistTools that registers the 'create_playlist' tool with the MCP server, including the async handler that calls client.createPlaylist() and returns a success message.
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})`, }, ], }; }, ); - src/youtube/client.ts:178-191 (handler)The YouTubeClient.createPlaylist() method that makes the actual POST request to the YouTube Data API v3 /playlists endpoint with snippet and status data.
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:5-9 (schema)Zod schema for create_playlist tool input validation: title (required string), description (optional string), privacy_status (enum with default 'private').
const createPlaylistSchema = { title: z.string().min(1), description: z.string().optional(), privacy_status: z.enum(["public", "unlisted", "private"]).default("private"), }; - src/server.ts:45-55 (registration)Server setup calls registerPlaylistTools(s, youtube) at line 48 to wire the tool into the MCP server.
const buildServer = () => { const s = new McpServer({ name: "youtube-mcp", version: "0.1.0" }); registerVideoTools(s, youtube); registerPlaylistTools(s, youtube); registerCommentTools(s, youtube); registerAnalyticsTool(s, youtube); registerCaptionTools(s, youtube); registerShortsTools(s, youtube); registerBridgeTools(s, youtube, comfyui, config.comfyUIDefaultCkpt); return s; };