main
1package main
2
3import (
4 "context"
5 "flag"
6 "fmt"
7 "log"
8 "os"
9
10 "github.com/xlgmokha/mcp/pkg/signal"
11)
12
13func main() {
14 var (
15 signalPath = flag.String("signal-path", "", "Path to Signal application directory (auto-detected if not specified)")
16 help = flag.Bool("help", false, "Show help information")
17 )
18 flag.Parse()
19
20 if *help {
21 fmt.Printf(`Signal MCP Server
22
23This server provides access to Signal Desktop database for reading conversations and messages.
24
25Usage: %s [options]
26
27Options:
28`, os.Args[0])
29 flag.PrintDefaults()
30 fmt.Print(`
31Examples:
32 # Auto-detect Signal installation
33 mcp-signal
34
35 # Specify custom Signal path
36 mcp-signal --signal-path ~/.config/Signal
37
38Tools:
39 - signal_list_conversations: List all conversations
40 - signal_search_messages: Search messages by text content
41 - signal_get_conversation: Get messages from a specific conversation
42 - signal_get_contact: Get contact details by ID/phone/name
43 - signal_get_message: Get specific message with attachments and reactions
44 - signal_list_attachments: List message attachments with metadata
45 - signal_get_stats: Show database statistics
46
47Prompts:
48 - signal-conversation: Analyze conversation history for insights
49 - signal-search: Search Signal messages with AI-powered context
50
51Security Notes:
52 - Requires access to Signal's encrypted database
53 - May require system keychain access for decryption
54 - Signal application should be closed for reliable database access
55
56For more information, visit: https://github.com/xlgmokha/mcp
57`)
58 return
59 }
60
61 server, err := signal.New(*signalPath)
62 if err != nil {
63 log.Fatalf("Failed to create Signal server: %v", err)
64 }
65
66 ctx := context.Background()
67 if err := server.Run(ctx); err != nil {
68 log.Fatalf("Server error: %v", err)
69 }
70}