main
1package main
2
3import (
4 "context"
5 "flag"
6 "fmt"
7 "log"
8 "os"
9 "strconv"
10
11 "github.com/xlgmokha/mcp/pkg/imap"
12)
13
14func main() {
15 var (
16 server = flag.String("server", "", "IMAP server hostname (e.g., imap.gmail.com)")
17 username = flag.String("username", "", "IMAP username/email")
18 password = flag.String("password", "", "IMAP password or app password")
19 port = flag.Int("port", 993, "IMAP port (default: 993 for TLS)")
20 useTLS = flag.Bool("use-tls", true, "Use TLS connection (default: true)")
21 help = flag.Bool("help", false, "Show help information")
22 )
23
24 flag.Parse()
25
26 if *help {
27 fmt.Println("IMAP MCP Server - Connect to IMAP email servers")
28 return
29 }
30
31 // Check environment variables
32 if envServer := os.Getenv("IMAP_SERVER"); envServer != "" {
33 *server = envServer
34 }
35 if envUsername := os.Getenv("IMAP_USERNAME"); envUsername != "" {
36 *username = envUsername
37 }
38 if envPassword := os.Getenv("IMAP_PASSWORD"); envPassword != "" {
39 *password = envPassword
40 }
41 if envPort := os.Getenv("IMAP_PORT"); envPort != "" {
42 if p, err := strconv.Atoi(envPort); err == nil {
43 *port = p
44 }
45 }
46 if envTLS := os.Getenv("IMAP_USE_TLS"); envTLS != "" {
47 if tls, err := strconv.ParseBool(envTLS); err == nil {
48 *useTLS = tls
49 }
50 }
51
52 // Validate required parameters
53 if *server == "" {
54 log.Fatal("Server is required. Use --server flag or IMAP_SERVER environment variable.")
55 }
56 if *username == "" {
57 log.Fatal("Username is required. Use --username flag or IMAP_USERNAME environment variable.")
58 }
59 if *password == "" {
60 log.Fatal("Password is required. Use --password flag or IMAP_PASSWORD environment variable.")
61 }
62
63 // Create and start server
64 imapServer := imap.New(*server, *username, *password, *port, *useTLS)
65
66 ctx := context.Background()
67 if err := imapServer.Run(ctx); err != nil {
68 log.Fatalf("Server failed: %v", err)
69 }
70}