diff --git a/cmd/caption/download.go b/cmd/caption/download.go index 79ee0b7..0489447 100644 --- a/cmd/caption/download.go +++ b/cmd/caption/download.go @@ -65,8 +65,8 @@ var downloadTool = mcp.NewTool( mcp.Description(fileUsage), mcp.Required(), ), mcp.WithString( - "tfmt", mcp.DefaultString(""), - mcp.Description(tfmtUsage), mcp.Required(), + "tfmt", mcp.Enum("sbv", "srt", "vtt"), + mcp.DefaultString(""), mcp.Description(tfmtUsage), mcp.Required(), ), mcp.WithString( "tlang", mcp.DefaultString(""), diff --git a/cmd/caption/insert.go b/cmd/caption/insert.go index e01abb0..9a6f0ac 100644 --- a/cmd/caption/insert.go +++ b/cmd/caption/insert.go @@ -5,6 +5,7 @@ import ( "context" "github.com/eat-pray-ai/yutu/cmd" "github.com/eat-pray-ai/yutu/pkg/caption" + "github.com/eat-pray-ai/yutu/pkg/utils" "github.com/mark3labs/mcp-go/mcp" "github.com/spf13/cobra" "io" @@ -74,28 +75,29 @@ var insertTool = mcp.NewTool( mcp.Description(fileUsage), mcp.Required(), ), mcp.WithString( - "audioTrackType", mcp.DefaultString("unknown"), - mcp.Description(attUsage), mcp.Required(), + "audioTrackType", + mcp.Enum("unknown", "primary", "commentary", "descriptive"), + mcp.DefaultString("unknown"), mcp.Description(attUsage), mcp.Required(), ), - mcp.WithBoolean( - "isAutoSynced", mcp.DefaultBool(true), - mcp.Description(iasUsage), mcp.Required(), + mcp.WithString( + "isAutoSynced", mcp.Enum("true", "false", ""), + mcp.DefaultString("true"), mcp.Description(iasUsage), mcp.Required(), ), - mcp.WithBoolean( - "isCC", mcp.DefaultBool(false), - mcp.Description(iscUsage), mcp.Required(), + mcp.WithString( + "isCC", mcp.Enum("true", "false", ""), + mcp.DefaultString("false"), mcp.Description(iscUsage), mcp.Required(), ), - mcp.WithBoolean( - "isDraft", mcp.DefaultBool(false), - mcp.Description(isdUsage), mcp.Required(), + mcp.WithString( + "isDraft", mcp.Enum("true", "false", ""), + mcp.DefaultString("false"), mcp.Description(isdUsage), mcp.Required(), ), - mcp.WithBoolean( - "isEasyReader", mcp.DefaultBool(false), - mcp.Description(iserUsage), mcp.Required(), + mcp.WithString( + "isEasyReader", mcp.Enum("true", "false", ""), + mcp.DefaultString("false"), mcp.Description(iserUsage), mcp.Required(), ), - mcp.WithBoolean( - "isLarge", mcp.DefaultBool(false), - mcp.Description(islUsage), mcp.Required(), + mcp.WithString( + "isLarge", mcp.Enum("true", "false", ""), + mcp.DefaultString("false"), mcp.Description(islUsage), mcp.Required(), ), mcp.WithString( "language", mcp.DefaultString(""), @@ -106,8 +108,8 @@ var insertTool = mcp.NewTool( mcp.Description(nameUsage), mcp.Required(), ), mcp.WithString( - "trackKind", mcp.DefaultString("standard"), - mcp.Description(tkUsage), mcp.Required(), + "trackKind", mcp.Enum("standard", "ASR", "forced"), + mcp.DefaultString("standard"), mcp.Description(tkUsage), mcp.Required(), ), mcp.WithString( "videoId", mcp.DefaultString(""), @@ -137,16 +139,16 @@ func insertHandler( args := request.GetArguments() file, _ = args["file"].(string) audioTrackType, _ = args["audioTrackType"].(string) - isAutoSyncedRaw, _ := args["isAutoSynced"].(bool) - isAutoSynced = &isAutoSyncedRaw - isCCRaw, _ := args["isCC"].(bool) - isCC = &isCCRaw - isDraftRaw, _ := args["isDraft"].(bool) - isDraft = &isDraftRaw - isEasyReaderRaw, _ := args["isEasyReader"].(bool) - isEasyReader = &isEasyReaderRaw - isLargeRaw, _ := args["isLarge"].(bool) - isLarge = &isLargeRaw + isAutoSyncedRaw, _ := args["isAutoSynced"].(string) + isAutoSynced = utils.BoolPtr(isAutoSyncedRaw) + isCCRaw, _ := args["isCC"].(string) + isCC = utils.BoolPtr(isCCRaw) + isDraftRaw, _ := args["isDraft"].(string) + isDraft = utils.BoolPtr(isDraftRaw) + isEasyReaderRaw, _ := args["isEasyReader"].(string) + isEasyReader = utils.BoolPtr(isEasyReaderRaw) + isLargeRaw, _ := args["isLarge"].(string) + isLarge = utils.BoolPtr(isLargeRaw) language, _ = args["language"].(string) name, _ = args["name"].(string) trackKind, _ = args["trackKind"].(string) diff --git a/cmd/caption/update.go b/cmd/caption/update.go index 8875dd8..3eaf94c 100644 --- a/cmd/caption/update.go +++ b/cmd/caption/update.go @@ -5,6 +5,7 @@ import ( "context" "github.com/eat-pray-ai/yutu/cmd" "github.com/eat-pray-ai/yutu/pkg/caption" + "github.com/eat-pray-ai/yutu/pkg/utils" "github.com/mark3labs/mcp-go/mcp" "github.com/spf13/cobra" "io" @@ -76,25 +77,25 @@ var updateTool = mcp.NewTool( "audioTrackType", mcp.DefaultString("unknown"), mcp.Description(attUsage), mcp.Required(), ), - mcp.WithBoolean( - "isAutoSynced", mcp.DefaultBool(true), - mcp.Description(iasUsage), mcp.Required(), + mcp.WithString( + "isAutoSynced", mcp.Enum("true", "false", ""), + mcp.DefaultString("true"), mcp.Description(iasUsage), mcp.Required(), ), - mcp.WithBoolean( - "isCC", mcp.DefaultBool(false), - mcp.Description(iscUsage), mcp.Required(), + mcp.WithString( + "isCC", mcp.Enum("true", "false", ""), + mcp.DefaultString("false"), mcp.Description(iscUsage), mcp.Required(), ), - mcp.WithBoolean( - "isDraft", mcp.DefaultBool(false), - mcp.Description(isdUsage), mcp.Required(), + mcp.WithString( + "isDraft", mcp.Enum("true", "false", ""), + mcp.DefaultString("false"), mcp.Description(isdUsage), mcp.Required(), ), - mcp.WithBoolean( - "isEasyReader", mcp.DefaultBool(false), - mcp.Description(iserUsage), mcp.Required(), + mcp.WithString( + "isEasyReader", mcp.Enum("true", "false", ""), + mcp.DefaultString("false"), mcp.Description(iserUsage), mcp.Required(), ), - mcp.WithBoolean( - "isLarge", mcp.DefaultBool(false), - mcp.Description(islUsage), mcp.Required(), + mcp.WithString( + "isLarge", mcp.Enum("true", "false", ""), + mcp.DefaultString("false"), mcp.Description(islUsage), mcp.Required(), ), mcp.WithString( "language", mcp.DefaultString(""), @@ -105,8 +106,8 @@ var updateTool = mcp.NewTool( mcp.Description(nameUsage), mcp.Required(), ), mcp.WithString( - "trackKind", mcp.DefaultString("standard"), - mcp.Description(tkUsage), mcp.Required(), + "trackKind", mcp.Enum("standard", "ASR", "forced"), + mcp.DefaultString("standard"), mcp.Description(tkUsage), mcp.Required(), ), mcp.WithString( "videoId", mcp.DefaultString(""), @@ -136,16 +137,16 @@ func updateHandler( args := request.GetArguments() file, _ = args["file"].(string) audioTrackType, _ = args["audioTrackType"].(string) - isAutoSyncedRaw, _ := args["isAutoSynced"].(bool) - isAutoSynced = &isAutoSyncedRaw - isCCRaw, _ := args["isCC"].(bool) - isCC = &isCCRaw - isDraftRaw, _ := args["isDraft"].(bool) - isDraft = &isDraftRaw - isEasyReaderRaw, _ := args["isEasyReader"].(bool) - isEasyReader = &isEasyReaderRaw - isLargeRaw, _ := args["isLarge"].(bool) - isLarge = &isLargeRaw + isAutoSyncedRaw, _ := args["isAutoSynced"].(string) + isAutoSynced = utils.BoolPtr(isAutoSyncedRaw) + isCCRaw, _ := args["isCC"].(string) + isCC = utils.BoolPtr(isCCRaw) + isDraftRaw, _ := args["isDraft"].(string) + isDraft = utils.BoolPtr(isDraftRaw) + isEasyReaderRaw, _ := args["isEasyReader"].(string) + isEasyReader = utils.BoolPtr(isEasyReaderRaw) + isLargeRaw, _ := args["isLarge"].(string) + isLarge = utils.BoolPtr(isLargeRaw) language, _ = args["language"].(string) name, _ = args["name"].(string) trackKind, _ = args["trackKind"].(string) diff --git a/cmd/comment/comment.go b/cmd/comment/comment.go index ab77432..a0b5858 100644 --- a/cmd/comment/comment.go +++ b/cmd/comment/comment.go @@ -17,7 +17,7 @@ const ( tfUsage = "textFormatUnspecified, html, or plainText" toUsage = "Text of the comment" msUsage = "heldForReview, published, or rejected" - baUsage = "true or false" + baUsage = "If set to true the author of the comment gets added to the ban list" vidUsage = "ID of the video" vrUsage = "none, like, or dislike" partsUsage = "Comma separated parts" diff --git a/cmd/comment/list.go b/cmd/comment/list.go index 83a8432..3197e0d 100644 --- a/cmd/comment/list.go +++ b/cmd/comment/list.go @@ -70,8 +70,8 @@ var listTool = mcp.NewTool( mcp.Required(), ), mcp.WithString( - "textFormat", mcp.DefaultString("html"), - mcp.Description(tfUsage), mcp.Required(), + "textFormat", mcp.Enum("textFormatUnspecified", "html", "plainText"), + mcp.DefaultString("html"), mcp.Description(tfUsage), mcp.Required(), ), mcp.WithArray( "parts", mcp.DefaultArray([]string{"id", "snippet"}), diff --git a/cmd/comment/setModerationStatus.go b/cmd/comment/setModerationStatus.go index fe4f626..40c0299 100644 --- a/cmd/comment/setModerationStatus.go +++ b/cmd/comment/setModerationStatus.go @@ -66,8 +66,8 @@ var setModerationStatusTool = mcp.NewTool( mcp.Description(idsUsage), mcp.Required(), ), mcp.WithString( - "moderationStatus", mcp.DefaultString(""), - mcp.Description(msUsage), mcp.Required(), + "moderationStatus", mcp.Enum("heldForReview", "published", "rejected"), + mcp.DefaultString(""), mcp.Description(msUsage), mcp.Required(), ), mcp.WithString( "banAuthor", mcp.Enum("true", "false", ""), diff --git a/cmd/comment/update.go b/cmd/comment/update.go index f3b785f..042d086 100644 --- a/cmd/comment/update.go +++ b/cmd/comment/update.go @@ -69,8 +69,8 @@ var updateTool = mcp.NewTool( mcp.Description(toUsage), mcp.Required(), ), mcp.WithString( - "viewerRating", mcp.DefaultString(""), - mcp.Description(vrUsage), mcp.Required(), + "viewerRating", mcp.Enum("none", "like", "dislike"), + mcp.DefaultString(""), mcp.Description(vrUsage), mcp.Required(), ), mcp.WithString( "output", mcp.DefaultString(""), diff --git a/cmd/commentThread/commentThread.go b/cmd/commentThread/commentThread.go index 24c7024..67df142 100644 --- a/cmd/commentThread/commentThread.go +++ b/cmd/commentThread/commentThread.go @@ -16,7 +16,7 @@ const ( msUsage = "published, heldForReview, likelySpam, or rejected" orderUsage = "orderUnspecified, time, or relevance" stUsage = "Search terms" - tfUsage = "textFormatUnspecified or html" + tfUsage = "textFormatUnspecified, or html" toUsage = "Text of the comment" partsUsage = "Comma separated parts" ) diff --git a/cmd/commentThread/list.go b/cmd/commentThread/list.go index cbb78a0..984af90 100644 --- a/cmd/commentThread/list.go +++ b/cmd/commentThread/list.go @@ -79,20 +79,21 @@ var listTool = mcp.NewTool( mcp.Description(mrUsage), mcp.Required(), ), mcp.WithString( - "moderationStatus", mcp.DefaultString("published"), - mcp.Description(msUsage), mcp.Required(), + "moderationStatus", + mcp.Enum("published", "heldForReview", "likelySpam", "rejected"), + mcp.DefaultString("published"), mcp.Description(msUsage), mcp.Required(), ), mcp.WithString( - "order", mcp.DefaultString("time"), - mcp.Description(orderUsage), mcp.Required(), + "order", mcp.Enum("orderUnspecified", "time", "relevance"), + mcp.DefaultString("time"), mcp.Description(orderUsage), mcp.Required(), ), mcp.WithString( "searchTerms", mcp.DefaultString(""), mcp.Description(stUsage), mcp.Required(), ), mcp.WithString( - "textFormat", mcp.DefaultString("html"), - mcp.Description(tfUsage), mcp.Required(), + "textFormat", mcp.Enum("textFormatUnspecified", "html"), + mcp.DefaultString("html"), mcp.Description(tfUsage), mcp.Required(), ), mcp.WithString( "videoId", mcp.DefaultString(""), diff --git a/cmd/constants.go b/cmd/constants.go index f4dc518..f825928 100644 --- a/cmd/constants.go +++ b/cmd/constants.go @@ -1,6 +1,7 @@ package cmd const ( + // TODO: mcp.Enum TableUsage = "json, yaml, or table" SilentUsage = "json, yaml, or silent" JpUsage = "JSONPath expression to filter the output" diff --git a/cmd/i18nLanguage/i18nLanguage.go b/cmd/i18nLanguage/i18nLanguage.go index c574959..9c7df1d 100644 --- a/cmd/i18nLanguage/i18nLanguage.go +++ b/cmd/i18nLanguage/i18nLanguage.go @@ -9,7 +9,7 @@ const ( short = "List YouTube i18n languages" long = "List YouTube i18n languages' id, hl, and name" hlUsage = "Host language" - partsUsage = "Comma separated parts" + partsUsage = "Comma separated parts" // TODO: extract constants ) var ( diff --git a/cmd/member/list.go b/cmd/member/list.go index d623984..cd4d68c 100644 --- a/cmd/member/list.go +++ b/cmd/member/list.go @@ -62,8 +62,8 @@ var listTool = mcp.NewTool( mcp.Description(mrUsage), mcp.Required(), ), mcp.WithString( - "mode", mcp.DefaultString("all_current"), - mcp.Description(mmUsage), mcp.Required(), + "mode", mcp.Enum("listMembersModeUnknown", "updates", "all_current"), + mcp.DefaultString("all_current"), mcp.Description(mmUsage), mcp.Required(), ), mcp.WithArray( "parts", mcp.DefaultArray([]string{"snippet"}), diff --git a/cmd/member/member.go b/cmd/member/member.go index 6ad0294..ac97aac 100644 --- a/cmd/member/member.go +++ b/cmd/member/member.go @@ -10,7 +10,7 @@ const ( long = "List channel's members' info, such as channelId, displayName, etc" mcidUsage = "Comma separated list of channel IDs. Only data about members that are part of this list will be included" hatlUsage = "Filter members in the results set to the ones that have access to a level" - mrUsage = "The maximum number of items that should be returned" + mrUsage = "The maximum number of items that should be returned" // TODO: extract constant mmUsage = "listMembersModeUnknown, updates, or all_current" partsUsage = "Comma separated parts" ) diff --git a/cmd/membershipsLevel/list.go b/cmd/membershipsLevel/list.go index b47721e..8ac5654 100644 --- a/cmd/membershipsLevel/list.go +++ b/cmd/membershipsLevel/list.go @@ -17,7 +17,7 @@ func init() { listCmd.Flags().StringSliceVarP( &parts, "parts", "p", []string{"id, snippet"}, partsUsage, ) - listCmd.Flags().StringVarP(&output, "output", "o", "table", outputUsage) + listCmd.Flags().StringVarP(&output, "output", "o", "table", cmd.TableUsage) listCmd.Flags().StringVarP(&jpath, "jsonpath", "j", "", cmd.JpUsage) } @@ -48,7 +48,7 @@ var listTool = mcp.NewTool( ), mcp.WithString( "output", mcp.DefaultString("table"), - mcp.Description(outputUsage), mcp.Required(), + mcp.Description(cmd.TableUsage), mcp.Required(), ), mcp.WithString( "jsonpath", mcp.DefaultString(""), diff --git a/cmd/membershipsLevel/membershipsLevel.go b/cmd/membershipsLevel/membershipsLevel.go index a7e23ee..a2dde31 100644 --- a/cmd/membershipsLevel/membershipsLevel.go +++ b/cmd/membershipsLevel/membershipsLevel.go @@ -6,10 +6,9 @@ import ( ) const ( - short = "List memberships levels' info" - long = "List memberships levels' info, such as id, displayName, etc" - partsUsage = "Comma separated parts" - outputUsage = "json yaml, or table" + short = "List memberships levels' info" + long = "List memberships levels' info, such as id, displayName, etc" + partsUsage = "Comma separated parts" ) var ( diff --git a/cmd/playlist/insert.go b/cmd/playlist/insert.go index 1695dc4..787e14f 100644 --- a/cmd/playlist/insert.go +++ b/cmd/playlist/insert.go @@ -76,8 +76,8 @@ var insertTool = mcp.NewTool( mcp.Description(insertCidUsage), mcp.Required(), ), mcp.WithString( - "privacy", mcp.DefaultString(""), - mcp.Description(privacyUsage), mcp.Required(), + "privacy", mcp.Enum("public", "private", "unlisted"), + mcp.DefaultString(""), mcp.Description(privacyUsage), mcp.Required(), ), mcp.WithString( "output", mcp.DefaultString(""), diff --git a/cmd/playlist/update.go b/cmd/playlist/update.go index 6de5d2e..aeb195c 100644 --- a/cmd/playlist/update.go +++ b/cmd/playlist/update.go @@ -75,8 +75,8 @@ var updateTool = mcp.NewTool( mcp.Description(languageUsage), mcp.Required(), ), mcp.WithString( - "privacy", mcp.DefaultString(""), - mcp.Description(privacyUsage), mcp.Required(), + "privacy", mcp.Enum("public", "private", "unlisted"), + mcp.DefaultString(""), mcp.Description(privacyUsage), mcp.Required(), ), mcp.WithString( "output", mcp.DefaultString(""), diff --git a/cmd/playlistItem/insert.go b/cmd/playlistItem/insert.go index ed860ad..923f7ca 100644 --- a/cmd/playlistItem/insert.go +++ b/cmd/playlistItem/insert.go @@ -71,8 +71,8 @@ var insertTool = mcp.NewTool( mcp.Description(descUsage), mcp.Required(), ), mcp.WithString( - "kind", mcp.DefaultString(""), - mcp.Description(kindUsage), mcp.Required(), + "kind", mcp.Enum("video", "channel", "playlist"), + mcp.DefaultString(""), mcp.Description(kindUsage), mcp.Required(), ), mcp.WithString( "kVideoId", mcp.DefaultString(""), @@ -95,8 +95,8 @@ var insertTool = mcp.NewTool( mcp.Description(cidUsage), mcp.Required(), ), mcp.WithString( - "privacy", mcp.DefaultString(""), - mcp.Description(privacyUsage), mcp.Required(), + "privacy", mcp.Enum("public", "private", "unlisted"), + mcp.DefaultString(""), mcp.Description(privacyUsage), mcp.Required(), ), mcp.WithString( "onBehalfOfContentOwner", mcp.DefaultString(""), diff --git a/cmd/playlistItem/update.go b/cmd/playlistItem/update.go index 7bdd13a..b1f46ed 100644 --- a/cmd/playlistItem/update.go +++ b/cmd/playlistItem/update.go @@ -67,8 +67,8 @@ var updateTool = mcp.NewTool( mcp.Description(descUsage), mcp.Required(), ), mcp.WithString( - "privacy", mcp.DefaultString(""), - mcp.Description(privacyUsage), mcp.Required(), + "privacy", mcp.Enum("public", "private", "unlisted"), + mcp.DefaultString(""), mcp.Description(privacyUsage), mcp.Required(), ), mcp.WithString( "onBehalfOfContentOwner", mcp.DefaultString(""), diff --git a/cmd/search/list.go b/cmd/search/list.go index e83462c..9945f80 100644 --- a/cmd/search/list.go +++ b/cmd/search/list.go @@ -84,12 +84,14 @@ var listTool = mcp.NewTool( mcp.Description(cidUsage), mcp.Required(), ), mcp.WithString( - "channelType", mcp.DefaultString("channelTypeUnspecified"), + "channelType", + mcp.Enum("channelTypeUnspecified", "any", "show"), + mcp.DefaultString("channelTypeUnspecified"), mcp.Description(ctUsage), mcp.Required(), ), mcp.WithString( - "eventType", mcp.DefaultString("none"), - mcp.Description(etUsage), mcp.Required(), + "eventType", mcp.Enum("none", "upcoming", "live", "completed"), + mcp.DefaultString("none"), mcp.Description(etUsage), mcp.Required(), ), mcp.WithString( "forContentOwner", mcp.Enum("true", "false", ""), @@ -144,8 +146,9 @@ var listTool = mcp.NewTool( mcp.Description(rlUsage), mcp.Required(), ), mcp.WithString( - "safeSearch", mcp.DefaultString("moderate"), - mcp.Description(ssUsage), mcp.Required(), + "safeSearch", + mcp.Enum("safeSearchSettingUnspecified", "none", "moderate", "strict"), + mcp.DefaultString("moderate"), mcp.Description(ssUsage), mcp.Required(), ), mcp.WithString( "topicId", mcp.DefaultString(""), @@ -157,8 +160,9 @@ var listTool = mcp.NewTool( mcp.Description(typesUsage), mcp.Required(), ), mcp.WithString( - "videoCaption", mcp.DefaultString("any"), - mcp.Description(vcUsage), mcp.Required(), + "videoCaption", + mcp.Enum("videoCaptionUnspecified", "any", "closedCaption", "none"), + mcp.DefaultString("any"), mcp.Description(vcUsage), mcp.Required(), ), mcp.WithString( "videoCategoryId", mcp.DefaultString(""), @@ -169,32 +173,34 @@ var listTool = mcp.NewTool( mcp.Description(vdeUsage), mcp.Required(), ), mcp.WithString( - "videoDimension", mcp.DefaultString("any"), - mcp.Description(vdiUsage), mcp.Required(), + "videoDimension", mcp.Enum("any", "2d", "3d"), + mcp.DefaultString("any"), mcp.Description(vdiUsage), mcp.Required(), ), mcp.WithString( - "videoDuration", mcp.DefaultString("any"), - mcp.Description(vduUsage), mcp.Required(), + "videoDuration", + mcp.Enum("videoDurationUnspecified", "any", "short", "medium", "long"), + mcp.DefaultString("any"), mcp.Description(vduUsage), mcp.Required(), ), mcp.WithString( - "videoEmbeddable", mcp.DefaultString(""), - mcp.Description(veUsage), mcp.Required(), + "videoEmbeddable", mcp.Enum("videoEmbeddableUnspecified", "any", "true"), + mcp.DefaultString(""), mcp.Description(veUsage), mcp.Required(), ), mcp.WithString( - "videoLicense", mcp.DefaultString(""), - mcp.Description(vlUsage), mcp.Required(), + "videoLicense", mcp.Enum("any", "youtube", "creativeCommon"), + mcp.DefaultString(""), mcp.Description(vlUsage), mcp.Required(), ), mcp.WithString( - "videoPaidProductPlacement", mcp.DefaultString(""), - mcp.Description(vpppUsage), mcp.Required(), + "videoPaidProductPlacement", + mcp.Enum("videoPaidProductPlacementUnspecified", "any", "true"), + mcp.DefaultString(""), mcp.Description(vpppUsage), mcp.Required(), ), mcp.WithString( - "videoSyndicated", mcp.DefaultString(""), - mcp.Description(vsUsage), mcp.Required(), + "videoSyndicated", mcp.Enum("videoSyndicatedUnspecified", "any", "true"), + mcp.DefaultString(""), mcp.Description(vsUsage), mcp.Required(), ), mcp.WithString( - "videoType", mcp.DefaultString(""), - mcp.Description(vtUsage), mcp.Required(), + "videoType", mcp.Enum("videoTypeUnspecified", "any", "movie", "episode"), + mcp.DefaultString(""), mcp.Description(vtUsage), mcp.Required(), ), mcp.WithArray( "parts", mcp.DefaultArray([]string{"id", "snippet"}), diff --git a/cmd/subscription/list.go b/cmd/subscription/list.go index c71a7e6..7663f97 100644 --- a/cmd/subscription/list.go +++ b/cmd/subscription/list.go @@ -103,8 +103,10 @@ var listTool = mcp.NewTool( mcp.Description(""), mcp.Required(), ), mcp.WithString( - "order", mcp.DefaultString("relevance"), - mcp.Description(orderUsage), mcp.Required(), + "order", mcp.Enum( + "subscriptionOrderUnspecified", "relevance", "unread", "alphabetical", + ), + mcp.DefaultString("relevance"), mcp.Description(orderUsage), mcp.Required(), ), mcp.WithArray( "parts", mcp.DefaultArray([]string{"id", "snippet"}), diff --git a/cmd/subscription/subscription.go b/cmd/subscription/subscription.go index 1adf252..0ce8c42 100644 --- a/cmd/subscription/subscription.go +++ b/cmd/subscription/subscription.go @@ -14,7 +14,7 @@ const ( fcidUsage = "Return the subscriptions to the subset of these channels that the authenticated user is subscribed to" mrUsage = "The maximum number of items that should be returned" mineUsage = "Return the subscriptions of the authenticated user" - mrsUsage = "true or false" + mrsUsage = "true, false, or leave empty" msUsage = "Return the subscribers of the given channel owner" orderUsage = "subscriptionOrderUnspecified, relevance, unread, or alphabetical" titleUsage = "Title of the subscription" diff --git a/cmd/video/insert.go b/cmd/video/insert.go index 6652536..6d48cee 100644 --- a/cmd/video/insert.go +++ b/cmd/video/insert.go @@ -107,8 +107,8 @@ var insertTool = mcp.NewTool( mcp.Description(insertLangUsage), mcp.Required(), ), mcp.WithString( - "license", mcp.DefaultString("youtube"), - mcp.Description(licenseUsage), mcp.Required(), + "license", mcp.Enum("youtube", "creativeCommon"), + mcp.DefaultString("youtube"), mcp.Description(licenseUsage), mcp.Required(), ), mcp.WithString( "thumbnail", mcp.DefaultString(""), @@ -127,8 +127,8 @@ var insertTool = mcp.NewTool( mcp.Description(caidUsage), mcp.Required(), ), mcp.WithString( - "privacy", mcp.DefaultString(""), - mcp.Description(privacyUsage), mcp.Required(), + "privacy", mcp.Enum("public", "private", "unlisted"), + mcp.DefaultString(""), mcp.Description(privacyUsage), mcp.Required(), ), mcp.WithString( "forKids", mcp.Enum("true", "false", ""), diff --git a/cmd/video/list.go b/cmd/video/list.go index c4bfcee..aa57389 100644 --- a/cmd/video/list.go +++ b/cmd/video/list.go @@ -67,8 +67,8 @@ var listTool = mcp.NewTool( mcp.Description(listIdsUsage), mcp.Required(), ), mcp.WithString( - "chart", mcp.DefaultString(""), - mcp.Description(chartUsage), mcp.Required(), + "chart", mcp.Enum("chartUnspecified", "mostPopular"), + mcp.DefaultString(""), mcp.Description(chartUsage), mcp.Required(), ), mcp.WithString( "hl", mcp.DefaultString(""), diff --git a/cmd/video/rate.go b/cmd/video/rate.go index 2bdc9be..31748f3 100644 --- a/cmd/video/rate.go +++ b/cmd/video/rate.go @@ -54,8 +54,8 @@ var rateTool = mcp.NewTool( mcp.Description(rateIdsUsage), mcp.Required(), ), mcp.WithString( - "rating", mcp.DefaultString(""), - mcp.Description(rateRUsage), mcp.Required(), + "rating", mcp.Enum("like", "dislike", "none"), + mcp.DefaultString(""), mcp.Description(rateRUsage), mcp.Required(), ), ) diff --git a/cmd/video/update.go b/cmd/video/update.go index 13ec4c4..997d9b9 100644 --- a/cmd/video/update.go +++ b/cmd/video/update.go @@ -84,8 +84,8 @@ var updateTool = mcp.NewTool( mcp.Description(updateLangUsage), mcp.Required(), ), mcp.WithString( - "license", mcp.DefaultString("youtube"), - mcp.Description(licenseUsage), mcp.Required(), + "license", mcp.Enum("youtube", "creativeCommon"), + mcp.DefaultString("youtube"), mcp.Description(licenseUsage), mcp.Required(), ), mcp.WithString( "thumbnail", mcp.DefaultString(""), @@ -100,8 +100,8 @@ var updateTool = mcp.NewTool( mcp.Description(caidUsage), mcp.Required(), ), mcp.WithString( - "privacy", mcp.DefaultString(""), - mcp.Description(privacyUsage), mcp.Required(), + "privacy", mcp.Enum("public", "private", "unlisted"), + mcp.DefaultString(""), mcp.Description(privacyUsage), mcp.Required(), ), mcp.WithString( "embeddable", mcp.Enum("true", "false", ""), diff --git a/cmd/watermark/set.go b/cmd/watermark/set.go index c79361d..0f60ee3 100644 --- a/cmd/watermark/set.go +++ b/cmd/watermark/set.go @@ -64,8 +64,9 @@ var setTool = mcp.NewTool( mcp.Description(fileUsage), mcp.Required(), ), mcp.WithString( - "inVideoPosition", mcp.DefaultString(""), - mcp.Description(ivpUsage), mcp.Required(), + "inVideoPosition", + mcp.Enum("topLeft", "topRight", "bottomLeft", "bottomRight"), + mcp.DefaultString(""), mcp.Description(ivpUsage), mcp.Required(), ), mcp.WithNumber( "durationMs", mcp.DefaultNumber(0), @@ -76,8 +77,8 @@ var setTool = mcp.NewTool( mcp.Description(omUsage), mcp.Required(), ), mcp.WithString( - "offsetType", mcp.DefaultString(""), - mcp.Description(otUsage), mcp.Required(), + "offsetType", mcp.Enum("offsetFromStart", "offsetFromEnd"), + mcp.DefaultString(""), mcp.Description(otUsage), mcp.Required(), ), mcp.WithString( "onBehalfOfContentOwner", mcp.DefaultString(""),