main.go (view raw)
1package main
2
3import (
4 "flag"
5 "fmt"
6 "log"
7 "net/http"
8
9 "github.com/modelcontextprotocol/go-sdk/mcp"
10)
11
12var (
13 host = flag.String("host", "localhost", "host to connect to/listen on")
14 port = flag.Int("port", 8080, "port number to connect to/listen on")
15 todoFilePath = flag.String("file", "./todo.txt", "path to todo.txt")
16 authToken = flag.String("token", "", "Authentication token")
17)
18
19func main() {
20 flag.Parse()
21 url := fmt.Sprintf("%s:%d", *host, *port)
22
23 server := mcp.NewServer(&mcp.Implementation{
24 Name: "5ika-mpc-todo.txt",
25 Version: "1.0.0",
26 }, nil)
27
28 server.AddReceivingMiddleware(createLoggingMiddleware())
29
30 if *authToken != "" {
31 server.AddReceivingMiddleware(createAuthMiddleware(*authToken))
32 }
33
34 mcp.AddTool(server, &mcp.Tool{
35 Name: "listTasks",
36 Description: "List tasks in todo.txt file",
37 }, getTasks)
38 mcp.AddTool(server, &mcp.Tool{
39 Name: "addTask",
40 Description: "Add new task in todo.txt file",
41 }, addTask)
42 mcp.AddTool(server, &mcp.Tool{
43 Name: "checkTask",
44 Description: "Set task as completed, done or finished in todo.txt file",
45 }, checkTask)
46
47 handler := mcp.NewStreamableHTTPHandler(func(req *http.Request) *mcp.Server {
48 return server
49 }, nil)
50
51 log.Printf("MCP server listening on %s", url)
52
53 if err := http.ListenAndServe(url, handler); err != nil {
54 log.Fatalf("Server failed: %v", err)
55 }
56}