diff --git a/cmd/i18nLanguage/i18nLanguage.go b/cmd/i18nLanguage/i18nLanguage.go index 67f1130..17ae981 100644 --- a/cmd/i18nLanguage/i18nLanguage.go +++ b/cmd/i18nLanguage/i18nLanguage.go @@ -9,13 +9,16 @@ const ( short = "List YouTube i18n languages" long = "List YouTube i18n languages' id, hl, and name" hlUsage = "Host language" + rURI = "i18n://language" + rName = "all i18n language" ) var ( - hl string - parts []string - output string - jpath string + hl string + parts []string + output string + jpath string + defaultParts = []string{"id", "snippet"} ) var i18nLanguageCmd = &cobra.Command{ diff --git a/cmd/i18nLanguage/list.go b/cmd/i18nLanguage/list.go index a900eba..d732a04 100644 --- a/cmd/i18nLanguage/list.go +++ b/cmd/i18nLanguage/list.go @@ -11,11 +11,12 @@ import ( ) func init() { - cmd.MCP.AddTool(listTool, listHandler) + // cmd.MCP.AddTool(listTool, listHandler) + cmd.MCP.AddResource(allI18nLanguages, resourceHandler) i18nLanguageCmd.AddCommand(listCmd) listCmd.Flags().StringVarP(&hl, "hl", "l", "", hlUsage) listCmd.Flags().StringSliceVarP( - &parts, "parts", "p", []string{"id", "snippet"}, cmd.PartsUsage, + &parts, "parts", "p", defaultParts, cmd.PartsUsage, ) listCmd.Flags().StringVarP(&output, "output", "o", "table", cmd.TableUsage) listCmd.Flags().StringVarP(&jpath, "jsonpath", "j", "", cmd.JPUsage) @@ -46,7 +47,7 @@ var listTool = mcp.NewTool( mcp.Description(hlUsage), mcp.Required(), ), mcp.WithArray( - "parts", mcp.DefaultArray([]string{"id", "snippet"}), + "parts", mcp.DefaultArray(defaultParts), mcp.Items(map[string]any{"type": "string"}), mcp.Description(cmd.PartsUsage), mcp.Required(), ), @@ -81,6 +82,33 @@ func listHandler( return mcp.NewToolResultText(writer.String()), nil } +var allI18nLanguages = mcp.NewResource( + rURI, rName, + mcp.WithMIMEType("application/json"), + mcp.WithResourceDescription(long), +) + +func resourceHandler( + ctx context.Context, request mcp.ReadResourceRequest, +) ([]mcp.ResourceContents, error) { + parts = defaultParts + output = "json" + var writer bytes.Buffer + err := list(&writer) + if err != nil { + return nil, err + } + + contents := []mcp.ResourceContents{ + mcp.TextResourceContents{ + URI: rURI, + MIMEType: "application/json", + Text: writer.String(), + }, + } + return contents, nil +} + func list(writer io.Writer) error { i := i18nLanguage.NewI18nLanguage( i18nLanguage.WithHl(hl), i18nLanguage.WithService(nil),