UNPKG

youtube-data-mcp

Version:

MCP server for YouTube data extraction - transcripts, comments, and search

93 lines 3.52 kB
import { z } from "zod"; export const VideoUrlSchema = z.object({ url: z.string().describe("YouTube video URL or video ID"), }); export const TranscriptInputSchema = { url: z.string().describe("YouTube video URL or video ID"), lang: z.string().default("en").describe('Language code for transcript (e.g., "en", "ko", "ja")'), }; export const VideoInfoInputSchema = { url: z.string().describe("YouTube video URL or video ID"), }; export const CommentsInputSchema = { url: z.string().optional().describe("YouTube video URL or video ID"), limit: z.number().default(100).describe("Maximum number of comments to retrieve"), sort: z.enum(["relevance", "time"]).default("relevance").describe("Sort order for comments"), pageToken: z.string().optional().describe("Token for pagination (from previous response)"), }; export const RepliesInputSchema = { pageToken: z.string().describe("Reply token from a comment to get its replies"), }; export const SearchInputSchema = { query: z.string().describe("Search query for YouTube"), limit: z.number().default(10).describe("Maximum number of results to return"), gl: z.string().optional().describe("Country code for search results (e.g., 'us', 'kr', 'jp')"), hl: z.string().optional().describe("Language code for search results (e.g., 'en', 'ko', 'ja')"), sp: z.string().optional().describe("Special parameter for filtering or pagination"), pageToken: z.string().optional().describe("Token for pagination from previous response"), }; export const TranscriptOutputSchema = { videoInfo: z.object({ id: z.string(), title: z.string().optional(), channelName: z.string().optional(), publishedAt: z.string().optional(), viewCount: z.string().optional(), }), fullText: z.string(), language: z.string(), }; export const VideoInfoOutputSchema = { videoId: z.string(), title: z.string().optional(), viewCount: z.string().optional(), publishDate: z.string().optional(), channelName: z.string().optional(), commentCount: z.number().optional(), commentsNextPageToken: z.string().optional(), commentsSortingTokens: z.array(z.object({ title: z.string(), token: z.string(), })).optional(), }; export const CommentSchema = z.object({ commentId: z.string(), author: z.string(), text: z.string(), time: z.string(), likes: z.number(), replies: z.number().optional(), repliesToken: z.string().nullable().optional(), }); export const CommentsOutputSchema = { videoId: z.string(), videoTitle: z.string().optional(), comments: z.array(CommentSchema), commentCount: z.number(), nextPageToken: z.string().optional(), }; export const RepliesOutputSchema = { parentCommentId: z.string(), replies: z.array(z.object({ commentId: z.string(), author: z.string(), text: z.string(), time: z.string(), likes: z.number(), })), replyCount: z.number(), nextPageToken: z.string().optional(), }; export const SearchOutputSchema = { searchMetadata: z.any().optional(), searchParameters: z.any().optional(), videoResults: z.array(z.any()), channelResults: z.array(z.any()).optional(), playlistResults: z.array(z.any()).optional(), pagination: z.object({ current: z.number().optional(), next: z.string().optional(), nextPageToken: z.string().optional(), }).optional(), }; //# sourceMappingURL=index.js.map