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)
17
18func main() {
19 flag.Parse()
20 url := fmt.Sprintf("%s:%d", *host, *port)
21
22 server := mcp.NewServer(&mcp.Implementation{
23 Name: "5ika-mpc-todo.txt",
24 Version: "1.0.0",
25 }, nil)
26
27 server.AddReceivingMiddleware(createLoggingMiddleware())
28
29 mcp.AddTool(server, &mcp.Tool{
30 Name: "listTasks",
31 Description: "List tasks in todo.txt file",
32 }, getTasks)
33 mcp.AddTool(server, &mcp.Tool{
34 Name: "addTask",
35 Description: "Add new task in todo.txt file",
36 }, addTask)
37 mcp.AddTool(server, &mcp.Tool{
38 Name: "checkTask",
39 Description: "Set task as completed, done or finished in todo.txt file",
40 }, checkTask)
41
42 handler := mcp.NewStreamableHTTPHandler(func(req *http.Request) *mcp.Server {
43 return server
44 }, nil)
45
46 log.Printf("MCP server listening on %s", url)
47
48 if err := http.ListenAndServe(url, handler); err != nil {
49 log.Fatalf("Server failed: %v", err)
50 }
51}