Textwell MCP Server

  • services
package services import ( "context" "encoding/json" "fmt" "log" "net/http" "os" "golang.org/x/oauth2" "golang.org/x/oauth2/google" "google.golang.org/api/calendar/v3" "google.golang.org/api/gmail/v1" "google.golang.org/api/youtube/v3" ) // Retrieves a token from a local file. func tokenFromFile(file string) (*oauth2.Token, error) { f, err := os.Open(file) if err != nil { return nil, err } defer f.Close() tok := &oauth2.Token{} err = json.NewDecoder(f).Decode(tok) return tok, err } func ListGoogleScopes() []string { return []string{ gmail.GmailLabelsScope, gmail.GmailModifyScope, gmail.MailGoogleComScope, gmail.GmailSettingsBasicScope, calendar.CalendarScope, calendar.CalendarEventsScope, youtube.YoutubeScope, youtube.YoutubeUploadScope, youtube.YoutubepartnerChannelAuditScope, youtube.YoutubepartnerScope, youtube.YoutubeReadonlyScope, } } func GoogleHttpClient(tokenFile string, credentialsFile string) *http.Client { tok, err := tokenFromFile(tokenFile) if err != nil { panic(fmt.Sprintf("failed to read token file: %v", err)) } ctx := context.Background() b, err := os.ReadFile(credentialsFile) if err != nil { log.Fatalf("Unable to read client secret file: %v", err) } // If modifying these scopes, delete your previously saved token.json. config, err := google.ConfigFromJSON(b, ListGoogleScopes()...) if err != nil { log.Fatalf("Unable to parse client secret file to config: %v", err) } return config.Client(ctx, tok) }